Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

lamed
Статус: Профессор
Рейтинг: 3125
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2497
∙ повысить рейтинг »
star9491
Статус: Профессионал
Рейтинг: 2399
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1129
Дата выхода:19.10.2010, 05:30
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:191 / 184
Вопросов / ответов:1 / 1

Вопрос № 180303: Дорогие Эксперты! будьте добры помоч с реализацией ряда процедур.... вот список и заголовки их

Код:

Вопрос № 180303:

Дорогие Эксперты! будьте добры помоч с реализацией ряда процедур....

вот список и заголовки их

Код:
const 
StrOk=0; MemEr=1; LenEr=2; (это ошибки которые функции возвращают:0-все ок, 1-ошибка памяти, 2-ошибка длинны )
type
sting1=array[1..255] of char; (концом строки считать символ с кодом 0)

Procedure InputStr(var st:string1) {Ввод строки st с клавиатуры.}

Procedure OutputStr(const st:string1) {Вывод строки st на экран монитора.}

Procedure InitStr(var st:string1; n: word) {Выделение динамической памяти под строку st, содержажую от 0 до n символов.}

Procedure WriteToStr(var st:string1; s:string) { Запись данных в строку st из строки s.}

Procedure WriteFromStr(var s:string; st:string1) {Запись данных в строку s из строки st.}

Function Comp(s1,s2:string1; var fl:shortint):boolean {Сравнивает строки s1 и s2. Возвращает true если s1=s2 и fl=0, если s1>s2 и fl=1, если s1<s2 и fl=-1.}

Procedure Delete(var S:String1; Index,Count:Word) {Удаляет Count символов из строки S,начиная с позиции Index.}

Procedure Insert(Subs:String1;var S:String1; Index:Word) {Вставляет подстроку SubS в строку S,начиная с позиции Index.}

Procedure Concat( const S1, S2:string1; var srez:string1) {Выполняет конкатенацию строк S1 и S2; результат помещает в srez.}

Procedure Copy(S:String1;Index,Count:Word; var Subs:String1) { Возвращает подстроку Subs из строки S,начиная с позиции Index и длиной Count символов.}

Function Length(S: String1): Word {Возвращает текущую длину строки S.}

Function Pos(SubS, S: String1): Word {Возвращ ает позицию, начиная с которой в строке S располагается подстрока SubS}

function LastPost(s,s1:string):word. {Назначение: поиск последнего вхождения подстроки s1 в строку s.
Входные параметры: s,s1.
Выходные параметры: нет.}



Буду очень признателен если поможите!

Отправлен: 13.10.2010, 05:04
Вопрос задал: Юдин Евгений Сергеевич (1-й класс)
Всего ответов: 1
Страница вопроса »


Отвечает lamed (Профессор) :
Здравствуйте, Евгений Сергеевич! Код в приложении. PascalABC. Поскольку из вопроса неизвестно, как возвращать ошибки, в программе они не использованы.
Код:
program p180303;
uses
Crt;

const
StrOk=0;
MemEr=1;
LenEr=2;
{ это ошибки которые функции возвращают:0-все ок, 1-ошибка памяти, 2-ошибка длинны }

type
string1=array[1..255] of char;
{концом строки считать символ с кодом 0}

Procedure InputStr(var st:string1);
{ Ввод строки st с клавиатуры. }
var
c: char;
i: word;
begin
c:= chr(0);
i:= 1;

c:= readkey;
while (c<>chr(13)) do
begin
write(c);
st[i] := c;
inc(i,1);
c:= readkey;
end;
st[i] := chr(0);
end;

Procedure OutputStr(const st:string1);
{ Вывод строки st на экран монитора. }
var
i: word;
begin
i:= 1;
while (st[i]<>chr(0)) do
begin
write(st[i]);
inc(i,1);
end;
writeln;
end;

Procedure InitStr(var st:string1; n: word);
{ Модель выделения динамической памяти под строку st, содержажую
от 0 до n символов. }
var
i: word;
begin
i:=1;
while (i<=n) do
inc(i,1);
st[i]:=chr(0);
end;

Procedure WriteToStr(var st:string1; s:string);
{ Запись данных в строку st из строки s. }
var
i, j: word;
len: word;
begin
len := ord(s[0]);
j:= 1;
i:= 1;
while i<= len do
begin
st[j] := s[i];
inc(j,1);
inc(i,1);
end;
st[j] := chr(0);
end;

Procedure WriteFromStr(var s:string; st:string1);
{ З апись данных в строку s из строки st. }
var
i: word;
begin
s:= '';
i:= 1;
while (st[i]<>chr(0)) do
begin
s:= s+st[i];
inc(i,1);
end;
end;

Function Comp(s1,s2:string1; var fl:shortint):boolean;
{ Сравнивает строки s1 и s2. Возвращает true если s1=s2 и
fl=0, если s1>s2 и fl=1, если s1<s2 и fl=-1. }
var
i: word;
begin
Comp := false;
i:= 1;
while (s1[i]=s2[i]) do
begin
if (s1[i]=chr(0)) then
begin
Comp := true;
fl := 0;
exit;
end;
inc(i,1);
end;
if (s1[i]>s2[i]) then
fl := 1
else
fl := -1;
end;

Procedure Delete(var S:String1; Index,Count:Word);
{ Удаляет Count символов из строки S,начиная с позиции Index. }
var
i, j: word;
begin
i:= 1;
while (s[i] <> chr(0)) and (i<Index) do
inc(i,1);

