- •25. Программный модуль
- •26Указатели в Паскале. Динамическая память на языке Паскаль
- •Ссылочные типы. Указатели в Паскале
- •Операции с указателями
- •Процедуры и функции для работы с указателями и адресами в Паскале
- •27. Динамические структуры данных | Связные списки
- •1 Связное представление данных в памяти
- •2 Связные линейные списки
- •2.1 Машинное представление связных линейных списков
- •2.2 Реализация операций над связными линейными списками
- •3. Нелинейные разветвленные списки
- •3.1 Основные понятия
- •3.2 Представление списковых структур в памяти.
- •3.3 Операции обработки списков
- •28. Стек и очередь
- •29. Системы программирования
- •30. Языки программирования
- •33. Накопители на гибких магнитных дисках
- •35Видеосистема персонального компьютера.
- •История
- •Технический обзор
- •Новые возможности по сравнению с Си
- •Не объектно-ориентированные возможности
- •Стандартная библиотека
- •Объектно-ориентированные особенности языка
- •Проблемы старого подхода
- •Инкапсуляция
- •Описание функций в теле класса
- •Конструкторы и деструкторы
- •Другие возможности функций-членов
- •Наследование
- •Полиморфизм
- •Будущее развитие
- •История названия
- •Пример №1
- •Пример №2
- •Пример №3
- •Пример №4
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •5.3.1. Символьные типы
- •5.3.2. Числовые типы
- •5.3.3. Типы дата/время
- •5.3.4. Двоичные типы
- •5.3.5. Пользовательские типы данных
- •2. [Проверка домашнего задания]
- •3. Актуализация знаний и умений учащихся по пройденному материалу
- •5. Реализация, составление алгоритмов с использованием повторения. Графика в программе Паскаль авс.
- •6. Ребус. Правильная осанка
- •9*. Тестирование
- •Операции над строками
- •Операции над строками
- •2. Объединения
- •Комбинированные типы. Записи
- •Обработка записей в Паскале
- •Оператор присоединения в Паскале
- •Вввод / вывод записей в Паскале
- •Примеры программ
Обработка записей в Паскале
При обработке записей все действия выполняются над полями записи в соответствии с их типами. Набор операций, процедур и функций определяется типом поля. Для записи в целом м.б. использован только оператор присваивания. Запись можно передавать в качестве параметров в процедуру и функцию.
Для обращения к полям записи используются составные имена.
Составное имя – совокупность имени переменной типа запись и имен полей разделенных точкой.
Например:
EMS_43a[1].FIO :=’Антонов’; EMS_43a[1].Dr.Day :=13; EMS_43a[1].Dr. Month :=1; EMS_43a[1].Dr. Year :=1986;
Оператор присоединения в Паскале
Оператор присоединения позволяет упростить обращение к элементам записи и имеет следующий формат записи: With <Имя> do OP; Где With - с; <Имя> - имя записи (простое или составное); do - делать; OP - оператор (простой или составной);
Вввод / вывод записей в Паскале
При вводе/выводе записей используются отдельные поля записи
For i:=1 to n do Read (EMS_43a[i].FIO, EMS_43a[i].Str)
При использовании оператора присоединения
For i:=1 to n do With EMS_43a[i] do Begin Read (FIO); Read (Str); End;
Примеры программ
Пример 18.1. В файле sp_gr.txt содержатся результаты сдачи сессии студентами группы КИТ-23а. Составить программу анализа результатов сдачи сессии.
Вычислить средний бал каждого студента, результат вывести на экран и в файлrez.txt.На экран вывести также средний балл каждого студента по первому предмету в списке и общий средний балл группы.
Исходный файл sp_gr.txt
Антонов И.И. 5 5 4 3 4 Андеев И.Т. 4 5 3 4 2 Иванов Н.Р. 5 5 4 2 4 Петpов П.И. 3 4 3 2 5 Агапов Е.И. 5 4 3 5 2 Токаев П.И. 4 5 2 4 4 Павлов О.О. 3 3 3 4 5 Мщисеев Н.Т. 5 4 3 4 5 Сидоров Н.Р. 5 4 3 2 5 Егоров Н.Р. 5 3 4 3 5
Текст программы (srbal.pas)
Program srbal; {Программа анализа успеваемости студентов группы} Uses crt; Const n=10; {Число студентов} Type st=Record fam:string[15]; b1,b2,b3,b4,b5:2..5; End; vec = array[1..n] of st; Var KIT_23b :vec; sb1,sbo,sb :real; i :byte; f1,f2 :text; Begin Clrscr; Assign(f1,'sp_gr.txt'); Reset(f1); Assign(f2,'rez.txt'); Rewrite(f2); sbo:=0; sb1:=0; For i:=1 to n do Begin sb:=0; With KIT_23b[i] do Begin Read(f1,fam); Write(fam); Write(f2,fam); Readln(f1,b1,b2,b3,b4,b5); sb:=sb+(b1+b2+b3+b4+b5)/5; Writeln(sb:4:2); Writeln(f2,sb:4:2); sb1:=sb1+b1/n; End; sbo:=sbo+sb/n; End; Writeln; Writeln('sbo=',sbo:4:2,' ':10,'sb1=',sb1:4:2); Close(f1); Close(f2); End.
Результаты работы программы:
(экран) (файл rez.txt)
Антонов И.И. 4.20 Андеев И.Т. 3.60 Иванов Н.Р. 4.00 Петpов П.И. 3.40 Агапов Е.И. 3.80 Токаев П.И. 3.80 Павлов О.О. 3.60 Мщисеев Н.Т. 4.20 Сидоров Н.Р. 3.80 Егоров Н.Р. 4.00
Антонов И.И. 4.20 Андеев И.Т. 3.60 Иванов Н.Р. 4.00 Петpов П.И. 3.40 Агапов Е.И. 3.80 Токаев П.И. 3.80 Павлов О.О. 3.60 Мщисеев Н.Т. 4.20 Сидоров Н.Р. 3.80 Егоров Н.Р. 4.00
sbo=3.84 sb1=4.40
Пример 18.2. Составить список студентов группы КИТ-23а имеющих право на получение стипендии (средний бал не ниже 4.0). Средний бал каждого студента по результатам сессии приведен в файле rez.txt (см. пример №1).
Текст программы
Program STIP; {Программа анализа упеваемости} uses CRT; const n=10; Type st=Record FIO: string[15]; SB: real; end; vec = array [1..n] of st; Var sp,sp1 :vec; i,k,kst :integer; f :text; Procedure VVod (var st:vec); {Ввод сиска студентов} Begin For i:= 1 to n do readln (f,st[i].FIO,st[i].SB); End; Procedure Out(st:vec;var st1:vec; var ks:integer); { Список студентов на стипендию с баллом выше 4,5 } Begin k:=1; for i:=1 to n do if st[i].sb >4.5 then begin st1[k]:=st[i]; ks:=k; k:=k+1; end; end; Begin assign (f,'inp2.txt'); reset (f); clrscr; Writeln('Исходный массив записей'); Writeln; VVod (sp); Out(sp,sp1,kst); For i:=1 to n do Writeln (sp[i].FIO,' ', sp[i].SB:4:2); Writeln ('Результат:':30); Writeln('Список студентов на стипендию с баллом выше 4,5 '); For k:=1 to kst do Writeln (sp1[k].FIO,' ',sp1[k].SB:4:2); Writeln ('Количество студентов с баллом выше 4,5 :',kst); Writeln; Readln; End.
Результаты работы программы:
Исходный массив записей
Антонов И.И. 4.20 Андеев И.Т. 3.60 Иванов Н.Р. 4.00 Петpов П.И. 3.40 Агапов Е.И. 3.80 Токаев П.И. 3.80 Павлов О.О. 3.60 Мщисеев Н.Т. 4.20 Сидоров Н.Р. 3.80 Егоров Н.Р. 4.00 Результат: Список студентов на стипендию с баллом не ниже 4 Антонов И.И. 4.20 Иванов Н.Р. 4.00 Мщисеев Н.Т. 4.20 Егоров Н.Р. 4.00 Количество студентов с баллом не ниже 4 равно :4
Пример 18.3. Составить список студентов группы КИТ-23а имеющих право на голосование (с датой рождения до 30.10.2004 г.).
Исходный файл sp_gr.txt
Антонов И.И. 05 12 1986 Андеев И.Т. 14 05 1985 Иванов Н.Р. 15 12 1985 Петpов П.И. 31 10 1986 Агапов Е.И. 11 04 1985 Токаев П.И. 14 05 1986 Павлов О.О. 30 10 1986 Мщисеев Н.Т. 22 09 1985 Сидоров Н.Р. 29 12 1985 Егоров Н.Р. 17 10 1985
Текст программы
Program GOLOS; {Сотавление списка для голосования. Выборы 31.10.2004 г.} uses CRT; const n=10; Type Date=Record Day :1..31; Month :1..12; Year :1980..1987; end; st=Record FIO: string[15]; DR : Date; end; vec = array [1..n] of st; Var sp,sp1 :vec; i,kvo,k :byte; f :text; Procedure VVod (var st:vec); {Ввод списка студентов из файла и вывод на экран} Begin For i:= 1 to n do With st[i] do begin readln (f,FIO,DR.Day,DR.Month,DR.Year); Writeln(FIO,DR.Day:4,DR.Month:4,DR.Year:6); end; End; Procedure Out (st:vec;var st1:vec; Var kn:byte); { Формирование списка студентов для голосования} Begin k:=1; for i:=1 to n do if (st[i].DR.Year<=1986)and (st[i].DR.Month<=10)and (st[i].DR.Day<=30) then begin st1[k]:=st[i]; kn:=k; k:=k+1; End; End; Begin assign (f,'sp_gr1.txt'); reset (f); clrscr; Writeln('Исходный массив записей:':30); Writeln; VVod (sp); Out(sp,sp1,kvo); Writeln ('Результат:':30); Writeln ('Спиок студентов для голосования:'); For k:= 1 to kvo do With sp1[k] do Writeln(FIO,DR.Day:4,DR.Month:4,DR.Year:6); Writeln ('Число студентов в списке=> ',kvo); Readln; End.
Результаты работы программы:
Исходный массив записей:
Антонов И.И. 5 12 1986 Андеев И.Т. 14 5 1985 Иванов Н.Р. 15 12 1985 Петpов П.И. 31 10 1986 Агапов Е.И. 11 4 1985 Токаев П.И. 14 5 1986 Павлов О.О. 30 10 1986 Мщисеев Н.Т. 22 9 1985 Сидоров Н.Р. 29 12 1985 Егоров Н.Р. 17 10 1985 Результат: Спиок студентов для голосования: Андеев И.Т. 14 5 1985 Агапов Е.И. 11 4 1985 Токаев П.И. 14 5 1986 Павлов О.О. 30 10 1986 Мщисеев Н.Т. 22 9 1985 Егоров Н.Р. 17 10 1985 Число студентов в списке=> 6
46