- •Var a: array[1..10] of ta;
- •Var c : record p1 : real; p2 : char; p3 : byte end;
- •Оператор присоединения (with)
- •6. Решение типовых задач
- •6.1 «Работа с записями»
- •Составить программу, выводящую на экран информацию о студентах (фамилия, дата рождения, возраст). Осуществить поиск по фамилии и вывести на экран количество совпадений.
- •«Работа с множествами»
- •7 Контрольные вопросы
- •Приложение а
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (ДГТУ)
КОЛЛЕДЖ ЭКОНОМИКИ, УПРАВЛЕНИЯ И ПРАВА
Шинакова С.В.
Методические рекомендации по учебной практике
для студентов 2 курса специальности 230105 ПОВТ и АС
Дисциплина: Основы алгоритмизации и программирования
Тема №4 «Работа с записями и множествами»
Ростов-на-Дону
2011
Рассмотрены на заседании Ц(П)К специальности 230105.51 Программное обеспечение вычислительной техники и автоматизированных систем
«07» апреля 2011 г. Протокол № 8
Председатель Ц(П)К _____________ Шинакова С.В.
Практическая работа № 4
Тема: «Работа с записями и множествами»
1 Цель работы
Изучить принципы работы с записями на языке Pascal.
2 Задачи работы
Научиться основным алгоритмам решения задач с использованием записей на языке Pascal.
3 Порядок выполнения работы
3.1. В среде программирования TurboPascalилиPascalABCсоставить и отладить программу решения задачи тему «Работа с записями», согласно приложениям А, Б и В.
3.2 Проанализировать полученные результаты.
3.3 Составить отчет о проделанной работе.
4 Требования к отчету
Отчет по работе должен содержать:
-название, цель работы;
-номер варианта для выполнения задания и условие своего варианта;
-текст (листинг) программы;
-полученные при расчетах результаты;
-ответы на контрольные вопросы (по желанию).
5 Теоретические положения
Запись – это структура данных, состоящая из фиксированного числа компонент, называемых полями. Каждое поле имеет свой идентификатор и тип. К компонентам записи возможен прямой доступ и они могут выборочно обновляться. Идентификатор в самой записи должен быть уникальным. Для обращения к отдельным полям записи указываются составные имена: имя записи, после которого ставится точка и записывается идентификатор поля. Запись можно передавать в качестве параметра процедуры или функции, но значением функции запись быть не может.
В общем виде описание типа для записи можно представить:
TYPE <идентификатор типа>= RECORD
<идентификатор 11>[,<идентификатор 12>,…]: <тип 1>;
<идентификатор 21>[,<идентификатор 22>,…]: <тип 2>; . . . END;
Например,
TYPE TA= RECORD P1 : REAL; P2 : CHAR; P3 : BYTE END;
Var a: array[1..10] of ta;
Здесь описан одномерный массив, каждый элемент которого представляет собой запись, имеющую структуру типа TA.
Запись может объявляться и непосредственно в разделе описания переменных.
Var c : record p1 : real; p2 : char; p3 : byte end;
Рассмотрим пример. Дан массив записей со следующей структурой: - шифр группы; - номер зачетной книжки; - код дисциплины; - оценка.
Требуется определить средний балл студентов группы AI007. При вводе массива последняя запись имеет шифр группы «99999».
Program srball;
type zap=record shg:string[5]; nzk:integer; kd:1..100; oc:2..5 end;
var mas:array[1..100] of zap; k,n,i:byte; sum:real;
begin i:=0; repeat inc(i); readln (mas[i].shg, mas[i].nzk, mas[i].kd, mas[i].oc) until mas[i].shg='99999'; n:=i; sum:=0; k:=0; for i:=1 to n do if mas[i].shg='AI007' then begin sum:=sum+mas[i].oc; inc(k) end; if k<>0 then sum:=sum/k; writeln ('Средний балл в группе AI007=',sum) End.
Оператор присоединения (with)
При обращении к компонентам записи используются составные имена. Для сокращения имен и повышения удобства работы с записями применяется оператор присоединения WITH.
WITH <идентификатор переменной типаRECORD> DO
< оператор>;
Тогда в операторе при ссылке на компоненты записи имя переменной можно опускать. При использовании оператора присоединения фрагмент рассмотренной ранее программы будет выглядеть:
. . . i:=0; repeat i:=i+1; WITH MAS[I] DO readln(shg,nzk,kd,oc) until mas[i].shg='99999'; n:=i; sum:=0; k:=0; for i:=1 to n do WITH MAS[I] DO if shg=' AI007' then begin sum:=sum+oc; k:=k+1; end; . . .
Возможны вложенные описания записи и вложенные конструкции WITH. Рассмотрим пример вложенных описаний. Пусть запись о студентах содержит следующие поля: - номер по порядку; - фио (содержит в свою очередь поля – фамилия, имя, отчество), - номер зачетной книжки; - дата рождения (содержит поля –год, месяц, день).
Программа ввода и подсчета введенных записей для записей такой структуры может выглядеть
type zap=record npp:byte; fio:record F,i,o:string[15]; end; nzk:word; dtr:record g:1980..1990; m:string[3]; d:1..31 end; end;
var a:zap; k,n:byte;
Begin k:=0; with a do with fio do with dtr do repeat k:=k+1; writeln('ввод '); readln(npp); readln(f); readln(i); readln(o); readln(nzk); readln(g); readln(m); readln(d); until d=99; writeln(k); readln; End.