Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Circle: (Centre: Coordinats; Radius: real)

Поиск

end {Figure};

Заметим, что конструкция вариантной части списка полей похожа на оператор варианта. Отличается она от него тем, что является описа­тельной конструкцией и сама по себе никакого действия не производит.

В конструкции вариантной части описаны возможные варианты по­лей, которые могут быть включены в конкретную запись, определенную в разделе переменных.

Пример 9.4 Пусть, например, имеются некоторые данные о заводах города, све­денные в следующий документ:

Завод Основные сведения При­меча- ние
Занимаемая площадь Объем выпускаемой продукции Количество обслуживающего персонала
по плану факти­чески с высшим образованием со средним образованием
АЗЛК ВАЗ ЗИЛ ИЖ   484,9 348,5 384,3 667,3 484,9 348,7 399,4 701,3        
Всего              
                     

Необходимо описать массив записей, содержащий данную информа­цию, произвести расчет и заполнить итоговую строку, а результат отпе­чатать.

Для решения данной задачи следует обеспечить ввод массива запи­сей, эхо-печать введенных данных, накопления суммы по каждому полю записи для формирования итоговой строки таблицы и вывод полученного результата.

Summary - массив записей; plant - строка записи; name - наименование завода; information - основные сведения, area - площадь завода; production - объем продукции; plan - по плану; fact - фактически; person - обслуживающий персонал; superior - с высшим образованием; second - со средним образованием; note - примечание; Nmax - максимальное число записей; n - вводимое число записей; i - номер текущей записи; к - параметр цикла; 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;

i, k, n: integer;

s1, s2, s3: real;

s4, s5: integer;

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

Writeln ('занимаемая площадь:');

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, 'Основные сведения'.ЗЗ, '|':18, '|':13); Write('|','|':15);

for k:= 1 to 50 do

Write(‘_’); Write(‘|’, ‘|’:13);

WriteLn('|', 'Наименование |':15, 'Площадь |':10, 'Объем продукции': 18, '|':4, 'Персонал': 13, '|':6, 'Примечание |':13); Write(‘|’, ‘|’:15, l':10);

for k:= 1 to 40 do

Write('_'); Write(‘|’, ‘|’:13); WriteLn(‘|’, ‘|’:15, '|':10, 'по плану |':11, 'факт':7, ‘|’:4, 'высшее |':9, 'среднее |':10, ‘|’:3);

for к:= 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:7:1, '|':2, information.production.fact:7:1, '|':2, information.person.superior:7, '|':2, information.person.second:8, '|':2, note,' ':12-Length(note), ‘|’);

for k:= 1 to 80 do

Write(‘|’);

WriteLn;

{Формирование и вывод итоговой строки}

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:7:1, '|':2, s3:7:1, '|':2, s4:7, '|':2, s5:8, '|':2, '|':13);

end;

for k:= 1 to 80 do

Write(‘|’);

WriteLn;

End. {Example}

Пример 9.5 Ввести в ЭВМ ведомость студентов одной группы по пяти предметам. Вывести на экран фамилии и номера зачеток неуспевающих студентов.

Program Count_2;

Const

Nmax=40; { Max количество студентов в группе }

Dl=15; { длина фамилии и имени }

M=5; { количество оценок }

Type

Stud = Record

Fam,Im,Ot: String [dl];

Numz: LongInt;

Otm: Array [1..m] Of Integer

End;

Var

Vedom: Array [1..Nmax] Of Stud;

i,j: Integer;

kdv,k2,n: Integer;

Begin

Writeln(’Введите количество студентов’);

Readln(n);

Writeln(’Вводите информацию о каждом студенте’);

For i:=1 to n Do

Begin

Write(’Фамилия: ’);

ReadLn(Vedom[i].Fam);

Write(’Имя: ’);

ReadLn(Vedom[i].Im);

Write(’Отчество: ’);

ReadLn(Vedom[i].Ot);

Write(’Номер зачетки: ’);

ReadLn(Vedom[i].Numz);

WriteLn(’Вводите оценки по одной:’);

For j:= 1 to m do

Begin

