Помощь в учёбе, очень быстро...
Работаем вместе до победы

Примеры решения задач с данными строкового типа

РефератПомощь в написанииУзнать стоимостьмоей работы

Glasn: symbol:=; stroka: string; {Обрабатываемая строка) stroka_temp:string; {Переменная для хранения временных строковых данных) si, s2: string; {Искомая и заменяемая строки) count_glasn, count_word:integer; {Количество гласных букв и слов соответственно) i, j: integer; {Счетчики циклов) l_sl: integer; {Длина строки si) max_letter: integer; {Максимальное количество букв). Буквы палиндрома должны… Читать ещё >

Примеры решения задач с данными строкового типа (реферат, курсовая, диплом, контрольная)

Пример 7.1.

У пользователя запрашивается текстовая строка, содержащая только буквы кириллического и латинского алфавитов, символ пробела и знаки препинания.

  • 1. Подсчитать количество гласных букв в строке.
  • 2. Подсчитать количество слов в строке.
  • 3. Сделать первую букву каждого слова прописной.
  • 4. Выяснить, является ли строка палиндромом (одинаково читается как справа налево, так и слева направо).
  • 5. Запросить два слова. Все вхождения первого слова в строке заменить вторым.
  • 6. Выяснить, какая из букв встречается в строке наибольшее число раз. Если таких букв несколько, вывести каждую из них. При подсчете не различать строчные и прописные буквы.

Решение

Пусть вводимая пользователем строка имеет идентификатор stroka. Строковые переменные — это, прежде всего, совокупность символов типа char, поэтому в заголовке программы логично определить пользовательский тип данных symbol в виде множества элементов типа char. В разделе описания переменных определены две переменные типа symbol. Первая принимает значения всех возможных гласных русского и английского языков (переменная glasn), вторая — значения всевозможных букв этих языков (переменная letter).

Общий заголовок и раздел описаний программы для решения всех поставленных задач приведен в листинге 7.3. Пояснения необходимости конкретных переменных приводятся при решении той или иной задачи.

Листинг 7.3

Program string_example;

Type

symbol=set of char;

Var

