Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Подсчёт гласных букв


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


Мне нужно в разделе описаний указать русские буквы, и при компиляции происходит ошибка, ну в общем посмотрите код:

Код
program stroka;
uses crt;
var
   text,text1:string;
   а,я,о,ё,и,ы,у,ю,е,э : char;
   s,dl:intefer
begin
     clrscr;
     writeln(' Богами вам ещё даны
               Златые дни, златые ночи,
               И томных дев устремлены
               На вас внимательные очи.')
     readln(text);
     dl:=length(text);
     а:=0;
     я:=0;
     о:=0;
     ё:=0;
     и:=0;
     ы:=0;
     ю:=0;
     у:=0;
     э:=0;
     е:=0;

text1:=text;
n:=pos(aa,text);
1:if n>0 then
begin
cha:=cha+1;
Delete(text1,1,n);
dl:=length(text1);
if dl>0 then
begin
n:=pos(aa,text1);
goto 1;
end
end;

text1:=text;
n:=pos(оо,text1);
2:if n>0 then
begin
chb:=chb+1;
Delete(text1,1,n);
dl:=length(text1);
if dl>0 then
begin
n:=pos(оо,text1);
goto 2;
end
end;

text1:=text;
n:=pos(яя,text1);
3:if n>0 then
begin
chv:=chv+1;
Delete(text1,1,n);
dl:=length(text1);
if dl>0 then
begin
n:=pos(яя,text1);
goto 3;
end
end;

end.
 

Автор: skyboy 5.6.2006, 19:12
С каких пор Паскаль поддерживает не латиноназванные переменные? 

Автор: UpL1nK 6.6.2006, 09:46
А что такое intefer ? )
Код

s,dl:intefer
 

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

Автор: skyboy 6.6.2006, 10:02
Код

const glasnie=['А','а','Е','е','Ё','ё','И','и','О','о','У','у','Ы','ы','Э','э','Ю','ю','Я','я'];
var 
    s:string;
    i,count:integer;
begin
writeln('Введите наконец это чудесное творение...');
readln(s);
count:= 0;
for i:=1 to length(s) do
 if s[i] in glasnie
  then count:= count + 1;
writeln('В этом творении ',count,' гласных букв!');
readln;
end.
 

Автор: Аликс 8.6.2006, 19:38
Вы хоть программу проверяли, она не работает. 

Автор: skyboy 8.6.2006, 22:08
Всё работает  smile А ничего, что в браузере у тебя кодировка Win1251 или UTF-8, а в Паскале работа в кодировке ASCII? Ты просто скопировал-вставил или как? Я только что запустил - всё работает. Только руками в Паскале набил, а не копировал. 

Автор: Аликс 9.6.2006, 12:34
Как работает, если там всегда выводится сообщение "В том творении 0 гласных букв". И я вставлял и пробовал набирать, всё равно не пашет 

Автор: profispb 10.6.2006, 09:42
skyboy,  Ты ошибку допустил.
Цитата

Код

const glasnie=['А','а','Е','е','Ё','ё','И','и','О','о','У','у','Ы','ы','Э','э','Ю','ю','Я','я'];    
var  
    s:string;    
    i,count:integer;    
begin    
writeln('Введите наконец это чудесное творение...');    
readln(s);    
count:= 0;    
for i:=1 to length(s) do    
 if s[i] in glasnie    
  then count:= count + 1;    
writeln('В этом творении ',count,' гласных букв!');    
readln;    
end.


После фора надо ставить begin поскольну вложена конструкция, после строки 11 надо поставить end; 
Аликс, и все должно работать. 

Автор: volvo877 10.6.2006, 10:25
Цитата(profispb @  10.6.2006,  09:42 Найти цитируемый пост)
После фора надо ставить begin поскольну вложена конструкция

Какая "конструкция", можно поинтересоваться? Сколько операторов в ней, уточни если не трудно? А потом - ходи сюда:

http://zeus.sai.msu.ru:7000/programming/bp70_lr/lr7.shtml#14

и внимательно прочти, что там написано... 

Автор: profispb 10.6.2006, 19:04
volvo877, Показываю код, который поправлен и не надо меня посылать смотреть учебник, я таких руководств прочел больше 50.
Код

