Пусть, например, имеются некоторые данные о заводах города, сведенные в следующий документ:
Наиме-нование завода | Основные сведения | Примечание | ||||
Зани-маемая площадь | Объем выпускаемой продукции | Количество обслуживающего персонала | ||||
по плану | фактически | с высшим образованием | со средним образованием | |||
АЗЛК | 800 | 484,9 | 484,9 | 282 | 204 | |
ВАЗ | 396 | 348,5 | 348,7 | 130 | 669 | |
ЗИЛ | 203 | 384,3 | 399,4 | 448 | 125 | |
ИЖ | 544 | 667,3 | 701,3 | 396 | 157 | |
ИТОГО |
Необходимо описать массив записей, содержащий данную информацию, произвести расчет и заполнить итоговую строку, а результат отпечатать.
Для решения данной задачи следует обеспечить ввод массива записей, эхо–печать введенных данных, накопления суммы по каждому полю записи для формирования итоговой строки таблицы и вывод полученного результата.
Схема алгоритма в общем виде представлена на рис. 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.
Задание для индивидуальной работы
Вариант 1.
Определить является ли последовательность символов находящаяся в текстовом файле, идентификатором.
Вариант 2.
Подсчитать количество сдвоенных символов ‘cc’, ‘нн’, ‘лл ’в тексте, расположенном в текстовом файле.
Вариант 3.
Разбить произвольный текст, находящийся в файле на строки определенной длины. При переносе слова предусмотреть вывод дефиса.
Вариант 4.
Подсчитать число слов в предложении, записанном в текстовом файле.
Вариант 5.
Найти в текстовом файле самое длинное и самое короткое слово.
Вариант 6.
Из строки, расположенной в текстовом файле, исключить все символы, входящие в нее более одного раза.
Вариант 7.
Проверить, правильно ли расставлены в тексте, расположенном в текстовом файле, круглые скобки.
|
|
Вариант 8.
В последовательности символов, заданной в текстовом файле, подсчитать общее количество символов ‘+’, ‘–‘, ‘*’.
Вариант 9.
Слова текста, расположенного в текстовом файле, вывести на экран в виде строки и в виде столбика.
Вариант 10.
В текстовом файле, в предложении, содержащем не менее двух слов, поменять местами первое и последнее слово.
Вариант 11.
В текстовом файле две строки текста. Необходимо сформировать третью строку, состоящую из символов, входящих одновременно в обе исходные строки, и дописать ее в текстовый файл.
Вариант 12.
Откорректировать текст, расположенный в текстовом файле, заменив в нем все вхождения одной буквы на другую.
Вариант 13.
Переписать текстовый файл таким образом, чтобы все слова исходного текста были перевернуты.
Вариант 14.
В произвольный текстовый файл добавить в конец первое и третье слово из исходного текста.
Вариант 15.
В произвольный текстовый файл добавить в конец свою фамилию.
Вариант 16.
В исходном текстовом файле X заменить все вхождения подстроки Р на подстроку Q.
Вариант 17.
Для заданного символа определить, сколько раз он встречается во введенном тексте файла.
Вариант 18.
Из текста, расположенного в файле, исключить группы символов, расположенных между круглыми скобками.
Вариант 19.
Из текста, расположенного в файле, исключить однобуквенные слова. Результат записать в другой файл.
Вариант 20.
Из текста, расположенного в файле, удалить лишние пробелы, разделяющие слова.
Вариант 21.
Выяснить, верно ли, что среди символов строки произвольной длины, расположенной в файле, имеются вес символы, входящие в слово ДЕНЬ.
Вариант 22.
Для каждого из слов предложения, расположенного в одном текстовом файле, указать, сколько раз оно встречается в предложении, расположенном в другом текстовом файле.
Вариант 23.
В произвольном текстовом файле исключить первое и последнее слово.
Вариант 24.
|
|
Определить, можно ли из символов заданной в файле строки составить вашу фамилию.
Вариант 25.
Из произвольной последовательности символов, расположенной в текстовом файле, исключить специальные символы.