Пусть, например, имеются некоторые данные о заводах города, сведенные в следующий документ:
Наиме-нование завода | Основные сведения | Примечание | ||||
Зани-маемая площадь | Объем выпускаемой продукции | Количество обслуживающего персонала | ||||
по плану | фактически | с высшим образованием | со средним образованием | |||
АЗЛК | 484,9 | 484,9 | ||||
ВАЗ | 348,5 | 348,7 | ||||
ЗИЛ | 384,3 | 399,4 | ||||
ИЖ | 667,3 | 701,3 | ||||
ИТОГО |
Необходимо описать массив записей, содержащий данную информацию, произвести расчет и заполнить итоговую строку, а результат отпечатать.
Для решения данной задачи следует обеспечить ввод массива записей, эхо–печать введенных данных, накопления суммы по каждому полю записи для формирования итоговой строки таблицы и вывод полученного результата.
Схема алгоритма в общем виде представлена на рис. 6.1.
Начало |
Ввод n |
i = 1, n |
Ввод i – ой записи |
Вывод таблицы |
Обнуление сумм |
i = 1, n |
Вывод итоговой строки |
Конец |
Накопление сумм |
|
|
Рис. 6.1. Схема алгоритма обработки записей.
Текст программы будет иметь следующий вид:
{Цель: обработка массива записей }
{Переменные:Nmax - максимальное число записей }
{Summary-массив записей, plant-строка записи }
{name-наименование завода, information-основные сведения }
{area-площадь завода, production-объём продукции, plan- по плану }
{fact-фактически, person-обслуживающий персонал }
{superior-с высшим образованием, second-со средним образованием }
{note-примечание }
{n - вводимое число записей }
{i - номер текущей записи }
{k - параметр цикла, }
{s1, s2, s3, s4, s5 -суммы колонок. }
program Example;
const
Nmax=10;
type
plant= record
name:string[5];
information: record
area:integer;
production: record
plan:real;
fact:real
end;
person:record
superior:integer;
second:integer
end
end;
note:string[8]
end;
var
Summary:array [1..Nmax] of plant;
s1,s4,s5,i,k,n:integer;
s2,s3:real;
begin {Example}
writeln ('введите количество заводов <=10');
readln(n);
{ввод записей}
for i:=1 to n do
with Summary[i] do
begin
writeln('введите данные о',i,'-м заводе:');
write ('наименование');
readln (name);
with information do
begin
write('занимаемая площадь');
read(area);
with production do
begin
writeln ('производство продукции');
write('по плану');
read(plan);
write('фактически');
read(fact);
end;
with person do
begin
writeln ('численность персонала');
write('с высшим образованием:');
read(superior);
write('со средним образованием:');
readln(second)
end
end;
write ('примечание:');
readln(note);
end;
{вывод заголовка таблиц}
for k:=1 to 80 do
write('_');
writeln;
writeln('|','|':15,'основные сведения':33,'|':18,'|':13);
write('|','|':15);
for k:=1 to 50 do
write('_');
write('|','|':13);
writeln('|','Наименование |':15,'PL |':10,
'Объем продукции':18,'|':4,'Персонал':13,'|':6,'Примечание|':13);
write('|','|':15,'|':10);
for k:=1 to 40 do
write('_');
write('|','|':13);
writeln('|','|':15,'|':10,'по плану|':11,'факт.':7,'|':4,
|
|
'высшее |':9,'среднее|':10,'|':13);
for k:=1 to 80 do
write('_');
writeln;
{вывод строк таблиц}
for i:=1 to n do
with Summary[i] do
begin
writeln('|',name,' ':12-Length(name),'|':2,
information.area:8,'|':2,
information.production.plan:8:1,'|':2,
information.production.fact:9:1,'|':2,
information.person.superior:7,'|':2,
information.person.second:8,'|':2,
note,' ':12-Length(note),'|');
for k:=1 to 80 do
write('_');
writeln;
end;
{формирование и вывод итоговой строки}
s1:=0; s2:=0; s3:=0; s4:=0; s5:=0;
for i:=1 to n do
with Summary[i].information do
begin
s1:=s1+area;
s2:=s2+production.plan;
s3:=s3+production.fact;
s4:=s4+person.superior;
s5:=s5+person.second;
end;
with Summary[n+1] do
begin
name:='Итого';
information.area:=s1;
information.production.plan:=s2;
information.production.fact:=s3;
information.person.superior:=s4;
information.person.second:=s5;
writeln('|',name,' ':12-Length(name),'|':2,s1:8,'|':2,
s2:8:1,'|':2,s3:9:1,'|':2,s4:7,'|':2,s5:8,'|':2,'|':13);
end;
for k:=1 to 80 do
write('_');
writeln;
end.{example}
ТЕКСТОВЫЕ ФАЙЛЫ
Подготовка к работе
По указанной литературе и методическим указаниям к данной работе изучить порядок работы. Ответить на контрольные вопросы.
Контрольные вопросы
1. Что такое файл? Для каких целей используются файлы?
2. Каковы требования к именам файлов?
3. Назовите общие и отличительные черты текстовых, типизированных и нетипизированных файлов.
4. Зачем используется специальная файловая переменная? Как устанавливается соответствие файловой переменной файлу во внешней памяти?
5. Что общего у процедуры Reset и Rewrite и чем они отличаются?
6. Зачем применяется процедура Close?
7. Для каких целей используется специальная функция IOresult? Каковы условия её применения? Назначение директивы компилятора {$I+},{$I-}.
8. В чём заключается специфика текстовых файлов? Назначение процедуры Append. Отличительные особенности процедур Read и Write от Readln и Writeln.