const glasnie=['А','а','Е','е','Ё','ё','И','и','О','о','У','у','Ы','ы','Э','э','Ю','ю','Я','я'];     
var    
    s:string;     
    i,count:integer;     
begin     
writeln('Введите наконец это чудесное творение...');     
readln(s);     
count:= 0;     
for i:=1 to length(s) do 
begin    
 if s[i] in glasnie then 
 count:= count + 1;
end;     
writeln('В этом творении ',count,' гласных букв!');     
readln;     
end.

А конструкция про которую, я говорил это IF т.е. условная конструкция. 

Автор: Zero 10.6.2006, 19:31
Цитата(profispb @  10.6.2006,  20:04 Найти цитируемый пост)
А конструкция про которую, я говорил это IF т.е. условная конструкция. 

Кхе...Кхе. profispb, т.к. в этом форе выполняется только один оператор, поэтому бегин и енд не обязательны.

Это тоже самое что сказать:
выражение: 7*8 -- с ошибкой т.к. пропущена скобка, типа надо так: 7*(8)

PS: прочитай в учебнике по паскалю понятия об операторных скобках и т.п.
Цитата(profispb @  10.6.2006,  20:04 Найти цитируемый пост)
я таких руководств прочел больше 50

 smile Их можно и 100 прочитать, а пока не вдумаешся что читаешь не поймёш... smile  

Автор: skyboy 10.6.2006, 19:54
Так почему программа у меня работает, а у абонента - нет? Выяснили? smile 

Автор: Zero 10.6.2006, 20:12
Цитата(skyboy @  10.6.2006,  20:54 Найти цитируемый пост)
Так почему программа у меня работает, а у абонента - нет?

Она внешне у вас работает, абсолютно одинаково, не считая того что у тебя чуть дольше...
Цитата(skyboy @  10.6.2006,  20:54 Найти цитируемый пост)
Выяснили?

Конечно, Аликс, набирает неправильно... smile 
Нужно набирать только русские гласные буквы, указанные в строке
Код

const glasnie=['А','а','Е','е','Ё','ё','И','и','О','о','У','у','Ы','ы','Э','э','Ю','ю','Я','я'];

А он скорее всего английские которые тут не указаны... smile

Добавлено @ 20:15 
Всмысле не только глассные, но для подсчёта количества, эти должны входить. 

Автор: svarogik 10.6.2006, 20:38
возьми английзкую фразу и там подсчитай, я те так скажу, русские буквы в английзком языке очень зыбкая и нестандартная почва, зависит от того где какие модули стоят, у меня например паскаль вообще кириллицу не включает, так я ниче на транслите все пишу, 

Автор: Zero 10.6.2006, 20:58
У кого нет нормального паскаля заходите http://forum.vingrad.ru/index.php?showtopic=41311, и берите что нужно... 

Автор: profispb 10.6.2006, 22:04
Zero, Дело в том, что по всем правилам синтаксиса begin и end надо ставить, их опускают если оператор, выражение написаны в одну строку, иначе программа не понимает и получается так, что счетчик сложения срабатывает после выполнения цикла. 

Автор: skyboy 10.6.2006, 22:10
profispb, а какой у тебя компилятор? 
Проверил "яблоко раздора" в Borland Pascal 7.0, Borland Delphi 7 и FreePascal. Везде работает так, как если begin-end не волнуют компилятор... 

Автор: volvo877 10.6.2006, 22:28
Цитата(profispb @  10.6.2006,  22:04 Найти цитируемый пост)
по всем правилам синтаксиса begin и end надо ставить, их опускают если оператор, выражение написаны в одну строку
"А мужики-то не знают..." (С)


profispb, по всем правилам синтаксиса Begin End (операторные скобки) ставится ТОЛЬКО тогда, когда нужно объединить несколько простых операторов в один составной... Так как в приведенном фрагменте
Цитата

for i:=1 to length(s) do
  if s[i] in glasnie
    then
      count:= 
        count + 1;
даже сейчас все выделенное красным цветом является ОДНИМ оператором (я могу разместить это и на семи строках, это ничего не поменяет. Количество ОПЕРАТОРОВ не увеличится), то Begin ... End здесь просто не нужны... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)