Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Теоретические сведения. Цель работы– ознакомление с правилами оформления записи в программе; исследование порядка доступа к полям записи




ЗАПИСИ

 

Цель работы – ознакомление с правилами оформления записи в программе; исследование порядка доступа к полям записи.

Постановка задачи:

1. Исходные данные считать из предварительно созданного текстового файла, используя для этого процедуру. Количество записей в файле до начала чтения из него не должно быть известно.

2. Выполнить заданные действия, каждое из которых оформить в виде подпрограммы.

3. Результаты вывести в текстовый файл. Вывод результатов должен производиться специально созданной для этого процедурой.

4. Весь обмен данными между подпрограммами и основной программой осуществлять через параметры.

 

Определение

Запись – структура, состоящая из конечного числа компонент, называемых полями.

Компоненты записи (поля) могут принадлежать разным типам. Компонента (поле) – переменная некоторого типа.

Описание.

а) type <имя типа> = record

поле1: тип поля1;

поле2: тип поля 2;

…………………………

поле n: тип поля n

end;

var a: <имя типа>;

б) var a: record

…..

end;

в) допускается переменные одного типа записывать через запятую:

Поле2, поле3: тип полей 1 и 2;

Примеры:

Type TPoint = record

x: real;

y: real;

End;

Var Point: Tpoint;

 

Type TPoint = record

x,y: real;

End;

 

Var Point: record

x,y: real;

End;

 

Типизированные константы

При введении исходных данных в виде типизированных констант приходится использовать явное указание на идентификатор поля. Например, для ввода координат точки при использовании модуля GRAPH можно воспользоваться зарезервированным типом точки:

Type TPoint = record

x,y: real;

End;

 

Const Point: TPoint = (x: 2.0; y: -1.5);

Вызов в программе: <имя переменной>.<имя поля>, например, Point.х.

Имя поля неизменно во всей программе, если идентификатор рассматривается как идентификатор поля данной записи. Вне записи этот же идентификатор может означать совершенно другую величину.

Таким образом, имя поля как идентификатор может использоваться только совместно с записью:

<идентификатор записи >.< имя поля >.

Например, Var Point: record

x,y: real;

End;

x: string;

Point.x:=1.5;

x:=’some’;

Переменная х, описанная в программе, и Point.х – разные переменные.

Составные записи, поля-массивы, массивы записей

Поле записи может иметь тип «запись», «массив». Массив в свою очередь может состоять из записей. В качестве примера рассмотрим набор (массив) многоугольников.

 

Program Polygons;

Const MaxNumVert = 125;

MaxNumPol=125;

Type TPoint = record {точка}

x,y: real;

End;

TPolygon = record {многоугольник}

Num_vert: 1.. MaxNumVert; {количество вершин}

{вершины многоугольника}

Vertex: array [1.. MaxNumVert] of TPoint;

End;

{набор многоугольников}

Var Polygon: array [1.. MaxNumPol] of Tpolygon;

X: real;

Polygon[4].Vertex[2].x:= x + Polygon[4].Vertex[2].x;

Polygon[4].Vertex[2].y:= 2+ Polygon[4].Vertex[2].y;

В приведенной программе x и Polygon[4].Vertex[2].x – различные числа, различные области памяти.

 

Оператор присоединения: with <имя записи> do <оператор>

Как видим, «добраться» до поля не так просто. Однако если в какой-то части программы осуществляют операции с конкретной записью, то можно упростить действия, применив оператор

WITH <Имя записи> DO.

Начиная с момента введения оператора WITH, имена полей указанной записи можно употреблять без указания имени текущей записи. Например, последний пример можно записать так:

with Polygon[4] do

begin

Vertex[2].x:= x + Vertex[2].x;

Vertex[2].y:= 2+ Vertex[2].y;

End;

with Polygon[4] do

with Vertex[2] do

begin

x:= Polygons.x + x; {имя программы}

y:= 2+ y;

еnd;

или так:

with Polygon[4].Vertex[2] do

begin

x:= Polygons.x + x; {имя программы}

y:= 2+ y;

end;

При использовании оператора With могут происходить казусы, если некоторый Ваш идентификатор совпадает по имени с именем поля. Этого следует избегать путем изменения имени внешнего идентификатора (так как имя поля в описании жестко зафиксировано) или употребления имени программы в качестве расширения, как это сделано в последних примерах.

Пример:

Определить самого старшего рабочего бригады из нескольких (не более 10) человек, если сведения о рабочих включают:

· фамилию;

· год рождения.

Программа расчета:

