- •Обращение к полям записи
- •Оператор with
- •Записи с вариантами
- •Рекурсия
- •Вычислить n!
- •Вычисления чисел Фибоначчи
- •Вычисления значений формул
- •Быстрая сортировка
- •Процедуры и функции общие для всех типов файлов
- •Режимы работы файла
- •Опция компиляции
- •Процедуры и функции модуля system
- •Процедуры и функции для типизированных файлов
- •Как добиться прямого доступа??
- •Стандартная конструкция редактирования файла
- •Тектовые файлы
- •Процедуры и функции для текстовых файлов
- •Способы считывания
- •Бинарные файлы
- •Работа с динамической памятью
- •Pointer
- •Дерево Absolute
- •Типизированные ( переменные ) указатели
- •Процедуры работы с кучей
- •Динамические массивы
- •Связные списки
- •Упорядоченные списки
- •Деревья
Технологии программирования
Записи
Записи - это структурированный тип данных языка паскаль, состоящий из фиксированного числа компонентов разного типа.
Record– Имя компонента - : - тип компонента –end;
Типами компонентов могут быть любые типы, в том числе и сами записи.
Имя компонента должны быть уникальны в пределах записи, но может совпадать с названиями других элементов программы.
Обращение к полям записи
Имя записи - . – Имя компонента
Пример1:
Type
Bd=record
Day,month:byte;
Year:word
End;
Var bd:bd;
Begin
Writeln (‘Ввеите дату рождения’);
Write(‘число’); readln(bd.day);
Write(‘месяц’); readln(bd.mounth);
Write(‘Год’); readln(bd.year);
End.
Пример2:
Type
Texam=(history,algebra,matan);
TSudent=record
Name,sename:string[20];
Date:record
Day:1..31;
Mount:1..12;
Year:word;
End;
Group:word;
Marks:array[texam] of 2..5;
Var st1,st2:tstudent; i:word;
Institute:array[1..300] of tstudent;
Exam:texam;
Begin
St1.name:=’Иван’;
St1.suname:=’Смирнов’;
St1.date.day:=24;
St1.date.mouth:=2;
St1.date.year:=1992;
St1.group:=114;
St1.marks[history]:=3;
St1.marks[algebra]:=4;
St1.marks[matan]:=5;
St2:=st1;
Institute[8].date.day:=30;
For i:=1 to 300 do
For exam:=history to matan do
Readln(Institute[i].marks[exam]);
End.
Пример3:
Var a:record
F:char;
B:record
A:byte;
F:word;
End
End;
Оператор with
With – Имя записи – do – оператор
With st1 do
Begin
Name:=’Иван’;
Suname:=’Смирнов’;
Date.day:=24;
Date.mounth:=2;
Date.year:=1992;
End;
With st1 do
Begin
Name:=’Иван’;
Suname:=’Смирнов’;
With date do
day:=24;
mounth:=2;
year:=1992;
End;
With st1,date do
Begin
Name:=’Иван’;
Suname:=’Смирнов’;
day:=24;
mounth:=2;
year:=1992;
End;
Записи с вариантами
Пример1:
Type
Rec=record
{Описание фиксированных частей}
V1,v2:integer;
{Описание вариативной части}
Case n:word of
0: (Список полей)
1: (Список полей)
End;
Case– имя селектора - : тип -of– Коннст - : - ( - Имя компонента - : - Тип - )
Type
texamW= (history,algebra,matan);
texamS= (matan,TP,DM);
tstudent = record
name,suname:string;
Date:record
Day:1..31;
Mount:1..12;
Year:word;
End;
Group:word;
Case session:byte of
1: (marksw:array[texamw] of 2..5);
2: (markss:array[texams] of 2..5);
End;
Var
St1:tstudent;
Begin
St1.name:=’Иван’;
St1.suname:=’Смирнов’;
St1.date.day:=24;
St1.date.mouth:=2;
St1.date.year:=1992;
St1.group:=114;
St1.Session:=1;
St1.marksW[history]:=3;
St1.marksW[algebra]:=4;
St1.session:=2;
St1.Markss[tp]:=5;
Sizeof(st1)= 52 байта (Функция размера записи в байтах);
Рекурсия
Рекурсия – это вызов подпрограммы самой себя
Прямая
Косвенная
Прямая(пример):
Procedure p;
Begun
………..
P;
…………
End;
Косвенная(пример)
Procedure p(x:byte);
Begin
…………..
Q(x);
…………..
End;
Procedure q(y:byte);
Begin
…………..
P(y);
……………..
End;
Для того что бы не нарушить правила опережающего описания
Procedure q(x:byte); forward
Procedure p(y:byte);{С полным списком формальных параметров}
Begin
…………..
Q(x);
…………..
End;
Procedure q;{Без списка формальных параметров}
Begin
…………..
P(y);
……………..
End;
Procedure popendog;
Begin
Writeln(‘У попа была собака’);
Writeln(‘Он ее любил’);
Popendog;
End;
Обязательным является условие выхода из рекурсии
Begin
If ….then popendog
End.
Вычислить n!
Function fact(n:byte):longint;
Begin
If n>0 then fact:=n*fact(n-1)
Else fact:=1;
End;
Begin
writeln(fact(3));
End;
Вычисления чисел Фибоначчи
Function fib(n:byte):longint;
Begin
If n=0 then fib=0;
Else if n=1 then fib:=1
Else fib :=fib(n-1)+fib(n-2);
End;
Begin
Writeln(fib(3));
End.