WriteLn(’Введите ’,j,’ –ю оценку’);

ReadLn(Vedom[i].Otm[j]);

End;

End;

kdv:= 0;

Writeln(’Фамилии и номера зачеток двоечников’);

For i:=1 to n Do

Begin

k2:= 0;

For j:= 1 to m Do

If Vedom[i].Otm[j] < 3 Then

k2:= k2+1;

If k2 > 0 Then

Begin

kdv:= kdv + 1;

Writeln(Vedom[i].Fam:16,Vedom[i].Numz:8)

End;

End;

Writeln(’Количество двоечников в группе - ’,kdv);

WriteLn(’Нажмите Enter...’);

ReadLn;

End.

Пример 9.6 Сформировать и вывести на экран файл, представляющий собой ведомость успеваемости студентов 1 курса ФИиТ. Данные об одном студенте имеют структуру вида:

Фамилия, Имя, Отчество, номер зачетки, оценки по 5 предметам.

Количество студентов (n) и сведения о них вводятся с клавиатуры. Программа для решения поставленной задачи может быть такой.

Program Sozd_Fil;

Const

M=5; { Количество оценок }

Type

Stud=Record

Fam, Im, Ot: String[10];

NumZ: LongInt;

Otm: Array[1..M] Of Integer;

End;

Var

Vedom: File Of Stud;

A: Stud;

FilName: String; { имя набора данных }

j,i,n: Integer;

Begin

Writeln(’Введите имя набора данных’);

Readln(FilName);

Assign(Vedom,FilName);

Rewrite(Vedom); {Открытие файла для записи}

Writeln(’Введите количество студентов’);

Readln(n);

Writeln (’Вводите сведения о каждом студенте’);

For i:=1 to n do

Begin

With A do

Begin

Write(’Фамилия: ’);

ReadLn(Fam);

Write(’Имя: ’);

ReadLn(Im);

Write(’Отчество: ’);

ReadLn(Ot);

Write(’Номер зачетки: ’);

ReadLn(Numz);

WriteLn(’Введите оценки по одной:’);

For J:= 1 to 5 do

Begin

WriteLn(’Введите ’,J,’ -ю оценку’);

ReadLn(Otm[j]);

End;

End;

Write(Vedom,A); {Запись в файл переписывается целиком}

End;

Close(Vedom);

Writeln (’Конец работы. Нажмите клавишу ENTER’);

ReadLn;

End.

Пример 9.7 Вывести на экран сведения о неуспевающих студентах из файла Vedom предыдущего примера. Соответствующая программа будет иметь следующий вид.

Program Count_2;

Const

M=5;

Dl=10;

Type

Stud = Record

Fam, Im, Ot: String[Dl];

Numz: LongInt;

Otm: Array[1..M] Of Integer;

End;

Var

Vedom: File Of Stud;

FilName: String;{имя набора данных}

A: Stud;

i,j,kdv,K2: Integer;

Begin

Writeln(’Введите имя набора данных’);

Readln(FilName);

Assign(Vedom,FilName);

Reset (Vedom); {открытие файла, 1-я запись - в буфере}

kdv:= 0;

I:= 0;

Writeln(’Список фамилий и номеров зачеток неуспевающих студентов’);

While Not Eof(Vedom) Do

Begin

K2:= 0;

Read(Vedom,A);

I:= i+1;

With A Do

Begin

For j:= 1 To M Do

If Otm[j] < 3 Then

K2:= K2+1;

If K2 > 0 Then

Begin

kdv:= kdv+1;

Writeln(Fam:15,Numz:8);

End;

End;{Whith}

End;{While}

Writeln(’Проверено ’,i,’ студентов.’);

Writeln(’Из них неуспевающих ’,kdv,’ человек’);

WriteLn(’Нажмите Enter’);

Readln;

End.

Пимер 9.8 Выполнить поиск номера телефона и его владельца по справочнику, сформированному в предыдущем примере. При работе программы должен вводиться номер телефона, и если он есть в справочнике, то на экран должны выдаваться фамилия и адрес его владельца. Если набран неправильный номер, которого в справочнике нет, то необходимо вывести сообщение об этом. Программа будет иметь вид