program lab9; {ЧТЕНИЕ, ОБРАБОТКА И ВЫВОД ЗАПИСЕЙ}

uses crt;

type birthday=record {ТИП-ЗАПИСЬ}

name:string[15]; {ПОЛЕ-ИМЯ}

year:word {ПОЛЕ-ГОД РОЖДЕНИЯ}

end; {birthday}

arr=array[1..10] of birthday; {ТИП-БРИГАДА}

var a:arr; {ПЕРЕМЕННАЯ-БРИГАДА}

b:birthday; {САМЫЙ СТАРШИЙ}

n:byte; {КОЛИЧЕСТВО ВСЕХ РАБОЧИХ}

fi,fo:text; {ФАЙЛОВЫЕ ПЕРЕМЕННЫЕ}

{------- ПРОЦЕДУРА ЧТЕНИЯ ФАЙЛА: ----------------------------}

procedure Read_File (var f:text; var a:arr; var n:byte);

{ВЫХОДНЫЕ ПАРАМЕТРЫ: ПЕРЕМЕННЫЕ a, n}

var i:byte;

begin

reset (f); {ОТКРЫВАЕТСЯ ФАЙЛ ДЛЯ ЧТЕНИЯ}

i:=0; {НАЧАЛЬНОЕ ЗНАЧЕНИЕ КОЛИЧЕСТВА ЗАПИСЕЙ}

while not SeekEOf(f) do {ЧТЕНИЕ ДАННЫХ ДО КОНЦА ФАЙЛА}

begin

i:=i+1; {ПОДСЧИТЫВАЕМ КОЛИЧЕСТВО ЗАПИСЕЙ}

with a[i] do readln (f,name,year);

end;

close (f);

end;

{------- ПРОЦЕДУРА ОБРАБОТКИ ИНФОРМАЦИИ: -------------------}

procedure Work (a:arr; n:byte; var b:birthday);

{ВЫХОДНОЙ ПАРАМЕТР: ПЕРЕМЕННАЯ b --САМЫЙ СТАРШИЙ}

var i:byte;

begin {ПОИСК САМОГО СТАРШЕГО}

b:=a[1];

for i:=1 to n do

if a[i].year<b.year then b:=a[i];

end;

{------- ПРОЦЕДУРА ЗАПИСИ РЕЗУЛЬТАТОВ В ФАЙЛ: -------------}

procedure Write_File (var f:text; a:arr; n:byte; b:birthday);

{ВСЕ ПАРАМЕТРЫ --- ВХОДНЫЕ}

var i:byte;

begin

rewrite (f);

writeln (f,' Ф.И.O. ГОД РОЖДЕНИЯ');

writeln (f,'------------------------------------------');

for i:=1 to n do

with a[i] do writeln (f, name:-15, year:9);

writeln(f); writeln (f,' САМЫЙ СТАРШИЙ:'); writeln(f);

writeln (f, b.name:-15, b.year:9);

close(f);

end;

{----------- ОСНОВНАЯ ПРОГРАММА --------------------------}

begin

clrscr;

assign (fi,'input9.pas'); {ИНИЦИАЛИЗАЦИЯ ФАЙЛА ИСХ. ДАННЫХ}

assign (fo,'output9.pas');{ИНИЦИАЛИЗАЦИЯ ФАЙЛА РЕЗУЛЬТАТА}

Read_File (fi,a,n); { ВЫЗОВ ПРОЦЕДУРЫ ЧТЕНИЯ ИЗ ФАЙЛА }

if n=0 then writeln ('ФАЙЛ ИСХОДНЫХ ДАННЫХ - ПУСТОЙ');

else begin

Work(a,n,b); { ВЫЗОВ ПРОЦЕДУРЫ ОБРАБОТКИ}

Write_File(fo,a,n,b);{ВЫЗОВ ПРОЦЕДУРЫ ЗАПИСИ В ФАЙЛ}

writeln('РЕЗУЛЬТАТЫ СМОТРИТЕ В ФАЙЛЕ OUTPUT9.PAS');

end;

repeat until keypressed;

end.

 

Файл исходных данных Input9.pas: Файл результата Output9.pas:
Иванов И.И. 1975 Сидоров С.П. 1961 Петров М.И. 1974 Павлов Л.В. 1977 Потапов В.М. 1966   Ф.И.O. ГОД РОЖДЕНИЯ ------------------------------------------ Иванов И.И. 1975 Сидоров С.П. 1961 Петров М.И. 1974 Павлов Л.В. 1977 Потапов В.М. 1966   САМЫЙ СТАРШИЙ:   Сидоров С.П. 1961

