Мегаобучалка Главная | О нас | Обратная связь


Производные типы данных



2016-01-26 697 Обсуждений (0)
Производные типы данных 0.00 из 5.00 0 оценок




Величины производного типа — это структурированные величины, состоящие из фиксированного числа компонент (полей) разного типа. Производный тип имеет еще и другие названия — структура или запись.

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

 

Такая структура называется одноуровневым деревом. В Фортране эта информация может храниться в одной переменной производного типа. Задать тип и описать соответствующую переменную можно следующим образом:

Type Exam !имя типа

character(50)name !1-е поле

integer(1) mark1 !2-е поле

integer(1) mark2 !3-е поле

integer(1) mark3 !4-е поле

End type Exam

Type (Exam) Student ! Переменная производного типа

Общий формат оператора объявления производного типа:

TYPE имя_типа

компоненты (поля) структуры

END TYPE

Общий формат объявления переменной производного типа:

TYPE (имя_типа) имя_переменной

К каждому элементу переменной производного типа можно обратиться, используя составное имя, которое имеет следующую структуру:

имя_переменной%имя_поля

Например, student%name; student%mark2 и т.п. Если, например, требуется полю "mark1" присвоить значение "3", то это делается так:

Student%mark1 = 3.

Поля структуры могут иметь любой тип, в частности, сами могут быть структурами. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 1-го уровня). Например, если к предыдущим данным нужно еще добавить дополнительные сведения о студенте (его реквизиты): номер зачетной книжки, курс, группу, в которой учится студент, то всю эту информацию можно представить двухуровневым деревом:

Type Sveden

character(50)name

integer(2) nomer

integer(1) kurs

character(6) grup

End type Sveden

Type Exam

Type(Sveden)rekviz !Поле типа Exam является структурой

integer(1) mark1 !Тип этой структуры должен

integer(1) mark2 !быть описан выше

integer(1) mark3

End type Exam

Type (Exam) Student ! Переменная производного типа

 

Теперь, чтобы присвоить студенту определенную фамилию и инициалы, надо написать в программе:

Student%rekviz%FIO=`Иванов Н.Н.`

 

Производный тип данных могут иметь элементы массива. Например, массив со сведениями о результатах сдачи сессии студентами группы из 30 человек может быть описан так:

Type(exam) group(30).

Конструктор структуры

Конструктор структуры – это константа описанного производного типа. Ее формат следующий:

Имя_типа(список_значений_полей).

Например:

еxam(`Иванов Н.Н.`,3,4,5).

Конструктор можно использовать при инициализации структуры.

Type(exam)::student = еxam(`Иванов Н.Н.`,3,4,5).

Конструктор можно использовать в операторе присваивания:

Student= еxam(`Иванов Н.Н.`,3,4,5).

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

Group=exam(`None`,0,0,0).

Или присвоить значения отдельному элементу массива:

Group(5)=exam(`Ильин А.Б.`,4,5,5).

Пример 1. Ввести с клавиатуры сведения об оценках 30 студентов группы. Получить на экране список из Ф.И.О. и суммы набранных баллов каждым студентом.

Type exam

Character(20) name

Integer mark(3) !оценки организованы в массив

End type exam

Type(exam)group(30) !объявлен массив производного типа

Print(`Вводите данные`)

Doi=1,30

Print *, I,`-й студент:`

Read *, group(i) !При вводе поля следует отделять

!пробелами

Enddo

Print *, `Суммы баллов`

Do i=1,30

Write(*,`(1X,A20,I4`) group(i)%name, group(i)%mark(1) + &

Group(i)%mark(2) + group(i)%mark(3)

Enddo

End

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

Пример 2. Дан текстовый файл с результатами экзаменов, сданных студентами. Число студентов может быть любым. Создать текстовый файл, содержащий фамилии студентов и суммы набранных баллов.

Type exam

Character(20) name

Integer mark(3) !оценки организованы в массив

End type exam

Type(exam)stud !объявлена переменная производного типа

Open(1, file=`examen.txt`)

Open(2, file=`result.txt`)

Write(2,*) `Results of examination`

Do while(.not.EOF(1))

Read (1,*) stud

Write(2,`(1X,A20,I4)`) stud%name, stud%mark(1)+ &

stud%mark(2) + stud%mark(3)

Enddo

Close(2)

End

Пример 3. Сведения о результатах экзаменов хранятся в текстовом файле exam.txt прямого доступа. В запись номер 20 нужно внести изменение: поменять оценку по второму экзамену на 5 (студент пересдал экзамен).

Type exam

Character(20) name

Integer mark(3)

End type exam

Type(exam)stud !объявлена переменная производного типа

Open(1, file=`examen.txt`, access=`direct`, recl=26)

Read(1,10, rec=19)stud !читается 20-я запись

Stud%mark(2)=5 !присваивается новое значение поля

Backspase 1 !возврат на 1-ю запись

Write(1, 10) stud !перезапись

10 FORMAT(A20, 3I2)

End

 

Напомним, что в файле прямого доступа все записи имеют одинаковую длину. В данном примере длина равна 26 байт: 20 байт – фамилия, и по 2 байта на каждую оценку.

Упражнения

1. Описать структуру, содержащую сведения о рейсе самолета.

2. Описать массив записей, содержащий таблицу Д.И. Менделеева. Составить программу заполнения массива.

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

4. Сведения о деталях, хранящихся на складе, содержат следующие атрибуты: название, количество, стоимость одной детали. Составить программы, решающие следующие задачи:

а) заполнить файл с информацией о деталях на складе;

б) вычислить общую стоимость деталей;

в) выяснить, какие детали имеются в наибольшем количестве, какие — в наименьшем;

г) вывести информацию о наличии на складе деталей данного типа и их количестве;

д) внести изменения в файл после выдачи со склада определенного количества данного вида деталей. Если какой-то тип деталей полностью выбран со склада, то уничтожить запись о ней в файле.

 



2016-01-26 697 Обсуждений (0)
Производные типы данных 0.00 из 5.00 0 оценок









Обсуждение в статье: Производные типы данных

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

Отправить сообщение

Популярное:
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (697)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)