Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Паскаль ИНФОРМАТИКА.doc
Скачиваний:
221
Добавлен:
09.04.2015
Размер:
4.57 Mб
Скачать

Вложенные циклы

Вложенные циклы – это структура, при которой один цикл вносится в другой. Пример рассмотрим на практическом занятии.

Рекурсивные функции

В ряде случаев удается создать цикл, не прибегая к операторам FOR-DO,REPEAT-UNTIL,WHILE-DOс помощью функции или процедуры, такие функции вызывающие сами себя, называют рекурсивными, а процесс их вычисления – рекурсией.

Пример. Вычислить: s=(1+sin(2++sin(3+…+sin(14+sin(15)))))

Структура похожа на матрешку: внешний синус sin(1+…) имеет аргументом следующий синусsin(2+…) и т.д. Введем функциюFUN, которая будет при вычислении синуса вызывать себя же, но для большего значения аргумента.

Program Recurcia;

Uses CRT;

Function Fun(x:Byte):Real;

Begin

If (x=15) Then Fun:=Sin(x)

Else Fun:=Sin(x+Fun(x+1));

End;

Begin

ClrScr;

Writeln('F= ',Fun(1):6:3);

Repeat Until Keypressed; End. Ответ: F=0.994

Операторы прерывания Операторы Break и Continue

введены в язык Турбо Паскаль версии 7.0 для удобного управления ходом цикла.

1)Break ([breik]перевод с англ. – прерывать)– выход из цикла, прерывание выполнения цикла.

2)Continue (перевод с англ. – продолжать) – переход к следующему шагу цикла.

Пример.Найти сумму S=2+4+6…, не превосходящую 100.

Заметим, что цикл по четным числам можно завести различными способами: Цикл FOR_DO с проверкой условия IF(Not ODD(i)); Цикл While_Do или Repeat_Until с увеличением параметра цикла на два Inc(i,2) и т. п. С использованием оператора “CONTINUE” возможна и другая логика – завести цикл FOR_DO по значениям, идущим подряд, но при появление нечетных значений переходить к следующей итерации цикла. Далее, когда сумма превысит 100, можно выйти из цикла с помощью BREAK. Тогда текст программы:

Program sum1;

Uses CRT;

Var

s: integer; i: byte;

Begin

ClrScr;

s:=0;

For i:=1 to High(Byte) do {Стандартные функции}

begin

if Odd(i) then Continue;

s:=s+i;

if (s>100) then break;

end;

s:=s-i;

Writeln(' s= ',s); Repeat Until Keypressed; End.

Лекция 8 Обработка одномерных и двумерных массивов Понятие и описание массива

Массив – это совокупность однотипных данных, хранящихся в последовательных ячейках памяти и имеющих общее имя. Ячейки называются элементами массива. Все элементы пронумерованы по порядку, и этот номер называется индексом элемента массива. Все элементы массива имеют один и тот же тип данных. Сам массив при этом имеет имя – одно для всех элементов. Для обращения к конкретному элементу массива нужно указать имя массива и в квадратных скобках индекс элемента.

Описание массива

<Имя массива>:array[<тип индекса>] of <тип компонентов>;

<тип компонентов> - это тип данных, который имеет каждый элемент массива,

<тип индекса>-границы изменения индекса.

Var t:array[1..7] of integer;

Примеры одномерного, двухмерного, трехмерного массивов

Рассмотрим пример одномерного массива.

Type

Massive=array[1..7] of Integer;

Var

T: Massive;

Сейчас Massive - это тип, соответствующей последовательности из семи целочисленных чисел (одномерный массив длины 7):

t[1]

t[2]

t[3]

t[4]

t[5]

t[6]

t[7]

Индекс i=1 2 3 4 5 6 7

t[1] – обозначение 1-го элемента массива

Замечание. Попытка извлечь элемент с индексом, не лежащим в диапазоне от 1 до 7 приведут к сообщению об ошибке Constant out of Range (вне установленных рамок).

Двухмерный массивt[i,j] характеризуется двумя индексами .

t[1..4,1..7] – это двумерный массив размерности 4х7

Type

Matrix=array[1..4,1..7] of integer;

Var T:Matriix;

Трехмерный массивt[i,j,k] характеризуются тремя индексами – размерность 4х7х12, а тип описывается так:

Type

Massive=array[1..12] of integer;

Matrix=array[1..4,1..7] of integer;

Var

T:Matrix of Massive;

Замечание.В Паскале размерность массива практически неограниченна. Единственное ограничение заключается в том, что размер возникающей структуры не должен превышать примерно 64 КБ. Пример если массив состоит из вещественных чисел (6 байт), то их не может быть более 10797; аналогичный предел для чисел типа Integer (2 байта) – 32392.