Используя процедуры, выделить в строке слова и вывести их потом в заданном формате - Turbo Pascal
Формулировка задачи:
Преобразовать строку, используя две подпрограммы: первая выделяет в строке слово, вторая выводить слово на экран в формате:
1_слово1
1_2_слово2
1_2_3_слово3 и так далее.
Слова в строке разделены знаками препинания и пробелами, которые могут стоять как по одиночке, так и несколько подряд
Программа написана, компиляция проходит успешно, однако она просто не работает.
Предложение ввода названия файла идет, а после этого ничего.
Ошибку найти сама не могу, возможно, кто-то сможет помочь.
Листинг программы
- program LB6;
- const del=[' ',',','.','!','?','-'];
- var s,w,name,prob,n1:string;
- f:text;
- words:array[1..50] of string; {массив для записи слов}
- l,i,n,k,p,code:integer; {l-длина строки, k-количество слов в строке}
- procedure vydelenie(var s:string;
- l:integer);
- const del=[' ',',','.','!','?','-'];
- var w:string;
- i,k:integer;
- words:array[1..50] of string;
- {процедура выделяет в строке слова и записывает их в массив}
- 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;
- words:array of 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);
- format(w,words,n,k);
- for i:=1 to k do
- writeln(words[i]);
- end;
- close(f);
- end.
Решение задачи: «Используя процедуры, выделить в строке слова и вывести их потом в заданном формате»
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.
Объяснение кода листинга программы
- В программе используется константа
del
, которая содержит символы, которые не могут быть использованы в качестве слов. - Тип
starray
представляет собой массив строк, который используется для хранения выделенных слов. - Переменные
s
,w
,name
,prob
иn1
используются для хранения входной строки, промежуточных значений и числаn
. - Процедура
vydelenie
выделяет слова из входной строки и сохраняет их в массивеwords
. - Процедура
format
форматирует выделенные слова и сохраняет результат в переменнойs
. - Вложенный цикл
for
используется для обработки каждого слова в строке. - Функция
IORESULT
используется для проверки успешности операций ввода-вывода. - Переменная
p
используется для контроля над циклом чтения файла. - Цикл
while
используется для обработки каждой строки в файле до тех пор, пока не будет достигнут конец файла. - Функция
readln
используется для чтения строки из файла. - Переменная
l
используется для хранения длины входной строки. - Процедура
vydelenie
использует циклfor
для обработки каждого символа во входной строке. - Функция
str
используется для преобразования числа в строку. - Переменная
code
используется для хранения кода числа. - Цикл
while
используется для обработки каждого слова в строке до тех пор, пока не будет достигнут конец строки. - Функция
val
используется для преобразования строки в число. - Переменная
n1
используется для хранения числаn
. - Переменная
k
используется для хранения количества слов в строке. - Цикл
for
используется для обработки каждого слова в строке. - Выводится результат форматирования в виде отформатированной строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д