Сформировать запись, имеющую следующую структуру




МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (ДГТУ)

КОЛЛЕДЖ ЭКОНОМИКИ, УПРАВЛЕНИЯ И ПРАВА

Шинакова С.В.

Методические рекомендации по учебной практике

Для студентов 2 курса специальности 230105 ПОВТ и АС

Дисциплина: Основы алгоритмизации и программирования

Тема №4 «Работа с записями и множествами»

Ростов-на-Дону


Рассмотрены на заседании Ц(П)К специальности 230105.51 Программное обеспечение вычислительной техники и автоматизированных систем

«07» апреля 2011 г. Протокол № 8

Председатель Ц(П)К _____________ Шинакова С.В.


Практическая работа № 4

Тема: «Работа с записями и множествами»

Цель работы

Изучить принципы работы с записями на языке Pascal.

Задачи работы

Научиться основным алгоритмам решения задач с использованием записей на языке Pascal.

Порядок выполнения работы

3.1. В среде программирования Turbo Pascal или Pascal ABC составить и отладить программу решения задачи тему «Работа с записями», согласно приложениям А, Б и В.

3.2 Проанализировать полученные результаты.

3.3 Составить отчет о проделанной работе.

Требования к отчету

Отчет по работе должен содержать:

-название, цель работы;

-номер варианта для выполнения задания и условие своего варианта;

-текст (листинг) программы;

-полученные при расчетах результаты;

-ответы на контрольные вопросы (по желанию).

 

Теоретические положения

Запись – это структура данных, состоящая из фиксированного числа компонент, называемых полями. Каждое поле имеет свой идентификатор и тип. К компонентам записи возможен прямой доступ и они могут выборочно обновляться. Идентификатор в самой записи должен быть уникальным. Для обращения к отдельным полям записи указываются составные имена: имя записи, после которого ставится точка и записывается идентификатор поля. Запись можно передавать в качестве параметра процедуры или функции, но значением функции запись быть не может.

В общем виде описание типа для записи можно представить:

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.

Решение типовых задач

Работа с записями»

Составить программу, выводящую на экран информацию о студентах (фамилия, дата рождения, возраст). Осуществить поиск по фамилии и вывести на экран количество совпадений.

program list15;

const n=3;

type gr=record

fio:string[20];

dr:string[10];

age:byte;

end;

var

a:array[1..n] of gr;

l,i:integer;

m:string[20];

begin

{Ввод данных}

i:=0; l:=0;

repeat

i:=i+1;

writeln('Введите данные ',i,' сотрудника');

writeln('Введите фамилию');

readln(a[i].fio);

writeln('Введите дату рождения');

readln(a[i].dr);

writeln('Введите возраст');

readln(a[i].age);

until i=n;

{Вывод данных}

for i:=1 to n do

begin

writeln('********************************');

writeln('Фамилия ',a[i].fio);

writeln('Дата рождения ',a[i].dr);

writeln('Возраст ',a[i].age);

writeln('********************************');

end;

{Поиск фамилии в списке}

writeln('Введите фамилию для поиска');

readln(m);

for i:=1 to n do

begin

if a[i].fio=m then

begin

l:=l+1;

writeln('********************************');

writeln('Фамилия ',a[i].fio);

writeln('Дата рождения ',a[i].dr);

writeln('Возраст ',a[i].age);

writeln('********************************');

end;

end;

writeln('Фамилия ',m,' встречается ',l,' раз ');

readln

end.

Работа с множествами»

1. Описать множество М(1..50). Сделать его пустым. Вводя целые числа с клавиатуры, заполнить множество 10 элементами.

Program Inpu_Mno;

Var m:set of 1..50;

X,i:integer;

Begin

M:=[];

For i:=1 to 10 do

Begin

Write(‘Введите ’,I,’ –й элемент множества: ‘);

Readln(x);

If (x in m) then {Если введенное число входит в множество М}

Begin

Writeln(x,’Помещен во множество 1..50’);

M:=M+[x];

End;

End;

Writeln;

End.

 

2. Создать программу с контролем ввода данных, обеспечив ввод фамилии, имени и отчества только на русском языке.

 

Program Foi_Rus;

Uses crt;

Var Litera: set of char;

N:string;

Ch: char;

Rus: Boolean;

Begin

Litera:=[‘ ’,’A’,..,’п’,’р’,..,’я’];

Write(‘Введите фамилию, имя, отчество’);

Repeat {Считать всю строку N}

Repeat {Считать один символ, входящий в множество Litera}