glasn:symbol:=['a','o','y','ы','э',' я','ё', letter: symbol:=['a,.'H'/'A'.'n,/,a'.,z,/'A,.'Z']; stroka: string; {Обрабатываемая строка) stroka_temp:string; {Переменная для хранения временных строковых данных) si, s2: string; {Искомая и заменяемая строки) count_glasn, count_word:integer; {Количество гласных букв и слов соответственно) i, j: integer; {Счетчики циклов) l_sl: integer; {Длина строки si) max_letter: integer; {Максимальное количество букв).

palin:boolean; {Переменная для проверки, является ли фраза палиндромом) eng: array['а'.'z'] of integer; {Массив латинских букв).

rus: array['а'.'я'] of integer; {Массив кириллических букв) tmp_ch:char; {Переменная для хранения временного символа) Для хранения количества гласных букв введена целочисленная переменная count_glasn. Программный код запроса строковой переменной st г ока и решения первой задачи приведен в листинге 7.4.

Листинг 7.4

write ('Введите текстовую строку: ');

Readln (stroka);

count_glasn:=0; {Задание начального значения количества гласных букв} for i:=l to length (stroka) do

if stroka[i] in glasn then inc (count_glasn); {Если символ с номером i является гласной буквой, то счетчик гласных увеличить на 1} writeln ('Количество гласных: ', count_glasn);

Для хранения количества слов используется целочисленная переменная count_word. Программный код и пояснения решения второй задачи приведены в листинге 7.5.

Листинг 7.5

count_word:=0; {Задание начального значения количества слов} for i:=2 to length (stroka) do

if not (stroka[i] in letter) and (stroka[i-1] in letter) then inc (count_word); {Если символ с номером i не является буквой, а предшествующий ему символ является, то счетчик слов увеличить на 1} if stroka[length (stroka)] in letter then inc (count_word); {В предыдущем цикле не учитывался случай, когда строка заканчивается не буквой. Здесь производится проверка этого случая} writeln ('Число слов: ', count_word);

Программный код решения третьей задачи с пояснениями приведен в листинге 7.6.

Листинг 7.6

for i:=2 to length (stroka) do

if (stroka[i] in letter) and not(stroka[i-1] in letter) then stroka[i]:uppercase (stroka[i]); {Если символ с номером i является буквой, а предшествующий ему символ не является, то изменить регистр символа с индексом i на верхний}.

if stroka[l] in letter then

stroka[1]: =uppercase (stroka[1 ]); {В предыдущем цикле не учитывался случай, когда строка начинается буквой. Здесь производится проверка этого случая} writeln ('Измененная строка: ', stroka);

Для определения, является ли введенная строка 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.

Листинг 7.7

stroka_temp:=stroka; (Инициализация значения вспомогательной переменной}.

i: =1; {Инициализация значения счетчика индексов переменной stroka}.

while i<=length (stroka_temp) do {Пока значение счетчика не превысит длину stroka}.

begin

if not (stroka_temp[i] in letter) then

delete (stroka_temp, i,1) else inc (i);{Ecnn символ с индексом i не является буквой, то удалить его из строки stroka_temp}.

end;

palin:=true; {Предполагается, что строка является палиндромом}.

for i:=l to trunc (length (stroka_temp) div 2) do if stroka_temp[i] stroka_temp.

[length (stroka_temp)-i+1] then palin:=false; {Если имеется хотя бы одна пара неодинаковых символов, изменить значение palin на false}.

if palin=true then writeln ('Строка является палиндромом!') else writeln ('Строка не является палиндромом!');

Для решения пятой задачи введена переменная l_sl, содержащая длину строки si («что заменять»). Это было сделано для уменьшения объема программного кода. Программный код и пояснения решения пятой задачи приведены в листинге 7.8.

Листинг 7.8

write ('Что заменять: '); Readln (sl);

write ('На что заменять: '); Readln (s2);

l_sl:^length (si); {Для уменьшения объема программы}.

for i:=l to length (stroka)-l_sl+l do {Если размер слова, которое надо заменить, равен i_sl, то нет смысла пытаться искать это слово после length (stroka)-l_sl+l символа}.

if copy (stroka, i, l_sl)=sl then {Если подстрока строки stroka совпадает c si} begin

delete (stroka, i, l_sl); {Удалить искомую подстроку}.

insert (s2,stroka, i); {Вставить новую подстроку, начиная с позиции i).

end;

writeln ('Строка после замены: ', stroka);

Для решения шестой задачи определена переменная tmp_char символьного типа для хранения символов только в нижнем регистре (по условию задачи регистр не важен), а также два массива:

  • 1) массив rus, индексами которого являются строчные символы русского алфавита;
  • 2) массив eng, индексами которого являются строчные символы английского алфавита.

В программе используется переменная max_letter, хранящая количество повторений самого частого символа в строке.

Программный код и пояснения решения шестой задачи приведены в листинге 7.9.

Листинг 7.9

for i:=l to length (stroka) do begin

tmp_ch:^lowercase (stroka[i]); {Преобразование символа в нижний регистр} if tmp_ch in ['а'.'я'] then inc (rus[tmp_ch]); {Если какая-то буква встречается в stroka, то значение соответствующего элемента массива увеличивается на 1}.

if tmp_ch in ['a '.. ' z ' ] then inc (eng[tmp_ch]); {Если какая-то буква встречается в stroka, то значение соответствующего элемента массива увеличивается на 1}.

end;

max_letter:=0; {Предполагается, что максимальное число вхождений самого частого символа равно 0}.

foreach tmp_ch in ['а'.'я'] do

if rus[tmp_ch]>max_letter then

max_letter:=rus[tmp_chj; {Если количество вхождения символа tmp_ch равно максимальному количеству вхождений, то вывести этот символ}.

foreach tmp_ch in [1 а 1.'z'] do

if eng[tmp_ch]>max_letter then

max_letter:=eng[tmp_chl; {Если количество вхождения символа tmp_ch равно максимальному количеству вхождений, то вывести этот символ}.

{Вывод на экран самих букв и количества раз, которые они встречаются}.

writeln ('Максимальное число раз в строке встречаются буквы:');

foreach tmp_ch in ['а'.'я'] do

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

— ', eng[tmp_ch],1 раз');

Показать весь текст
Заполнить форму текущей работой