Не могу решить задачу на паскале
Добрый вечер,
не могу решить задачу на паскале. Задание: Дан текст, состоящий из нескольких предложения на русском языке. Слова разделяются пробелами. Предложения оканчиваются точкой. Определить количество слов в тексте, которые начинаются и заканчиваются гласной буквой. 1) Использовать множества 2) Ввод/вывод из файла/в файл. 3) Для текста не короче 3-х предложений. 4) Использовать процедуру-подпрограмму. Думаю, что можно решить вот так (словами): Проверить первую букву, если она гласная, то ставим флажок true, если нет, то флажок false. Идем дальше до пробела/точки. Проверяем предшествующий символ по той же схеме. Затем если произведение этих двух символов true, то записываем в количество слов 1, если false, то 0 и идем дальше. Потом проверяем следующий символ от пробела/точки и т.д. Только не знаю, как это реализовать и можно ли проще? |
Цитата:
вот, что я начала делать, но в процедуре дело не заладилось. т.к. не особо понимаю, как это вообще можно сделать |
Немного изменила, т.е. ввела флаг.
Procedure obr(var k:integer; s:string;v,l:integer;fl1,fl2:boolean;d:boolean); begin assign(dat,'F:\pask\bin\dano.dat'); reset(dat); assign(res,'F:\pask\bin\pr5.res'); rewrite(res); While not eof(dat) do begin mn:=['a','e','i','u','o','y','A','E','I','U','O','Y']; read(dat); v:=1; k:=0; if s[v] in mn then fl1:=true else fl1:=false; if eoln(dat) or ( s in [' ','.']) then begin if s[v-1] in mn then fl2:=true else fl2:=false; d:= fl1 and fl2; if d=true then k:=k+1; end; end; end; но опять ошибка в совместимости типов, не проходит компилятор. т.е. не могу посмотреть, что же сама и натворила. p.s. Не подскажете хорошую литературу на эту тему? |
Цитата:
А литература, по моему убеждению, (кроме справочной) Вам уже не нужна, а нужна практика. И побольше. |
Program LR; uses crt;
var k,v,l:integer; s:string; dat,res:text; mn: set of char; fl1,fl2, d: boolean; Procedure obr(var k:integer; s:string;v,l:integer;fl1,fl2:boolean;d:boolean); begin assign(dat,'F:\pask\bin\dano.dat'); reset(dat); assign(res,'F:\pask\bin\pr5.res'); rewrite(res); While not eof(dat) do begin mn:=['a','e','i','u','o','y','A','E','I','U','O','Y']; read(dat); v:=1; k:=0; if s[v] in mn then fl1:=true else fl1:=false; if eoln(dat) or ( s in [' ','.']) then begin if s[v-1] in mn then fl2:=true else fl2:=false; d:= fl1 and fl2; if d=true then k:=k+1; end; end; end; {----------Osnovnaya programma------------} begin obr(k,s,v,l); close(dat); writeln(res,' '); writeln(res,'Kol-vo slov s poslednei glasnoi bukvoi ravno ',k); repeat until keypressed; close(res); end. |
На счет объявления..у меня большое недопонимание в данной теме, поэтому объявляю все в начале.
|
Цитата:
В шапку следует помещать только те параметры, которые Вы передаете в процедуру из тела программы, а также возвращаете в программу. Те же, которые используются только внутри процедуры, можно определить, точно так же, как и в программе, создав раздел описания переменных: Var a,b,c:Real; d,e:boolean; и т.п. Но помните - эти переменные существуют только в процедуре, для основной программы их нет! |
Переменные в процедуре - их еще по другому называют локальными?
|
И на счет литературы, имела в виду , что нужна справочная, где хотя бы кратко указывают что надо и как делать
|
Ладно, не мучайтесь.
Сейчас попробую нарисовать программку. Пожалуйста (имя и путь к файлу поправьте на свой лад): Код:
CONST |
Часовой пояс GMT +4, время: 12:21. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.