Используя процедуры, выделить в строке слова и вывести их потом в заданном формате - Turbo Pascal

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

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

Преобразовать строку, используя две подпрограммы: первая выделяет в строке слово, вторая выводить слово на экран в формате: 1_слово1 1_2_слово2 1_2_3_слово3 и так далее. Слова в строке разделены знаками препинания и пробелами, которые могут стоять как по одиночке, так и несколько подряд Программа написана, компиляция проходит успешно, однако она просто не работает. Предложение ввода названия файла идет, а после этого ничего. Ошибку найти сама не могу, возможно, кто-то сможет помочь.
Листинг программы
  1. program LB6;
  2. const del=[' ',',','.','!','?','-'];
  3. var s,w,name,prob,n1:string;
  4. f:text;
  5. words:array[1..50] of string; {массив для записи слов}
  6. l,i,n,k,p,code:integer; {l-длина строки, k-количество слов в строке}
  7. procedure vydelenie(var s:string;
  8. l:integer);
  9. const del=[' ',',','.','!','?','-'];
  10. var w:string;
  11. i,k:integer;
  12. words:array[1..50] of string;
  13. {процедура выделяет в строке слова и записывает их в массив}
  14. begin
  15. k:=0;
  16. w:='';
  17. for i:=1 to l do begin
  18. if not (s[i] in del) then w:=w+s[i];
  19. if (not (s[i-1] in del) and (s[i] in del) or (i=l)) then begin
  20. k:=k+1;
  21. words[k]:=w;
  22. w:='';
  23. end;
  24. end;
  25. end;
  26. procedure format(var w:string;
  27. words:array of string;
  28. n,k:integer);
  29. var i,code:integer;
  30. prob,n1:string;
  31. {prob-промежуточное значение будущей выводимой строки,
  32. n1-число n в виде строковой переменной}
  33. begin
  34. for i:=1 to k do begin
  35. n:=1;
  36. while n<=i do begin
  37. str(n,n1);
  38. prob:=prob+n1+' ';
  39. val(n1,n,code);
  40. inc(n);
  41. end;
  42. prob:=prob+w;
  43. words[i]:=prob;
  44. end;
  45. end;
  46. begin
  47. p:=0;
  48. while p=0 do begin
  49. write('Введите название файла - ');
  50. readln(name);
  51. {$I-}
  52. assign(f, name);
  53. reset(f);
  54. {$I+}
  55. if IORESULT<>0 then writeln('Файл не существует.')
  56. else p:=1;
  57. end;
  58. while not Eof(f) do begin
  59. readln(f,s);
  60. l:=length(s);
  61. vydelenie(s,l);
  62. format(w,words,n,k);
  63. for i:=1 to k do
  64. writeln(words[i]);
  65. end;
  66. close(f);
  67. end.

Решение задачи: «Используя процедуры, выделить в строке слова и вывести их потом в заданном формате»

textual
Листинг программы
  1. program LB6;
  2. const
  3.   del=[' ',',','.','!','?','-'];
  4. type
  5.   starray=array[1..50] of string; {массив для записи слов}
  6. var
  7.   s,w,name,prob,n1:string;
  8.   f:text;
  9.   words:starray;
  10.   l,i,n,k,p,code:integer; {l-длина строки, k-количество слов в строке}
  11.  
  12. procedure vydelenie(s:string;l:integer;var k:integer);
  13. const
  14.   del=[' ',',','.','!','?','-'];
  15. var
  16.   w:string;
  17.   i:integer;
  18. {процедура выделяет в строке слова и записывает их в массив}
  19. begin
  20.   k:=0;
  21.   w:='';
  22.   for i:=1 to l do
  23.     begin
  24.       if not (s[i] in del) then
  25.         w:=w+s[i];
  26.       if (not (s[i-1] in del) and (s[i] in del) or (i=l)) then
  27.         begin
  28.           k:=k+1;
  29.           words[k]:=w;
  30.           w:='';
  31.         end;
  32.     end;
  33. end;
  34.  
  35. procedure format(var w:string; n,k:integer);
  36. var
  37.   i,code:integer;
  38.   prob,n1:string;
  39. {prob-промежуточное значение будущей выводимой строки,
  40. n1-число n в виде строковой переменной}
  41. begin
  42.   for i:=1 to k do
  43.     begin
  44.       n:=1;
  45.       while n<=i do
  46.         begin
  47.           str(n,n1);
  48.           prob:=prob+n1+' ';
  49.           val(n1,n,code);
  50.           inc(n);
  51.         end;
  52.       prob:=prob+w;
  53.       words[i]:=prob;
  54.     end;
  55. end;
  56.  
  57. begin
  58.   p:=0;
  59.   while p=0 do
  60.     begin
  61.       write('Введите название файла - ');
  62.       readln(name);
  63.       {$I-}
  64.       assign(f, name);
  65.       reset(f);
  66.       {$I+}
  67.       if IORESULT<>0 then
  68.         writeln('Файл не существует.')
  69.       else
  70.         p:=1;
  71.     end;
  72.   while not Eof(f) do
  73.     begin
  74.       readln(f,s);
  75.       l:=length(s);
  76.       vydelenie(s,l,k);
  77.  
  78.       format(s,k,k);
  79.       for i:=1 to k do
  80.         writeln(words[i]);
  81.  
  82.     end;
  83.   close(f);
  84.   readln;
  85. end.

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

  1. В программе используется константа del, которая содержит символы, которые не могут быть использованы в качестве слов.
  2. Тип starray представляет собой массив строк, который используется для хранения выделенных слов.
  3. Переменные s, w, name, prob и n1 используются для хранения входной строки, промежуточных значений и числа n.
  4. Процедура vydelenie выделяет слова из входной строки и сохраняет их в массиве words.
  5. Процедура format форматирует выделенные слова и сохраняет результат в переменной s.
  6. Вложенный цикл for используется для обработки каждого слова в строке.
  7. Функция IORESULT используется для проверки успешности операций ввода-вывода.
  8. Переменная p используется для контроля над циклом чтения файла.
  9. Цикл while используется для обработки каждой строки в файле до тех пор, пока не будет достигнут конец файла.
  10. Функция readln используется для чтения строки из файла.
  11. Переменная l используется для хранения длины входной строки.
  12. Процедура vydelenie использует цикл for для обработки каждого символа во входной строке.
  13. Функция str используется для преобразования числа в строку.
  14. Переменная code используется для хранения кода числа.
  15. Цикл while используется для обработки каждого слова в строке до тех пор, пока не будет достигнут конец строки.
  16. Функция val используется для преобразования строки в число.
  17. Переменная n1 используется для хранения числа n.
  18. Переменная k используется для хранения количества слов в строке.
  19. Цикл for используется для обработки каждого слова в строке.
  20. Выводится результат форматирования в виде отформатированной строки.

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


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

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

6   голосов , оценка 4.167 из 5

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

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

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