Массив целых чисел, имеющий 3 строки и 4 столбца, описывается следующим образом:
VAR A: ARRAY [1..3,1..4] OF INTEGER;
В памяти компьютера элементы данного массива будут располагаться по строкам:
A[1,1]
A[1,2]
A[1,3]
A[1,4]
A[2,1]
...
Ввод и вывод элементов массива.
VAR I, J, N, M: INTEGER;
B : ARRAY [1..50,1..40] OF INTEGER;
BEGIN
WRITELN ('ВВЕДИТЕ КОЛИЧЕСТВО СТРОК'); READLN(N);
WRITELN ('ВВЕДИТЕ КОЛИЧЕСТВО СТОЛБЦОВ); READLN(M);
{ВВОД}
FOR I :=1 TO N DO {цикл по строкам}
FOR J :=1 TO M DO {цикл по столбцам}
READ(A[I, J]);
{ВЫВОД}
FOR I :=1 TO N DO
BEGIN
FOR J :=1 TO M DO WRITE(A[I, J]);
WRITELN;
{после вывода элементов столбца переход на новую строку}
END;
END.
В приведенном примере реализован псевдодинамический массив, т. е. если заранее не известна размерность массива, то в описательной части Паскаля задается максимально возможное значение числа строк и столбцов. В таком случае перед вводом массива запрашивается реальное число строк и столбцов.
Полезно рассмотреть несколько задач, фрагменты которых приведены далее:
1. Сумма элементов, стоящих на главной диагонали, матрицы, состоящей из 10 строк и 10 столбцов (индексы элементов главной диагонали равны!):
...
S := 0;
FOR I := 1 TO 10 DO S := S + A[I, I];
...
2. Сумма элементов, стоящих ниже главной диагонали, матрицы, состоящей из 10 строк и 10 столбцов:
...
S := 0;
FOR I := 2 TO 10 DO
FOR J := 1 TO I-1 DO S := S + A[I, J];
...
3. Сумма элементов, стоящих выше главной диагонали, матрицы, состоящей из 10 строк и 10 столбцов:
...
S := 0;
FOR I := 1 TO 9 DO
FOR J := I+1 TO 10 DO S := S + A[I, J];
...
Тема 10. Подпрограммы
Подпрограммы - это именованные части программы, реализующие определенный алгоритм, которые можно вызывать из программы, при этом можно передавать входные данные и получать выходные. Входные и выходные данные называются аргументами или параметрами. Фактическими параметрами являются параметры, с которыми обращаются к подпрограммам. Формальными параметрами являются параметры подпрограмм.
Подпрограммы в языке Паскаль реализованы посредством процедур и функций.
ПРОЦЕДУРЫ
Процедуры имеют аналогичную структуру, что и программы на Паскале, только после имени процедуры в круглых скобках могут быть перечислены описания параметров. В конце процедуры ставится не точка, а точка с запятой.
PROCEDURE < имя > (<описание параметров>);
< описание внутренних переменных >
BEGIN
< операторы, реализующие алгоритм процедуры >
END;
Параметры могут быть описаны 2 способами:
1 способ.
PROCEDURE MNP (VAR A: REAL; VAR B: CHAR);
В данном случае параметры-переменные, т. е. им внутри процедуры можно присваивать значения. При вызове процедуры ей передается сама переменная (ее адрес), а не ее копия (значение), и изменение параметра-переменной приводит к изменению фактического параметра в вызывающей программе. Эти параметры могут быть входными и выходными.
В данном примере A,B – параметры-переменные.
2 способ.
PROCEDURE MNP (A: REAL; B: CHAR);
В данном случае параметры-значения, т. е. они внутри процедуры используются как константы: их значения можно использовать, но им нельзя присваивать новые значения. При вызове подпрограммы в данном случае фактические параметры вычисляются, их значения помещаются во временную память и передаются процедуре. В процедуре они используются как начальные значения формальных параметров, т. е. осуществляется подстановка значений. Параметры-значения могут быть только входными параметрами.
В данном примере A,B – параметр-значение..
Пример. Нахождение максимального значения из 2-х значений.
var a, b, C;
PROCEDURE MAX (L, M : INTEGER; VAR N : INTEGER);
BEGIN
IF L >M THEN N := L ELSE N := M;
END;
BEGIN
READ(A, B);
MAX(A, B,C);
WRITELN (‘MAX=’, C);
END.
Функции
Отличие функции от процедуры заключается в следующем: функция всегда вычисляет некоторое значение и это значение присваивается имени функции. Тип этого значения указывается при описании функции. Поэтому среди параметров функции нет выходных, а имя функции и является по сути этим выходным параметром. Естественно, что вызов функции осуществляется внутри выражения.
Функция состоит из заголовка и тела функции.
Заголовок содержит зарезервированное слово FUNCTION, идентификатор (имя) функции, список формальных параметров, заключенный в скобки, и тип возвращаемого значения. Список формальных параметров может отсутствовать.
Тело функции – это набор операторов языка Паскаль, где обязательно имени функции присваивается значение.
FUNCTION <имя> (список формальных параметров) : <тип результата>;
BEGIN
<тело функции>;
END;
Пример
Нахождение максимального значения из 2-х значений и его увеличение в 2 раза.
var a, b;
FUNCTION MAX (L, M : INTEGER): INTEGER;
BEGIN
IF L >M THEN MAX := L ELSE MAX := M;
END;
BEGIN
READ(A, B);
C := maX (A, B)*2;
WRITELN (‘C =’, C));
END.
Задачи и решения
Переменные и константы типа REAL
1. Какие числа представлены в форме с плавающей запятой
a) 2000
b) 30.5Е+02
c) 1234.867
d) 9584
e) 8.2Е0.1
f) - 12.4Е-04
2. Какие из следующих соотношений неправильны:
a) 3.44Е+02=344
b) 20Е-03=0.02
c) 0.2Е03=2000.0
d) - 0.1Е-04=- 0.0001
e) trunc (6.9) = 7
f) round (5.8) = 6
g) trunc (3.8) = 3
h) round (2.4) = 2.5
3. Составьте программу вычисления среднего арифметического 3-х чисел.
4. Составьте программу вычисления размера оплаты за электроэнергию по введенным значениям расхода электроэнергии и тарифа (тариф – это стоимость 1 кВт/ч).
5. Составьте программу вычисления длины окружность и площади круга по введенному значению радиуса. Для вычисления значения числа p@3,141592... в Паскале использовать стандартную функцию с идентификатором PI.
6. Составьте программу вычисления периметра квадрата по известному значению его площади.
7. Часы показывают время. Написать программу нахождения угла поворота часовой стрелки относительно 00.00 часов в заданное время.
8. Составьте программу вычисления периметра и площади треугольника по известным 3-м сторонам. По формуле Герона
где p – полупериметр, а, b,c – длины сторон, s – площадь.
9. Город А находится в х милях от Лондона. Напишите программу, вычисляющую расстояние в километрах. Известно, что 5 миль=8 км.
10. На заводе ежедневно сжигают А тонн топлива, при этом расходы на топливо за полгода В рублей. Составьте программу вычисляющую, сколько рублей будет сэкономлено, если ежедневно сжигать на С тонн меньше?
11. Составьте программу вычисления значения выражения
a) y = a x 2 + b x + c
b) y =½x + 4½-½x 2 - 3 x + 6½
c) y = x sin (x)
d) ![]()
e) 
Примеры программ
Задача 7
program time;
{За 60 минут часовая стрелка поворачивается на 30°, следовательно, за 1 минуту повернется на 0.5°. Поэтому ответ должен быть в переменной типа real. Вывод организован в формате R:p:q, т. е. в формате с фиксированной точкой}
var h, m : integer;
angle : real;
begin
writeln ( 'сколько часов ' ); readln ( h );
writeln ( ' сколько минут ' ); readln (m);
angle := 30 * h + m * 0.5;
writeln ( ' угол поворота ', angle :6 : 2 , ' градусов ' );
end;
Задача 9
program mil;
var k, m : real;
begin
writeln ( ' Введите расстояние в милях ' );
readln (m);
k := 8 / 5 * m;
writeln ( 'Расстояние в километрах = ' , к );
end.
Задача 10
program toplivo;
var a, b, c, d : real;
begin
writeln ( ' Введите, сколько тонн сжигают ежедневно ' );
readln (a);
writeln ( ' Введите расходы за полгода ' );
readln (b);
writeln ( ' Введите экономию топлива в день ' );
readln (с);
d := b - (a - c) * b / a;
writeln ( ' Экономия составит ' , d, ' рублей ');
end.
Задача 11 b)
program q11b;
var x, y : real;
begin
writeln ( ' Введите х ' );
y := abs (x + 4) – abs (sqr (x) – 3 * x + 6);
writeln('y= ' , y );
end.
Задача 11 c) Необходимо знать, что в Паскале вычисление yx производится по следующей формуле:
y x = e x ln (y)
program q11c;
var x, y : real;
begin
writeln ( ' Введите х ' );
y := exp ( sin (x) * ln (x));
writeln( ' y = ' , y );
end.
Задача 11 e)
program q11e;
var l, m, n, y : real;
begin
writeln ( ' l = ' ) ; readln (l);
writeln ( ' m = ' ) ; readln (m);
writeln ( ' n = ' ; readln (n);
y := 1.0 / (l + 1.0 / (m + 1.0 / n) );
writeln ( ' y= ' , y );
end.
Переменные и константы типа INTEGER
1 Какие результаты выполнения выражений правильны:
a) 24 div 12 = 2
b) 11 div 5 = 1
c) 10 div 3 = 3
d) 17 div 2 = 1
e) 20 mod 2 = 0
f) 7 mod 3 = 2
2 В видеоигре игрок выигрывает 50 очков, если он сбивает самолет, 100 очков, если ракету, 200 очков за спутник. Составьте программу, которая выводит на экран заработанное количество очков, если игрок сбил a самолетов, b ракет, c спутников.
3 Ежедневно молочная ферма надаивает 1 850 литров молока. Составьте программу, которая по введенному номеру месяца выдаст количество молока за этот месяц.
4 Мальчик, продающий на улице газеты, зарабатывает 1 рубль на продаже каждой из 75 газет. На каждой из остальных проданных газет он зарабатывает по 2 рубля. Напишите программу, которая выдает заработок мальчика, если он продал n газет (75 ≤ n < 150)
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


