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

1) По значению сall-by-value

пересылка значений фактических параметров в ячейки формальных параметров

2) по адресу (ссылке, имени)

CALL-BY-REFERENCE

пересылка адресов фактических параметров в ячейки формальных параметров

Назначение:

  • Использование параметра-подпрограммы необходимо, когда некоторый алгоритм, описанный как подпрограмма, применим к множеству алгоритмов, каждый из которых также задается подпрограммой.

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

  • Средства для использования параметров-подпрограмм имеются во всех алгоритмических языках, предназначенных для решения вычислительных задач (СИ, Фортран, MatLab).

Средства паскаля для работы с подпрограммами-параметрами:

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

TYPE PROC1=PROCEDURE(a,b,c:real; var d:integer);

FUNC1=FUNCTION : REAL;

G=FUNCTION (x,y,z:real);

  • Подпрограмма-фактический параметр должна соответствовать процедурному типу формального параметра, т.е. иметь такой же заголовок с точностью до обозначений.

Некоторые особенности использования подпрограмм-фактических параметров:

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

Function sn(x:real):real;

begin sn:=sin(x)

end;

  • В языках Borland Pascal и Turbo Pascal подпрограммы, используемые как фактические параметры, должны компилироваться с использованием "дальней модели памяти" , поэтому в программу надо включить директивы компилятора {$F+} и {$F-} или поставить стандартную директиву far (для версий начиная с Turbo Pascal 6.0) cразу за заголовком подпрограммы.

Билет 21

Описание вызова процедур в паскале.

Вызов процедуры:

procedure ИмяПроцедуры [(CписокФормальныхПараметров)]

Описания (ConstTypeVar… процедуры и функции) begin Операторы end;

Билет 22

Понятие о функциях в паскале. Их описание и вызов.

ФУНКЦИИ

Имя функции - не только имя алгоритма, но и имя результата. Функция, как правило, имеет один основной результат.

function ИмяФункции [(CписокФормалПарам)] :ТипФункции

Описания (ConstTypeVar… процедуры и функции) begin Операторы ИмяФункции :=результат

end;

Обращение к функции производится в выражениях посредством использования указателя фукции:

ИмяФункции[(Список фактических параметров)];

Указатель функции может стоять только в правой части оператора присваивания.

Билет 23

Понятие о статистической памяти, стеке процедур. Глобальные и локальные имена. Область действия и время жизни переменных «Чистые процедуры».

Глобальные и локальные имена:

  • Глобальные имена - это имена, которые действуют на протяжении всей программы (или внешнего блока), они объявляются в соответствуюших разделах программы (или внешнего блока).

  • Локальные имена - это имена, которые действуют в пределах блока подпрограммы, это внутренние имена подпрограммы.

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

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

Область памяти для локальных и глобальных имен:

  • В Паскале данные, описанные в блоке программы, хранятся в так называемом статическом сегменте памяти; память под них распределяется при компиляции.

  • Локальные данные подпрограммы хранятся в специальной области оперативной памяти – стеке; память под эти данные распределяется каждый раз при вызове подпрограммы и освобождается при завершении работы подпрограммы.

Область действия имени:

  • Область действия имени - это часть программы, в которой имя может быть доступно.

  • Область действия локального имени - блок подпрограммы, в которой оно объявлено; глобального – весь текст программы от места объявления до последнего слова End (с точкой).

  • Глобальное имя доступно в подпрограмме только в том случае, если в подпрограмме оно не объявлено еще раз.

Время жизни (существования) данных:

  • Время жизни – это время, в течение которого по данные распределена память.

  • По времени жизни данные делятся на статические, автоматические, динамические.

  • Статические данные существуют все время выполнения программы.

  • Автоматические данные существуют во время выполнения подпрограммы , в которой описаны.

  • Динамические данные получают место в памяти с помощью операторов динамического распределения памяти.

  • В Паскале статические данные - это глобальные данные, автоматические – локальные.

Билет 24

Процедуры-параметры в Турбо-Паскале.

Средства паскаля для работы с подпрограммами-параметрами:

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

TYPE PROC1=PROCEDURE(a,b,c:real; var d:integer);

FUNC1=FUNCTION : REAL;

G=FUNCTION (x,y,z:real);

  • Подпрограмма-фактический параметр должна соответствовать процедурному типу формального параметра, т.е. иметь такой же заголовок с точностью до обозначений.

Некоторые особенности использования подпрограмм-фактических параметров:

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

Function sn(x:real):real;

begin sn:=sin(x)

