
- •Алфавит языка Паскаль. Правила построения идентификаторов.
- •Структура Паскаль-программы. Прокомментировать назначения разделов.
- •Структура программы на языке Паскаль такова:
- •Логические переменные в Паскале. Основные операции над ними. Логические выражения. Правила записи и вычсления сложных логических выражений.
- •Арифметические, строковые и логические выражения. Операции mod и div.
- •Формат и правила выполнения оператора присваивания.
- •Понятие и применение составного оператора.
- •Формат и правила выполнения условного оператора if.
- •Оператор цикла с известным числом повторений for: формат, порядок выполнения.
- •Оператор цикла с неизвестным числом повторений While: формат, порядок выполнения.
- •Оператор цикла с неизвестным числом повторений Repeat...Until: формат, порядок выполнения.
- •Сравнительный анализ возможностей оператора цикла с неизвестным числом повторений While и оператора цикла с известным числом повторений For.
- •Сравнительный анализ возможностей оператора цикла с неизвестным числом повторений Repeat...Until и оператора цикла с известным числом повторений For.
- •Сравнительный анализ возможностей операторов цикла с неизвестным числом повторений While и Repeat...Until.
- •Операторы ввода данных Read и Readln, их форматы, сходство и различие между операторами.
- •Операторы вывода данных Write и Writeln, их форматы, сходство и различие между операторами.
- •Оператор case: формат, порядок выполнения.
- •Организация управления выполнением программы с помощью меню (на примере).
- •Одномерный массив. Понятие, варианты об0ъявления, настройка на фактическое число элементов массива.
- •Алгоритм упорядочения элементов одномерного массива методом обмена пар смежных записей (метод "пузырька"). Рационализация алгоритма.
- •Алгоритм и особенности этой сортировки таковы:
- •Двумерный массив: понятие, варианты объявления, настройка на фактическое число строк и столбцов массива. Организация в программе вывода двумерного массива в матричной форме.
- •Основные действия с двумерными массивами Паскаля
- •Ввод двумерного массива Паскаля.
- •Вывод двумерного массива Паскаля на экран.
- •Представление двумерного массива Паскаля в памяти
- •Строки в Паскале: понятие, описание, варианты представления и использования.
- •Стандартные процедуры и функции работы со строками.
- •Понятие процедуры и функции в Паскале. Их назначение, применение, варианты размещения в программе.
- •Формат процедуры, размещение ее в программе обращение к ней из вызывающей программы.
- •Обмен информацией между процедурой и вызывающей программой: понятие формального и фактического параметра. Требования к этим параметрам, их описание и применение.
- •27. Формат функции в Паскале, размещение ее в программе, обращение к ней из вызывающей программы
- •28. Обмен информацией между функцией и вызывающей программой: понятие входных параметров, их описание, особенности технологии возврата результата.
- •29. Сравнительный анализ возможностей процедуры и функции. Возможности преобразования процедуры в функцию и наоборот.
- •30. Область действия имен. Глобальные и локальные переменные.
- •31. Достоинства и недостатки использования глобальных переменных и параметров при обмене информацией между программами. Рекомендации по применению.
- •32. Модуль в Паскале (Unit), его назначение, структура модуля, назначение и описание частей модуля.
29. Сравнительный анализ возможностей процедуры и функции. Возможности преобразования процедуры в функцию и наоборот.
В большинстве языков структурного программирования подпрограммы существуют только в виде функций. В Паскале же их два типа: процедуры и функции. Их заголовки выглядят соответственно так:
procedure имя (параметры);
function имя (параметры): тип результата;
Между функциями и процедурами есть существенное отличие. Значение, полученное в результате выполнения кода функции, жестко соотносится с ее именем путем присвоения этому имени конкретного значения. Тип, который может принять вычисляемое значение, указывается в заголовке функции (тип результата). И в теле основной программы функция вызывается только в том случае, если ее имя фигурирует в каком-либо выражении. В то время как процедура вызывается отдельно.
Параметры не является обязательным компонентом, однако их использование повышает гибкость процедуры или функции, т.к. они перестают быть привязанными к определенным данным.
Когда процедура или функция вызываются, то в скобках вместо формальных параметров, указав фактические параметры (аргументы). Это могут быть либо конкретные значения, либо переменные из основной программы.
Тело подпрограммы, как и любого составного оператора на языке Паскаль, ограничивается скобками begin и end.
Примеры использования процедуры и функции.
procedure box (s: char; w,h: integer);
var i,j:integer;
begin
for i := 1 to h do begin
for j := 1 to w do
write (s);
writeln
end;
writeln
end;
begin
box ('+', 10, 5);
box ('r', 20, 3);
box ('|', 50, 10);
box ('$', 12, 4);
readln
end.
var num: integer;
function digits (n:integer): integer;
var i: integer;
begin
i := 0;
while n > 0 do begin
n := n div 10;
i := i + 1
end;
digits := i
end;
begin
write ('Введите положительное число: ');
readln (num);
num := digits (num);
writeln ('Количество разрядов = ', num);
readln
end.
Функции очень похожи на процедуры. Но функция в отличие от процедуры обладает некоторыми свойствами переменной величины и поэтому описание функции отличается от описания процедуры следующими двумя вещами:
В заголовке функции после скобок с формальными параметрами должен быть указан тип функции (у нас это Integer).
Внутри описания функции между BEGIN и END ей хотя бы раз должно быть присвоено какое-нибудь значение (у нас это perimetr:=2*(dlina+shirina)).
30. Область действия имен. Глобальные и локальные переменные.
Любые идентификаторы, введенные внутри какого-либо блока (процедуры, функции) для описания переменных, констант, типов, процедур, называются локальными для данного блока. Такой блок вместе с вложенными в него модулями называют областью действия этих локальных переменных, констант, типов и процедур.
procedure t1;
var y1, y2: real;
procedure sq1;
var a, b, c, d: real;
begin
{ Переменные a, b, c, d являются локальными для sq1,
область их действия – процедура sq1 }
……………………………………
end;
begin
{ Переменные y1, y2 - нелокальные для sq1,
область их действия – t1 и sq1 }
end;
Константы, переменные, типы, описанные в блоке program, называются глобальными.
Локализация переменных дает программисту большую свободу в выборе идентификаторов. Так, если две процедуры a и b полностью отделены друг от друга (т.е. не вложены одна в другую), то идентификаторы в них могут быть выбраны совершенно произвольно, в частности, могут повторяться. В этом случае совпадающим идентификаторам соответствуют разные области памяти, совершенно друг с другом не связанные.
Пример.
var k: integer;
procedure a;
var x, z: real;
begin
{ через x, z обозначены две величины –
локальные переменные для a;
k – глобальная переменная для a }
…………………………………
end;
procedure b;
var x, y: integer;
begin
{ через x, y обозначены две другие величины –
локальные переменные для b;
k – глобальная переменная для b }
…………………………………
end;
begin
{ k – единственная переменная, которую
можно использовать в основной ветке программы }
…………………………………
end.
Если один и тот же идентификатор описан в блоке b и второй раз описан во вложенном в b блоке c, то надо помнить, что эти два одинаковых идентификатора соответствуют разным ячейкам памяти.
var
i: integer;
a: real;
procedure p(var d: real);
var i: integer;
begin
i := 3;
d := i + 10 * d;
end;
begin
a := 2.0;
i := 15;
p(a);
writeln(' i = ', i, ' a = ', a);
readln
end.
Глобальным переменным i и a отводятся две ячейки памяти. Первыми выполняются операторы a:=2.0 и i:=15. Затем вызывается процедура p(a). В процессе работы p отводится ячейка для локальной переменной i и туда засылается число 3. После окончания работы процедуры p эта ячейка i программой «забывается». После возврата на оператор writeln программа знает только одну ячейку i – глобальную, т.е. ту, которая содержит число 15. Поэтому программа выдаст на печать i = 15, a = 23.0, т.к. a = 3 + 10 * 2.
Если локальная и глобальная переменная принадлежат к одному и тому же сложному типу, то этот тип надо описать в разделе type, а сами переменные описывать через этот общий тип.
Пример.
type ab = array[1..3] of real;
var a: ab;
procedure q;
var b: ab;
…………………………..
end;
В этом примере переменные a и b описаны через общий тип ab. Если же локальная и глобальная переменные описаны одинаково, но не через общий тип, то программа может «не понять», что эти переменные принадлежат одному типу.
Пример.
var a: array[1..3] of real;
procedure q;
var b: array[1..3] of real;
……………………….
end;
В этом примере переменные a и b – одинаковые массивы, т.е. типы этих переменных одинаковы, но программа, тем не менее, «не считает», что a и b принадлежат одному типу. Это происходит из-за того, что описание массивов дано в разных блоках.