j:=1;
while (s[i] <> chr(0)) and (j<=count) do
begin
inc(i,1);
inc(j,1);
end;

j:= i-count;
while (s[i] <> chr(0)) do
begin
s[j]:=s[i];
inc(j,1);
inc(i,1);
end;
s[j]:=chr(0);

end;

Procedure Insert(Subs:String1;var S:String1; Index:Word);
{ Вставляет подстроку SubS в строку S,начиная с позиции Index. }
var
i, j: word;
len1, len2: word;
begin
len1:= 1;
while (s[len1]<>chr(0)) do
inc(len1,1);
dec(len1,1);

if (index<1) or (index>len1) then
exit;

len2:=1;
while (subs[len2]<>chr(0)) do
inc(len2,1);
dec(len2,1);

s[len1+len2+1]:=chr(0);
i:= index;

while (i<=len1) do
begin
s[i+len2]:= s[i];
inc(i,1);
end;

j:=1;
i:= index;
while (i<index+len2) do
begin
s[i]:= subs[j] ;
inc(j,1);
inc(i,1);
end;
end;

Procedure Concat( const S1, S2:string1; var srez:string1);
{ Выполня ет конкатенацию строк S1 и S2; результат помещает в srez. }
var
i,j: word;
begin
i:= 1;
while (s1[i]<>chr(0)) do
begin
srez[i]:=s1[i];
inc(i,1);
end;
j:= 1;

while (s2[j]<>chr(0)) do
begin
srez[i]:=s2[j];
inc(i,1);
inc(j,1);
end;
srez[i] := chr(0);
end;

Procedure Copy(S:String1;Index,Count:Word; var Subs:String1);
{ Возвращает подстроку Subs из строки S,начиная с позиции
Index и длиной Count символов. }
var
i, j: word;
begin
i:= 1;
while (i<Index) and (s[i]<>chr(0)) do
inc(i,1);

j:= 1;
while (i<Index+Count) and (s[i]<>chr(0)) do
begin
Subs[j] := s[i];
inc(i,1);
inc(j,1);
end;
Subs[j] := chr(0);
end;

Function Length(S: String1): Word;
{ Возвращает текущую длину строки S. }
var
i: Word;
begin
i:= 1;
whi le (s[i] <> chr(0)) do
inc(i,1);
Length := i-1;
end;

Function Pos(SubS, S: String1): Word;
{ Возвращает позицию, начиная с которой в строке S располагается подстрока SubS }
var
i,j: word;
begin
i:= 1;
j:= 1;
while (s[i] <> chr(0)) do
begin
if (s[i]=subs[j]) then
inc(j,1)
else if (subs[j]=chr(0)) then
begin
Pos:=(i-j+1);
exit;
end
else
j:= 1;
inc(i,1);
end;
if (subs[j]=chr(0)) then
pos := i-j+1
else
pos := 0;
end;

Function LastPost(s,s1:string1):word;
{ Назначение: поиск последнего вхождения подстроки s1 в строку s.
Входные параметры: s,s1.
Выходные параметры: нет. }
var
i,j: word;
begin
i:= 1;
j:= 1;
LastPost:=0;
while (s[i] <> chr(0)) do
begin
if (s[i]=s1[j]) then
inc(j,1)
else if (s1[j]=chr(0)) then
begin
LastPost:=(i-j+1);
j:=1;
end
else
j:= 1;
inc(i,1);
end;
if (s1[j]=chr(0)) then
LastPost := i-j+1
end;

var
s1, s2, s4: string1;
s3: string;
fl: ShortInt;
begin
// ClrScr;
// writeln('start');

InitStr(s1, 40);
InitStr(s2, 20);
InitStr(s4, 20);

write('Строка s1 ');
InputStr(s1);

writeln;
write('Строка s2 ');
InputStr(s2);

writeln;
write('Строка s3 ');
readln(s3);

writeln;
write('s1=');
OutputStr(s1);
writeln;
writeln('length(s1)=', length(s1));

WriteToStr(s1, s3);
writeln;
Write('s1<-s3=');
OutputStr(s1);

WriteFromStr(s3, s2);
writeln;
Write('s2->s3=', s3);

writeln;
Writeln('comp(s1,s1)=', Comp(s1,s1, fl), ' fl=', fl);
Writeln('comp(s2,s1)=', comp(s2,s1, fl), ' fl=', fl);
Writeln('comp(s1,s2)=', comp(s1,s2, fl), ' fl=', fl);

s3:= 'Информатика';
WriteToStr(s1,s3);
OutputStr(s1);

delete(s1, 3, 4);
OutputStr(s1);

WriteToStr(s2, 'форм');
Insert(s2,s1,3);
OutputStr(s1);

Concat(s1,s2,s4);
OutputStr(s4);

Copy(s4,3,6,s1);
OutputStr(s1);

WriteToStr(s1, 'ИнформатикаИнформатикаИнформатика');
WriteToStr(s2, 'форм');
writeln(pos(s2,s1));
writeln(LastPost(s1,s2));
writeln(LastPost(s2,s1));

writeln('OOPS');
end.

Если требуются уточнения, задавайте, пожалуйста, вопросы в мини-форуме.

Ответ отправил: lamed (Профессор)
Ответ отправлен: 13.10.2010, 19:52
Номер ответа: 263488

Оценка ответа: 5
Комментарий к оценке:
Я преогромно вам благодарен за проделанную работу.

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 263488 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.22 от 18.10.2010

    В избранное