Изменить регистр букв введенных слов - 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.

Объяснение кода листинга программы

  1. const - определение константы alphabetRu, которая содержит все русские буквы в верхнем и нижнем регистре.
  2. var - определение переменных endChar, sentence и i.
  3. repeat - начало цикла, который будет повторяться до тех пор, пока пользователь не введет пробел.
  4. repeat - внутренний цикл, который будет повторяться до тех пор, пока пользователь вводит слова, разделенные различными знаками препинания.
  5. WriteLn('введите несколько слов, разделенные различными знаками препинания:'); - вывод сообщения для пользователя.
  6. ReadLn(sentence) - чтение введенного пользователем предложения и сохранение его в переменную sentence.
  7. if (Pos(sentence[1], alphabetRu) > 0) and (Pos(sentence[1], alphabetRu) < 34) then - проверка первого символа введенного слова.
  8. sentence[1] := alphabetRu[Pos(sentence[1], alphabetRu) + 33]; - изменение регистра первого символа введенного слова.
  9. if (Pos(sentence[Length(sentence)], alphabetRu) > 0) and
  10. (Pos(sentence[Length(sentence)], alphabetRu) < 34) then - проверка последнего символа введенного слова.
  11. sentence[Length(sentence)] := alphabetRu[Pos(sentence[Length(sentence)], alphabetRu) + 33]; - изменение регистра последнего символа введенного слова.
  12. for i := 2 to Length(sentence) - 1 do - внутренний цикл, который будет повторяться для каждого символа введенного слова.
  13. begin - начало блока кода внутреннего цикла.
  14. if (Pos(sentence[i + 1], alphabetRu) = 0) and
  15. (Pos(sentence[i], alphabetRu) > 0) and (Pos(sentence[i], alphabetRu) < 34) then - проверка следующего символа введенного слова.
  16. sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) + 33]; - изменение регистра следующего символа введенного слова.
  17. if (Pos(sentence[i - 1], alphabetRu) = 0) and
  18. (Pos(sentence[i], alphabetRu) > 0) and (Pos(sentence[i], alphabetRu) < 34) then - проверка предыдущего символа введенного слова.
  19. sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) + 33]; - изменение регистра предыдущего символа введенного слова.
  20. if (Pos(sentence[i + 1], alphabetRu) > 0) and (Pos(sentence[i - 1], alphabetRu) > 0) and
  21. (Pos(sentence[i], alphabetRu) > 33) then - проверка двух предыдущих символов введенного слова.
  22. sentence[i] := alphabetRu[Pos(sentence[i], alphabetRu) - 33]; - изменение регистра двух предыдущих символов введенного слова.
  23. end; - конец блока кода внутреннего цикла.
  24. until (endChar = ' '); - проверка, что последний символ введенного слова равен пробелу.
  25. end. - конец программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы