Работа со строками
.doc
Министерство образования Российской Федерации
Санкт–Петербургский Государственный
Электротехнический Университет
Кафедра МО ЭВМ
Дисциплина: Программирование
Отчет по лабораторной работе №3
Выполнил:
студент группы 3341, Худяков Я.Д.
Проверил:
Преподаватель Самойленко В. П.
Санкт-Петербург
2004
1) Задание
Задан массив строк длиной не более 30 знаков каждая. Строки не содержат пробелов. Сформировать массив строк, длина которых определяется значением дополнительного задаваемого параметра. Каждая строка в результирующем массиве должна содержать максимально возможное количество очередных строк исходного массива, разделённых по крайней мере одним пробелом. Если результирующая строка получается короче заданной длины, в неё следует по возможности равномерно вставить дополнительные пробелы между составляющими её исходными строками.
2) Постановка задачи
В задаче требуется сформировать массив из исходного, способом, описанном в задании. В ходе работы алгоритма реализации решения задачи будет строиться массив, согласно условию, причём на каждом шаге, т.е. при постороении очередной строки эта строка будет дополняться недостающими пробелами . Это реализовано с помощью процедуры form_mass. В этой процедуре в текущую новую строку «пристраиваются» текущие входные строки, пока это возможно. Если это невозможно(то есть какая-то входная строка длиннее максимальной выходной строки), то будет выведено сообщение об ошибке. Добавление в сформированную строку пробелов осуществляется при помощи процедуры ins_pr.
Спецификация функций и процедур:
Процедура |
Назначение |
Входные параметры |
Выходные параметры |
form_mass |
Формирование нового массива |
Входной массив |
Выходной массив, сторока с ошибкой |
ins_pr |
Расстановка в строке дополнительных пробелов |
Строка |
Новая строка с дополнительными пробелами |
3) Текст программы
Юнит:
unit mass;
interface
const
n=30;{макс длина строк входного массива}
k=5;{длина массива}
m=10;{макс длина строк выходного файла}
type
mystring=string[m];
mytypein=array[1..k] of string[n];
mytypeout=array[1..k] of mystring;
procedure form_mass(masin:mytypein; var masout:mytypeout; var er:string);
procedure ins_pr(var masoutstr:mystring);
implementation
var
{err:string;} {строка ошибки}
i,j:integer;
pr:string[1];{строка пробел}
procedure ins_pr(var masoutstr:mystring);
begin
pr:=' ';
for j:=1 to m do
begin
if (length(masoutstr)<m) and (masoutstr[j]=' ') then begin
insert(pr,masoutstr,j);
j:=j+1;
end;
end;
end;
{процедура формирования масива}
procedure form_mass(masin:mytypein; var masout:mytypeout; var er:string);
var
q,t,r:integer; {r=0 если массив удалось создать, =1 в противном случае}
begin
i:=1;{in}
pr:=' ';
r:=0;
j:=1;{out}
q:=0;
while (i<=k) and (j<=k) do
begin
t:=Length(masin[i]);
if (q+t<=m) then
begin
if (q<>0) then masout[j]:=masout[j]+' '+masin[i] else masout[j]:=masin[i];
q:=q+t+1;
i:=i+1;
end else begin
while (length(masout[j])<m) and (pos(pr,masout[j])<>0) do
begin
ins_pr(masout[j]);
end;
j:=j+1;
q:=0;
end;
end;
if (j>k) then begin
er:='Внимание, выходной массив пуст!';
writeln(er);
end;
end;
begin
end.
Сама программа:
uses crt, mass;
var
f1,f2:text;
err:string;
massin:mytypein;
massout:mytypeout;
i,j:integer;
Begin
clrscr;
assign(f1,'massiv.in'); reset(f1);
assign(f2,'massiv.out'); rewrite(f2);
for i:=1 to k do readln(f1,massin[i]);
form_mass(massin,massout,err);
i:=1;
if (length(err)<>0) then write(f2,err) else
begin
while (length(massout[i])<>0) do
begin
writeln(f2,massout[i]);
i:=i+1;
end;
end;
close(f1);
close(f2);
End.
4) Тестирование
Входные данные |
Выходные данные |
weee e f esfqwe eeqw |
weee e f esfqwe eeqw |
weee e f esffsdfdfqwe eeqw |
Внимание, выходной массив пуст! |
w e f ew qwe |
w e f ew qwe |
w e f e e |
w e f e e |
w e f e edfhgf |
w e f e edfhgf |
w e f e ehtrhtrdhnht |
Внимание, выходной массив пуст! |