Варианты заданий

 

1. Составить массив записей из двух координат на плоскости в декартовой системе и номеров точек. Записать в текстовой файл 50 случайных чисел в диапазоне [-30, 30]. Считать эти числа из файла, интерпретировав как декартовые координаты 25 точек на плоскости и рассортировав в порядке удаления от центра тяжести. Вывести на экран пять наиболее удаленных точек.

2. Составить массив из 10 записей следующей структуры:

· фамилия, имя, отчество – строки из 20 символов;

· номер зачетки – строка из восьми символов;

· количество оценок – байт;

· оценки – массив байтов.

Отсортировать массив в порядке возрастания среднего балла. Вывести фамилию, имя, отчество и средний балл трех наиболее и трех наименее успевающих студентов.

 

3. Составить массив из пяти записей следующей структуры:

· фамилия президента;

· страна;

· возраст;

· годовой доход;

· марка любимого автомобиля.

Рассортировать массив в алфавитном порядке и вывести фамилии всех президентов.

 

4. Сформировать массив из 10 записей следующей структуры:

· строка из 50 случайных символов;

· два вещественных поля X, Y (заполнить случайными числами).

Рассортировать массив в порядке убывания поля X. Для каждой компоненты: если количество латинских символов в строке превышает количество русских символов, удвоить значение поля Y. Вывести исходный и преобразованный массивы.

 

5. Составить массив из 10 записей следующей структуры:

· целое поле (заполнить случайными числами в диапазоне

[-15, 15]);

· целое поле (заполнить случайными числами в диапазоне [0, 5]).

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

 

6. Составить массив из восьми записей следующей структуры:

· номер аптеки;

· адрес;

· количество лекарств;

· массив пяти записей с полями:

- название лекарства;

- цена;

- расфасовка.

Вывести общий список лекарств с указанием адресов аптек, ценами и расфасовкой.

 

7. Создать текстовый файл из пяти строк произвольной длины. Считать строки из файла, заполнив соответствующие поля массива из пяти записей следующей структуры:

· сама считанная строка;

· количество латинских букв;

· количество символов кириллицы;

· количество слов в строке.

Вывести строки в порядке убывания количества слов.

 

8. Составить массив из семи записей следующей структуры:

· название авиастроительной фирмы;

· годовой выпуск лайнеров;

· число заказов до 2000 года;

· годовой доход фирмы.

Вывести общий список рассматриваемых фирм и название фирмы с максимальным годовым доходом.

 

9. В магазин поступили четыре марки компьютеров. Сформировать массив из четырех записей со следующими полями:

· марка компьютера:

· стоимость;

· быстродействие (МГц);

· объем жесткого диска (Мб).

Считать данные и вывести в порядке возрастания стоимости компьютеров.

 

10. Составить массив из данных о пяти лучших «бомбардирах» последнего первенства мира по футболу, включив в них следующую информацию:

· фамилия игрока;

· страна;

· средняя результативность в национальном первенстве;

· сколько голов забил на чемпионате мира;

· за какой клуб выступает.

Вывести наиболее результативного в национальном первенстве «бомбардира».

 

11. Составить массив из десяти записей следующей структуры:

· строка случайных цифр длиной 80 символов;

· массив из 10 байтов.

Строки заполнить случайным образом. Массив должен содержать количество повторений для каждой цифры строки. Вывести данные в порядке убывания частоты повторений цифры 2.

 

12. Составить массив из пяти записей следующей структуры:

· строка длиной 50 символов (случайные латинские буквы и пробелы);

· количество слов в строке.

Словом считается группа символов до пробела. Вычислить количество слов для каждой компоненты, заменить все пробелы знаками "_". Вывести данные в порядке возрастания количества слов в строке.

 

13. Составить массив из десяти записей следующей структуры:

· строка случайных русских строчных букв длиной 80 символов;

· массив из 32 байтов.

Строки заполнить случайным образом. Массив должен содержать количество повторений каждой буквы в строке. Вывести все данные, а также данные элемента массива с минимально встречающейся буквой А.

 

14. Составить массив из пятнадцати записей следующей структуры:

· номер аудитории;

· корпус (задать перечисляемый тип);

· вместимость;

· назначение (задать перечисляемый тип: лекционная, лаборатория, общая).

Вывести информацию, рассортированную по полю «назначение», в три текстовых файла.

 

15. Сформировать массив данных для пяти веществ следующей структуры:

· название вещества;

· молекулярный вес;

· плотность;

· процентное содержание молекул кислорода.

