Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algoritmizatsia.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
131.43 Кб
Скачать

21)Комбинированный тип данных.

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

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

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

Type Anketa1=Record

FIO: String[50];        {поля}

Pol: Char;

Dat: String[16];        {записи}

Adres: String[50];

Curs: 1..5;             (или элементы)

Grup: 1..10;

Stip: Real              {записи}

End;

Var Student: Anketa1;

Такая запись, так же как и соответствующее ей дерево, называется двухуровневой.

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

<имя переменной>.<имя поля>

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

Student.Curs:=3 ;

Поля записи могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом (рис.36).

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

Type Anketa2=Record

FIO: String[50];

Pol: Char;

Dat: Record

God: Integer;

Mes: String[10];

Den: 1..31

End;

Adres: Record

Gorod: String[20];

UlDomKv: String[30];

End;

Curs: 1..5 ;

Grup: 1..10;

Stip: Real

End;

Var Student: Anketa2;

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

Например, student.Dat.God; student.Adres.Gorod.

Приведем структурограмму задания комбинированного типа (рис.37).

В программе могут использоваться массивы записей. Если на факультете 500 студентов, то все анкетные данные о них можно представить в массиве: Var Student: Array[1..500] Of Anketal;

В таком случае, например, год рождения пятого в списке студента хранится в переменной student[5].Dat.God.

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

For I:=1 То 500 Do

With Student[I] Do

Begin

Write('Ф.И.0.:'); ReadLn(FIO);

Write('Пол (м/ж):'); ReadLn(Pol);

Write('Дата рождения:'); ReadLn(Dat);

Write('Адрес:'); ReadLn(Adres);

Write('Курс:'); ReadLn(Curs);

Write('Группа:'); ReadLn(Grup) ;

Write('Стипендия (руб.):'); ReadLn(Stip)

End;

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

With <переменная типа запись> Do <оператор>;

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

22)Работа с файлами записей.

Чаще всего записи используются как элементы файлов, составляющих компьютерные информационные системы. Рассмотрим примеры программ, работающих с файлами записей.

Пример 1. Сформировать файл FM.dat, содержащий экзаменационную ведомость одной студенческой группы. Записи файла состоят из следующих элементов: фамилия, имя, отчество; номер зачетной книжки; оценка.

Program Examen;

Type Stud=Record

FIO: String[30];

Nz: String[6];

Mark: 2..5

End;

Var Fstud: File Of Stud;

S: Stud;

N,I: Byte;

Begin

Assign(Fstud,'FM.DAT'); Rewrite(Fstud);

Write('Количество студентов в группе?');

ReadLn(N);

For I:=1 To N Do

Begin

Write(I:1,'-й,Фамилия И.О.'); ReadLn(S.FIO);

Write('Номер зачетки:'); ReadLn(S.Nz);

Write('Оценка:'); ReadLn(S.Mark);

Write(Fstud,S)

End;

WriteLn('Формирование файла закончено!');

Close(Fstud)

End.

Установка указателя на нужный элемент файла производится процедурой

Seek(FV,n)

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

Program New_Marks;

Type Stud=Record

FIO: String[30];

Nz: String[6] ;

Mark: 2..5

End;

Var Fstud: File Of Stud;

S: Stud;

N: Integer;

Begin

Assign(Fstud,'FM.DAT');

Reset(Fstud) ;

Write('Номер в ведомости?');

ReadLn(N);

While N<>9999 Do

Begin

Seek(Fstud,N-l);

Read(Fstud,S);

Write(S.FIO,'оценка?');

ReadLn(S.Mark);

Seek(Fstud,N-l);

Write(Fstud,S);

Write('Номер в ведомости?');

ReadLn(N);

End;

WriteLn('Работа закончена!');

Close(Fstud)

End.

23) Подпрограммы. Назначения подпрограмм.

Это средства, позволяющие использовать многократно в разных местах, основой программы один раз описанный формой алгоритма

Объявление (типы, переменные, константы) использующие любой подпрограммой, относятся к одной из 2 категорий

Локальные объявления принадлежат подпрограмме, описание внутри нее и могут использоваться только ею.

Глобальные объявления принадлежат программе в целом и доступны как самой программе, так и всем ее подпрограммам

Если имя глобального объявления совпадают с именем локального, то внутри подпрограммы обычно объявление интегрируется как локальное, и все изменения, вносимые, напрямую в знаечние такой переменной актуальны в рамках подпрограммы

Обычно, функция используется в том случае, если результатом подпрограммы должна быть скалярная (простая) величина. Тип результата называется типом функции.

Синтаксис описания функции

Function < имя функции>/<список формальных параметров>/:<тип функции>;

Как и у процедуры, у функции могут присутствовать параметры – переменные и параметры – значения. Все они являются аргументами функции. Если аргументы передаются глобально, то параметры функции могут отсутствовать.

24) Процедуры, отличие процедуры от функции

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

25) Функции, отличие функции от процедуры

Функция – это подпрограмма, которую вызывают, чтобы выполнить какие-то расчеты или проверки. Когда она завершает работу, то возвращает управление вызывающей программе и передает ей результат расчета. 

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

Разница между процедурами и функциями именно в том что функция может возвращать результ а процедура нет, чтобы получать из процедуры какой либо результ можно в нее подставить параметр-переменную : var i:integer Разница между параметром-переменной и параметром-константой (s:string) есть в том что изменения параметр-переменной после окончания работы с процедурой сохраняются в ту переменную которую подставили : q(as,ii); вот в данном случае ii - параметр-переменная, обязательно должна быть обьявленна, и расчеты с этим параметром обязательно возвращаются в эту переменную. т.е. нельзя обьявить

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]