Реферат: Вопросы и ответы к экзаменам В-1
(1999)1.Алгоритм. Свойства алгоритма. Способы записи алгоритма(общ.)Алгоритм – это система формальных правил однозначно приводящая к решениюпоставленной задачи.
(ПК.) Алгоритм- это последовательность арифметических и логических действий надданными, приводящая к получению решения поставленной задачи.
Свойства:
А)Дискретность — алгоритм состоит из отдельных пунктов или шагов
Б)Определённость — каждый шаг алгоритма должен быть строго сформулирован.
(иметь точный смысл)
В)Связанность — на каждом следующем шаге используются результаты предыдущего.
Г)Конечность – алгоритм должен завершаться после конечного числа шагов
Д)Результативность – алгоритм должен приводить к получению конечных результатов
Е)Массовость – пригодность для решения широкого класса задач.
Ж)Эффективность – применение а. должно давать какой бы-то положительныйвременной результат (временной)
Способзаписи:
А)Словесно-формульный
Б)Структурная схема и алгоритм (ССА)
В) Спец. языки (алгоритмические и псевдокоды)
(псевдокод- искусственный неформальный язык, обычно состоит из элементов обычного языка сэлементами программирования)
Г)Графический способ
2.Линейные и разветвляющиеся алгоритмы. Cтруктурные схема алгоритмов. Правилавыполнения.CCA- при записи в виде структурной схемы алгоритмпредставляется графически в виде последовательности блоков выполняющихопределённые функции и блоки соединяются линиями возможно со стрелками. Внутриблоков операции. Блоки нумеруются по порядку. По способу организации алгоритмовССА блоки делятся на линейные, разветвляющиеся и циклические.
В линейных алгоритмахрезультат получается после выполнения одной последовательности действий.
Начало—ряд операторов—конец.
Разветвляющийся алгоритмпредусматривает выбор одной из нескольких последовательностей действий взависимости от исходных данных или промежуточных результатов.
3.Циклические алгоритмы. Классификация. Вычисление сумм, произведений.Циклический алгоритм – этоалгоритм обеспечивающий решение задачи путём многократного повторенияпоследовательности действий. Участки, которые многократно повторяются — называются циклами.
Циклы по числу повторенийделятся на циклы с заданным числом повторений и итерационные.
ЦИКЛЫ
ЗАДАННОЕЧИСЛО ИТЕРАЦИОННЫЕ
СО СЧЁТЧИКОМ УПР.УСЛОВИЕМ
ПОСТ.УСЛОВИЕ ПРЕДУСЛОВИЕ
Общее замечание: вход тольков начало цикла, а выход вследствие окончания цикла, оператором GOTO,процедурами прерхода и выхода, находящимся в теле цикла.
4.Циклические алгоритмы. Итерационные циклы. Вложенные циклы.Циклический алгоритм – этоалгоритм обеспечивающий решение задачи путём многократного повторенияпоследовательности действий. Участки, которые многократно повторяются — называются циклами.
Циклы по числу повторенийделятся на циклы с заданным числом повторений и итерационные.
В итерационных циклахвыполнение цикла оканчивается при выполнении общего условия, связанного спроверкой монотонно изменяющейся величины.
Вложенные циклы – это,когда определённый цикл повторяется многократно в другом цикле охватывающемданный.
5.Массивы. Алгоритмы обработки массивов. Процедура BREAKМассив — это упорядоченная последовательность величин,обозначаемая одним именем. Положение каждого элемента в массиве определяетсяего индексом (индексами). В этом и заключается упорядоченность. Индексы принятоуказывать в скобках после имени массива.
Пример: В[2] означает второйэлемент массива В.
Пусть имеется некотораяпоследовательность величин 1, 2, 4, 8, 3. Все элементы этой последовательностиимеют одно имя А. Отличаются они друг от друга индексами, например, A[1]=1,A[2]=2, A[3]=4, A[5]=8, A[6]=3.
При описании массива указывается число его элементов,и это число остается постоянным при выполнении программы. Каждый элементмассива имеет явное обозначение, и к нему возможно непосредственное обращение.
Количество индексов в обозначении элемента массиваопределяет размерность массива. Массив может быть одномерным (один индексS[4]), двумерным (два индекса N[2,4]), трех мерным (три индекса Y[2,4,1])и т.д.
Массив описывается в разделе описания переменных, приэтом описание массива включает описание типа массива (тип его элементов, т.е.какие значения они могут принимать) и типа индексов. Например, массиввещественного типа с именем vector может быть описан следующим образом:var vector: array [1..50] of real
Это описание означает, что одномерный массив vectorимеет 50 элементов типа real со значениями индекса 1,2, ...,50. Элементы этогомассива будут иметь обозначения: vector[1], vector[2], ..., vector[50]
Двумерный массив matrix, сцелочисленными компонентами можно определить следующим образом:
var matrix [1..10,1..15] of integer
Двумерный массив часто называют матрицей. Первыйиндекс этого массива (номер строки матрицы) принимает значения из отрезка1..10, а второй (номер столбца) — из отрезка 1..15. Компоненты массива могутиметь обозначения: matrix[1,5], matrix[8,8], matrix[i,j] и т.п.
Примеры:
program p2;
var matrix: array [1..3,1..4] of integer;{определяетсядвумерный массив в 3 строки и 4 столбца с именем matrix}
i, j: integer;
begin
for i:=1to 3 do
for j:=1 to 4 do
read(matrix[ i, j]); {заполнение двумерного массива на 3 строки и 4столбца}
for i:=1 to 3 do
begin
writeln;
for j:=1 to 4 do write(matrix[ i, j]);{вывод элементов двумерного массива в видетаблицы}
end;
6.Структуризация. Восходящее программирование. Проектирование алгоритма перевода чисел из одной системы счисления в другую (2,8,10,16).Восходящее проектирование –используется для несложных задач, когда заранее известны все подзадачи илифункции, которые выполнять программа. Разрабатывается алгоритм для каждойподзадачи, а затем они собираются в единую подпрограмму.
7.Нисходящее программирование. Проектирование алгоритма выполнения арифметических операций (+,-,*,/) над числами с пл. точкой.При нисходящемпрограммировании сверху вниз сначала разрабатывается общая структурная схемаалгоритма, а затем разрабатываются этапы её детализации (структурирование).
8.Язык TURBO PASCAL. Алфавит языка. Идентификаторы TURBO PASCAL.ТП – единство двухсамостоятельных начал компилятора и инструментов програмной оболочки. Это мощная современная процедурная система программирования
Алфавит: буквы латинского от a до z,знак _.(если не char A = a)
Цифры – арабские 0-9, спец.символы +-*/=.,:;<>[]{}()^&$@#%!
Пробелы (ASCIIот 0 до 32) ограничители идентификаторов
Зарезервированные слова ипараметры (не используются в качестве идентификаторов). Стандартные директивы absolute,assembler, external, far, forward, near и т.д. .
Идентификаторы: именаконстант, var’ных, меток, типов, obg-ов,процедур, функций(могут иметь произвольную длину, но значат только первые 63символа, начинаются только с буквы или цифры).
9.Оператор условного перехода IF. Составной и пустой операторы.IF<условие >THEN<операторы>ELSE <операторы>;
10.Оператор цикла со счетчиком.FOR <идентификатор>:=<начальное состояние >TO<конечноесостояние > DO<оператор>
FOR <идентификатор>:=<начальное состояние >DOWNTO<конечноесостояние > DO<оператор>
11.Оператор цикла с предусловием.Цикл ДО
WHILE<условие>DO<оператор>
12.Оператор цикла с постусловием.Цикл ПОКА
REPEAT
Оператор;
UNTIL<условие>;
13.Подготовка и отладка программ в среде TurboPascal.Меню run
Run- запуск на исполнение
Step over-пошаговое исполнениепрограммы
Trace into- пошаговое исполнениепрограммы только подпрограммы выполняются оператор за оператором
Go to cursor– выполнение до курсора
Program reset- завершение процессаотладки
Parameters- окно для ввода параметров для отладки
Меню compile
Compile- компиляция файла, находящегося в активном окнередактирования.
Make – условная компиляция изменённых модулей в ЕХЕ файл
Build- безусловная компиляция многомодульной программы ссозданием ЕХЕ файла
Target…-выбор в окне таргет целевой платформы для приложения
Primary file…-открывает окно для указанияглавного файла, компилируемой программы.
Меню Debug:
Breakpoints- установка точек условного и безусловного перехода
Call stack – показывает процедурывыполнявшиеся ранее.
Register – информация о регистрах процессора
Watch – окно значений переменных
Output – окно результатов работы программы
User screen – просмотр результатоввключая графику
Evaluate/ modify… – окно изменения значений выражений
Add watch – окно значений ипеременных вовремя отладки
Add breakpoint… – окно установкиточек прерывания программы
14.Константы в TURBO PASCAL (целые, вещественные, 16-ричные, логические, символьные, строковые константы, конструктор множества)Константы — могутиспользоваться целые, вещественные, шестнадцатеричные числа, логическиеконстанты, символы, строки, множества и признак неопределённого указателя NIL.
Целые числа: от –2147483648до 2147483647
Вещественные числа: (экспоненциальная часть) 3.14E5
16-ричное число: $(код 36 в ASCII)$00000000- $F…$F(8)
Логическая константа: True,False.
Символьная константа: любойсимвол в ‘ ‘, либо указатель внутри кода #83=’S’
Конструктор множества — список элементов множества в [].
[1,2,3,4],[red, blue],[true,false]. В ТП разрешается объявление констант
const a=12/343;
15.Типизированные константы.Типизированные константы фактически являются переменными со статическим классом памяти. В отличие отпростых констант, в описании типизированных указывается как значение константы,так и её тип.
Существуют типы:
Константа, константа-адрес,константа-массив, константа-запись, константа-объект, константа-множество.
Указательный тип:
Type ptr = ^integer;
Conct intptr:ptr=nil;
Структурированный тип:
1 массив (array)
2 множество (set of 1..4)
3 запись (record)
4Объектного типа (object)
16.Оператор присваивания. Приоритет операций. Стандартные функции.<имяпеременной>:=<выражение>;
арифметические логические отношения прочие
1 NOT @-адресное преобразование
2 *,/,DIV,MOD AND,SHL,SHR
3 +,- OR, XOR
4 <;>;=; IN
Для повышения приоритетаиспользуются ( ).
Стандартные функции ТП.
ABS(X ) SQR(X) SQRT(X) TRUNG(X) ROUND(X)
COS(X) SIN(X) TG(X) ARCTANG(X) EXP(X)
LN(X) PRED(X) SUCE(X) ORD(X) CHR(X)
ODD(X) INT(X) FRAG(X) +,-,*,/ (X)DIV(Y)
MOD(X) NOT AND OR XOR
= < > I_SHL_J I_SHR_J
17.Операторы и функции безусловного перехода(goto, continue, exit, halt).EXIT; — выход из программы или подпрограммы
HALT(COD);- (COD) – необязательный параметр, определяет код
HALT; — безусловная остановка программы
ERRORLEVEL; - вниз
BREAK; — досрочный выход из цикла
CONTINUE; — прерывает выполнение текущей операции в цикле,передаёт управление следующему оператору
18.Структуры простой и сложной программ в Турбо-Паскале.PROGRAM<имя программы >;
USES<имя модуля>;
TYPE<раздел типов>;
LABEL<метки>;
CONST<константы>;
VAR<переменные и их типы>;
FUNCTION<имя функции>(имя переменной: тип)
BEGIN
операторы
END;
PROCEDURE<имя процедуры>( параметры)
BEGIN
операторы
END;
BEGIN
Текст основной программы
END.
19.Подпрограммы. Применение. Структура описания. Отличие процедуры от функции.Самостоятельные, законченныефрагменты программы, оформленные особым образом, снабжённые именем – называютсяподпрограммами
Использование подпрограммпозволяет разбить программу на ряд независимых частей.
Подпрограммы используются:
1Для экономии памяти, когданекоторая последовательность действий встречается неоднократно на разныхучастках программы. Каждая подпрограмма существует в ед. экземпляре, нообращаться к ней можно неоднократно из разных точек программы.
2. В сложных программах примодульном проектировании.
Подпрограммы делятся напроцедуры и функции
Результатом исполненияфункции является единственное значение простого, строкового или указательноготипа. Поэтому обращение к функции можно использовать выраженное наряду сконстантой и переменные.
Процедура обычно возвращаетнесколько значений, подпрограмма состоит из заголовка и тела подпрограммы.
Тело подпрограммы состоит израздела описаний и раздела операторов.
Структура: PROCEDURE<имя процедуры >;
FUNCTION<имяфункции>(параметр: тип);
USES<модули>;
LABEL<метки>;
CONST<константы>;
TYPE<типы>;
VAR<переменные>;
BEGIN
Тело подпрограммы
END;
20.Вложенные подпрограммы. Принципы локализации имен (локальные и глобальныепеременные).Вложенными являютсяподпрограммы, вызываемые из других подпрограмм.
Если какая либо программаиспользует некоторые переменные подпрограммы,
То данные переменные должныбыть описаны не в подпрограмме, а в самой программе. Данные переменныеназываются глобальными, а переменные, объявленные в модуле или подпрограммеявляются локальными, и значения этих временных нельзя использовать в главной программе.
21.Вызов подпрограмм (формальные и фактические параметры).Подпрограммы могут бытьвызваны как из тела основной программы, так и из тела другой подпрограммы. Длявызова необходимо написать имя процедуры или функции, а также, если надо, рядпеременных передаваемых в подпрограмму.
Пример:
PROCEDURE<имя>[(<формальные параметры>)];
FUNCTION<имя>[(<формальныепараметры>)]:<тип>
Сразу за заголовками можетследовать одна стандартных директив: ASSEMBLER <тело подпрограммына ассемблере>, EXTERNAL<объявление внешней подпрограммы>, FAR, FORWARD,INLINE<встроенные машинные инструменты>, INTERRUPT,NEAR.
PROCEDURE SB(a: real<формальныйпараметр>);
Фактические параметры – этоглобальные переменные подставленные в формальные
ТИП ФАКТ=ТИП ФОРМ.
22.Процедуры без параметров и с параметрами.PROCEDURE<имя>
Begin
<текст процедуры>
end;
23.Передача в подпрограмму параметров регулярного типа (массивов, строк).Типом любого формальногопараметра может быть только стандартный или ранее объявленный тип.
Пример:
TYPE TYPE
ATYPE=ARRAY[1..10]OF REAL; INTYPE=STRING[15];
PROCEDURES(A:ATYPE); OUTTYPE=STRING[30];
FUNCTION ST(S:INTYPE):OUTTYPE
Иной способ для передачипараметров переменных отключением контроля компиляции.
Открытыймассив PROCEDURE I (A: ARRAY OF REAL);
24.Функции. Описание. Вызов функции.FUNCTION<имя>[(<формальныепараметры>)]:<тип>
Сразу за заголовками можетследовать одна стандартных директив: ASSEMBLER <тело подпрограммына ассемблере>, EXTERNAL<объявление внешней подпрограммы>, FAR, FORWARD,INLINE<встроенные машинные инструменты>, INTERRUPT,NEAR.
FUNCTION<имя функции>(параметр: тип);
Begin
<тело подпрограммы>
end;
25.Рекурсии. Прямая и косвенная рекурсия. Директива FORWARD.Рекурсия – это такой способорганизации вычислительного процесса при котором программа в ходе выполнениясоставляющих её операторов обращается сама к себе.
Для избежания переполнениястёка, следует размещать промежуточные результаты во вспомогательнойпеременной.
Begin
…………………………
F:=fac(n-1); — вспомогательная переменная
……………………….
End;
Рекурсивный вызов может бытькосвенным, который разрешается опережающим описанием:
Procedure b(j:byte);
Forward;
Procedure a (i:byte);
Begin
B(i);
End;
26.Тип-диапазон. Структурированные типы. Массивы.Любой из структурированныхтипов (а в ТП их 4: массивы, записи, множества, файлы) характеризуется множественностью образующих этот тип элементов. В ТП
Допускается бесконечнаяглубина вложенности типов, однако Суммой=<65520 байт (т.к. каждый компонентможет представлять структурированный тип).
PACKED- осуществляется везде где это возможно.
Тип диапазон:
TYPE
D = array [0..9]of char;
Var m: d;
Begin <операторы>end.
Обычно в качествеидентификатора типа используется тип–диапазон, в котором задаются границыизменения индексов.
Тип-диапазон подмножествосвоего базового типа, в качестве которого может выступать любой порядковый тип,кроме типа-диапазона.
<мин. значение>..<макс. значение>
TYPE digit = ‘0’..’9’; можно Var date:1..31;
dig2=48..57; month:1..12;
1CHR:’a’..’z’;
High(x) – максимальное значение типа диапазон
Low(x) – минимальное значение типа диапазон.
Массивы — формальноеобъединение нескольких однотипных объектов (чисел, символов, строк и т.д.),рассматриваемое как единое целое.
Var a: array [1..10]of real;
Компоненты массива состоятиз данных одного типа (возможно структурированного).
В качестве идентификаторовпорядковые типы кроме LongInt и типа диапазон с базисным типом LongInt/
27.Символьный тип.Значением символьного типаявляется множество всех символов ПК. Каждому символу присваивается целое числов диапазоне 0..255.Это служит кодом внутреннего представления символа, еговозвращает функция ORD. Для кодировки используется код ASCII– 7 битный код, т.е. с его помощью кодируется 128 символов (0..127). В то жевремя в 8-битном байте, отведённом для хранения символа в ТП, можнозакодировать в 2 раза больше символов (0..255). (0-127ASCII,128-255-может меняться на ПК разных типов).
0-31 – служебные коды(пробелы)
28.Строковый тип. Операции, процедуры и функцииЗначением строкового типаявляется любая последовательность символов, т.е. строка. Окончанию строкисоответствует символ с кодом 0, и которые называются строками с завершающимнулём или ASCIIZ-строками.
Строковый тип соответствуетидентификаторам string и PChar.
A: array[0..n] ofchar = a: string
Ord(0)=length(a)- длинна строки(не больше 255 символов)
Concat (S1 [s2..,SN])- сцепление строк
Copy (St, index, count) – копирует из строки ST символ,начиная с index
Delete(ST, a, b) – удаление b символов начиная с a
Insert (sut, st, b)–вставляет SUT в ST начиная с b
Pos (Sut, St) - в строке ST отыскивает Sutесли нет 0
Str (X [WIDTH [:DECIMALS]], ST)- из вещественного или целого в строку
Val (st ,x, code) – обратно str (пробелы не допускаются)
Var s: string;
Begin
…….
S:=’dsfsdhfjhsdfjshdfjsd’;
……….
End.
29.Типы в Турбо-Паскале. Объявление новых типов. Порядковые типы. Изменениетипа выраженияСтандартные типы в ТП:
1 группа целых типов(ShortInt,integer, LongInt, Byte, Word);
2 группа вещественных типов(Single,real, Double, Extended, Comp);
3 группа Булевские типы(Boolean, ByteBool, WordBool, LongBool);
4 Символьный тип(Char);
5 Строковые типы(String, PChar);
6 Указательный тип (Pointer);
7 Текстовый тип (Text);
Type <Новый тип>=<описание типа>
Символьный тип, а также целыеи булевские типы относятся к порядковым типам.
Свойства:
1 Каждый элемент имеет свойпорядковый номер
2 Поэтому возможениспользование функцииOrd, возвращающей этот номер
3 Возможно применить функцию Pred и Succ которые верну соответственно предыдущее и последующеезначения
30.Целые типы. Правила объявления. Применяемые функции.Целые типы:
Byte 0..255 ShortInt –128..127 Word 0..65535 Integer –32768..32767
LongInt–2147483648… 2147483647
Вложение типов:
Type result = более мощный тип
A: integer;
LongInt(a);
Процедуры и функции:
ABS(X) CHR(X) DEC INC SQR HI(I)-старший байт
LOW(X) – младший байт ODD(I) –возвращает правда если нечет
RANDOM(x) SWAP(I)- меняет местами байты
31.Логический тип. Логические операции и функцииЛогический тип ещё называютбулевским. Их 4:
Boolean(false=0, 1 байт); ByteBool (false=0,1 байт); WordBool (false=0 в обоих байтах, 2 байта); LongBool (false=0во всех байтах, 4 байта).
Логические функции:
Ord; Pred; Succ; or ;and; xor ;
32.Перечисляемые типы. Функции и операции, применимые к ним.Перечисляемый тип задаётсятем значениям, которые он может получить. Значения
именуются идентификаторами ирасполагаются в списке с ( ).
Type col = (red, white,blue);
Max=65536 значений;
Ord (red) =0;
Var c: col;
C:= col(0);
С:=red;
В идентификаторах нельзяиспользовать кириллицу. Переменные так же можно объявлять без предварительногоописания типа
Var col: (black,white, green);
33.Множества и операции над ними.МНОЖЕСТВА — наборы однотипныхлогически связанных друг с другом объектов. Характер связей между объектамиподразумевается лишь программистом и не контролируется Турбо Паскалем.Количество элементов в множестве может меняться от 0 до 255. Множество, которое не содержит элементов, называется пустым. От массивов множестваотличаются тем, что количество элементов в нем не постоянно. Его можнорасширять и сокращать по ходу выполнения программы.
Описание типа производится вразделе TYPE.
Структура:
<Имяидентификатора>=SET of <имя типа> ;
где <Имяидентификатора> — правильный идентификатор Турбо Паскаля;
<имя типа> — типэлементов множества, в качестве которого может
использоваться любойпорядковый тип, кроме WORD, Integer, LogInt,
ShortInt.
пример: TYPE dchar=SET of'1'..'9'; {базовый символьный тип-диапазон}
digit=SET of 0..9;
Переменные этого типаописываются в разделе
VAR S1,S2,S3:dchar; S4,S5,S6,S7:digit;
Для задания множества можетиспользоваться конструктор множества: список (спецификаций) элементов множества, отделенных друг от друга запятыми; список заключается в квадратныескобки. Спецификациями элементов м.б. константы или выражения базовоготипа, а также пример:
S1:=['1','2','3']; S4:=[0..3,7];
S2:=['2','1','3']; S5:=[4,6];
S3:=['1','2']; S6:=[3..8]; S7:=[]; (пустое)
Два множества считаютсяэквивалентными тогда и только тогда, когда все их элементы одинаковы причемпорядок следования в множестве их безразличен. (S1 и S2 эквивалентны).Если все элементы одного множества входят в другое множество то говорят, что первоевключено во второе. (S3 включено в S1).Пустое множество включено в любоедругое.
Над множествами определеныследующие операции:
1. * пересечение множеств; результат содержит элементы, общие
для обоих множеств. (S4*S6содержит [3,7]; S4*S5 образует пустое мн.).
2. + объединение множеств,результат содержит элементы первого
множества, дополненныенедостающими элементами второго.
S4+S5 содержит[0,1,2,3,4,6,7] S5+S6 содержит [3,4,5,6,7,8]
3. - разность множеств,результат содержит элементы из первого
множества, которые непринадлежат второму.
S6-S5 содержит[3,5,7,8])
S4-S5 содержит[0,1,2,3,7]) []-S4 даст [].
4. Операции отношений:
= операция эквивалентности;возвращает значение TRUE, если оба
множества эквивалентны;(S1:=S2; ['1','2','3']) =['2','3','1']
проверка неэквивалентности; (TRUE, если множества неэквивалентны); [1,2]<>[1] S3<>S2
>= проверка вхождения(TRUE, если второе множество входит в первое;
in — проверка принадлежности.Структура этой бинарной операции:
in; возвращает TRUE, есливыражение имеет значение, принадлежащее множеству.
пример:
3 in S6 TRUE; [] in [0..5] [] in S5
2*2 in S4 FALSE;
Множества имеют компактноемашинное представление. Недостаток: невозможность вывода множества на экран, т.к. отсутствует механизм изъятия элемента из множества. Ввод множествавозможен только поэлементно.
пример: Можно тип объявлятьпри описании переменных
VAR S:SET of char; {переменная-множество}
C: char; {элементмножества}
Begin
S:=[]; S:=#0; {обнуление значений}
while C '.'do {цикл до ввода "."}
begin
readln(C); {чтениесимвола в с}
S:=S+[C]; {добавление его к S}
end; ...
S:=S-['.']; {исключение точки}
End. {Смотризадание на л.р. N 12 }
34.Оператор выбора CASE (варианта). Комментарии.CASE<ключ выбора> OF
Const1: оператор;
Const2: оператор;
ELSE:оператор;
END;
35.Записи. Вложенные записи. Записи с вариантами.Запись – это структураданных, состоящая из фиксированного числа компонент, называемых полями записи.В отличие от массива компоненты могут быть различного типа. Поля именуются:
<имя типа>=RECORD<определениеполей>END.
Type
Bd =record
D,m:byte;
Y:word
Var a,b: bd;
a::=8;
a.day:=27;-доступ к компоненту
Для упрощения доступа к полямзаписи используют оператор записи With
With<переменная>do<оператор>;
With c.bp domonth:=9;
With c do with bpdo month:=9;
c.bp.month:=9;
Вариантные поля
Type f= record
N:string;
Case byteof
0:(bp: string[30]);
1:(c: string[10],e: string[20],ed:1..31)
end;
Имена должны быть уникальны,хотя возможно повторение на различных уровнях
Вложенные поля:
Type bd =record
D,m:byte;
X:word;
End;
Var c:record;
Name:string;
Db:bd;
Begin ifc.db.year=1939 then………..
End.
В качестве ключа переменная:
Type rec2=record
C:LongInt;
Case x: byte of
1: (d: word);
2: (e:record
caseboolean of
3: (f: real);
3: (g: single);
‘3’: (c: word);
end;
end;
36.Вещественный тип. Операции и функции для вещественного типа.
Вещественный тип определяетчисло с некоторой конечной точностью, зависящей от внутреннего формата числа
Длина название кол-вознаковых цифр диапазон десятичного порядка
байт
6 real 11..12 -39..38
8 couble 15..16 -324..308
10 extended 19..20 -4951..4932
8 comp 19..20 -2*10^63+1 .. 2*10^63-1
функции
ABS(X), ARCTAN(x),COS(X), EXP(X), FRAC(X), INT(X),LN(X), SIN(X), ROUND(X),SQR(X),SQRT(X) И Т.Д.
37.38. 39. Файловый тип. Файлы. Требования к имени. Связывание. Текстовые файлы.Ввод (вывод) информации из файла (в файл, устройство) Типизированные файлы инетипизированные файлы.Общиепроцедуры для работы с файлами
_____________________________________________________________
|Assign(Var f,FileName:String) — Cвязывание ф.п.f с файломFileName
|RESET(Varf) | Открытие файла с логическим именем f для чтения |
|REWRITE(Varf) Открытие файла с лог. именем f для записи |
|CLOSE(f) | Закрытие файла с лог. именемf |
|Erase(Varf) | Удаление файла (стирание) с диска |
|Rename(f,NewName:String)|Переименовывает физический файл |
|EOF(f) | Функция тестирования конца файла |
|FLUSH()| Очищает внутренний буфер файла |
-------------------------------------------------------------
ТЕКСТОВЫЕФАЙЛЫ
Этофайлы последовательного доступа.
Онипредназначены для хранения текстовой информации. Компоненты (запи-
си)текстового файла могут иметь переменную длину.
Длядоступа к записям файла применяются процедуры
READ,READLN, WRITE, WRITELN.
Текст-ориентированныепроцедуры и функции
____________________________________________________________
| процедуры | пояснения |
| и функции | (действия) |
|-------------|----------------------------------------------|
|Append |Процедура открывает уже существующий файл f|
| () |для дозаписи в конец файла |
|пр:Append(f)| (для его расширения) |
|SeekEOLN |Функция пропускает все пробелы и знаки табуля-|
| () |ции до первого признака EOLN или первого зна-|
| логич.типа |чащего символа. Возвращает значение TRUE, если|
пр:SeekEOLN(f)|обнаруженмаркер конца файла или маркер конца |
| |строки. Если ф.п. опущена, |
| |функция проверяет стандартный файл INPUT. |
| | |
|SeekEOF |Функция пропускает все пробелы, знаки табуляции|
| () |и маркеры конца строк до маркера конца файла|
|пр:SeekEOF(f)|илипервого значащего символа. Если маркер об-|
| |наружен, возвращает значение TRUE. |
|EOLN()|Функция возвращает значение TRUE, если во вход-|
| логич.типа | ном файле f достигнут маркер EOLN или |
|пр: EOLN(f) | EOF; FALSE — в противном случае. |
|_____________|______________________________________________|
Типизированныефайлы
позволяюторганизовать прямой доступ к каждой из компонент (по его по-
рядковомуномеру). Описание файловой переменной
Var ft: file of ;
Передпервым обращением к процедурам ввода-вывода указатель файла
стоитв его начале и указывает на 1-ю компоненту с номером 0. После
каждогочтения или записи указатель сдвигается с следующему компоненту
файла.Переменные в списках в/в должны иметь тот же тип, что и компо-
нентыфайла.
Процедурыи функции для работы с типизированными файлами
____________________________________________________________
| процедуры | пояснения |
| и функции | (действия) |
|-------------|----------------------------------------------|
READ(,); Процедура
Обеспечиваетчтение очередных компонентов файла
WRITE(,)используется для записи новых
компонентв файл; в качестве элементов вывода
м.б.выражение.
SEEK(,)- смещает указатель
файлак компоненту с ;
-выражение типа LONGINT.
(Ктекстовым файла применять нельзя.)
FILESIZE) Функция возвращает количество компонент,
содержащихсяв файле.(Типа LongInt )
ФункцияFILEPOS() возвращает порядковый номер компо-
нентыфайла, доступной для чтения или записи
(которыйбудет обрабатываться следующей операцией в/в).
( Процедура CLOSE () — закрытие файла. )
|-------------|----------------------------------------------|
-содержит одну или более переменных такого
жетипа, что и компоненты файла,
-файловая переменная д.б. объявлена предложением FILE OF
исвязана с именем файла процедурой ASSIGN. Файл необходимо открыть
процедуройRESET для чтения.
Еслифайл исчерпан, обращение к READ вызовет ошибку В/В
Чтобыпереместить указатель в конец файла можно написать
Пр. Seek(f,FileSize(f)) ; где f — файловая переменная
Нетипизированныефайлы
Обьявляютсябез указания типа файла:
TYPE ftype=file; или VAR fn: file;
Дляданных файлов не указывается тип компонентов, что делает их сов-
местимымис любыми другими файлами. Позволяет организовать высокоско-
ростнойобмен данными между диском и памятью.
Приинициализации нетипизированных файлов процедурами RESET и
REWRITEуказывается длина записи нетипизированного файла в байтах.
пример: VAR f:file; ...
ASSIGN (f,'a.dat');
RESET(f,512);
\длина записи
Длинафайла может быть представлена выражением типа WORD; если пара-
метрдлины опущен, подразумевается длина 128 байт; максимальная длина
65535байт.
Дляобеспечения максимальной скорости обмена данными следует за-
даватьдлину, кратную длине физического сектора дискового носителя
(512байт). Кроме того, фактически пространство на диске выделяется
любомуфайлу порциями — кластерами, которые в зависимости от типа дис-
камогут занимать 2 и более смежных секторов. Как правило, кластер
м.б.прочитан или записан за один оборот диска, поэтому наивысшую ско-
ростьобмена данными можно получить, если указать длину записи, равную
длинекластера.
Приработе с нетипизированными файлами Могут применяться все
рассмотренныепроцедуры и функции, доступные типизированным файлам, за
исключениемREAD и WRITE, которые для чтения и записи заменяются соот-
ветственновысокоскоростными процедурами BlockREAD и BlockWRITE.
BlockREAD(,,,[,Var])
BlockWRITE(,,,[,Var])
где - имя переменной, которая будет участвовать в обмене дан-
нымис дисками;
-количество записей, которые д.б. прочитаны или записаны за одно
обращениек диску;
-необязательный параметр, содержащий при выходе из процедуры ко-
личествофактически обработанных записей.
Заодно обращение к процедурам м.б. передано N*r байт, где r -
длиназаписи нетипизированного файла. Передача идет, начиная с 1-го
байтапеременной .
Послезавершения процедуры указатель смещается на записей.
ПроцедурамиSEEK, FilePos и FileSize можно обеспечить доступ к любой
записинетипизированного файла.
40.Библиотечный модуль GRAPH. Графические возможности ТП.GRAPH — представляет собойбиблиотеку подпрограмм, обеспечивающую полное управление графическими режимамидля различных адаптеров дисплеев: CGA, EGA, VGA… Содержит 78 процедур ифункций (как базовых — рисование точек, линий, окружностей, прямоугольников),так и расширяющих возможности базовых (многоугольники, сектора, дуги,закрашивание фигур, вывода текста и т.д.).
Для запуска программы сиспользованием модуля GRAPH необходимо,
чтобы в рабочем каталогенаходились графические драйверы с расширением .BGI, также должен быть доступенкомпилятору модуль GRAPH.TPU.
Файл BGI — графическийинтерфейс. Он обеспечивает взаимодействие
программ с графическимиустройствами.
В начале программы модульGRAPH должен быть подключен
PROGRAM
USES GRAPH;
описание меток, переменныхпрограммы, в частности
VAR driver, Mode:integer;
Begin
Далее инициализируетсяграфический режим работы процедурой
InitGraph(,:integer;
: string);
Графическая информация наэкране дисплея отражается совокупностью
светящихся точек — ПИКСЕЛЕЙ.
Режим по вертикали: 0 — 200пикселей (4 страницы),
1 — 350 пикселей (2страницы), 2 — 480 пикселей (1 страница).
Режим 2 (640х480, 16 цветов,1страница)
В текстовом режиме координатыверхнего угла (1,1).
центр (319,239)
нижнего (639,479)
Тип драйвера допускаетсяуказывать =0, тогда он устанавливается
по результатам тестирования(авто определение). Путь определяет маршрут поиска графического драйвера.
Пример:
USES GRAPH;
Const driver, mode: intGRAPH- представляет собой библиотеку подпрограмм, обеспечивающую полное управлениеграфическими режимами для различных адаптеров дисплеев: CGA, EGA, VGA…Содержит 78 процедур и функций (как базовых — рисование точек, линий,окружностей, прямоугольников), так и расширяющих возможности базовых (многоугольники, сектора, дуги, закрашивание фигур, вывода текста и т.д.).
Для запуска программы сиспользованием модуля GRAPH необходимо,
чтобы в рабочем каталогенаходились графические драйверы с расширением .BGI, также должен быть доступенкомпилятору модуль GRAPH.TPU.
Файл BGI — графический интерфейс.Он обеспечивает взаимодействие
программ с графическимиустройствами.
В начале программымодуль GRAPH должен быть подключен
PROGRAM
USES GRAPH;
описание меток, переменныхпрограммы, в частности
VAR driver, Mode:integer;
Begin
Далее инициализируетсяграфический режим работы процедурой
InitGraph(,:integer;
:string);
Графическая информация наэкране дисплея отражается совокупностью
светящихся точек — ПИКСЕЛЕЙ.
Режим по вертикали: 0 — 200пикселей (4 страницы),
1 — 350 пикселей (2 страницы),2 — 480 пикселей (1 страница).
Режим 2 (640х480, 16 цветов,1страница)
В текстовом режиме координатыверхнего угла (1,1).
центр (319,239)
нижнего (639,479)
Тип драйвера допускаетсяуказывать =0, тогда он устанавливается
по результатам тестирования(авто определение). Путь определяет маршрут поиска графического драйвера.
Пример:
USES GRAPH;
Const driver,mode: integer;
Begin
driver:=VGA; (9)
mode:=VGAH; (2)
InitGraph(driver,mode, 'e:\TP\BGI'); тип string.
DetectGraph(varDiver, Mode: integer) — возвращает тип драйвера и текущий режим его работы.
Основные цвета задаются от 0до 15:
0- черный 8 — темно-синий
1- синий 9 — ярко-синий
2- зеленый 10 — ярко-зеленый
3- голубой 11 — ярко-голубой
4- красный 12 — розовый
5- фиолетовый 13 — малиновый
6- коричневый 14- желтый
7 — светло-серый 15- белый.
Если Х и У вещественные, тоих нужно преобразовать к целым координатам (в пределах раздела экрана). Дляэтого используются функции ROUND или TRUNC прямого преобразования к целомузначению LineTo(trunc(x),trunc(y));
Также необходимо следить, чтобы значения не выходили за пределы
экрана (рассчитывайте коэффициенты увеличения или уменьшения и пара-
метры смещения)
ПРОЦЕДУРЫ И ФУНКЦИИ модуляGRAPH
установочные
ClearDevice — Очищает экран ипомещает курсор в точку (0,0);
SetViewPort(x1,y1,x2,y2:integer;Clip: boolean) — Устанавливает
текущее окно для графическоговывода. X1,y1 – координата верхнего левого угла; x2,y2 — координата нижнегоправого угла. Если Clip=true, то все изображения отсекаются на границах вывода;
ClearViewPort — Очищаеттекущее окно;
GetMax X: integer — возвращает максимальную горизонтальную координату
графического экрана;
GetMax Y :integer — возвращает максимальную вертикальную координату
графического экрана;
Get X: integer — возвращаеткоординату Х текущего указателя в окне;
Get Y: integer — возвращаеткоординату Y курсора в окне;
SetLineStyle(Line,Pattern, Thickness: word) — Устанавливает стиль
(0..4), шаблон штриховки(0..12) и толщину (1-ноpм, 3-утpоенная);
SetFillStyle(Pattern, Color:word) — Устанавливает образец штриховки и
цвет (0..15 и 128-меpцание);
SetGraphMode(Mode: integer) — Устанавливает новый графический режим и
очищает экран;
SetColor(Color: word) — Устанавливает основной цвет, которым выполняется рисование (0..15);
SetBkColor(Color: word) — Установка цвета фона.
Гpафические примитивы
PutPixel(X,Y: integer; Color:word) — Выводит точку цветом Color с координатой X,Y;
LineTO(X, Y: integer) — Рисует линию от текущего указателя к точке с координатой Х, У;
LineRel(DX, DY: integer) — Рисует линию от текущего указателя к точке, заданной приращением координат;
Line(X1,Y1,X2,Y2:integer) — Рисует линию от точки (X1,Y1) к точке с
координатой Х2, У2;
MoveTO(X, Y: integer) — Смещает текущий указатель к точке с координатой Х, У;
MoveRel(DX, DY: integer) — Смещает текущий указатель к точке, заданной
приращением координат;
Rectangle(X1,Y1,X2,Y2:integer)- Рисует прямоугольник, используя
текущий цвет и тип линии поверхней левой и нижней правой точкам;
Bar(X1,Y1,X2,Y2:integer) — Рисует закрашенный прямоугольник, используя установку SetFillStyle;
Bar3D(X1,Y1,X2,Y2:integer;Depth:word;Top:Bolean)- Рисует закрашенный паpаллелипипед. Depth — глубина в Pixel (1/4 ширины).
Если Тор=True, то рисуетсяверхняя грань пеpеллелипипеда;
Circle(X,Y:integer;R:word) — Рисует окружность радиуса R,используя
X,Y как координаты центра;
Fillellipse(X,Y: integer;XR,YR: word) — Рисует защтpихованный эллипс,
используя X,Y как центр иXR,YR как горизонтальный и
вертикальный радиусы.
RestorCRTMode — Восстанавливает текстовый режим работы экрана;
OutText(Text: string) — Выводит текстовую строку на экран.
OutTextXY(X,Y: integer; Text:string) — Выводит текст в заданное
место экрана.
Пример программы построенияграфика функции у=2+х*х.
programgraphik; {файл grafikf.pas}
usesgraph; {подключение модуля GRAPF}
var a,b,x,y: integer; {a,b-переменные, определяющие тип драйвера и
видеорежим соответственно}
begin
detectgraph(a,b); {автоопределение типа драйвера и видеорежима}
initgraph (a,b,'E:\TP\BGI');{инициализация графического режима}
setgraphmode(2); {установканового режима (2), очистка экрана}
setBKcolor(0); {основной цветфона — черный}
setcolor(4); {основнойцвет рисования — красный}
moveTO(100,100); {смещаеткурсор}
lineRel(50,50); {вычерчиваниелинии по приращению от текущего
указателя}
readln; {пауза до нажатияклавиши }
setcolor(2); {основнойцвет рисования — зеленый}
line(100,100,100,50);{рисуетлинию от т.Х1, У2 до т.Х2, У2}
readln; {пауза до нажатия }
setcolor(5); {основнойцвет рисования — фиолетовый}
putPixel(0,0,12); {выводитточку цветом 12 с координатой 0,0}
readln; {пауза до нажатия }
moveTO(1,2); {смещает курсорк точке с координатой 1,2}
for x:=0 to 20 do
begin
y:=2+ x*x;
lineTO(x,y); {рисует линию оттекущего
указателя к точке скоординатой Х, У}
end;
readln; {пауза до нажатия ввода}
Settextstyle(1,0,5);
OutTextXY(50,400,'графикфункции у=2+х*х'); {выводит текст в
заданное место экрана}
readln; {пауза до нажатия }
putPixel(639,479,14);{выводитточку цветом 14 с координатой 639,479}
readln; {пауза до нажатия }
closegraph;{закрываетграфический режим и восстанавливает текстовый}
end.
Begin
driver:=VGA; (9)
mode:=VGAH; (2)
InitGraph(driver,mode, 'e:\TP\BGI'); тип string.
DetectGraph(varDiver, Mode: integer) — возвращает тип драйвера и текущий режим его работы.
Основные цвета задаются от 0до 15:
0- черный 8 — темно-синий
1- синий 9 — ярко-синий
2- зеленый 10 — ярко-зеленый
3- голубой 11 — ярко-голубой
4- красный 12 — розовый
5- фиолетовый 13 — малиновый
6- коричневый 14- желтый
7 — светло-серый 15- белый.
Если Х и У вещественные, тоих нужно преобразовать к целым координатам (в пределах раздела экрана). Дляэтого используются функции ROUND или TRUNC прямого преобразования к целомузначению LineTo(trunc(x),trunc(y));
Также необходимо следить, чтобы значения не выходили за пределы
экрана (рассчитывайте коэффициенты увеличения или уменьшения и пара-
метры смещения)
ПРОЦЕДУРЫ И ФУНКЦИИ модуляGRAPH
установочные
ClearDevice — Очищает экран ипомещает курсор в точку (0,0);
SetViewPort(x1,y1,x2,y2:integer;Clip: boolean) — Устанавливает
текущее окно для графическоговывода. X1,y1 — координата
верхнего левого угла; x2,y2 — координата нижнего правого угла.
Если Clip=true, то всеизображения отсекаются на границах вывода;
ClearViewPort — Очищаеттекущее окно;
GetMaxX: integer — возвращаетмаксимальную горизонтальную координату
графического экрана;
GetMaxY: integer — возвращаетмаксимальную вертикальную координату
графического экрана;
GetX: integer — возвращаеткоординату Х текущего указателя в окне;
GetY: integer — возвращаеткоординату Y курсора в окне;
SetLineStyle(Line,Pattern, Thickness: word) — Устанавливает стиль
(0..4), шаблон штриховки(0..12) и толщину (1-ноpм, 3-утpоенная);
SetFillStyle(Pattern, Color:word) — Устанавливает образец штриховки и
цвет (0..15 и 128-меpцание);
SetGraphMode(Mode: integer) — Устанавливает новый графический режим и
очищает экран;
SetColor(Color: word) — Устанавливаетосновной цвет, которым выполняется рисование (0..15);
SetBkColor(Color: word) — Установка цвета фона.
Гpафические примитивы
PutPixel(X,Y: integer; Color:word) — Выводит точку цветом Color с координатой X,Y;
LineTO(X,Y: integer) — Рисуетлинию от текущего указателя к точке с координатой Х, У;
LineRel(DX,DY: integer) — Рисует линию от текущего указателя к точке, заданной приращением координат;
Line(X1,Y1,X2,Y2:integer) — Рисует линию от точки (X1,Y1) к точке с
координатой Х2, У2;
MoveTO(X,Y: integer) — Смещает текущий указатель к точке с координатой Х, У;
MoveRel(DX,DY: integer) — Смещает текущий указатель к точке, заданной
приращением координат;
Rectangle(X1,Y1,X2,Y2:integer)- Рисует прямоугольник, используя
текущий цвет и тип линии поверхней левой и нижней правой точкам;
Bar(X1,Y1,X2,Y2:integer) — Рисует закрашенный прямоугольник, используя установку SetFillStyle;
Bar3D(X1,Y1,X2,Y2:integer;Depth:word;Top:Bolean)- Рисует закрашенный паpаллелипипед. Depth — глубина в Pixel (1/4 ширины).
Если Тор=True, то рисуетсяверхняя грань пеpеллелипипеда;
circle(X,Y:integer;R:word) — Рисует окружность радиуса R,используя
X,Y как координаты центра;
Fillellipse(X,Y: integer;XR,YR: word) — Рисует защтpихованный эллипс,
используя X,Y как центр иXR,YR как горизонтальный и
вертикальный радиусы.
RestorCRTMode — Восстанавливает текстовый режим работы экрана;
OutText(Text: string) — Выводит текстовую строку на экран.
OutTextXY(X,Y: integer; Text:string) — Выводит текст в заданное
место экрана.
Пример программы построенияграфика функции у=2+х*х.
programgraphik; {файл grafikf.pas}
usesgraph; {подключение модуля GRAPF}
var a,b,x,y: integer; {a,b-переменные, определяющие тип драйвера и
видеорежим соответственно}
begin
detectgraph(a,b); {автоопределение типа драйвера и видеорежима}
initgraph(a,b,'E:\TP\BGI');{инициализация графического режима}
setgraphmode(2); {установканового режима (2), очистка экрана}
setBKcolor(0); {основной цветфона — черный}
setcolor(4); {основнойцвет рисования — красный}
moveTO(100,100); {смещаеткурсор}
lineRel(50,50); {вычерчиваниелинии по приращению от текущего указателя}
readln; {пауза до нажатияклавиши }
setcolor(2); {основнойцвет рисования — зеленый}
line(100,100,100,50);{рисуетлинию от т.Х1, У2 до т.Х2, У2}
readln; {пауза до нажатия }
setcolor(5); {основнойцвет рисования — фиолетовый}
putPixel(0,0,12); {выводитточку цветом 12 с координатой 0,0}
readln; {пауза до нажатия }
moveTO(1,2); {смещает курсорк точке с координатой 1,2}
for x:=0 to 20 do
begin
y:=2+ x*x;
lineTO(x,y); {рисует линию оттекущего указателя к точке с координатой Х, У}
end;
readln; {пауза до нажатияввода}
Settextstyle(1,0,5);
OutTextXY(50,400,'графикфункции у=2+х*х'); {выводит текст в заданное место экрана}
readln; {пауза до нажатия }
putPixel(639,479,14);{выводитточку цветом 14 с координатой 639,479}
readln; {пауза до нажатия }
closegraph;{закрываетграфический режим и восстанавливает текстовый}
end.
41.Библиотечный модуль CRT. Работа с клавиатурой, экраном, звуковым генератором.Модуль CRT включаетпроцедуры и функции, которые управляют текстовым режимом
работы дисплея. С помощьюподпрограмм модуля можно перемещать курсор
по экрану дисплея, менятьцвет выводимых символов и фона, создавать
окна на экране, управлятьзвуком, работать с клавиатурой.
Функции управленияклавиатурой:
KeyPressed: Boolean; — возвращает True, если в текущий момент на клавиатуре была нажата клавиша,иначе False. Не приостанавливает выполнение программы. Используется приорганизации работы циклов.
ReadKey: Char; — читает ивозвращает в программу символ с клавиатуры (без отображения на экране).Приостанавливает исполнение программы до нажатия на любую клавишу символа. Используется в операторах IF для проверки символов.
WhereX: Byte; — возвращает горизонтальную координату текущей позиции курсора относительно окна.
WhereY: Byte; — возвращаетвертикальную координату текущей позиции курсора относительно окна.
Процедурыуправления дисплеем
AssignCrt(Var F: Text); — связывает с файловой переменной устройство CON (клавиатуру для ввода и дисплейдля вывода).
ClrEol; — удаляет всесимволы справа от курсора до конца строки без перемещения курсора.
ClrScr; — очищает экран (окнона экране) и помещает курсор в верхний левый угол.
Delay(D: word); — приостанавливает работу программы на D миллисекунд.
GotoXY(X,Y: byte); — перемещает курсор в нужное место экрана (окна). Левый верхний угол экрана(окна) имеет координаты (1,1). Отсчет координат идет слева направо и сверху вниз. Количество символов в строке и самих строк зависит от типа дисплея(обычно 25 строк и 80 символов).
InsLine; — вставляет пустуюстроку в позицию курсора.
HighVideo; — устанавливаетвысокую яркость символов.
LowVideo; — устанавливаетнизкую яркость символов.
NormVideo; — устанавливаетнормальную яркость символов.
Window(X1,Y1,X2,Y2:byte); — определяет размеры окна на экране для вывода текста. X1,Y1 — координаты левоговерхнего угла, X2,Y2 — правого нижнего угла.
TextBackGround(Color: byte);- устанавливает цвет фона экрана (окна) от 0 (черный) до 15 (белый).
TextColor(Color: byte); — устанавливает цвет символа.
TextMode(Mode: word); - устанавливает нужный текстовый режим:0,1,2…
Управление звуковымгенератором
Sound(F: word); — включает звук генератора, F — частота звука в герцах.
Delay(T: word); — устанавливает продолжительность звучания в миллисекундах.
NoSound; — выключает звукгенератора.
42.Процедурные типы. Параметры-функции. Параметры-процедуры.Процедурные типы – гибкоесредство для передачи функций и процедур в качестве фактических параметровобращения к другим процедурам и функциям.
Typep1=procedure(a, b, c: real; var d: real);
F= function: string;
Любые процедуры или функции,передаваемые в качестве фактических параметров объявляется директивой far.
Стандартные процедуры илифункции ТП могут передаваться рассмотренным образом. В программе могут быть объявлены переменные процедурных типов.
Var p1:proc1;
F: func2;
Ap: array [1..n] of proc1;
Переменные процедурных типовдопускается присваивать в качестве значений имена соответствующихподпрограмм=> переменные становятся синонимом имени подпрограммы.
43.Адресный тип. Динамическая память. Адреса и указатели.Динамическая память – этооперативная память ПК, представляемая программно при её работе, за вычетомсегмента данных 164 Кбайта, стёка(обычно 16 Кбайт) и собственно тела программы(>200-300 Кбайт)
Д.п. — это практическиединственная возможность обработки массивов данных большой размерности.
Сегмент данных — этонепрерывная область оперативной памяти в которой размещаются все переменные,объявленные в программе.
Д. размещение данных –означает использование Д.П. непосредственно при работе программы.
ОЗУ ПК представляет собойсовокупность ячеек для хранения информации — байтов, каждый из которых имеет собственный номер. Эти номера – называются адресами, позволяющими обращаться клюбому байту памяти.
Указатели – гибкое средствоуправления Д.П… Это переменная, которая в качестве своего значения содержитадрес байта памяти. В ПК адреса задаются сегментами и 16 разрядными смещениями.
Сегмент – это участок памятиимеющий длину 65536(64Кбайта) и начинается с физического адреса, кратного 16.
Смещение – указывает, сколькобайт от начала сегмента нужно отступить, чтобы обратиться к нужному адресу.Адресное пространство 1 Мбайт – стандартная память ПК. Для адресации в пределах1 Мбайта нужно 20 двоичных разрядов, которые получаются из 2-х 16 разрядныхслов (сегмента и смещения типа word ) =>содержимое сегмента смещается на 4 разряда,освободившиеся правые заполняются нулями.
Структура памяти: SYSобласть – КУЧА – SYS область
I^:=2;{в область памяти I заносится 2}
Функции:
ADDR (x) – возвращает результат типа pointer, вкотором содержится адрес аргумента,x- любой объект программы (переменная, процедура, функция)
CSEG- возвращает значение, хранящееся в регистре CSмикропроцессора. Результат в слове типа word.
DSEG — возвращает значение, хранящееся в регистре DSмикропроцессора. Результат в слове типа word.
MAXAVAIL-возвращает размер в байтах наибольшего непрерывногоучастка кучи .MAXAVAIL(LONGINT).
За вызов процедуры NEWили GETMEM нельзя зарезервировать памяти больше, чем значение,возвращаемое этой функцией.
MEMAIAIL(LONGINT)- возвращает размер в байтах общего свободногопространства кучи
OFS(Х)-возвращает значение типа WORD, содержащеесмещения адреса указанного объекта.(Х)-выражение любого типа или процедура.
PTR(seg, ofs) — возвращает значение типа POINTER, позаданному сегменту и смещению
SEG(X) — возвращает значение типа WORD, содержащеесегмент адреса указанного объекта.
SIZEOF(X)- возвращает длину в байтах внутреннего представленияуказанного объекта.X- имя переменной, функции или типа.
Процедуры:
DISPOSE- возвращает в кучу фрагмент динамической памяти, который был ранее зарезервирован за типизированным указателем.
DISPOSE(TP) – типизированный указатель
FREEMEM — возвращает в кучу фрагмент динамической памяти, который был ранее зарезервирован за нетипизированным указателем
FREEMEM(P,SIZE) – P-нетипизированный указатель ,SIZE-длиннаосвобождающегося размера.
GETMEM(P,SIZE) – резервирует за нетипизированным указателемфрагмент Д, П, требуемого размера(не более 65521)
MARK(PTR) – запоминает текущее значение указателя кучи. PTR-указатель любого типа
NEW — резервирует фрагмент кучи для размещения переменной.
NEW(TP) — тип указатель
RELISE(PTR) – освобождает участок кучи .PTR – указательлюбого типа, в котором предварительно было сохранено процедурой MARKзначение указателя кучи.
Д.П. широко используется длявременного запоминания данных при работе с графикой и звуком в ПК.
44.Среда ТП. Основные выполняемые функции. Система меню (работа с файлами, запуск,компиляция, отладка (Debug), работа с окнами).Меню run
Run- запуск на исполнение
Step over-пошаговое исполнениепрограммы
Trace into- пошаговое исполнениепрограммы только подпрограммы выполняются оператор за оператором
Go to cursor– выполнение до курсора
Program reset- завершение процессаотладки
Parameters- окно для ввода параметров для отладки
Меню compile
Compile- компиляция файла, находящегося в активном окнередактирования.
Make – условная компиляция изменённых модулей в ЕХЕ файл
Build- безусловная компиляция многомодульной программы ссозданием ЕХЕ файла
Target…-выбор в окне таргет целевой платформы для приложения
Primary file…-открывает окно для указанияглавного файла, компилируемой программы.
Меню Debug:
Breakpoints- установка точек условного и безусловного перехода
Call stack – показывает процедурывыполнявшиеся ранее.
Register – информация о регистрах процессора
Watch – окно значений переменных
Output – окно результатов работы программы
User screen – просмотр результатоввключая графику
Evaluate/ modify… – окно изменения значений выражений
Add watch – окно значений ипеременных вовремя отладки
Add breakpoint… – окно установкиточек прерывания программы
45.Модульное программирование. Оформление модуля в ТП.Модульное программирование –это организация программы как совокупности небольших независимых блоков,называемых модулями, структура и поведение которых подчиняется определеннымправилам.
Модуль – это автономнокомпилируемая программная единица, включающая в себя различные компонентыраздела описаний (типы, константы, переменные, процедуры, функции) и, возможно,некоторые исполняемые операторы инициирующей части.
Использованиемодулей – прекрасный инструмент для разработки библиотек прикладных программ имощное средство модульного программирования.
ТП размещает программный кодмодулей в отдельном сегменте памяти.
Структура модулей:
UNIT<имя> -зарезервированное слово (единица),начинает заголовок модуля
INTERFACE<интерфейсная часть> — начинает интерфейснуючасть
IMPLIMENTAITION<исполняемая часть>
BEGIN <инициируемая часть>END.
Модуль состоит из заголовка итрёх частей, любая из которых может быть пуста.
В ТП возможно осуществлятьподключение средств, облегчающих разработку крупных программ.
Имя модуля должно совпадатьс именем файла, в котором находится исходный текст модуля (исходник). Имямодуля служит для связи с др. модулями и основной программой. Связьустанавливается спец. объявлением:
USES<имя вспомогательного модуля > — списоксвязываемых модулей.
Интерфейсная часть –содержитобъявление всех глобальных объектов модуля (типов, констант, переменных ипрограмм), которые должны доступными основной программе или другим модулям. Винтерфейсной части указываются только их заголовки. Объявление подпрограмм винтерфейсной части авто компилируется с использованием дальней модели памяти {far иnear}, что обеспечивает доступ к подпрограмме из основнойпрограммы и др. модулей.Const, var объявленные в интерфейсной части модуля, как иглобальные константы и переменные помещаются в общий сегмент данных(max65536 байт).
Исполняемая часть – содержитописания программ, объявленных в интерфейсной части. Разрешается объявлениелокальных для модуля вспомогательных типов, констант, переменных. Заголовок –обязательно, список формальных параметров можно опустить. Все параметры размещаютсяв сегменте данных.
Инициирующая часть –завершает модуль, может отсутствовать или быть пустой. Размещение исполняемыхоператоров, фрагменты программы. Операторы исполняются до передачи управленияосновной программе и для подготовки её работы. При пустой инициирующей частилучше всего её попустить.
Стандартные модели:
SYSTEM,DOS,CRT,GRAPH,PRINTER,OVERLAY,TURBO3,GRARH3