Posted by obzor under Delphi, Pascal
При помощи процедур написать программу. При вводе слова с клавиатуры считать количество гласных букв (английских) в нём.
Такие задачи лучше решать с использованием множеств:
Недавно мы прошли строковый тип данных в Паскаль. Сегодня предлагаю исходник паскаль, который подсчитывает сколько гласных латинских букв в строке. Данная задача довольно часто встречается при изучении языка программирования Pascal, а также Delphi. Данная программа использует цикл с параметром For, т.к. известна длина строки (её можно узнать с помощью функции length) .Также используется условный оператор выбора Case of. Можно использовать и условный оператор IF, но Case использовать рациональнее.
Исходный код программы Pascal:
К сожалению, пояснительных комментариев нет, но код программы довольно простой, поэтому разобраться не сложно.
У пользователя запрашивается текстовая строка, содержащая только буквы кириллического и латинского алфавитов, символ пробела и знаки препинания.
- 1. Подсчитать количество гласных букв в строке.
- 2. Подсчитать количество слов в строке.
- 3. Сделать первую букву каждого слова прописной.
- 4. Выяснить, является ли строка палиндромом (одинаково читается как справа налево, так и слева направо).
- 5. Запросить два слова. Все вхождения первого слова в строке заменить вторым.
- 6. Выяснить, какая из букв встречается в строке наибольшее число раз. Если таких букв несколько, вывести каждую из них. При подсчете не различать строчные и прописные буквы.
Пусть вводимая пользователем строка имеет идентификатор stroka. Строковые переменные — это, прежде всего, совокупность символов типа char, поэтому в заголовке программы логично определить пользовательский тип данных symbol в виде множества элементов типа char. В разделе описания переменных определены две переменные типа symbol. Первая принимает значения всех возможных гласных русского и английского языков (переменная glasn), вторая — значения всевозможных букв этих языков (переменная letter).
Общий заголовок и раздел описаний программы для решения всех поставленных задач приведен в листинге 7.3. Пояснения необходимости конкретных переменных приводятся при решении той или иной задачи.
symbol=set of char;
Для хранения количества гласных букв введена целочисленная переменная count_glasn. Программный код запроса строковой переменной st г ока и решения первой задачи приведен в листинге 7.4.
write(‘Введите текстовую строку: ‘);
Для хранения количества слов используется целочисленная переменная count_word. Программный код и пояснения решения второй задачи приведены в листинге 7.5.
Программный код решения третьей задачи с пояснениями приведен в листинге 7.6.
if (stroka[i] in letter) and not(stroka[i-1] in letter) then stroka[i]:^uppercase(stroka[i]); <Если символ с номером i является буквой, а предшествующий ему символ не является, то изменить регистр символа с индексом i на верхний>
Для определения, является ли введенная строка stroka палиндромом, введена вспомогательная переменная stroka_temp, которая в итоге содержит только тс символы, которые являются буквами (не буквы удаляются процедурой delete). Переменная palin содержит булевское значение: true, если stroka является палиндромом, и false — в противном случае.
Буквы палиндрома должны быть симметричны относительно «центра» строки. Если количество букв в stroka четное, то сравниваются символы и индексы 1 и length (stroka), 2 и length (stroka)-1 и т.д. до length (stroka_temp) div 2. Если количество букв в stroka нечетное, то сравниваются символы до пары length (stroka_temp) div 2 и (length(stroka_temp) div 2))+2.
Программный код и пояснения решения четвертой задачи приведены в листинге 7.7.
stroka_temp:=stroka; (Инициализация значения вспомогательной переменной>
while i stroka_temp
[length(stroka_temp)-i+1] then palin:=false;if palin=true then writeln(‘Строка является палиндромом!’) else writeln(‘Строка не является палиндромом!’);
Для решения пятой задачи введена переменная l_sl, содержащая длину строки si («что заменять»). Это было сделано для уменьшения объема программного кода. Программный код и пояснения решения пятой задачи приведены в листинге 7.8.
write(‘Что заменять: ‘); Readln(sl);
write(‘На что заменять: ‘); Readln(s2);
for i:=l to length(stroka)-l_sl+l do
writeln(‘Строка после замены: ‘,stroka);
Для решения шестой задачи определена переменная tmp_char символьного типа для хранения символов только в нижнем регистре (по условию задачи регистр не важен), а также два массива:
- 1) массив rus, индексами которого являются строчные символы русского алфавита;
- 2) массив eng, индексами которого являются строчные символы английского алфавита.
В программе используется переменная max_letter, хранящая количество повторений самого частого символа в строке.
Программный код и пояснения решения шестой задачи приведены в листинге 7.9.
for i:=l to length(stroka) do begin
if tmp_ch in [‘a ’ . . ‘ z ‘ ] then inc(eng[tmp_ch]) ;
if rus[tmp_ch]>max_letter then
foreach tmp_ch in [ 1 а 1 ..’z’] do
if eng[tmp_ch]>max_letter then
writeln(‘Максимальное число раз в строке встречаются буквы:’);
if rus[tmp_ch]=max_letter then writeln(tmp_ch, 1
— ‘,rus[tmp_ch], 1 раз’); foreach tmp_ch in [ 1 a 1 ..’z’] do
if eng[tmp_ch]=max_letter then writeln(tmp_ch, 1