Дана строка. Словом текста считается любая последовательность букв русского алфавита;...

0 голосов
77 просмотров

Дана строка. Словом текста считается любая последовательность букв русского алфавита; между соседними словами - не менее одного пробела, за последним словом – точка. Найти и сохранить в строке те слова текста, количество гласных букв в которых превышает количество согласных. Все остальные слова удалить.

что не так с программой?:
var
m1,m2:set of char; s1,s2,s3:string; gl,i,m,sogl:integer;
begin
m2:=['a','e','i','o','u','y','A','E','I','O','U','Y'];
m1:=['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z',
'B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Z'];
read(s1); gl:=0; sogl:=0; m:=length(s1);
while m<>0 do
begin
s2:=copy(s1,1,(pos(' ',s1)-1));
delete(s1,1,pos(' ',s1));
for i:=1 to length(s2) do
begin
if s2[i] in m2 then gl:=gl+1 else
if s2[i] in m1 then sogl:=sogl+1;
end;
if gl>sogl then s3:=s3+s2+' ';
end;
writeln(s3);
end.


Информатика (14 баллов) | 77 просмотров
0

посмотри как решили в интернете и сравни твоё решение с их решением.

0

в интернете подобного нетхочется разобраться в своем решении

Дан 1 ответ
0 голосов

Write('Введите строку');read(s1); gl:=0; sogl:=0; m:=length(s1);while m<>0 dobegins2:=copy(s1,1,(pos(' ',s1)-1));delete(s1,1,pos(' ',s1));for i:=1 to length(s2) dobeginif s2[i] in m2 then gl:=gl+1;if s2[i] in m1 then sogl:=sogl+1;end;if gl>sogl then s3:=s3+s2+' ';gl:=0; sogl:=0;m:=length(s1);end;writeln(s3);end.

после проверки слова перемен нужно обнулить для нового подсчета
определение длины строки нужно поместить в цикл, это для отределения после уменьшения и выхода из цикла

(6.5k баллов)