Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ СТРАННАЯ ЗАДАЧА

Автор: Element 22.01.2007 18:13

Вобщем задачу то я решил ... всё вроде работает... но вот чёто преподу не понравилось что то типа упростить !!(((
дана непустая последовательность слов из строчных латинских букв; слова разделяются запятыми,
за последним словом точка Среди всех пар аi и bi(где ai первая и bi последние буквы итого слова последовательности)
определить наиболее часто встречающуюся пару

program Project1;

{$APPTYPE CONSOLE}





var
s,max : string;
dl,n,dlk,dln: integer;
i,j,M: integer;
kk: array[1..100] of char;
nn: array[1..100] of char;
z: array[1..100] of integer;

begin

writeln('BBedite ctroky');
readln(s);

dlk:=-1;
dln:=0;
s:=','+s+',';

j:=2;





for i:=1 to Length(s) do
if (s[i]=',') then begin
kk[j-1]:=s[i-1];
nn[j]:=s[i+1];
j:=j+1;

end;
for i:=1 to Length(s) do begin
if s[i]=',' then dlk:=dlk+1;
end;
writeln(dlk);
// for i:=2 to dlk+1 do
// begin writeln(nn[i],kk[i]);
// end;



for j:=2 to dlk+1 do

for i:=2 to dlk+1 do
begin
if kk[j]=kk[i] then if nn[j]=nn[i] then
z[j]:=z[j]+1;
// writeln ('proxodi');
// writeln(z[2],z[3]);
end;
M:=z[2];
for i:=2 to dlk+1 do
begin
if z[i]>M then M:=z[i]
end;
Writeln(M);
for i:=2 to dlk+1 do
begin
if z[i]=M then writeln('4awe povtoraetc9 ',nn[i],kk[i],' kol-vo povtorenii ',M);
end;
readln


end.

Автор: volvo 22.01.2007 18:21

Во-первых, пользуйся тегами...

А во-вторых... Работает, говоришь? Введи строку
aga,ugu,ege,agaga,wow,egege,ehe.
и посмотри, КАК оно у тебя работает... Тема о разбиении строк на слова уже была - в поиск, ссылка - у меня в подписи...

в частности - тебе сюда: http://forum.pascal.net.ru/index.php?showtopic=6972

Автор: Element 13.06.2007 14:16


program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

var

max: integer;
s: string;
i: integer;
j: integer;
z: integer;
n: string; //
k: string; //
begin

Writeln('Vvedite stroky');
readln(s);
n:=n+s[1];
z:=0;
max:=0;
for i:=1 to Length(s) do
begin
if s[i]='.' then
begin
k:=k+s[i-1];
break;
end;
if s[i]=',' then
begin
n:=n+s[i+1];
k:=k+s[i-1];
end;
end; writeln(n,k);
//вот до сюда вроде всё работает нормально
for i:=1 to length(n) do
begin
writeln(n[i],i);
writeln(k[i],i);
for j:=i+1 to length(n) do
begin
if n[i]+k[i]=n[j]+k[j] then
begin
z:=z+1;
writeln(z);
end;
end;
if z>=max then
begin
max:=z;
end;
end;

writeln(max);
readln


подскажите почему он ведёт неправильный подсчёт максимального количества повторений

Автор: Element 13.06.2007 16:09

разобрался ) надо было z обнулять)

Добавлено через 13 мин.

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

var

max: integer;
s: string;
i: integer;
j: integer;
z: integer;
itog: string;
n: string; // ñòðîêà ñîñòîÿùàÿ èç ïåðâûõ áóêâ ñëîâ ñòðîêè ñ
k: string; // ñòðîêà ñîñòîÿùàÿ èç ïîñëåäíèõ áóêâ ñëîâ ñòðîêè ñ
begin

Writeln('Vvedite stroky'); //ââîäè ñòðîêó
readln(s); //ñ÷èòûâàíèå ñòðîêè
n:=n+s[1];
z:=0;
max:=0;
for i:=1 to Length(s) do
begin
if s[i]='.' then
begin
k:=k+s[i-1];
break;
end;
if s[i]=',' then //i-íîìåð ýëåìåíòà çàïÿòîé â ñòðîêå
begin
n:=n+s[i+1];
k:=k+s[i-1];
end;
end;
// íà÷èíàåì ïðîâåðÿòü íà ïîâòîðû â ñòðîêàõ
for i:=1 to length(n) do
begin
z:=1;

for j:=i+1 to length(n) do
begin
if n[i]+k[i]=n[j]+k[j] then
begin
z:=z+1;
end;
end;
if z>=max then
begin
max:=z;
itog:=n[i]+' '+k[i];
end;
end;

writeln('4awe bcego povtoraetc9 ',itog, ' koli4ectvo povtorov ',max);
readln
end.


Кому интересно помоему итоговый правильный текст решения задачи