Вывести данные о веществах с минимальным и максимальным молекулярным весом.

 

16. Составить массив данных об игроках сборной Украины по футболу. Элемент массива – запись с полями:

1) фамилия (стринг),

2) средняя результативность (вещественное число),

3) клуб (стринг),

4) год рождения (целое число).

Вывести список игроков сборной, которые моложе 1976 года рождения.

 

17. Составить массив из десяти записей следующей структуры:

· автор публикации;

· название публикации;

· вид публикации (задать перечисляемый тип: статья, книга, тезисы доклада);

· количество страниц;

· год издания.

Вывести данные, рассортированные в алфавитном порядке по фамилиям авторов.

 

18. Составить массив из пяти записей следующей структуры:

· четыре вещественных поля X, Y, Z, P;

· название планеты,

где X, Y, Z – пространственные координаты планет, Р – массы планет. Найти ближайшую и дальнюю от геометрического центра системы планеты.

 

19. Составить массив из пяти записей следующей структуры:

· название холодильника – строка 20 символов;

· цена – вещественное число;

· потребляемая мощность – целое число;

· вместимость (вещественное число).

Выбрать оптимальный холодильник по формуле:

вместимость / (цена * потребляемая мощность) = max.

 

20. Составить массив из 20 записей следующей структуры:

· строка из 40 произвольных символов;

· булевская величина;

· целая величина.

Проанализировать строки, убрав из них пробелы и цифры. Булевская величина должна содержать признак наличия цифр в строке. Целая величина должна содержать количество выброшенных цифр. Вывести весь массив.

 

21. Составить массив из пяти записей следующей структуры:

· строка из 20 произвольных символов;

· логический признак;

· целая величина.

Проанализировать строки, заменяя пробелы символом “_”. Логический признак содержит информацию, превышало ли количество пробелов в строке 2. Целая величина должна содержать количество замененных пробелов.

 

22. Составить массив из пяти записей следующей структуры:

· название столицы государства;

· запись с двумя полями:

- широта;

- долгота;

· население;

· средняя плотность населения на 1 км2.

Отсортировать массив в порядке близости к экватору.

 

23. Составить массив из шести записей следующей структуры:

· строка из 70 случайных символов (без цифр);

· целая величина.

Проанализировать строки, заменяя последовательности повторяющихся символов цифрой и данным символом. Целая величина должна содержать количество повторов в строке символа “В”.

 

24. Сформировать массив из четырех записей следующей структуры:

· название цитрусового;

· процентное содержание витамина С;

· процентное содержание сахара.

Отсортировать список в порядке убывания процентного содержания витамина С и определить цитрусовое с максимальным содержанием сахара в плодах.

25. Для ремонта телевизора требуется четыре вида деталей (транзистор, резистор, диод, тиристор). Сформируйте список данных о требуемых деталях, включающий в себя следующее:

· название;

· стоимость (дробное число);

· наличие в магазине (логический признак);

· требуемое количество.

Вывести список с данными о деталях, которых нет в магазине.

 

26. Данные о построенном доме включают в себя такие сведения:

· количество квартир;

· метраж (дробное число);

· этажность;

· признак наличия подземного гаража;

· название проекта по каталогу строительной фирмы.

Вывести данные о пяти построенных домах в алфавитном порядке названий проектов.

 

27. Основная информация о телевизорах имеет следующий вид:

· длина диагонали;

· масса изделия;

· цена;

· потребляемая мощность;

· наличие пульта дистанционного управления.

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

 

28. На вооружении армии США имеется три авианосца. Сформировать массив данных о них:

· название (присвойте самостоятельно);

· количество авиационных единиц на борту;

· наличие ядерного оружия;

· водоизмещение судна.

Вывести список кораблей с ядерным оружием на борту и данные корабля с максимальным водоизмещением.

 

28. Сформируйте массив данных о пассажирских самолетах, выпускавшихся ОКБ им. А.Н. Туполева, включив в него следующие характеристики:

· название изделия;

· вместимость салона;

· количество двигателей;

· наличие реверса тяги для торможения (признак);

· длина полета без дозаправки.

Определите данные самолета с максимальным радиусом полета и выведите общий список.

 

30. В Харькове три пассажирских железнодорожных вокзала. Сформировать данные о них:

· название;

· пассажиропоток (в сутки);

· транзитный или тупиковый;

· количество платформ;

· стоимость выхода на перрон.

Отсортировать весь список в порядке убывания пассажиропотока и вывести данные о тупиковых вокзалах.

 

 




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 287; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.119 сек.