Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Работа со строками

.doc
Скачиваний:
10
Добавлен:
01.05.2014
Размер:
60.42 Кб
Скачать

Министерство образования Российской Федерации

Санкт–Петербургский Государственный

Электротехнический Университет

Кафедра МО ЭВМ

Дисциплина: Программирование

Отчет по лабораторной работе №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

Внимание, выходной массив пуст!