Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 27.06.2011, 23:02   #1 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Не могу решить задачу на паскале

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

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

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

Только не знаю, как это реализовать и можно ли проще?
Severina вне форума   Ответить с цитированием

Старый 27.06.2011, 23:02
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Уделите пожалуйста некоторое время на прочтение аналогичных тем

Решить задачу о строках в С++
Помогите решить задачу в Паскале
Помогите решить задачу на Паскале
Помогите решить задачу в паскале
Срочно решить задачу!
Не могу решить задачу

Старый 27.06.2011, 23:35   #2 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
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   #3 (permalink)
Severina
Вечная ученица
 
Регистрация: 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. Не подскажете хорошую литературу на эту тему?
Severina вне форума   Ответить с цитированием
Старый 28.06.2011, 17:12   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Severina Посмотреть сообщение
но опять ошибка в совместимости типов, не проходит компилятор. т.е. не могу посмотреть, что же сама и натворила. p.s. Не подскажете хорошую литературу на эту тему?
Выложите, пожалуйста, полный листинг программы, так, чтобы параметры процедуры в описании и в обращении согласовались. Кстати, совсем не обязательно эти fl1, fl2 и d (равно, впрочем, как и s, v, l) загонять в шапку: их можно определить через Var в теле процедуры.
А литература, по моему убеждению, (кроме справочной) Вам уже не нужна, а нужна практика. И побольше.
Vladimir_S вне форума   Ответить с цитированием
Старый 28.06.2011, 17:14   #5 (permalink)
Severina
Вечная ученица
 
Регистрация: 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.
Severina вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 28.06.2011, 17:15   #6 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

На счет объявления..у меня большое недопонимание в данной теме, поэтому объявляю все в начале.
Severina вне форума   Ответить с цитированием
Старый 28.06.2011, 17:22   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Severina Посмотреть сообщение
На счет объявления..у меня большое недопонимание в данной теме, поэтому объявляю все в начале.
А между тем всё тут вовсе не сложно.
В шапку следует помещать только те параметры, которые Вы передаете в процедуру из тела программы, а также возвращаете в программу. Те же, которые используются только внутри процедуры, можно определить, точно так же, как и в программе, создав раздел описания переменных:
Var
a,b,c:Real;
d,e:boolean;
и т.п.
Но помните - эти переменные существуют только в процедуре, для основной программы их нет!
Vladimir_S вне форума   Ответить с цитированием
Старый 28.06.2011, 17:30   #8 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Переменные в процедуре - их еще по другому называют локальными?
Severina вне форума   Ответить с цитированием
Старый 28.06.2011, 19:34   #9 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

И на счет литературы, имела в виду , что нужна справочная, где хотя бы кратко указывают что надо и как делать
Severina вне форума   Ответить с цитированием
Старый 28.06.2011, 20:13   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.