Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Не могу решить задачу на паскале (http://www.tehnari.ru/f43/t53825/)

Severina 27.06.2011 23:02

Не могу решить задачу на паскале
 
Добрый вечер,
не могу решить задачу на паскале.
Задание:
Дан текст, состоящий из нескольких предложения на русском языке. Слова разделяются пробелами. Предложения оканчиваются точкой. Определить количество слов в тексте, которые начинаются и заканчиваются гласной буквой.

1) Использовать множества
2) Ввод/вывод из файла/в файл.
3) Для текста не короче 3-х предложений.
4) Использовать процедуру-подпрограмму.

Думаю, что можно решить вот так (словами):
Проверить первую букву, если она гласная, то ставим флажок true, если нет, то флажок false. Идем дальше до пробела/точки. Проверяем предшествующий символ по той же схеме. Затем если произведение этих двух символов true, то записываем в количество слов 1, если false, то 0 и идем дальше. Потом проверяем следующий символ от пробела/точки и т.д.

Только не знаю, как это реализовать и можно ли проще?

Severina 27.06.2011 23:35

Цитата:

Program LR; uses crt;
const log1= true;
log2=false;
var k,v,l:integer;
s:string;
dat,res:text;
mn: set of char;
d: boolean;
Procedure obr(var k:integer; s:string;v,l:integer);
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;
if s[v] in mn then s[v]:=;
else s[v]:=;
if eoln(dat) or( s in [' ','.']
then begin
if s[v-1] in mn then s[v-1]:=
else s[v-1]:=;
d:= s[v] and s[v-1];
if d= 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.

вот, что я начала делать, но в процедуре дело не заладилось. т.к. не особо понимаю, как это вообще можно сделать

Severina 28.06.2011 17:01

Немного изменила, т.е. ввела флаг.
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. Не подскажете хорошую литературу на эту тему?

Vladimir_S 28.06.2011 17:12

Цитата:

Сообщение от Severina (Сообщение 545180)
но опять ошибка в совместимости типов, не проходит компилятор. т.е. не могу посмотреть, что же сама и натворила. p.s. Не подскажете хорошую литературу на эту тему?

Выложите, пожалуйста, полный листинг программы, так, чтобы параметры процедуры в описании и в обращении согласовались. Кстати, совсем не обязательно эти fl1, fl2 и d (равно, впрочем, как и s, v, l) загонять в шапку: их можно определить через Var в теле процедуры.
А литература, по моему убеждению, (кроме справочной) Вам уже не нужна, а нужна практика. И побольше.

Severina 28.06.2011 17:14

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.

Severina 28.06.2011 17:15

На счет объявления..у меня большое недопонимание в данной теме, поэтому объявляю все в начале.

Vladimir_S 28.06.2011 17:22

Цитата:

Сообщение от Severina (Сообщение 545192)
На счет объявления..у меня большое недопонимание в данной теме, поэтому объявляю все в начале.

А между тем всё тут вовсе не сложно.
В шапку следует помещать только те параметры, которые Вы передаете в процедуру из тела программы, а также возвращаете в программу. Те же, которые используются только внутри процедуры, можно определить, точно так же, как и в программе, создав раздел описания переменных:
Var
a,b,c:Real;
d,e:boolean;
и т.п.
Но помните - эти переменные существуют только в процедуре, для основной программы их нет!

Severina 28.06.2011 17:30

Переменные в процедуре - их еще по другому называют локальными?

Severina 28.06.2011 19:34

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

Vladimir_S 28.06.2011 20:13

Ладно, не мучайтесь.
Сейчас попробую нарисовать программку.

Пожалуйста (имя и путь к файлу поправьте на свой лад):
Код:

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.



Часовой пояс GMT +4, время: 12:21.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.