
Вопрос задан 05.03.2021 в 09:04.
Предмет Информатика.
Спрашивает Заблоцька Ірина.
Дана строка. Словом текста считается любая последовательность букв русского алфавита; между
соседними словами - не менее одного пробела, за последним словом – точка. Найти и сохранить в строке те слова текста, количество гласных букв в которых превышает количество согласных. Все остальные слова удалить. что не так с программой?: 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.

Ответы на вопрос

Отвечает Перепелов Семён.
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.
после проверки слова перемен нужно обнулить для нового подсчета
определение длины строки нужно поместить в цикл, это для отределения после уменьшения и выхода из цикла
после проверки слова перемен нужно обнулить для нового подсчета
определение длины строки нужно поместить в цикл, это для отределения после уменьшения и выхода из цикла



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
В программе есть несколько ошибок. Вот исправленный код:
pascalvar m1, m2: set of char; s1, s2, s3: string; gl, sogl: integer; begin m2 := ['a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y']; m1 := ['б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', 'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'Й', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я']; readln(s1); gl := 0; sogl := 0; while length(s1) > 0 do begin s2 := ''; while (length(s1) > 0) and (s1[1] <> ' ') do begin s2 := s2 + s1[1]; delete(s1, 1, 1); end; delete(s1, 1, 1); // Удалить пробел после слова for gl := 1 to length(s2) do begin if s2[gl] in m2 then Inc(gl) else if s2[gl] in m1 then Inc(sogl); end; if gl > sogl then s3 := s3 + s2 + ' '; end; writeln(s3); end.
Изменения, которые были внесены:
- Заменено
while m<>0 do
наwhile length(s1) > 0 do
, чтобы проверять длину строкиs1
. - Добавлено
readln(s1)
вместоread(s1)
, чтобы считать всю строку до конца строки. - Исправлена опечатка в объявлении множеств
m1
иm2
. Вместо английских букв добавлены русские буквы. - Добавлена строка
delete(s1, 1, 1)
после внутреннего циклаwhile
для удаления пробела после слова. - Исправлены индексы цикла
for
для переменныхgl
иsogl
. Было измененоfor i:=1 to length(s2) do
наfor gl:=1 to length(s2) do
. - Исправлены инструкции
Inc(gl)
иInc(sogl)
, чтобы увеличивать правильные переменные.
Теперь программа должна правильно находить слова с


Топ вопросов за вчера в категории Информатика

Информатика 566

Информатика 25

Информатика 22

Информатика 27

Информатика 34

Информатика 58

Информатика 63

Информатика 23
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili