Другие языки программирования и технологии
паскаль(строки)
Дана строка,состоящая из слов.Вывести слова,которые повторяются хотя бы один раз. моя прога: program lab_7; usescrt; var s,w:string; i:byte; function slovo(s:string;i:byte):string; var w:string; begin w:=''; while (s<>' ') and (i<=ord(s[0])) do begin w:=W+S;i:=i+1 end; slovo:=w; end; Procedure vivod(s,w:string); var l,i,k,m,j:byte; begin readln(s);k:=1;{кол-во слов} for i:=1 to length(s) do if s=' ' then inc(k); i:=1; while i<=length(s) do begin w:=slovo(s,i); l:=1;m:=0;{кол-во слов которые повторяются} while l<=k do for J:=l+1 to k do if w[l]=w[j] then begin w[l]:=' ';inc(m) end; k:=k-m; for i:=1 to k do writeln(w,' ');end; end; begin clrscr; writeln('vvedite elementu stroki'); vivod(s,w); end. она почему-то не работает,скажите плиз в чем причина,или хотя бы как можно сравнить 2 слова??? Заранее спасибо!!!
program lab_7;
{$APPTYPE CONSOLE} {для турбо паскаля не нужно}
{можно было использовать массив, связанный список, но идею извлечения слова из строки я оставил
}
function slovo(s:string;i:byte):string;
var
j,x: integer;
w:string;
begin
w:='';
result:=''; x:=0;
{тут было важно сделать, чтобы 2 пробела подряд не считались за слово}
{а еще бойтесь пересечения имен параметров функции, глобальных и локальных переменных}
for j:=1 to length(s) do
begin
if (length(w)>0) and ((s[j]=' ') or (j=length(s))) then
begin
if (s[j]<>' ') then w:=w+s[j];
inc(x);
if (x=i) then
begin
slovo:=w;
break
end
else
w:='';
end
else
if s[j]<>' ' then
w:=w+S[j];
end;
end;
Procedure vivod;
var
i,x,k,z :byte;
s,w,w2 : string;
bilo : boolean;
begin
Readln(s);
k:=1; { - индекс основного цикла. }
z:=1; { - сколько раз слово встретилось }
x:=2; { - ищем повторения со второго слова}
w:=slovo(s,k);
while length(w)>0 do
begin
w2:=slovo(s,x);
bilo:=false;
while length(w2)>0 do
begin
if (w=w2) then {слова равны? }
if (x>k) then {не считаем 2 раза одно и тоже }
inc(z)
else
if (x<k)>1) and not bilo then {если слово встретилось более 1 раза и мы не считали его раньше - печатаем}
begin
writeln('slovo '+w+' povtoryaetsya ',z,' raz');
end;
z:=1; {эх, приходиться пробегать от начала строки, а не с позиции текущего слова. иначе одно и то же слово напечатаем несколько раз}
inc(k);
x:=1;
w:=slovo(s,k);
end;
end;
begin
writeln('vvedite elementu stroki');
vivod;
readln;
end.
{$APPTYPE CONSOLE} {для турбо паскаля не нужно}
{можно было использовать массив, связанный список, но идею извлечения слова из строки я оставил
}
function slovo(s:string;i:byte):string;
var
j,x: integer;
w:string;
begin
w:='';
result:=''; x:=0;
{тут было важно сделать, чтобы 2 пробела подряд не считались за слово}
{а еще бойтесь пересечения имен параметров функции, глобальных и локальных переменных}
for j:=1 to length(s) do
begin
if (length(w)>0) and ((s[j]=' ') or (j=length(s))) then
begin
if (s[j]<>' ') then w:=w+s[j];
inc(x);
if (x=i) then
begin
slovo:=w;
break
end
else
w:='';
end
else
if s[j]<>' ' then
w:=w+S[j];
end;
end;
Procedure vivod;
var
i,x,k,z :byte;
s,w,w2 : string;
bilo : boolean;
begin
Readln(s);
k:=1; { - индекс основного цикла. }
z:=1; { - сколько раз слово встретилось }
x:=2; { - ищем повторения со второго слова}
w:=slovo(s,k);
while length(w)>0 do
begin
w2:=slovo(s,x);
bilo:=false;
while length(w2)>0 do
begin
if (w=w2) then {слова равны? }
if (x>k) then {не считаем 2 раза одно и тоже }
inc(z)
else
if (x<k)>1) and not bilo then {если слово встретилось более 1 раза и мы не считали его раньше - печатаем}
begin
writeln('slovo '+w+' povtoryaetsya ',z,' raz');
end;
z:=1; {эх, приходиться пробегать от начала строки, а не с позиции текущего слова. иначе одно и то же слово напечатаем несколько раз}
inc(k);
x:=1;
w:=slovo(s,k);
end;
end;
begin
writeln('vvedite elementu stroki');
vivod;
readln;
end.
Сделаю.
100 WMR
100 WMR
стучи в агент
Похожие вопросы
- паскаль... строки...функция delete. не подскажете, почему в этой программе она не выполняется,что опять не так тут?(((
- Паскаль строки
- строки в паскале
- Как заменить слово в строке?Паскаль
- по строкам в Паскале
- строки в Паскале
- Как разделить слова в строке, чтобы их потом сравнивать друг с другом и сортировать? (Паскаль)
- Помогите решить задачу в паскале. Задание: Заменить в строке все вхождения "да" на "нет".
- Как найти слово в строке. Паскаль
- Турбо Паскаль 7.0 В функцию val можно загнать конкретный элимент строки или можно только всю строку?