Рабочая тетрадь Паскаль
.pdfРабочая тетрадь по программированию. Паскаль
case of
;
;
;
;
end;
end.
Турнир по программированию - http://compilers.infoznaika.ru/
21
Рабочая тетрадь по программированию. Паскаль
Цикл с параметром.
Рассмотрим следующую простую задачу: требуется вычислить сумму целых чисел от М до N путем прямого суммирования. Здесь M и N — целые числа.
Введем новый тип циклической структуры, который будет называться
циклом с параметром, или цикл-для. Здесь целая переменная i
последовательно принимает значения в диапазоне от М до N. При каждом значении i выполняется тело цикла. После последнего выполнения цикла при I = N происходит выход из цикла на продолжение алгоритма. Цикл выполняется хотя бы один раз, если M ≤ N, и не
выполняется ни разу при М > N.
Program Summering;
Var i, M, N, Summa: Integer;
Begin
Write('M=');
ReadLn(M);
Write('N=');
ReadLn(N);
Summa:=0;
For i:=M To N Do
Summa:=Summa+i;
WriteLn('Сумма равна', Summa)
End.
В программе используется оператор цикла For, синтаксическая диаграмма которого представлена:
Турнир по программированию - http://compilers.infoznaika.ru/
22
Рабочая тетрадь по программированию. Паскаль
Выполнение оператора For в происходит по следующей схеме:
1.
2.
3.
4.
Как известно, результат суммирования целых чисел не зависит от порядка суммирования. Например, в рассматриваемой задаче числа можно складывать и в обратном порядке, т.е. от N до М (N ≥ М). Для этого можно использовать второй вариант оператора цикла For:
Summa:=0;
For i:=N DownTo M Do
Summa:=Summa+i;
Слово DownTo буквально можно перевести как «вниз до». В таком случае параметр цикла изменяется по убыванию, т.е. при каждом повторении цикла параметр изменяет свое значение на предыдущее. Тогда ясно, что цикл не выполняется ни разу, если N < М.
Турнир по программированию - http://compilers.infoznaika.ru/
23
Рабочая тетрадь по программированию. Паскаль
Работая с оператором For, учитывайте следующие правила:
•параметр цикла не может иметь тип Real;
•в теле цикла нельзя изменять переменную «параметр цикла»;
•при выходе из цикла значение переменной-параметра является неопределенным.
В следующем примере в качестве параметра цикла For используется символьная переменная.
Пример 2. Требуется получить на экране десятичные коды букв латинского алфавита.
For С : = ' а ' То ' z ' Do
Write(С, '-' , Ord(C));
Здесь переменная с имеет тип Char.
Турнир по программированию - http://compilers.infoznaika.ru/
24
Рабочая тетрадь по программированию. Паскаль
Оператор WHILE
Рассмотрим синтаксическую диаграмму оператора циклпока, или цикл с
предусловием:
Сначала вычисляется
.
Здесь <Оператор> может быть как простым, так и составным.
Пример 1. В следующем фрагменте программы на Паскале вычисляется сумма конечного числа членов гармонического ряда:
Суммирование прекращается, когда очередное слагаемое становится меньше е или целая переменная достигает значения Maxint.
S:=0;
I : = 1 ;
While (1/I>=Eps) And (I<MaxInt) Do
Begin
S:=S+1/I;
I:=I+1
End;
Турнир по программированию - http://compilers.infoznaika.ru/
25
Рабочая тетрадь по программированию. Паскаль
Одномерные массивы
Массив – структурированный тип данных, образованный из одного и того же типа.
В массивах целая группа чисел обозначается одним именем (чаще всего буквой), а для обращения к каждому отдельному числу данной последовательности используют различные (номера элементов). В математике это может выглядеть, например, так:
а1 , а2 , а3 , ... , аn
Одномерный массив можно представить в виде таблицы:
1 3 5 7 14 8
a[1] a[4]
Массив а состоит из |
|
элементов: |
|
. |
Массивы в среде Pascal объявляются следующим образом в разделе описания переменных:
Var <идентификатор>: Array*<тип индекса>+ Of <тип элементов>;
В качестве индекса употребляется интервальный тип, например:
Var T: Array[1..12] Of Real;
то есть последовательные элементы этого массива располагаются следующим образом: a*1], a[2], a*3+, … , a[12].
Приведите свои примеры задания одномерного массива:
Var |
|
: Array[ |
] Of |
; |
||||
|
|
|
|
|
|
|
|
|
Var |
|
: Array[ |
] Of |
; |
||||
|
|
|
|
|
|
|
|
|
массива называется его размерностью.
Турнир по программированию - http://compilers.infoznaika.ru/
26
Рабочая тетрадь по программированию. Паскаль
Чаще всего массивы обрабатываются в цикле for. Так, для того, чтобы считать с клавиатуры массив из 10 элементов, следует написать следующий цикл:
for i:=1 to 10 do read(a[i]);
Аналогично производится распечатка массива, но нужно учитывать, что между элементами необходимо вставлять разделитель:
for i:=1 to 10 do write(a*i+, ‘ ’);
Пример 1. Заполнить массив чисел так, чтобы значения элементов совпадали с их индексами.
var |
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
: |
|
|
|
|
|
; //количество элементов массива |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
: array [ |
] of |
; //массив |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
begin |
; |
|
|
|
|
; |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for |
|
|
|
|
|
to |
|
|
do |
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
end. |
|
|
|
|
|
|
|
|
|
|
|
Элементы массива можно задать случайным образом, с использованием встроенного в язык программирования так называемого датчика случайных чисел. Для этого используется функция random и процедура randomize.
Процедура randomize предназначена для задания первого значения в данной последовательности.
Для получения целых случайных чисел из диапазона [0, n-1] используется вызов функции random с параметром n: random(n).
Пример 2. Заполнить случайным образом целочисленный массив М, состоящий из шести элементов от 0 до 9 включительно:
randomize;
Турнир по программированию - http://compilers.infoznaika.ru/
27
Рабочая тетрадь по программированию. Паскаль
for i:=1 to 10 do М[i]:= random(10);
Пример 3. Циклически сдвинуть элементы массива на одну позицию влево, а первый элемент поставить на последнее место.
var |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
, |
|
: |
|
|
|
|
|
|
|
|
; |
|
|
|
||
|
|
|
: array [ |
|
|
] of |
|
; //массив |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
: |
|
|
|
|
|
|
; |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
begin |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
randomize; |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
for |
to |
|
do |
; |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
for |
to |
|
do |
; |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
for |
|
to |
|
|
do |
|
|
; |
|
||||||||
end. |
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример 4. Циклически сдвинуть элементы массива на одну позицию вправо, а первый элемент поставить на последнее место.
var |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
, |
: |
|
|
|
|
|
; |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
: array [ |
|
] of |
|
|
; //массив |
|||||||
|
: |
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
begin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
for |
|
to |
do |
|
|
; |
|
|
||||||||||
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
for |
|
|
|
|
|
|
|
do |
; |
|||||||||
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
For |
|
to |
do |
|
|
; |
|
|
||||||||||
end. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Турнир по программированию - http://compilers.infoznaika.ru/
28
Рабочая тетрадь по программированию. Паскаль
Двухмерные массивы (матрицы)
Массив – структурированный тип данных, образованный из одного и того же типа.
Двухмерный массив можно представить в виде таблицы:
|
|
1 |
3 |
5 |
7 |
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
0 |
4 |
3 |
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R[1,1] |
|
|
|
|
|
|
|
|
|
|
||
|
R[2,4] |
|
|
|
|
|
|
|
|
|||
Массив R состоит из |
|
|
элементов: |
|
. |
|
||||||
Если количество строк равно количеству столбцов массив называется |
|
|
||||||||||
|
|
|
|
, в противном случае – |
|
|
. |
Двухмерные массивы в среде Pascal объявляются следующим образом в разделе описания переменных:
Var <идентификатор>: Array*<тип индекса>+ Of <тип элементов>;
В качестве индекса употребляется интервальный тип, например:
Var Н: Array[1..12, 1..4] Of Integer;
Приведите свои примеры задания двухмерного массива:
Var |
|
: Array[ |
] Of |
; |
||||
|
|
|
|
|
|
|
|
|
Var |
|
: Array[ |
] Of |
; |
||||
|
|
|
|
|
|
|
|
|
Как и одномерные массивы, матрицы обрабатываются в цикле for, но здесь используется два вложенных цикла. Рассмотрим пример считывания элементов матрицы с клавиатуры:
for i:=1 to 5 do begin
for j:=1 to 10 do
Турнир по программированию - http://compilers.infoznaika.ru/
29
Рабочая тетрадь по программированию. Паскаль
begin
read(a[i, j]) ; end;
readln;
end;
Аналогично производится распечатка массива, но нужно учитывать, что между элементами необходимо вставлять разделитель, а каждую новую строку переносить:
for i:=1 to 5 do begin
for j:=1 to 10 do begin
write(a*i, j+, ’ ’) ; end;
writeln;
end;
Пример 1. Дана матрица целых чисел размером 3х5. Вычислить сумму элементов матрицы.
var |
|
|
|
|
m, n, i, j, s: integer; |
|
|
|
|
a: array[ |
] of |
; |
||
begin |
|
|
|
|
s:=0;
writeln(‘введите значения элементов матрицы: ');
for |
to |
|
|
do |
|
|
//ввод матрицы с клавиатуры |
||||
|
for |
|
|
|
|
to |
|
do |
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for |
|
to |
|
|
do |
|
|
//подсчет суммы элементов |
|||
|
for |
|
|
|
|
to |
|
do |
|
; |
|
writeln(s); |
|
|
|
|
|
|
|
|
|
30