Program PskTel;

Type

Tel=Record

Nom: Integer;

Fam,Adr: String[15];

End;

Var

Ftel: File Of Tel;

Rtel: Tel;

Num: Integer;

S: Char;

Begin

Assign (Ftel,’tsprav’);

Reset (Ftel); { Открытие файла для чтения}

Repeat {Поиск фамилии и адреса абонента по номеру}

Write(’Введите номер телефона: ’);

ReadLn(Num);

Seek(Ftel,Num);

If Not Eof (Ftel) Then

Begin

Read (ftel,Rtel);

With Rtel do

Writeln(’Фамилия: ’,fam:15, ’ Адрес: ’,
Adr:15, ’ Номер телефона: ’,nom);

End

Else

Writeln(’Неправильный номер’);

Writeln (’Продолжаем?-Д/Н, Y/N’);

Readln (S);

Until (S=’H’) Or (S=’н’) Or (S=’n’) Or (S=’N’);

Writeln (’Конец работы. Нажмите клавишу ENTER’);

Readln;

End.

Пример 9.9 Коррекция телефонного справочника ("Tsprav"), например изменение фамилии абонента. Обычно при коррекции сначала просматривают содержимое записи, а потом, если необходимо, изменяют его.

Program Updtel;

Type

Tel=Record

Nom: Integer;

Fam,Adr: String[15];

End;

Var

Ftel: File Of Tel;

Rtel: Tel;

K,Num: Integer;

S: Char;

Begin

Assign(Ftel,’Tsprav’);

Reset(Ftel); { Открытие файла }

Repeat {Поиск фамилии и адреса абонента по номеру телефона}

Write(’Введите номер телефона: ’);

ReadLn(k);

Seek(Ftel,k);

If Not Eof(Ftel) then

Begin

Read(Ftel,Rtel);

With Rtel do

Write (’Фамилия: ’,fam,’ Адрес: ’,Adr);

Writeln(’Будем менять фамилию?-Д/Н Y/N’);

Readln(S);

If (S=’Д’) (S=’д’) Or (S=’Y’) Or (S=’y’) then

Begin

Writeln(’Введите фамилию’);

Read (Rtel.fam);

Seek (Ftel,k);

Write(Ftel,Rtel);

end;

End

Else

Writeln (’Неправильный номер’);

Writeln (’Продолжаем?-Д/Н Y/N’);

Readln(S);

Until (S=’H’) Or (S=’н’) Or (S=’n’) Or (S=’N’);

Writeln (’Конец работы, нажмите клавишу Enter’);

Readln;

End.

Пример 9.10 Набор данных, имя которого задается с клавиатуры, содержит информацию о компьютерах. Запись о компьютере имеет вид

Марка, Цена.

Упорядочить записи в наборе по возрастанию цены.

Program Sort_File;

Type

Computer=Record

Marka: String[10];

Cena: Integer;

End;

Var

FilComp: File of Computer;

Comp1,Comp2: Computer;

K: Integer;

Perest: Boolean; { Признак перестановок }

FilName: String; { Имя набора данных}

Begin

Writeln(’Введите имя набора данных’);

Readln(FilName);

Assign(Filan,FilName);

{ Упорядочение }

Perest:= True;{ Перестановки будут }

While Perest do

Begin

Perest:= False; {Перестановок еще не было}

K:= 0;

Reset(FilComp); {Открытие файла}

While Not Eof(FilComp) do

Begin

Seek(FilComp,k);

Read(FilComp,Comp1);

If Not Eof(FilComp) then

Begin

Read(FilComp,Comp2);

If Comp1.Cena>Comp2.Cena then

Begin {Перестановка начинается}

Seek(FilComp,k);

Write(FilComp,Comp2);

Write(FilComp,Comp1);

Perest:=True; {Перестановка}

End;

End;

k:=k+1;

End;

Close(FilComp);

End;

Writeln(’Конец работы, нажмите клавишу Enter’);

Readln;

End.

 




Поделиться:


Последнее изменение этой страницы: 2017-02-17; просмотров: 211; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.109.121 (0.006 с.)