- •Предисловие
- •Основные навыки и умения
- •Логическая культура: знание логики, логическая интуиция.
- •Языковые знания и умения.
- •Поисковые знания и умения.
- •Алгоритмические навыки и умения.
- •Общие подходы к построению алгоритмов
- •Тестирование и сопровождение программ
- •Обязательный минимум содержания среднего (полного) общего образования
- •Технология обработки текстовой информации
- •Введение в информатику
- •Системы счисления
- •Перевод из десятичной системы счисления
- •Перевод в десятичную систему счисления
- •Перевод чисел из двоичной системы счисления в восьмеричную, шестнадцатеричную системы и обратно
- •Выполнение арифметических операций в позиционных системах счисления
- •Элементы математической логики
- •Логические законы
- •Алгоритм и его свойства
- •Исполнители. Компьютер - универсальный исполнитель
- •Работа компьютера
- •Turbo pascal - исполнитель паскаль-программ
- •Конструкции Паскаля
- •Типы данных
- •Целый тип данных
- •Вещественный тип данных
- •Символьный тип данных
- •Логический тип данных
- •Выражения
- •Операторы ввода-вывода
- •Оператор присваивания
- •Общий вид программы на Паскале
- •Условный оператор
- •If логическое_выражение then оператор1 else оператор2;
- •If логическое_выражение then оператор1;
- •Операторы цикла
- •Построение линейных алгоритмов
- •Построение ветвящихся алгоритмов
- •Построенние циклических алгоритмов
- •Нахождение суммы
- •Вложенные циклы
- •Переборный метод решения задач
- •Численные методы
- •Метод итераций
- •Метод половинного деления
- •Вычисление определенного интеграла методом трапеций
- •Случайные числа
- •Метод Монте-Карло (метод статистических испытаний)
- •Массивы Одномерные массивы
- •Перебор элементов массива
- •Перебор подмассивов
- •Классы задач по обработке массивов
- •Задачи первого класса
- •Задачи второго класса
- •Задачи третьего класса
- •Задачи четвертого класса
- •Сортировка массивов
- •Сортировка вставками
- •Сортировка пузырьком (обменом)
- •Сортировка выбором
- •Сортировка фон Неймана (слиянием)
- •Двумерные массивы
- •Обработка строк
- •Процедуры и функции
- •Рекурсия
- •Работа с графикой
- •Классы программного обеспечения
- •Компиляция и интерпретация
- •Текстовый редактор
- •Электронные таблицы
- •Системы управления базами данных (субд)
- •Пример решения экзаменационного билета
- •Контрольные работы
- •Контрольная работа №1
- •Контрольная работа № 2
- •Контрольная работа № 3
- •Контрольная работа № 4
- •Контрольная работа № 5
- •Библиографический список
Процедуры и функции
В тексте песни припев дается только один раз, если нужно его повторить, то указывается одно слово “припев”, под которым подразумевается текст, приведенный ранее.
Этот же принцип используется в программировании: если какая-либо часть программы многократно повторяется, то ее оформляют отдельно от основной программы и называют подпрограммой. К ней обращаются при необходимости ее использования.
Более того, рекомендуется большую задачу разбивать на отдельные смысловые задачи (подпрограммы), программировать их отдельно, отлаживать, а затем объединять в единую программу. Использование подпрограмм считается хорошим стилем программирования. При этом уменьшается в целом объем программы и уменьшается время на ее отладку.
Любая программа может содержать несколько подпрограмм, каждая из которых так же может содержать подпрограммы.
В Паскале имеется два вида подпрограмм: процедура (procedure) и функция (function).
Процедура может возвращать в качестве ответа несколько значений, а функция - только одно. Работа с процедурами и функциями состоит из двух частей:
1) описание процедуры или функции;
2) вызов ее на исполнение (передача управления компьютером) с одновременной передачей исходных данных, необходимых для работы процедуры или функции.
По окончании работы процедуры или функции управление возвращается за точку вызова (к следующему оператору).
Описание процедуры:
procedure имя [(список параметров)];
oписание данных;
begin
oператоры процедуры или тело процедуры
end;
Параметры, указанные при описании, называют формальными. Список формальных параметров может отсутствовать. Если он есть, то в нем печисляются имена формальных параметров с указанием типов. Параметры бывают двух видов: параметры-значения и параметры-переменные. При вызове процедуры или функции формальные параметры заменяются фактическими, которые так же могут отсутствовать. Но если есть, то должны соответствовать формальным параметрам по количеству, типу и порядку следования.
На место параметра-значения подставляется при вызове процедуры или функции значение выражения, передаваемого как аргумент. Этот параметр описывается указанием имени и типа. Его значение не может быть возвращено в точку вызова (передается входная информация). На место параметра-переменной подставляется переменная, ее значение может быть изменено в процедуре или функции и возвращено обратно (передается входная и выходная информация). Описанию этого параметра должно предшествовать ключевое слово var. Параметры, указанные при описании процедуры или функции, могут рассматриваться, как своеобразное расширение раздела описания и могут участвовать в любых разрешенных операциях, функциях, операторах внутри подпрограммы.
Данные, описанные в разделе описания процедуры или функции, называют локальными. Они используются только внутри данной процедуры или функции. Локальные переменные создаются при каждом вызове функции и уничтожаются, когда процедура или функция заканчивает свою работу. Поэтому они недоступны основной программе.
Данные, описанные в разделе описания программы, называют глобальными. Область их действия - вся программа, в том числе и процедуры и функции. Поэтому через глобальные переменные так же можно передавать информацию в процедуру или функцию.
Вызов процедуры осуществляется по имени с указанием фактических параметров, перечисленных через запятую.
Описание функции:
function имяф(список_параметров): тип_возвращаемого_значения;
oписание данных;
begin
Операторы функции или тело функции;
имяф := выражение; {обязательный оператор, формирующий
возвращаемое функцией значение}
end;
Вызов функции осуществляется с помощью указателя функции, который записывается в каком-либо выражении: имяф(список_аргументов). Операторов имяф := выражение может быть несколько в теле функции. Значение, которое вычисляется функцией, задается последним выполненным до завершения работы функции оператором. Если такого оператора присваивания нет в функции, то значение функции не определено, что приведет к аварийному завершению программы.
Задача 1. Напишите функцию, определяющую является ли заданный символ русской гласной буквой.
Решение. В качестве параметра в функцию будет передаваться символ. А результат должен определять является или не является (да или нет), т.е. значение функции должно быть логическим.
function gl (ch: char): boolean;
begin
gl := pos (ch, ‘аеиоуыэюя’) <> 0;
end;
Задача 2. Даны два действительных числа x, y. Вычислите значение выражения z := (sign x + sign y)· sign (x + y), где sign - функция, определяющая знак числа, т.е. .
Решение. В качестве передаваемого параметра будем использовать значение вещественной переменной. Функция будет принимать значение -1, 0 или 1, т.е. целое.
var x, y, z: real;
function sign (a: real): integer;
begin
if a < 0 then sign := -1
else if a = 0 then sign := 0
else sign := 1;
end;
begin {тело основной программы}
writeln (‘задайте значения x и y’);
readln (x, y);
z := (sign (x) + sign (y)) * sign (x + y);
writeln (‘z = ‘, z);
end.
Упражнение. Решите предложенную задачу без описания функции.
Задача 3. Напишите функцию, определяющую следующее за данным простое число.
Решение. Передаваемый параметр - целое число, значение функции - целое число.
function pr (a: integer): integer;
var i: integer; {возможные делители числа}
aa: integer; {число - кандидат на простое}
f: boolean; {равно true, если нашли простое число}
begin
f := false; {простое число еще не нашли}
aa := a;
repeat
aa := aa + 1;
i := 1;
repeat
i := i + 1;
until aa mod i = 0;
if aa = i then begin f := true; pr := aa end; {нашли простое число}
until f;
end;
Упражнение. Измените функцию так, чтобы она определяла, является ли число простым. С помощью этой функции найдите все простые числа в заданном массиве целых чисел.
Задача 4. Напишите функцию, проверяющую принадлежит ли заданный элемент двумерному массиву. С помощью этой функции проверить все ли элементы одномерного массива принадлежат заданному двумерному.
Решение. Просматриваем двумерный массив, сравнивая каждый его элемент с элементом одномерного массива. Если нашли совпадение, то элемент имеется в двумерном массиве. Напишем две дополнительные процедуры для вывода одномерного и двумерного массивов.
const nn = 5; mm = 5;
type mas2 = array [1..nn, 1..mm] of integer;
mas1 = array [1..nn] of integer;
var a: mas2; {исходный двумерный массив}
b: mas1; {исходный одномерный массив}
n, m, i, j: integer;
f: boolean;
function prov (a: mas2; n, m: integer; x: integer): boolean;
{проверяет, принадлежит ли x двумерному массиву}
var i, j: integer;
f: boolean;
begin
f := false; {еще не нашли}
i :=1;
while (i <= n) and not f do
begin j :=1;
while (j <= m) and not f do
if a[i, j] = x
then f := true {нашли}
else j := j + 1; {переходим к следующему}
if not f then i := i + 1
end;
prov := f
end;
procedure wri1 (a: mas1; n: integer);
{вывод одномерного массива}
var i : integer;
begin
writeln;
writeln (‘одномерный массив’);
for i := 1 to n do write (a[i], ‘ ‘)
end;
procedure wri2 (a: mas1; n, m: integer);
{вывод двумерного массива}
var i, j : integer;
begin
writeln (‘одномерный массив’);
for i := 1 to n do
begin
writeln;
for j := 1 to m do write (a[i, j], ‘ ‘);
end;
end;
begin {основная программа}
write (‘введите количество строк и столбцов’);
readln (n, m);
for i := 1 to n do
for j := 1 to m do a[i, j] := random (10);
for i := 1 to n do b[i] := random (10); {или b[i] := i}
wri2(a, n, m);
wri1 (b, n); writeln;
f := true;
i := `;
while (i <= 1) and f do
begin f := f and prov (a, n, m, b[i]);
if f then i := i + 1; {если данный элемент есть в двумерном массиве, то переходим к анализу следующего элемента двумерного массива}
end;
if f then writeln (‘входят все’)
else writeln (‘не входит ’, i, ‘элемент’);
end.
Упражнения.
1. Напишите функцию, проверяющую принадлежит ли заданный элемент одномерному массиву. С ее помощью проверить принадлежит ли каждый элемент двумерного массива заданному одномерному. Программа должна быть эффективной и не допускать лишних переборов.
2. Найдите значение интеграла методом трапеций, оформив вычисление подинтегрального выражения в виде функции.