
- •Переменные
- •Типы переменных и констант
- •Целые типы данных языка Turbo Pascal
- •Стандартные математические функции, используемые
- •Арифметические выражения
- •Операторы
- •Оператор присваивания
- •Ввод и вывод результатов вычислений
- •Общая структура программы на Turbo Pascal
- •Пример выполнения задания 1
- •Тема 2 Логические выражения Условный оператор
- •Условный оператор
- •Пример выполнения задания 2
- •Тема 3 Использование циклических структур. Операторы цикла с предусловием и с постусловием
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Пример выполнения задания 3
- •Тема 4 Использование циклических структур. Оператор цикла с параметром
- •Пример выполнения задания 4
- •Тема 5 Использование и обработка одномерного массива
- •Описание одномерного массива
- •Часто встречающиеся задачи на одномерный массив
- •Пример выполнения задания 5
- •Тема 6 Использование и обработка двумерного массива
- •Задачи с использованием главной или побочной диагонали матрицы
- •Пример выполнения задания 6
- •Тема 7 Организация программ с использованием функций
- •Пример выполнения задания 7
- •Тема 8 Организация программ с использованием процедур
- •Параметры
- •Пример выполнения задания 8
- •Тема 9 Текстовые файлы
- •Символьный тип данных
- •Операции над строками
- •Особенности работы со строками
- •Редактирование строк
- •Сору (s:string; start, len:integer):string;
- •Преобразование строк
- •Процедуры и функции для работы с текстовыми файлами
- •Примеры выполнения задания 9
- •Тема 10
- •Работа с комбинированными типами данных
- •(Записями)
- •Общие сведения
- •Особенности работы с записями
- •Пример выполнения задания 10
- •Тема 11 Типизированные файлы
- •Процедуры и функции для работы с типизированными файлами
- •Прямой доступ к элементам файла
- •Примеры выполнения задания 11
Параметры
Параметры, перед которыми отсутствует зарезервированное слово var и за которыми следует тип, называются параметрами-значениями. Например, в описании
procedure korrect (s, к : real; x : integer);
s, k, x – параметры-значения. Фактический параметр, соответствующий параметру-значению, может быть выражением соответствующего типа, например:
korrect (2.5, (х + 2)/5, 1);
Изменение формальных параметров-значений не влияет на значения соответствующих фактических параметров.
Параметры, перед которыми следует ключевое слово var и за которым следует тип, называются параметрами-переменными. Например, в описании
procedure obr(var s, k : real; var x : integer);
s, k, x – параметры-переменные. Фактический параметр, соответствующий параметру-переменной, может быть только переменной, например:
obr(a, b, k);
где а, b – переменные вещественного типа, а k – целого типа.
Любые изменения в значении формального параметра-переменной отражаются на фактическом параметре.
Параметр-переменная используется в том случае, если значение должно быть передано из процедуры в вызывающий блок.
Пример.
Решить два квадратных уравнения
и
,
считая, что его дискриминант неотрицателен.
program primer1;
uses crt;
var y1, y2, zl, z2 : real;
{текст
процедуры для нахождения корней
квадратного уравнения
}
procedure sq( a, b, с : real; var xl, x2 : real);
var d : real;
begin
d:=b*b – 4*a*c;
x1:=(–b + sqrt(d))/(2*a);
х2:=(–b – sqrt(d))/(2*a);
end;
{операторы основной программы}
begin clrscr;
sq(5.7, –1.2, –8.3, y1, y2);
sq(2.4, 3.4, –8.4, zl, z2);
writeln(корни y1, y2 =, yl : 6 : 2, y2 : 6 : 2);
writeln(корни zl, z2 =, zl : 6 : 2, z2 : 6 : 2);
readkey
end.
Если в процедуру необходимо передать массив, то в этом случае фактическим параметром является имя массива. Обратим внимание на то, что в заголовке процедуры для указания типов формальных параметров могут использоваться только имена типов.
Нельзя (!) записать так:
procedure
sum(a
: array[l ..5] of real; var s
: real);
Как же написать одну процедуру для обработки двух массивов одного типа, имеющих разное число элементов?
Пример. Вычислить z = (s + к)*(s1 + k1), где s, k – сумма и количество отрицательных элементов a(10), s1, k1 – сумма и количество отрицательных элементов массива b(8).
program primer2;
uses crt;
type vect = array [1..10] of real;
{Значение верхней границы индекса равно максимальному числу элементов двух массивов а, b}
var а, b : vect; i, k, k1 : integer; s, s1 : real;
{Процедура для фиктивного массива х с числом элементов п, где п <= 10 вычисляет сумму (sum) и количество (col) отрицательных элементов}
procedure sumcol (x:vect; n:integer; var sum:real;
var col:integer);
var i:integer;
begin sum := 0; col := 0;
for i:=1 to n do
if x[i] < 0 then
begin sum := sum + x[i];
соl:=соl + 1;
end
end;
begin clrscr;
writeln(ввeдитe массив а(10));
for i := 1 to 10 do read(a[i]);
writeln(введите массив b(8));
for i := 1 to 8 do read(b[i]);
{в процедуру передается массив а длиной 10}
sumcol(a, 10, s, к);
{в процедуру передается массив b длиной 8}
sumcol(b, 8, sl, k1);
z := (s + k)*(sl + kl);
writeln(z=, z : 6 : 2);
readkey
end.
Такой подход можно применить и для двумерных массивов.