В каждом 5-символьном слове переставить литеры так, чтобы одинаковые находились рядом (например, сосна – ссона) - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Прошу помощи с решением этой задачки. Задан текст, состоящий из слов, записанных через пробелы или запятые. Длина текста не больше 255 символов. В тексте могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел. Необходимо введенный текст вывести на экран до и после его преобразования. В каждом 5-символьном слове переставить литеры так, чтобы одинаковые находились рядом (например, сосна – ссона). Найти первое цифровое слово и увеличить его значение на 23. Нашел на форуме похожую задачу, только с другим заданием. Подскажите пожалуйста что подредактировать.

Решение задачи: «В каждом 5-символьном слове переставить литеры так, чтобы одинаковые находились рядом (например, сосна – ссона)»

textual
Листинг программы
uses crt;
const rz=[' ',','];{символы, разделители слов, можно добавить}
var s,s1,s2:string;
    n,i,j,k,p,i1:integer;
    c:char;
begin
clrscr;
writeln('Введите текст из слов, в том числе 5-символьных и чисел,');
writeln('разделенных пробелами и запятыми:');
readln(s);
s2:='';{новая строка}
i:=1; {сначала}
i1:=0;{нет пока чисел}
while i<=length(s) do
if not(s[i] in rz)and ((s[i-1] in rz)or(i=1)) then{если не разделитель
                         и первый или перед ним разделитель, то начало слова*}
 begin
  k:=i;
  s1:='';
  while not(s[k] in rz)and(k<=length(s))do {пока не разделитель и не конец строки}
   begin
    s1:=s1+s[k];{составляем очередное слово}
    k:=k+1;
   end;
  val(s1,n,k);{проверяем на число}
  if k=0 then{если да}
    begin
     i1:=i1+1;{считаем}
     if i1=1 then {если первое}
      begin
       n:=n+23;
       str(n,s1);{преобразуем строку}
      end;
    end
  else if length(s1)=5 then{если не число и 5 симолов}
   begin
    k:=1;
    while k<5 do
     begin
      c:=s1[k];{смотрим все симолы с первого до предпоследнего}
      p:=0;{количество одинаковых}
      for j:=5 downto k do{идем с конца}
      if s1[j]=s1[k] then{если такой же}
       begin
        delete(s1,j,1);{удаляем}
        p:=p+1;{считаем}
       end;
      for j:=1 to p do
      insert(c,s1,k);{вставляем их на место проверяемого}
      k:=k+p+1;{к следующему символу}
     end;
   end;
  s2:=s2+s1; {пишем новую строку}
  i:=i+length(s1);{перешагиваем через слово}
 end
else
 begin
  s2:=s2+s[i];
  i:=i+1;{пропускаем разделители}
 end;
write(s2);
readln
end.

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

  1. В каждой 5-символьном слове переставить литеры так, чтобы одинаковые находились рядом.
  2. Объявить переменные: s, s1, s2: string; n, i, j, k, p, i1: integer; c: char;
  3. Вывести сообщение для ввода текста.
  4. Прочитать текст из слов, в том числе 5-символьных и чисел, разделенных пробелами и запятыми.
  5. Инициализировать переменные: i := 1; i1 := 0; c := ''; s1 := ''; s2 := ''; n := 0; p := 0;
  6. Пока i <= длине(s)...
  7. Если символ в текущей позиции не является разделителем и не является первым символом или последним символом слова, то начинаем новое слово.
  8. Для нового слова: пока символ в текущей позиции не является разделителем и длина оставшейся части слова равна 5,...
  9. Если символ в текущей позиции равен символу предыдущего слова, то удалить этот символ из нового слова и увеличить счетчик одинаковых символов на 1.
  10. Если символ в текущей позиции не равен символу предыдущего слова, то вставить символ перед текущим символом в новое слово.
  11. Увеличить значение счетчика i1 на 1, если новое слово состоит только из чисел.
  12. Если новое слово состоит из чисел, то преобразовать его в строку и добавить к предыдущему слову.
  13. Увеличить значение счетчика i на 1, если новое слово состоит из чисел и имеет длину 5.
  14. Если новое слово состоит из чисел и имеет длину более 5, то пропустить его и перейти к следующему символу.
  15. Добавить новое слово к предыдущему слову и перейти к следующей позиции.
  16. Повторять шаги 7-15 до тех пор, пока не будет обработано все слова.
  17. Записать результат в переменную s2.
  18. Вывести сообщение с результатом.
  19. Ожидать ввода.
  20. Завершить работу программы.

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


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

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

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