Используя процедуры, выделить в строке слова и вывести их потом в заданном формате - 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.
Объяснение кода листинга программы
- В программе используется константа
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используется для обработки каждого слова в строке. - Выводится результат форматирования в виде отформатированной строки.