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

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

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

Преобразовать строку, используя две подпрограммы: первая выделяет в строке слово, вторая выводить слово на экран в формате: 1_слово1 1_2_слово2 1_2_3_слово3 и так далее. Слова в строке разделены знаками препинания и пробелами, которые могут стоять как по одиночке, так и несколько подряд Программа написана, компиляция проходит успешно, однако она просто не работает. Предложение ввода названия файла идет, а после этого ничего. Ошибку найти сама не могу, возможно, кто-то сможет помочь.

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

textual
Листинг программы
program LB6;
const
  del=[' ',',','.','!','?','-'];
type
  starray=array[1..50] of string; {массив для записи слов}
var
  s,w,name,prob,n1:string;
  f:text;
  words:starray;
  l,i,n,k,p,code:integer; {l-длина строки, k-количество слов в строке}
 
procedure vydelenie(s:string;l:integer;var k:integer);
const
  del=[' ',',','.','!','?','-'];
var
  w:string;
  i:integer;
{процедура выделяет в строке слова и записывает их в массив}
begin
  k:=0;
  w:='';
  for i:=1 to l do
    begin
      if not (s[i] in del) then
        w:=w+s[i];
      if (not (s[i-1] in del) and (s[i] in del) or (i=l)) then
        begin
          k:=k+1;
          words[k]:=w;
          w:='';
        end;
    end;
end;
 
procedure format(var w:string; n,k:integer);
var
  i,code:integer;
  prob,n1:string;
{prob-промежуточное значение будущей выводимой строки,
n1-число n в виде строковой переменной}
begin
  for i:=1 to k do
    begin
      n:=1;
      while n<=i do
        begin
          str(n,n1);
          prob:=prob+n1+' ';
          val(n1,n,code);
          inc(n);
        end;
      prob:=prob+w;
      words[i]:=prob;
    end;
end;
 
begin
  p:=0;
  while p=0 do
    begin
      write('Введите название файла - ');
      readln(name);
      {$I-}
      assign(f, name);
      reset(f);
      {$I+}
      if IORESULT<>0 then
        writeln('Файл не существует.')
      else
        p:=1;
    end;
  while not Eof(f) do
    begin
      readln(f,s);
      l:=length(s);
      vydelenie(s,l,k);
 
      format(s,k,k);
      for i:=1 to k do
        writeln(words[i]);
 
    end;
  close(f);
  readln;
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
Похожие ответы