end;

  • В языках Borland Pascal и Turbo Pascal подпрограммы, используемые как фактические параметры, должны компилироваться с использованием "дальней модели памяти" , поэтому в программу надо включить директивы компилятора {$F+} и {$F-} или поставить стандартную директиву far (для версий начиная с Turbo Pascal 6.0) cразу за заголовком подпрограммы.

Назначение:

  • Использование параметра-подпрограммы необходимо, когда некоторый алгоритм, описанный как подпрограмма, применим к множеству алгоритмов, каждый из которых также задается подпрограммой.

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

  • Средства для использования параметров-подпрограмм имеются во всех алгоритмических языках, предназначенных для решения вычислительных задач (СИ, Фортран, MatLab).

Билет 25

Примеры корректного использования глобальных переменных.

Program Primer;

Var a,i:real;

Procedure p1;

Var i:real;

Begin . . . a:=...; i:=...;

End{p1};

Procedure p2;

Var i:real;

Begin . . . a:=...; i:=...;

End{p2};

Begin {раздел действий программы}

i:=...; a:=...;

р1; р2; р2

End.

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

Билет 26

Модули Турбо паскаля. Их назначение. Структура модуля. Использование готовых модулей.

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

  • Модуль - это автономно компилируемая программная единица.

  • Модуль может быть подключен к любой паскаль-программе или к другому модулю (программной единице).

  • Модуль включает в себя различные разделы описаний (типов, констант, переменных, процедур и функций).

  • Модуль делится на две основные части: интерфейсную (interface) и исполняемую (implementation). В интерфейсной части даются описания, которые могут использоваться в программной единице, к которой подключен модуль. В исполняемой части приводятся описания, доступные только внутри модуля.

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

  • В Объектном Паскале модуль также может иметь завершительную часть (finalization), состоящую из операторов, обеспечивающих грамотное завершение программной единицы, использующей модуль.

Структура модуля (ТП, ОП):

UNIT имя_модуля;

INTERFACE

интерфейсная_часть

IMPLEMENTATION

исполняемая_часть

[BEGIN

инициирующая_часть]

END.

Структура модуля (ОП):

UNIT имя_модуля;

INTERFACE

интерфейсная_часть

IMPLEMENTATION

исполняемая_часть

[INITIALIZATION

инициирующая_часть]

[FINALIZATION

завершающая_часть]

END.

Имя файла, содержащего модуль:

  • Имя_модуля.pas

  • При компиляции ТП: Имя_модуля.pas => Имя_модуля.tpu ОП: Имя_модуля.pas => Имя_модуля.dcu

Использование модулей:

  • Если модуль использует другие модули, то предложение USES может стоять либо после слова INTERFACE, либо после слова IMPLEMENTATION. Модули, подключенные в интерфейсной части, доступны в любой точке рассматриваемого модуля; модули, подключенные в исполняемой части, доступны в любом месте модуля, за исключением интерфейсной части. Примеры использования модулем других модулей будут рассмотрены позже.

Билет 27

Символьная информация в Паскале.

СИМВОЛЬНЫЕ ДАННЫЕ ПРИНИМАЮТ ЗНАЧЕНИЯ НА МНОЖЕСТВЕ ВСЕХ СИМВОЛОВ, КОТОРЫЕ МОЖНО ВВЕСТИ С КЛАВИАТУРЫ КОМПЬЮТЕРА

Объявление символьных переменных в Объектном Паскале:

Var a:char; b: widechar;

Символьный тип – порядковый:

  • Все значения упорядочены, так как имеют номер (код) в таблице кодирования.

  • К символьным данным (как к данным любого порядкового типа) применимы встроенные функции: ORD(сh) – возвращает код символа сh; CHR(x) – возвращает символ с кодом x; SUCC(сh) – определение следующего за сh символа по кодовой таблице; PRED(сh) –определение предшествующего символа).