Ch:=ReadKey; {Считать в Ch код нажатой клавиши}

If ch<>#13 then

Begin

Rus:=ch in Litera;

If Rus then

Begin

N:=N+Ch; {Приклеить введенный символ к N}

Write(Ch); {Напечатать введенный символ в строке ввода}

End

Else {Код нажатой клавиши не входит в множество Litera}

Begin

Writeln(‘Переключитесь в русский регистр’);

Write(‘и введите Ваше имя ’);

End;

End;

Until Rus; {Завершить ввод очередного символа на русском языке}

Until Ch=#13; {Завершить ввод строки N, т.к. нажата клавиша Enter}

Writeln;

Writeln(‘Здравствуйте, ’,N);

End.

 

 

7 Контрольные вопросы

1. Что такое множество?2. Способы описания множества.3. Какие операции над множествами вы знаете?4. Присвоение для переменных типа множество.5. Как записываются операции над множествами в языке программирования Pascal?6. Что такое конструктор множества и когда он применяется?7. Как объявляются (декларируются) переменные типа множество?8. Что такое пустое множество и как оно задаётся?9. Как организовать вывод элементов множества?10. Что такое тип данных запись?11. Как объявляются записи?12. Что такое уточнённое имя?13. Какие операции допустимы над элементами (полями) записи?14. Чем отличается запись от массива?15. Какие операции допустимы над записью в целом?16. Каково назначение оператора присоединения?17. Что такое записи с вариантами?18. Как используются записи?19. Как обратиться к элементу записи?20. Способы описания записи?

Приложение А

 

1. Составить программу, выводящую на экран меню детского кафе (наименование изделия, вес, стоимость).

2. Составить программу, выводящую на экран студенческую ведомость (Ф. И. О., оценки за три экзамена, средний балл).

3. Составить программу, выводящую на экран расписание движения поездов (станция отправления, станция прибытия, время прибытия, время в пути).

4. Составить программу, выводящую на экран меню ресторана "Дракон" (наименование изделия, вес, стоимость).

5. Составить программу, выводящую на экран анкетные данные студентов (Ф. И. О., год рождения, адрес, сведения о родителях).

6. Составить программу, выводящую на экран список книг домашней библиотеки (автор, название книги, издательство, год издания, стоимость).

7. Составить программу, выводящую на экран расписание экзаменов и зачетов (предмет, вид отчетности, число, преподаватель).

8. Составить программу, выводящую на экран сведения о студентах (Ф. И. О., курс, группа, номер зачетки, средний балл).

9. Составить программу, выводящую на экран сведения о периодических изданиях (наименование издания, тираж, годовая стоимость).

10. Составить программу, выводящую на экран расписание учителя (номер урока, время начала урока, класс, предмет, номер кабинета).

11. Составить программу, выводящую на экран расписание полетов самолетов (пункт посадки, время отправления, время прибытия, время полета, стоимость билета).

12. Составить программу, выводящую на экран перечень товаров, имеющихся в продаже в магазине "Океан" (наименование, единица измерения, цена, количество).

13. Составить программу, выводящую на экран информацию о наличии товаров на складе (наименование, артикул, дата получения, единица измерения, количество, цена).

14. Составить программу, выводящую на экран "Телефонный справочник" (Ф. И. О., адрес, номер телефона).

15. Составить программу, выводящую на экран график отпусков (Ф. И. О., дата начала отпуска, дата выхода на работу, количество дней).

16. Составить программу, выводящую на экран инвентаризационную ведомость (инвентаризационный номер, наименование, дата учета)

17. Составить программу, выводящую на экран ведомость начисленной заработной платы (Ф.И.О., должность, год и дата рождения, заработная плата).

18. Составить программу, выводящую на экран график изменения температуры по дням недели (дата, день недели, температура, влажность).

19. Составить программу, выводящую на экран информацию о тестируемом (Ф.И.О., IQ, возраст).

20. Составить программу, выводящую на экран график движения автобусов (№ рейса, время в пути, Ф.И.О. водителя).

 


Приложение Б

1. Сформировать запись, имеющую следующую структуру
type имя=record ФИО; пол:(м,ж); рост:140..200 end;

и определить:

o средний рост женщин;

o имя самого высокого мужчины;

o есть ли в группе хотя бы два человека одного роста.

 

2. Сформировать запись, имеющую следующую структуру
type имя=record
ФИО: string; число:1..31; месяц:1..12; год:1900..1996; пол:(м,ж); end;

