Студопедия
	
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция
	 
							
								
 | 
    
	
 Структурированные типы данных
 
 
   
    При решении задач обработки большого количества данных используют массивы. Но при работе с массивами основное ограничение заключается в том, что все элементы массива должны быть одного типа. Для работы с комбинированными типами данных применяют записи. 
					Записи 
					Записи – это структурированный тип данных, позволяющих хранить вместе различные типы данных. 
  Запись состоит из нескольких полей, для каждого из которых при объявлении (описании) указывается имя и тип. 
    
  Например: 
  type 
  student = record; {запись} 
  surname : string[20]; 
  year : integer; 
  bal : real; 
  end; {завершает список полей} 
  var 
  st:student; 
  Сформирован пользовательский тип данных – student, он базируется на стандартных типах (string, integer,real). 
  Переменная st - имеет тип student (запись), состоит из 3-х полей: 
  surname – фамилия студента; 
  year – год рождения; 
  bal – средний бал. 
  Каждое поле хранит информацию разного типа. При обращении к отдельным полям указывается имя всей записи и имя отдельного поля через точку. 
  st.surname:='Иванов'; 
  st.year:=1905; 
  st.bal:=4.5; 
  Для уменьшения записи обращения к отдельным полям используют оператор with … do 
  Например: 
  with st do 
  begin 
  surname:='Иванов'; 
  year:= 1905; 
  bal:=4.5; 
  end; 
  Для обработки большого объема информации комбинированного типа целесообразно строить массивы записей, где каждый элемент массива – запись, состоящая из нескольких полей разного типа. 
  Например, чтобы сохранить информацию о студентах группы в 25 человек, можно создать следующий массив записей: 
  type 
  student = record; {запись} 
  surname : string[20]; 
  year : integer; 
  bal : real; 
  end; 
  var 
  st:array[ 1..25 ] of student; 
    
  st – массив записей. Каждый элемент массива(St[i])содержит информацию об одном студенте: 
  St[i].surname – фамилия; 
  St[i].year - год рождения; 
  St[i].bal - средний бал. 
    
  Задача. 
  Создать массив записей, содержащий информацию о студентах группы. Каждая запись содержит поля – фамилия, год рождения, пол. Подсчитать средний возраст студентов мужского пола группы. 
    
  Таблица идентификаторов 
    
        |   №
   |     Наименование переменной
   |     Обозначения  в программе
   |        |   1
   |     Имя массива
   |     st
   |        |   2
   |     Количество студентов
   |     n
   |        |   3
   |     Индекс массива
   |     i
   |        |   4
   |     Средний возраст
   |     p
   |        |   5
   |     Количество мужчин
   |     k
   |        |   6
   |     Текущий год
   |     t
   |            
  program rec; 
  uses crt; 
  type 
  student = record; {запись} 
  surname : string[20]; 
  year : integer; 
  pol : char; 
  end; 
  var 
  st:array[ 1..30 ] of student; 
  i,n,t:integer; p:real; 
    
  begin 
  clrscr; 
  writeln(‘Введите текущий год’); 
  readln(t) 
  writeln(‘Введите количество студентов’); 
  readln(n) 
  for i:=1 to n do 
  with st[i] do 
  begin 
  writeln(‘Сведения о ’,i,‘ студенте’); 
  writeln(‘Введите фамилию’); readln(surname); 
  writeln(‘Введите год рождения’); readln(year); 
  writeln(‘Введите средний бал’); readln(bal); 
  end; 
  p:=0; 
  for i:=1 to n do 
  begin 
  if st[i].pol=’m’ then 
  begin 
  p:=p+(t-st[i].year); 
  k:=k+1; 
  end; 
  writeln(‘Средний возраст мужчин =’,(p/k):8:3 );  	
  readln; 
  end. 
    
					Пример программы использования массива записей 
					  
  Задача: 
  Создать массив записей, содержащий сведения о сотрудниках фирмы. Каждая запись содержит поля – фамилия сотрудника, наименование отдела, оклад, трудовой стаж. Написать программу, выдающую следующую информацию: 
    - список сотрудников отдела Х с указанием оклада и  трудового стажа;
   - подсчитать среднюю заработную плату сотрудников  отдела Х.
     Название отдела Х вводится по запросу с клавиатуры. 
    
    - Таблица идентификаторов
           |   №
   |     Наименование переменной
   |     Обозначения  в программе
   |     Тип  переменной
   |        |   1
   |     Имя массива
   |     f
   |     record
  (запись)
   |        |   2
   |     Количество сотрудников
   |     n
   |     integer
   |        |   3
   |     Поле фамилия
   |     surname
   |     string
   |        |   4
   |     Поле отдел
   |     otdel
   |     string
   |        |   5
   |     Поле оклад
   |     oklad
   |     real
   |        |   6
   |     Поле стаж
   |     Stag
   |     integer
   |        |   7
   |     Средняя зарплата
   |     Sred
   |     real
   |        |   8
   |     Отдел поиска Х
   |     X
   |     string
   |        |   9
   |     Количество сотрудников в отделе Х
   |     K
   |     integer
   |        |   10
   |     Индексы массива
   |     i
   |     integer
   |            
    - Листинг программы
     program rec_1; 
  uses crt; 
  type 
  firma = record; {запись} 
  surname : string[20]; 
  otdel : string[20]; 
  oklad : real; 
  Stag : integer; 
  end; 
  var 
  f:array[ 1..30 ] of firma; {массив записей} 
  X:string[20]; 
  i,n,k:integer; 
  sred:real; 
  begin 
  clrscr; 
  writeln(‘Введите n’); readln(n); 
  writeln(‘Введите информацию о сотрудниках’); 
  for i:=1 to n do 
  with f[i] do 
  begin 
  writeln(‘Введите фамилию ’); readln(surname); 
  writeln(‘Введите отдел ’); readln(otdel); 
  writeln(‘Введите оклад ’); readln(oklad); 
  writeln(‘Введите стаж ’); readln(Stag); 
  end; 
  writeln(‘Введите название отдела’); readln(X); 
  sred:=0; k:=0; 
  writeln(‘Список сотрудников отдела ’,X); 
  for i:=1 to n do 
  if f[i].otdel=X then 
  begin 
  writeln(f[i].surname,’ ‘,f[i].oklad:8:3); 
  sred:=sred+f[i].oklad; 
  k:=k+1; 
  end; 
  writeln(‘Средняя зарплата отдела=’,(sred/k):8:3); 
  readln; 
  end. 
					Вопросы для самоконтроля 
					  
    - В чем состоит основное преимущество записи?
   - Почему записи называют комбинированным типом  записи?
   - Чем записи отличаются от массивов?
   - Что называется полем записи?
   - Какие требования предъявляются к идентификаторам  поля записи?
   - Как определить объем памяти, требуемый для  размещения записи?
   - С какой целью при обращении к полю записи  используется оператор with … do?
       
					Методические указания к выполнению индивидуального задания по Модулю 2. «Массивы записей» 
					Цель работы: Ознакомиться с пользовательскими типами данных, записями. Научиться организовывать массивы записей. 
  Задание: 
  1. В приложении 11 выбрать вариант задания. 
  2. Выполнить индивидуальное задание по Модулю 2 , на примере программы использования массива записей. 
  3. Составить блок-схему алгоритма. 
  4. Утвердить блок-схему у тьютора. 
  5. Написать программу и отладить ее по заранее подготовленному тесту. 
  6. Результат выполнения программы предъявить преподавателю. 
  7. Оформить ИДЗ в формате А4, титульный лист по образцу Приложение 4 
  8. Защитить выполненную работу у преподавателя. 
    
					Приложение 11. Таблица вариантов индивидуального задания 
					  
        |     Вариант
     |     Задание
   |        |   1
   |     Создать массив записей, содержащий  сведения о месячной заработной плате рабочих завода.
  Каждая запись содержит поля –  фамилия рабочего, наименование цеха, размер заработной платы за месяц. Необходимо:
  -отсортировать массив записей по  полю заработная плата;
  -подсчитать общую сумму выплат за  месяц по цеху Х. Наименование цеха Х вводится по запросу с клавиатуры.
   |        |   2
   |     Создать массив записей, содержащий  сведения об участниках конференции. Каждая запись содержит поля – фамилия  участника, возраст, город, из которого прибыл участник.
  Написать программу, выдающую  следующую информацию:
  -список участников, приехавших из  города Х с указанием возраста;
  -средний возраст участников  конференции.
  Название города Х вводится по  запросу с клавиатуры.
   |        |   3
   |     Создать массив записей, содержащий  информацию о сотрудниках частной клиники. Каждая запись содержит поля –  фамилия врача, специализация, стаж работы.
  Написать программу, выдающую  следующую информацию:
  -список врачей по специализации Х  с указанием стажа работы;
  -средний стаж сотрудников клиники.
  Специализация Х вводится по  запросу с клавиатуры.
   |        |   4
   |     Создать массив записей, содержащий  сведения об абонентах телефонной компании. Каждая запись содержит поля –  фамилия абонента, год установки телефона, номер телефона. Написать программу,  выдающую следующую информацию:
  -список абонентов, отсортированный  по полю год установки;
  - по вводимой фамилии Х выдается  номер телефона абонента.
  Фамилия Х вводится по запросу с  клавиатуры.
   
   |        |   5
   |     Создать массив записей, содержащий  сведения об ассортименте игрушек в магазине. Каждая запись содержит поля –  название игрушки, цена, количество. Написать программу, выдающую следующую  информацию:
  - стоимость самой дорогой игрушки  и ее наименование;
  - общую стоимость всех игрушек в  магазине.
   |        |   6
   |     Создать массив записей, содержащий  сведения об экспортируемых товарах. Каждая запись содержит поля –  наименование товара, страна, импортирующая товар, объем поставляемой партии в  штуках. Написать программу, выдающую следующую информацию:
  -список стран, в которые  экспортируется товар Х и объем его экспорта;
  -средний объем экспорта товара Х.
  Наименование товара Х вводится по  запросу с клавиатуры.
   |        |   7
   |     Создать массив записей, содержащий  сведения о студентах группы. Каждая запись содержит поля – фамилия студента,  год рождения и оценки по трем экзаменам. Написать программу, выдающую  следующую информацию:
  -список студентов, отсортированный  по полю год рождения с указанием полученных оценок;
  -количество студентов, получивших  неудовлетворительные оценки хотя бы по одной дисциплине.
   |        |   8
   |     Создать массив записей, содержащий  сведения о городской библиотеке. Каждая запись содержит поля – шифр книги,  автор, название, год издания и стоимость. Написать программу, выдающую  следующую информацию:
  -список книг автора Х с указанием  названия и года издания книги;
  -стоимость самой дорогой книги  автора Х;
  Фамилия автора Х вводится по  запросу с клавиатуры.
   |        |   9
   |     Создать массив записей, содержащий  сведения о наличии билетов и рейсах Аэрофлота. Каждая запись содержит поля –  номер рейса, пункт назначения, время вылета, стоимость билетов. Написать  программу, выдающую следующую информацию:
  -список рейсов самолетов в город  Х, с указанием времени вылета и стоимости билетов;
  -номер рейса в город Х, с  минимальной стоимостью билета.
  Наименование города Х вводится по  запросу с клавиатуры.
   |        |   10
   |     Создать массив записей, содержащий  сведения об ассортименте товаров в магазине. Каждая запись содержит поля –  артикул, наименование, стоимость единицы товара, количество. Написать  программу, выдающую следующую информацию:
  -список товаров, отсортированный  по полю стоимость товара;
  - общую стоимость всех товаров в  магазине.
   |        |   11
   |     Создать массив записей, содержащий  сведения о сессии. Каждая запись содержит поля – индекс группы ( например  ЭС-101), фамилия студента, оценки по трем экзаменам. Написать программу,  выдающую следующую информацию:
  -фамилии неуспевающих студентов  группы Х, с указанием количества задолженностей;
  -количество неуспевающих студентов  группы Х.
  Наименование группы Х вводится по  запросу с клавиатуры.
   
   |        |   12
   |     Создать массив записей, содержащий  сведения об отправлении поездов дальнего следования. Каждая запись содержит  поля – номер поезда, станция назначения, время отправления, стоимость  билетов. Написать программу, выдающую следующую информацию:
  -время отправления поездов в город  Х с указанием стоимости билетов;
  -номер поезда в город Х с  минимальной стоимостью билета.
  Наименование города Х вводится по  запросу с клавиатуры.
   |        |   13
   |     Создать массив записей, содержащий  сведения о сотрудниках института. Каждая запись содержит поля – фамилия, пол,  название отдела, год рождения, стаж. Написать программу, выдающую следующую  информацию:
  -список сотрудников мужского пола  отдела Х призывного возраста (старше 18 и младше 30 лет), с указанием стажа  работы;
  -средний возраст сотрудников  мужского пола отдела Х.
  Наименование отдела Х вводится по  запросу с клавиатуры.
   |        |   14
   |     Создать массив записей, содержащий  сведения о телефонах абонентов. Каждая запись содержит поля – фамилия  абонента, адрес, номер телефона. Написать программу, выдающую следующую  информацию:
  -по вводимой фамилии абонента Х и  адресу Y выдается номер телефона.
  Фамилию абонента Х и адрес Y  вводится по запросу с клавиатуры.
   |        |   15
   |     Создать массив записей, содержащий  сведения о товарах некоторого склада. Каждая запись содержит поля –  наименование, цена единицы товара, количество. Написать программу, выдающую  следующую информацию:
  -список товаров, стоимость которых  не превышает Х рублей с указанием количества;
  -общее количество товаров,  стоимость которых не превышает Х.
  Стоимость Х вводится по запросу с  клавиатуры.
   |        |   16
   |     Создать массив записей, содержащий  сведения о товарах автосалона. Каждая запись содержит поля –
  модель автомобиля, цвет, номер  двигателя, стоимость. Написать программу, выдающую следующую информацию:
  -список автомобилей модели Х с  указанием цены, цвета и номера двигателя;
  -самый дорогой автомобиль модели  Х.
  Модель автомобиля Х вводится по  запросу с клавиатуры.
   |        |   17
   |     Создать массив записей, содержащий  сведения о туристической фирме. Каждая запись содержит поля –
  наименование страны, наименование города,  стоимость тура. Написать программу, выдающую следующую информацию:
  -список туров в страну Х с  указанием наименования города и стоимости тура;
  -самый дорогой тур в страну Х.
  Название страны Х вводится по  запросу с клавиатуры.
   |        |   18
   |     Создать массив записей, содержащий  сведения о студентах группы. Каждая запись содержит поля – фамилия студента,  индекс группы (например ЭС-101) и оценки по трем экзаменам. Написать  программу, выдающую следующую информацию:
  -список отличников группы Х;
  -процент отличников по отношения к  общему количеству студентов группы Х.
  Индекс группы Х вводится по  запросу с клавиатуры.
   |        |   19
   |     Создать массив записей, содержащий  сведения об абонентах телефонной компании. Каждая запись содержит поля –  фамилия абонента, год установки телефона, номер телефона. Написать программу,  выдающую следующую информацию:
  -список абонентов, отсортированный  по полю год установки;
  -количество установленных  телефонов с Х года.
  Значение Х вводится по запросу с  клавиатуры.
   |        |   20
   |     Создать массив записей, содержащий  информацию о количестве изделий, собранных рабочими за месяц. Каждая запись  содержит поля – фамилия сборщика, наименование цеха, количество изделий,  собранных рабочим за месяц. Считая заданными значение расценок по сборке  единицы изделия Х, выдать следующую информацию:
  -ведомость заработной платы  рабочих цеха;
  -общую сумму выплат по цеху.
  Стоимость сборки единицы изделия Х  вводится по запросу с клавиатуры.
   |        |   21
   |     Создать массив записей, содержащий  сведения о сотрудниках таксомоторного парка. Каждая запись содержит поля –  фамилия водителя, номер автомобиля, количество выездов за месяц.
  Написать программу, выдающую  следующую информацию:
  -подсчитать общее количество  выездов за месяц;
  -фамилию водителя, с наибольшим  количеством выездов.
   |        |   22
   |     Создать массив записей, содержащий  сведения об услугах частной клиники. Каждая запись содержит поля – название  операции, стоимость операции, возрастные ограничения на каждую операцию.
  Написать программу, выдающую  следующую информацию:
  -список услуг клиники,  отсортированный по полю название операции;
  -по введенному названию операции Х  распечатать стоимость и возрастные ограничения.
  Название операции Х вводится по  запросу с клавиатуры.
   |        |   23
   |     Создать массив записей, содержащий  сведения о сотрудниках института. Каждая запись содержит поля – фамилия  сотрудника, оклад, стаж работы. Написать программу, которая должна:
  -начислить премию сотрудникам в  размере оклада, стаж которых превышает Х лет:
  -распечатать список сотрудников,  получивших премию с указанием размера премии.
  Величина Х вводится по запросу с  клавиатуры.
   |        |   24
   |     Создать массив записей, содержащий  сведения о товарах магазина. Каждая запись содержит поля –
  наименование товара, стоимость,  количество.
  Написать программу, которая;
  -уменьшит стоимость товаров,  количество которых не превышает Х, на 50%;
  -распечатать список новых цен.
  Количество Х вводится по запросу с  клавиатуры.
   |        |   25
   |     Создать массив записей, содержащий  информацию о количестве изделий, собранных рабочими цеха. Каждая запись  содержит поля – фамилия рабочего, наименование цеха, количество собранных им изделий  за месяц. Написать программу, выдающую следующую информацию:
  -список рабочих цеха,  отсортированный по полю фамилия;
  -общее количество изделий,  собранных рабочими цеха за месяц.
   |        |   26
   |     Создать массив записей, содержащий  сведения о сотрудниках таксомоторного парка. Каждая запись содержит поля –  фамилия водителя, номер автомобиля, количество выездов за месяц, оплата за  каждый выезд.
  Написать программу, выдающую  следующую информацию:
  -подсчитать общее количество  выездов за месяц;
  -фамилию водителя, с наибольшей  суммой оплат за выезды.
   |        |   27
   |     Создать массив записей, содержащий  сведения о туристической фирме. Каждая запись содержит поля –
  наименование страны, цель поездки(  например: экскурсионная, отдых), стоимость тура. Написать программу, выдающую  следующую информацию:
  -список туров с целью поездки Х с  указанием наименования города и стоимости тура;
  -самый дешевый тур с целью поездки  Х.
  Цель поездки Х вводится по запросу  с клавиатуры.
   |        |   28
   |     Создать массив записей, содержащий  сведения о товарах автосалона. Каждая запись содержит поля –
  модель автомобиля, цвет, номер  двигателя, стоимость. Написать программу, выдающую следующую информацию:
  -список автомобилей модели Х с  указанием цены, цвета и номера двигателя;
  -самый дешевый автомобиль модели  Х.
  Модель автомобиля Х вводится по  запросу с клавиатуры.
   |        |   29
   |     Создать массив записей, содержащий  сведения о сотрудниках института. Каждая запись содержит поля – фамилия, пол,  название отдела, год рождения, стаж. Написать программу, выдающую следующую  информацию:
  -список сотрудников женского пола в  возрасте от 18 и до 55 лет, с указанием стажа работы;
  -средний возраст сотрудников  женского пола отдела Х.
  Наименование отдела Х вводится по  запросу с клавиатуры.
   |        |   30
   |     Создать массив записей, содержащий  сведения о товарах некоторого склада. Каждая запись содержит поля –  наименование, цена единицы товара, количество. Написать программу, выдающую  следующую информацию:
  -список товаров, стоимость которых  превышает Х рублей с указанием количества;
  -общую стоимость товаров на складе.
  Стоимость Х вводится по запросу с  клавиатуры.
   |            
 
 
 
 
 
  
  |