Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 12:58   #1
Backward
 
Регистрация: 11.05.2013
Сообщений: 5
Вопрос Задача: Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных

Здравствуйте. Есть задача и её решение. Но мне хотелось бы узнать. Можно ли её выполнить без констант? Допустим с помощью массивов или просто строкового типа данных. Если можно, то как?

Задача:
Цитата:
Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных.
Код программы:
Код:
program example1; 
const 
  glasn=['а','е','и','о','у','ы','э','ю','я']; 
   soglas=['б','в','г','д','ж','з','й','л','м',
         'н','р','к','п','с','т','ф','х','ц','ч','ш','щ'];
 var
   st: string; 
     g,s,i:integer; 
begin 
  write('Введите строку> '); readln(st); 
    g:=0; s:=0; 
      for i:= 1 to length(st) do 
        if st[i] in glasn then inc(g) else if st[i] in soglas then inc(s);
        if g> s then writeln('Гласных больше')
    else if g< s then writeln('Согласных больше')
  else writeln('Согласных и гласных букв поровну');
 readln; 
end.
Язык: Free Pascal
Backward вне форума Ответить с цитированием
Старый 11.05.2013, 13:05   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Можно например все гласные запихнуть в одну строку. Затем своей функцией в цикле проверять присутствует ли символ в строке с гласными. Ну и с согласными аналогично.
Если же понимать Ваш вопрос:
Цитата:
Можно ли её выполнить без констант?
буквально, то да, можно Ваши множества просто объявить переменными, а не константами
И еще: я с русским не дружу, потому если буквы бывают только гласными и согласными, то
Код:
if st[i] in glasn then inc(g) else if st[i] in soglas then inc(s);
какое-то усложнение, достаточн
Код:
if st[i] in glasn then inc(g) else  inc(s);
Соответственно второе множество нах. Но повторюсь - при условии что все буквы делятся на гласные и согласные.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 11.05.2013 в 13:09.
Utkin вне форума Ответить с цитированием
Старый 11.05.2013, 14:14   #3
Backward
 
Регистрация: 11.05.2013
Сообщений: 5
По умолчанию

Utkin, а какой функцией можно сравнить со строкой?

Вот то, что у меня получилось. Но он постоянно в результате выдаёт, что согласных больше.


Последний раз редактировалось Stilet; 11.05.2013 в 17:46.
Backward вне форума Ответить с цитированием
Старый 11.05.2013, 17:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
for i:=1 to Length(st) do
 if st[i] in glasn then inc(g) else inc(s);
pos() убери.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 18:07   #5
Backward
 
Регистрация: 11.05.2013
Сообщений: 5
По умолчанию

Stilet, но ведь я хочу без констант. А in - это к константам относится вроде.
Backward вне форума Ответить с цитированием
Старый 11.05.2013, 18:47   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
if st[i] in ['а','е','и','о','у','ы','э','ю','я']
Подходит?
Учти - без констант ты никак не обойдешся ни в одной программе
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 19:40   #7
Backward
 
Регистрация: 11.05.2013
Сообщений: 5
По умолчанию

А возможно ли тут использовать массив?

И еще, вот текст программы, которой у меня получилась. Но она работает не корректно. Кто знает, в чём дело?

Код:
program text;
var st:string;
    g,s,i:integer;
begin;
        write('Введите строку: '); readln(st);
        for i:=1 to length(st) do
                if st[i] in ['а','е','ё','и','о','у','ы','э','ю','я'] then
                        inc(g)
                else
                        inc(s);
        if g>s then
                writeln('Гласных больше')
        else
                if s>g then
                        writeln('Согласных больше')
                else
                        writeln('Гласных и согласных равное количество');
        readln
end.

Последний раз редактировалось Stilet; 11.05.2013 в 19:53.
Backward вне форума Ответить с цитированием
Старый 11.05.2013, 19:49   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да. Возможно. Но его наполнение тоже будет из констант.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 19:55   #9
Backward
 
Регистрация: 11.05.2013
Сообщений: 5
По умолчанию

А можно подробнее? Я что то не понимаю, как это
Backward вне форума Ответить с цитированием
Старый 11.05.2013, 20:05   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
program text;
Ка бы чего не было от такого названия.

А так косяк идет из-за того что Вы не инициализируете переменные g и s


Цитата:
без констант ты никак не обойдешся ни в одной программе
Как это?
Код:
begin
    WriteLn (Random)
end.
Не ужели в данном коде есть константы?

Последний раз редактировалось Poma][a; 11.05.2013 в 20:08.
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распечатать самое короткое симметричное слово(первое по порядку) содержащее больше гласных букв чем согласных Anton94.by Помощь студентам 0 19.12.2011 19:34
Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных. Михей91 Общие вопросы C/C++ 1 07.01.2010 16:57