uses crt;
const sogl:string='bcdfghjklmnpqrstwxz';
var s,cw,mw,msw:string;
ls,i,j,nsogl,lcw:byte;
mp,cp:real;
begin
clrscr;
writeln('Введите предложение:');
readln(s);
ls:=length(s);
i:=1;
mp:=0;
while(i<=ls)do
begin
while(i<=ls)and not(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do inc(i);
cw:='';
while(i<=ls)and(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do
begin
cw:=cw+s;
inc(i);
end;
nsogl:=0;
lcw:=length(cw);
for j:=1 to lcw do
if(pos(cw[j],sogl)<>0)then inc(nsogl);
cp:=nsogl/lcw;
writeln(cw,' ',cp:0:2);
if(cp>mp)then
begin
mp:=cp;
mw:=cw;
end;
for j:=1 to lcw div 2 do
if(cw[j]<>cw[lcw-j+1])then break;
end;
writeln('Слово с макс содержанием согласных: ',mw,' ',mp:0:2);
end.
Pascal. Строки
Задача:
Для каждого слова заданного предложения указать долю согласных букв. Определить слово, в котором доля согласных максимальна.
Код:
Но если ввести, например, два слова с одинаковым количеством согласных, то максимальным показывается только одно из них. Как исправить, чтоб выходили все слова?
Код:
uses crt;
const sogl:string='bcdfghjklmnpqrstwxz';
var s,cw:string;
ls,i,j,k,nsogl,lcw:byte;
cp:real;
mw: array[1..10] of string;
mp: array[1..10] of real;
mwords_num: integer;
begin
clrscr;
writeln('Введите предложение:');
readln(s);
ls:=length(s);
i:=1;
mp:=0;
while(i<=ls)do
begin
while(i<=ls)and not(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do inc(i);
cw:='';
while(i<=ls)and(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do
begin
cw:=cw+s;
inc(i);
end;
nsogl:=0;
lcw:=length(cw);
for j:=1 to lcw do
if(pos(cw[j],sogl)<>0)then inc(nsogl);
cp:=nsogl/lcw;
writeln(cw,' ',cp:0:2);
if(cp>mp[mword_num])then
begin
mwords_num := 1;
for k := 1 to 10 do
begin
mw[k] := '';
mp[k] := 0;
end;
mp[1]:=cp;
mw[1]:=cw;
end else if (cp = mp[mwords_num]) then
begin
inc(mwords_num);
mp[mwords_num] := cp;
mw[mwords_num] := cw;
end;
for j:=1 to lcw div 2 do
if(cw[j]<>cw[lcw-j+1])then break;
end;
writeln('Слова с максимальным содержанием согласных:');
for k := 1 to mwords_num do
writeln(mw[k],' ',mp[k]:0:2);
end.
const sogl:string='bcdfghjklmnpqrstwxz';
var s,cw:string;
ls,i,j,k,nsogl,lcw:byte;
cp:real;
mw: array[1..10] of string;
mp: array[1..10] of real;
mwords_num: integer;
begin
clrscr;
writeln('Введите предложение:');
readln(s);
ls:=length(s);
i:=1;
mp:=0;
while(i<=ls)do
begin
while(i<=ls)and not(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do inc(i);
cw:='';
while(i<=ls)and(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do
begin
cw:=cw+s;
inc(i);
end;
nsogl:=0;
lcw:=length(cw);
for j:=1 to lcw do
if(pos(cw[j],sogl)<>0)then inc(nsogl);
cp:=nsogl/lcw;
writeln(cw,' ',cp:0:2);
if(cp>mp[mword_num])then
begin
mwords_num := 1;
for k := 1 to 10 do
begin
mw[k] := '';
mp[k] := 0;
end;
mp[1]:=cp;
mw[1]:=cw;
end else if (cp = mp[mwords_num]) then
begin
inc(mwords_num);
mp[mwords_num] := cp;
mw[mwords_num] := cw;
end;
for j:=1 to lcw div 2 do
if(cw[j]<>cw[lcw-j+1])then break;
end;
writeln('Слова с максимальным содержанием согласных:');
for k := 1 to mwords_num do
writeln(mw[k],' ',mp[k]:0:2);
end.
Не проверял, но, думаю, суть уловили.
Всё работает. Спасибо большое! =)