Строковые типы Объектного Паскаля:

  • Тип ShortString эквивалентен типу string Турбо Паскаля.

  • Данные типа AnsiString (могут содержать до 231 символов типа char.

  • Тип WideString соответствует строкам максимальной длины до 230 символов типа widechar.

  • Тип String: при {$H+} - AnsiString (по умолчанию), при {$H+} – ShortString.

  • Типы AnsiString и WideString - ссылочные, динамические, типы; они имеют 8 служебных байтов (вместо одного нулевого у ShortString): служебные байты содержат длину строки и ссылку на строку в динамической памяти (куче).

  • Объектный Паскаль разрешает для определения длины строки использовать только функцию LENGTH, а для установления нового значения длины только процедуру SetLength(строка, новая_длина_строки)

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

Функции, работающие со строками:

  • CONCAT(S1 ,S2,...,SN)-функция типа STRING; возвращает строку, представляющую собой сцепление (конкатенацию) строк-параметров S1,S2,...,SN. Конкатенацию строк можно также получить с помощью операции +.

  • COPY(ST,INDEX,COUNT)-функция типа STRING; копирует из строки ST COUNT символов, начиная с символа с номером INDEX.

  • LENGTH(ST)-функция типа INTEGER; возвращает длину строки ST.

  • POS(SUBST,ST)-функция типа INTEGER; отыскивает в строке ST первое вхождение подстроки SUBST и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращает нуль.

Процедуры, работающие со строками :

  • DELETE(ST,INDEX,COUNT)-удаление COUNT символов из строки ST, начиная с символа с номером INDEX.

  • INSERT(SUBST, ST, INDEX) - вставка подстроки SUBST в строку ST, начиная с символа с номером INDEX.

  • STR(X[:WIDTH[:DECIMALS]],ST) -преобразование значения типа REAL или INTEGER в строку символов ST так, как это делает процедура WRITELN перед выводом; параметры WIDTH и DECIMALS, если они присутствуют, задают формат преобразования (WIDTH - длину числа, DECIMALS - длину дробной части; параметр DECIMAL имеет смысл указывать только для вещественных чисел).

  • VAL(ST, X, CODE) - преобразование строки ST во внутреннее представление целого или вещественного числа Х; параметр CODE содержит нуль, если преобразование прошло успешно, в противном случае он содержит номер символа в строке ST, где обнаружен ошибочный символ; пробелы перед числом в строке ST должны отсутствовать.

Шаги обработки строки таблицы:

  • выделение смысловых полей -подстрок (с помощью функции COPY);

  • преобразование некоторых полей из символьного представления в числовое (с помощью процедуры VAL);

  • анализ символьных полей с помощью функции POS;

  • подготовка строки выходных данных с помощью STR и CONCAT.

Билет 28

Переменные сложной структуры. Тип Запись.

Тип Запись:

  • Запись - это переменная, состоящая из фиксированного числа компонент, вообще говоря, разного типа, причем каждая компонента имеет свое имя.

  • Компоненты записи также называются полями записи.

  • Записи используются для работы с данными, содержащими в себе информацию разного типа (числовую, символьную и т. д.); примеры таких документов: пла­тежные ведомости (фамилии и имена - символьная информация, де­нежные суммы - числовая), карточки больных в поликлинике, библио­течная информация.

Сравнение двух типов: массив и запись:

  • Компоненты массива имеют одинаковый тип; компоненты записи могут иметь разный тип (хотя могут быть и однотипны).

  • Для обращения к элементу массива надо указать его номер (индекс), при обращении к полю записи указывается его имя.

Описание типа запись:

TYPE имя_типа = RECORD

список_1_имен_полей: тип_1;

список_2_имен_полей : тип_2;

. . .

список_N_имен_полей: тип_N;

END;

Память, занимаемая записью, равна сумме объемов памяти полей (если исключить из рассмотрения особенности, связанные с выравниванием). В любом случае для определения размера памяти записи можно использовать функцию sizeof(переменная_или_тип).

Обращение к полю записи:

Имя_записи.Имя_поля

Пример.

VAR C:COMPLEX; D,D1:DATE; B:BOOK;

BEGIN . . . C.Re:=5; D.Month:=January; B.Author:='Smith';

{*} D1.Day:=6; D1.Month:=June; D1.Year:=1799;{*} . .

Билет 29

Задача обработки данных, предоставленных в табличной форме. Два варианта решения с использованием строк и записей. Сравнение этих вариантов.

  • Программа, использующая запись, алгоритмически проще, чем программа со строками.

  • Платой за упрощение является разрушение структуры таблицы при вводе: строка таблицы распределяется по нескольким строкам экрана монитора компьютера.

Вариант 30

Файлы в программировании:

  • Файл - это последовательность однотипных компонент. Число компонент файла не ограничено. После последней компоненты файла стоит специальный код, называемый признаком конца файла; этот код обычно ставится автоматически, без участия программиста.

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

Программное и физическое имена файлов:

  • Программное имя - это имя переменной файлового типа.

  • Физическое имя - это имя устройства или файла на диске.

  • Существуют специальные операторы, устанавливающие соответствие (связывающие) программное и физическое имена файла.

Текстовые и двоичные файлы:

  • Текстовые файлы хранят информацию во внешнем представлении. Они имеют два основных признака: во-первых, их компонентами являются строки символов; во-вторых, эта символьная информация интерпретируется в соответствии с типом вводимых или выводимых переменных. Эти файлы являются обобщением данных на устройстве CON (т.е. вводимых с клавиатуры или выводимых на экран компьютера). Умение работать с текстовыми файлами необходимо даже начинающим программистам, так как на устройстве CON данные существуют малый промежуток времени, а обычно имеется потребность в их длительном хранении.

  • Двоичный файл - это последовательность байтов; обмен информации между двоичным файлом и переменными программы происходит без преобразования. В Турбо Паскале рассматривается два вида двоичных файлов: типизированные и нетипизированные. В случае типизированных файлов байты файла разбиваются на ячейки в соответствии с типом компонент файла; например, для файла с базовым типом integer каждая пара байтов (для 32-разрядных компьютеров – четверка) рассматривается как целое значение; типизированные файлы хранят данные во внутреннем представлении. Для нетипизированных файлов представление информации безразлично, файл рассматривается как последовательность нулей и единиц.

Классический подход к работе с файлами – основные шаги:

  1. Объявление файловой переменной – программного имени файла – различно для разных видов файлов

    • Текстовый файл:

Var ИмяФайла: textfile; {ТП:text }

    • Типизированный файл:

Var ИмяФайла: file of БазовыйТип;

    • Нетипизированный файл:

Var ИмяФайла: file;

  1. Связывание программного и физического имен файлов

AssignFile (ПрограммноеИмя, ФизическоеИмя);{в ТП Assign}

ПрограммноеИмя – переменная, описанная как файл;

ФизическоеИмя – имя файла на диске (полное) или имя устройства.

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

Пример:

Var f: text;

Begin …

Assign( f, ‘d:\student\a.txt‘ );

{Далее используется только f}

  1. Открытие файла (для чтения или для записи)

Reset (ИмяФайла); {открытие файла для чтения}

Rewrite (ИмяФайла); {открытие файла для записи}

Пример:

Var f: text;

Begin …

Assign( f, ‘d:\student\a.txt‘ );

Reset(f); {или для записи Rewrite(f)}…

  1. Чтение из файла или запись в файл – различно для разных видов файлов

Пока для примера рассмотрим чтение/запись для текстовых файлов:

Read (ИмяФайла, СписокВвода);

Write (ИмяФайла, СписокВывода);

Пример: Read(n,a,b); Write(‘s=‘, s);{полная аналогия консольному вводу-выводу}

Также можно использовать Readln и Writeln.

Замечание. При работе с файлами используется функция EOF(ИмяФайла). EOF возвращает значение True, если считан признак конца файла, и значение False в противном случае.

EOF – сокр. от End Of File

  • Закрытие файла

CloseFile(ИмяФайла); {для ТП - Close }

Закрытие файла предполагает следующие действия:

  1. Сохранение изменений в файле.

  2. Перерегистрация файла в каталоге.

  3. Разрушение связи между программным и физическим именами файлов.

Открытие файла для чтения:

  1. Поиск файла с заданным физическим именем; если не найден, то сообщение об ошибке.

  2. Указатель файла устанавливается на первую компоненту.

  3. Компонента, на которой стоит указатель, считывается в буфер.

  4. Если считан признак конца файла, то функция EOF устанавливается в значение True, иначе – в значение False.

Открытие файла для записи:

  1. Поиск файла с заданным физическим именем; если файл не найден, то создается новый файл

  2. Содержимое файла очищается.

  3. Указатель файла устанавливается на конец файла (после последней компоненты).

  4. Функция EOF устанавливается в значение True.

Открытие файла для дополнения:

  1. Поиск файла с заданным физическим именем; если не найден, то сообщение об ошибке.

  2. Указатель файла устанавливается на конец файла (после последней компоненты).

  3. Функция EOF устанавливается в значение True.

Билет 31

Динамические данные.

Динамические данные:

  • описываются не данные, а их адреса (указатели);

  • распределяются и уничтожаются в памяти на этапе выполнения программы по специальным командам;

  • место в памяти – динамическая память (англ. куча – heap);

  • время жизни и область действия указателей определяется как для обычных (локальных или глобальных) переменных

Описание динамического массива:

Var имя_массива: Array of Array of…Array of тип_элемента;

Ключевые слова Array of записываются в описании столько раз, сколько индексов у массива (т. е. какова его размерность).

По существу объявленное имя_массива является указателем на массив.

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