Изменить регистр букв введенных слов - Pascal
Формулировка задачи:
Пользователь вводит с клавиатуры несколько слов с символами в разных регистрах, разделенных различными знаками препинанания. Преобразовать первую и последнюю букву каждого слова в верхний регистр, остальные- в нижний регистр. Вывести получившееся предложение на экран.
Решение задачи: «Изменить регистр букв введенных слов»
textual
Листинг программы
program pr1; const alphabetRu: string[66] = 'ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ'; var endChar: char; sentence: ansistring; i: integer; begin repeat repeat WriteLn('введите несколько слов, разделенные различными знаками препинания:'); ReadLn(sentence); until (sentence <> ''); if (Pos(sentence[1], alphabetRu) > 0) and (Pos(sentence[1], alphabetRu) < 34) then sentence[1] := alphabetRu[Pos(sentence[1], alphabetRu) + 33]; if (Pos(sentence[Length(sentence)], alphabetRu) > 0) and (Pos(sentence[Length(sentence)], alphabetRu) < 34) then sentence[Length(sentence)] := alphabetRu[Pos(sentence[Length(sentence)], alphabetRu) + 33]; for i := 2 to Length(sentence) - 1 do begin if (Pos(sentence[i + 1], alphabetRu) = 0) and (Pos(sentence[i], alphabetRu) > 0) and (Pos(sentence[i], alphabetRu) < 34) then sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) + 33]; if (Pos(sentence[i - 1], alphabetRu) = 0) and (Pos(sentence[i], alphabetRu) > 0) and (Pos(sentence[i], alphabetRu) < 34) then sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) + 33]; if (Pos(sentence[i + 1], alphabetRu) > 0) and (Pos(sentence[i - 1], alphabetRu) > 0) and (Pos(sentence[i], alphabetRu) > 33) then sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) - 33]; end; WriteLn(sentence); WriteLn('для продолжения введите любой символ и enter, для выхода- пробел и enter'); ReadLn(endChar); until (endChar = ' '); end.
Объяснение кода листинга программы
- const - определение константы alphabetRu, которая содержит все русские буквы в верхнем и нижнем регистре.
- var - определение переменных endChar, sentence и i.
- repeat - начало цикла, который будет повторяться до тех пор, пока пользователь не введет пробел.
- repeat - внутренний цикл, который будет повторяться до тех пор, пока пользователь вводит слова, разделенные различными знаками препинания.
- WriteLn('введите несколько слов, разделенные различными знаками препинания:'); - вывод сообщения для пользователя.
- ReadLn(sentence) - чтение введенного пользователем предложения и сохранение его в переменную sentence.
- if (Pos(sentence[1], alphabetRu) > 0) and (Pos(sentence[1], alphabetRu) < 34) then - проверка первого символа введенного слова.
- sentence[1] := alphabetRu[Pos(sentence[1], alphabetRu) + 33]; - изменение регистра первого символа введенного слова.
- if (Pos(sentence[Length(sentence)], alphabetRu) > 0) and
- (Pos(sentence[Length(sentence)], alphabetRu) < 34) then - проверка последнего символа введенного слова.
- sentence[Length(sentence)] := alphabetRu[Pos(sentence[Length(sentence)], alphabetRu) + 33]; - изменение регистра последнего символа введенного слова.
- for i := 2 to Length(sentence) - 1 do - внутренний цикл, который будет повторяться для каждого символа введенного слова.
- begin - начало блока кода внутреннего цикла.
- if (Pos(sentence[i + 1], alphabetRu) = 0) and
- (Pos(sentence[i], alphabetRu) > 0) and (Pos(sentence[i], alphabetRu) < 34) then - проверка следующего символа введенного слова.
- sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) + 33]; - изменение регистра следующего символа введенного слова.
- if (Pos(sentence[i - 1], alphabetRu) = 0) and
- (Pos(sentence[i], alphabetRu) > 0) and (Pos(sentence[i], alphabetRu) < 34) then - проверка предыдущего символа введенного слова.
- sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) + 33]; - изменение регистра предыдущего символа введенного слова.
- if (Pos(sentence[i + 1], alphabetRu) > 0) and (Pos(sentence[i - 1], alphabetRu) > 0) and
- (Pos(sentence[i], alphabetRu) > 33) then - проверка двух предыдущих символов введенного слова.
- sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) - 33]; - изменение регистра двух предыдущих символов введенного слова.
- end; - конец блока кода внутреннего цикла.
- until (endChar = ' '); - проверка, что последний символ введенного слова равен пробелу.
- end. - конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д