и определить:

o фамилию самого старшего мужчины;

o все фамилии, начинающиеся с заданной буквы;

o список людей, родившихся в заданном месяце.

3. Сформировать запись, имеющую следующую структуру
type знакомый=record

фамилия:string; номертел:10000..99999; адрес:string; end;

и определить:

o есть ли в книжке телефон данного человека;

o кому принадлежит данный телефон;

o список людей, живущих на данной улице.

4. Сформировать запись, имеющую следующую структуру
type студент= record

фамилия: string; номергр: string; оценка1: integer; оценка2: integer; оценка3: integer; end;

и определить:

o фамилию того, кто лучше всех сдал экзамены;

o средний балл по данному предмету;

o список задолжников.

5. Сформировать запись, имеющую следующую структуру
type студент= record

фамилия:string; имя:string; пол:(м,ж); возраст:16..35; курс:1..5; end;

и определить:

o курс, на котором наибольший процент мужчин;

o самые распространенные женские и мужские имена;

o список студентов данного пола, данного курса.

6. Сформировать запись, имеющую следующую структуру
type пассажир=record

фамилия:string; имя:string; номер рейса:string; количество вещей:integer; общий вес: integer; end;

и определить:

o рейс с максимальным весом багажа;

o пассажира с наибольшим количеством вещей;

o вывести список пассажиров и информацию об их багаже, улетающих данным рейсом.

7. Сформировать запись, имеющую следующую структуру
type владелец=record

фамилия:string; адрес:string; марка автомобиля:string; рег. номер:string; год выпуска:1900..2000; end;

и определить:

o количество автомобилей каждой марки;

o владельца самого старого автомобиля;

o фамилии владельцев и номера автомобилей данной марки.

8. Сформировать запись, имеющую следующую структуру
type ребенок=record

фамилия:string; адрес:string; пол:(муж,жен); количество дней посещения:integer; end;

и определить:

o самого болеющего ребенка;

o кто больше болеет мальчики или девочки;

o список детей проживающих на данной улице.

9. Сформировать запись, имеющую следующую структуру
type книга=record

автор:string; название:string; год издание:integer; издательство:string; количество страниц:integer; end;

и определить:

o есть ли в библиотеке книги данного автора;

o найти книгу с наибольшим количеством страниц;

o найти названия книг данного автора, изданных с указанного года, в данном издательстве.

10. Сформировать запись, имеющую следующую структуру
type товар=record

наименование:string; страна:string; объем партии:integer; цена:integer; end;

и определить:

o страну, в которую экспортируется товар на максимальную сумму;

o список стран, в которые экспортируется данный товар;

o найти товары, который имеет минимальный объем партии.

11. Сформировать запись, имеющую следующую структуру
type игрушка=record

название:string; цена:integer; возраст1:1..16; возраст2:1..16; end;

и определить:

o название самой дорогой игрушки;

o список игрушек, которые подходят детям данного возраста;

o подобрать игрушки на данную сумму денег (все варианты).

12. Сформировать запись, имеющую следующую структуру
type игрушка=record

название:string; цена:integer; цвет:string; возраст1:1..16; возраст2:1..16; end;

и определить:

o название игрушек, цена которых не превышает данную и которые подходят детям данного возраста;

o найти самую дешевую игрушку данного названия;

o найти самый распространенный цвет игрушек.

13. Сформировать запись, имеющую следующую структуру
type пассажир=record

фамилия:string; имя:string; номер рейса:string; количество вещей:integer; общий вес:integer;

end;

и определить:

o число пассажиров, количество вещей которых превосходит среднее число вещей;

o пассажира с данным количеством вещей и не более данного веса;

o вывести информацию о количестве вещей и общем весе каждого рейса.

14. Сформировать запись, имеющую следующую структуру
type спортсмен=record

фамилия:string; страна:string; рост:150..220; вес:30..100; год рождения:ineger; результат:integer; end;

и определить:

o средний рост и вес спортсменов данной страны;

o найти лучшего спортсмена данной страны;

o список спортсменов данного возраста с результатом, не хуже данного.

Сформировать запись, имеющую следующую структуру

type спортсмен=record

фамилия:string; страна:string; тренер:string; год рождения:ineger; результат:integer; end;

и определить:

o найти самого молодого спортсмена, занимающегося у данного тренера;

o найти лучшего тренера данной страны;

o список тренеров с указанием страны.

16. Сформировать запись, имеющую следующую структуру
type предмет=record

