Во всех словах заменить первую букву на последнюю, а последнюю на первую. Как считывать каждое слово? - Turbo Pascal

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

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

Ребята, написал программу, выполняла свое предназначение, но меня преподаватель попросил записать в строку 2 слова, и программа считывает первую букву первого и последнюю второго, таким образом меняются символы в конце и начала строки, как считывать каждое слово и менять в нем первые и последние буквы местами, вот моя программа, она работает корректно только с одним словом в строке.
Листинг программы
  1. Program Files;
  2. Uses crt;
  3. Procedure Input(Var S: string; Var f1: text);
  4. Var i:shortint;
  5. n:integer;
  6. M:string;
  7. begin
  8. Write('Enter the file name: ');
  9. Readln(M);
  10. Assign(f1, M);
  11. {$I-}
  12. Rewrite(f1);
  13. {$I+}
  14. if ioresult <> 0 then
  15. WriteLn('File not found')
  16. else
  17. begin
  18. WriteLn('Found file');
  19. Rewrite(f1);
  20. Write('Enter number the strings (0<Strings<=10): ');
  21. Readln(n);
  22. Repeat
  23. if (n>10) or (n<1) then
  24. begin
  25. write('Incorrect, retype please: ');
  26. readln(n);
  27. end;
  28. Until (n>=1) and (n<=10);
  29. for i:=1 to n do
  30. begin
  31. Write('Enter string #[',i,']: ');
  32. readln(s);
  33. writeln(f1,s);
  34. end;
  35. close(f1);
  36. writeln;
  37. end;
  38. end;
  39. Procedure ReplaceLetters(Var s:string; Var f1,f2: text);
  40. Var i:shortint;
  41. c:char;
  42. begin
  43. Reset(f1);
  44. Assign(f2, 'file2.txt');
  45. Rewrite(f2);
  46. writeln('File1: ');
  47. while not eof(f1) do
  48. begin
  49. readln(f1,s);
  50. writeln(s);
  51. c:=s[1];
  52. s[1]:=s[Length(s)];
  53. s[Length(s)]:=c;
  54. writeln(f2,s);
  55. end;
  56. Close(f1);
  57. Close(f2);
  58. end;
  59. Procedure Output(Var S: string; Var f2: text);
  60. begin
  61. Writeln;
  62. Writeln('File2: ');
  63. Reset(f2);
  64. While not eof(f2) do
  65. begin
  66. begin
  67. readln(f2,s);
  68. Writeln(s);
  69. end;
  70. end;
  71. end;
  72. Var File1,File2: text;
  73. Lines: string;
  74. Begin
  75. clrscr;
  76. writeln('Program to replace the first and last letters in words to each other');
  77. Input(Lines,File1);
  78. ReplaceLetters(Lines,File1,File2);
  79. Output(Lines,File2);
  80. write('The program is completed, press any key to exit . . .');
  81. readkey;
  82. End.

Решение задачи: «Во всех словах заменить первую букву на последнюю, а последнюю на первую. Как считывать каждое слово?»

textual
Листинг программы
  1. program ReverseFirstAndLastCharsInWord;
  2.  
  3. type
  4.   TSetOfChar = set of char;
  5. const
  6.   Delimiters: TSetOfChar = [' ', ',', '.'];
  7.  
  8.   function GetNextWordIndexes(const s: string;
  9.   var StartIndex, FinishIndex: integer): boolean;
  10.   begin
  11.     if (StartIndex < 1) then
  12.     begin
  13.       StartIndex  := Length(s) + 1;
  14.       FinishIndex := Length(s) + 1;
  15.       GetNextWordIndexes := False;
  16.       exit;
  17.     end;
  18.     while StartIndex <= Length(s) do
  19.       if not (s[StartIndex] in Delimiters) then
  20.         break
  21.       else
  22.         Inc(StartIndex);
  23.     if StartIndex > Length(s) then
  24.     begin
  25.       StartIndex  := Length(s) + 1;
  26.       FinishIndex := Length(s) + 1;
  27.       GetNextWordIndexes := False;
  28.       exit;
  29.     end;
  30.     FinishIndex := StartIndex;
  31.     while FinishIndex <= Length(s) do
  32.       if (s[FinishIndex] in Delimiters) then
  33.         break
  34.       else
  35.         Inc(FinishIndex);
  36.     Dec(FinishIndex);
  37.     GetNextWordIndexes := True;
  38.   end;
  39.  
  40. var
  41.   s: string;
  42.   IndxStart, IndxFinish: integer;
  43.   TempChar: char;
  44. begin
  45.   s := 'qwe ,rrr jfjf 123 -54 ';
  46.   writeln(s);
  47.   IndxStart := 1;
  48.   while GetNextWordIndexes(s, IndxStart, IndxFinish) do
  49.   begin
  50.     TempChar  := s[IndxStart];
  51.     s[IndxStart] := s[IndxFinish];
  52.     s[IndxFinish] := TempChar;
  53.     IndxStart := IndxFinish + 1;
  54.   end;
  55.   writeln(s);
  56. end.

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

Этот код написан на Turbo Pascal и решает задачу, которая заключается в том, чтобы заменить первую букву каждого слова на последнюю, а последнюю букву на первую. Вот как он работает:

  1. Создается тип TSetOfChar, который представляет собой множество символов. В данном случае, это просто набор пробелов, запятых и точек.
  2. Функция GetNextWordIndexes считывает следующее слово в строке. Она принимает строку s, начальный индекс StartIndex и конечный индекс FinishIndex в качестве параметров. Если StartIndex меньше 1, то функция устанавливает StartIndex равным длине строки s плюс 1 и возвращает False. Затем она проверяет каждый символ в строке от StartIndex до FinishIndex, и если символ не является пробелом, запятой или точкой, то она увеличивает StartIndex и возвращает True. Если StartIndex больше FinishIndex, то функция устанавливает StartIndex и FinishIndex равными Length(s) плюс 1 и возвращает False.
  3. Переменные s, IndxStart и IndxFinish инициализируются перед первым вызовом функции GetNextWordIndexes.
  4. В цикле, функция GetNextWordIndexes считывает следующее слово, затем меняет местами первую и последнюю буквы этого слова, сохраняя результат в переменной TempChar. Затем она устанавливает IndxStart равным IndxFinish плюс 1.
  5. После завершения цикла, вывод s будет содержать все слова, в которых первая буква была заменена на последнюю, а последняя буква на первую.

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


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

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

13   голосов , оценка 3.923 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы