Массив целых чисел, имеющий 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