название:string; количество часов:integer; преподаватель:string; кафедра:string; форма отчетности:(зачет,экзамен); end;

и определить:

o преподавателя, у которого самое большое количество часов;

o список предметов, по которым сдают экзамен;

o кафедру и преподавателя, который ведет данный предмет.

17. Сформировать запись, имеющую следующую структуру
type предмет=record

название:string; количество часов:integer; преподаватель:string; кафедра:string; форма отчетности:(зачет,экзамен); end;

и определить:

o преподавателя, который принимает больше всего экзаменов;

o кафедру, на которой читается больше всего предметов;

o список преподавателей данной кафедры.

18. Сформировать запись, имеющую следующую структуру
type предмет=record

название:string; количество часов:integer; преподаватель:string; кафедра:string; форма отчетности:(зачет,экзамен); end;

и определить:

o найти среднюю нагрузку по данной кафедре;

o найти количество зачетов и экзаменов у данного преподавателя;

o список предметов, читаемых данной кафедрой.

19. Сформировать запись, имеющую следующую структуру
type преподаватель=record

фамилия:string; предмет:string; факультет:string; курс:1..5; количество часов:integer; end;

и определить:

o преподавателя имеющего самую большую нагрузку;

o список предметов, которые читает данный преподаватель;

o объем часов на данном факультете и данном курсе.

20. Сформировать запись, имеющую следующую структуру
type студент=record

фамилия:string; предмет:string; оценка:integer; количество часов:integer; end;

и определить:

o определить предмет, по которому наивысшая оценка;

o рассчитать средний балл;

o объем часов по всем предметам.

 


Приложение В

 

1. Из множества целых чисел 1..100 выделить множество чисел, на которые делится без остатка число 444. Вывести это множество на экран.2. Из множества латинских букв выделить множество, состоящее из символов, не входящих во множество символов составляющих ваше имя. Вывести это множество на экран.3. Определить и вывести на экран множество символов входящих одновременно в имя, отчество, и фамилию, введённые с клавиатуры.4. Определить и вывести на экран множество символов входящих только в имя, отчество или фамилию, введённые с клавиатуры.5. Определить и вывести на экран множество символов входящих в диапазон '0'..'9' и не входящих в множество символов, составляющих дату рождения, введённую с клавиатуры.6. Из множества целых чисел 1..100 выделить множество чисел, являющихся, в свою очередь, квадратами целых чисел.7. Из множества целых чисел вводимых с клавиатуры в линейную таблицу из 10-ти элементов, выделить множество чисел кратных минимальному числу этой таблицы.8. Написать программу вычисления суммы мест, на которых в слове Х стоят гласные буквы.9. Имеется множество Lat(‘a’..’z’). придумайте простейший способ для вывода на печать его содержимого.10. Создать программу, демонстрирующую операции над множествами (объединение, пересечение и разность). Известно, что множество М1={2,4,6,8}, М2={0,1,2,3,5}, М3={1,3,5,7,9}.11. Описать множество Pr(1..20) и поместите в него все простые числа в диапазоне 1..20. в цикле организуйте ввод чисел в диапазоне 1..20 и определите, простые они или нет. Выход из цикла – введенное значение, равное 99.12. Описать множества R и L, содержащие русские и латинские буквы. В цикле вводите русские и латинские буквы и выводите соответствующее сообщение. Выход из цикла – введенная буква Z.13. Описать множества М1(1,2,3) и М2(1,4,2,5). Получите результирующее множество М3=М1*М2. Определите, содержатся ли в М3 элементы 1 и 2.14.Описать множества М1(1,2,3,4) и М2(3,4,1). Получите результирующее множество М3=М1-М2. Определите, содержится ли в М3 элемент 2.15. Описать множества М1(1,2) и М2(5,6). Получите результирующее множество М3=М1+М2. Определите, содержатся ли в М3 элемент 7.16. Описать множества М1(1,2,3) и М2(1,2,3,4).Сравнить эти два множества с использованием операции <=.17. Описать множества М1(‘a’,’b’,’c’) и М2(‘a’,’c’).Сравнить эти два множества с использованием операции >=.18. Описать множества М1(‘a’,’b’) и М2(‘b’,‘a’,’c’).Сравнить эти два множества на неравенство.19. Описать множества М1(1,2) и М2(2,1).Сравнить эти два множества на равенство.20. Описать множество Alf(‘a’..’я’). Ввести слово с клавиатуры и проверить, принадлежат ли все символы слова множеству Alf.


Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-26 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: