27.06.2011, 23:02 | #1 (permalink) |
Вечная ученица
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Не могу решить задачу на паскале
не могу решить задачу на паскале. Задание: Дан текст, состоящий из нескольких предложения на русском языке. Слова разделяются пробелами. Предложения оканчиваются точкой. Определить количество слов в тексте, которые начинаются и заканчиваются гласной буквой. 1) Использовать множества 2) Ввод/вывод из файла/в файл. 3) Для текста не короче 3-х предложений. 4) Использовать процедуру-подпрограмму. Думаю, что можно решить вот так (словами): Проверить первую букву, если она гласная, то ставим флажок true, если нет, то флажок false. Идем дальше до пробела/точки. Проверяем предшествующий символ по той же схеме. Затем если произведение этих двух символов true, то записываем в количество слов 1, если false, то 0 и идем дальше. Потом проверяем следующий символ от пробела/точки и т.д. Только не знаю, как это реализовать и можно ли проще? |
27.06.2011, 23:02 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Уделите пожалуйста некоторое время на прочтение аналогичных тем Решить задачу о строках в С++ Помогите решить задачу в Паскале Помогите решить задачу на Паскале Помогите решить задачу в паскале Срочно решить задачу! Не могу решить задачу |
27.06.2011, 23:35 | #2 (permalink) | |
Вечная ученица
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
вот, что я начала делать, но в процедуре дело не заладилось. т.к. не особо понимаю, как это вообще можно сделать |
|
28.06.2011, 17:01 | #3 (permalink) |
Вечная ученица
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Немного изменила, т.е. ввела флаг.
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. Не подскажете хорошую литературу на эту тему? |
28.06.2011, 17:12 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
А литература, по моему убеждению, (кроме справочной) Вам уже не нужна, а нужна практика. И побольше. |
|
28.06.2011, 17:14 | #5 (permalink) |
Вечная ученица
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
28.06.2011, 17:22 | #7 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
В шапку следует помещать только те параметры, которые Вы передаете в процедуру из тела программы, а также возвращаете в программу. Те же, которые используются только внутри процедуры, можно определить, точно так же, как и в программе, создав раздел описания переменных: Var a,b,c:Real; d,e:boolean; и т.п. Но помните - эти переменные существуют только в процедуре, для основной программы их нет! |
|
28.06.2011, 20:13 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ладно, не мучайтесь.
Сейчас попробую нарисовать программку. Пожалуйста (имя и путь к файлу поправьте на свой лад): Код:
CONST Lit=['А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П', 'Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я', 'а','б','в','г','д','е','ж','з','и','й','к','л','м','н','о','п', 'р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я']; Vow=['А','Е','И','О','У','Ы','Э','Ю','Я', 'а','е','и','о','у','ы','э','ю','я']; VAR f:Text; Ch:Char; fl1,fl2:Boolean; N:Byte; BEGIN Assign(f,'D:\text.txt'); ReSet(f); N:=0; REPEAT Repeat Read(f,Ch); Until Ch in Lit; If Ch in Vow then fl1:=true; Repeat Read(f,Ch); If Ch in Lit then begin If Ch in Vow then fl2:=true else fl2:=false; end; Until NOT (Ch in Lit); If fl1 and fl2 then Inc(N); fl1:=false; UNTIL EoF(f); Close(f); Writeln('The number of words beginning and ending with vowels is ',N); Readln END. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|