Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика1 / МУ лабы инф алгор 2009 ЭЭФ выпущ исправ окт 09.doc
Скачиваний:
18
Добавлен:
25.04.2015
Размер:
1.06 Mб
Скачать

Контрольные вопросы

1. Расскажите о кодах символов.

2. Поясните термин текстовой файл.

3. Приведите способы указания значений переменных в операторе Case.

4. Как изображается на блок-схеме оператор условного перехода?

6. Как создаются циклы (повторения) в программе?

7. Какие особенности характерны для оператора выбора?

8. Расскажите про логические функции And, Or и Xor.

4 Лабораторная работа 4. Циклические алгоритмы

Цель работы – ознакомление с особенностями циклических алгоритмов.

4.1 Создание циклических алгоритмов и программ

4.1.1 Необходимость массивов

Часто возникают такие задачи: сложить несколько чисел, найти среди них наибольшее (наименьшее) число, найти среднее значение и т.д. Если каждое число записать в отдельную переменную, то для выполнения указанных действий потребуется написать очень длинную программу.

Для решения подобных задач был создан специальный тип переменной – массив. В памяти ПК создают блок ячеек памяти, у которых одно имя, а ячейки массива нумеруются (индексируются), см. рисунок 4.1. В каждую ячейку массива можно записать данные только одного типа: целые или дробные числа, символы. При обращении к конкретной ячейке указывают имя массива и индекс (номер) ячейки, таким образом, получая доступ к ее содержимому. Например, Ves[1]=10, Ves[5]=13. Меняя в цикле индекс ячейки от 1 до 5, получаем возможность обращаться ко всем ячейкам массива. Программы с циклами и массивами получаются компактными.

Целочисленный массив с индексами от 0 до 5 объявляется в разделе Var выражением: “Ves: array [0..5] of integer;”. Если в программе несколько массивов одного типа, то удобно объявлять их типовое имя в разделе Type и указывать конкретные имена в разделе Var:

Type T= array [1..20] of integer; Var Ves, A, B, C : T;”

4.1.2 Обработка массивов

Алгоритм, в котором предусмотрено многократное выполнение одной и той же последовательности действий, называется циклическим. Каждое повторение происходит с новым значением одного или нескольких параметров, изменения которых задаются в программе.

В Pascal существует три оператора цикла: For, While, Repeat. Оператор цикла представляет собой единую синтаксическую конструкцию, в которой можно выделить три основные части: заголовок цикла, тело цикла, закон изменения шага параметра, заключительную строку.

Если число повторений известно заранее (до начала повторений), то удобно воспользоваться циклом с параметром - счетчиком For - to или For downto. В остальных случаях следует использовать цикл с предусловием While - do или c постусловием Repeat - until.

На рисунке 4.1 показана блок схема и программа циклаFor - to. Счетчик i меняется от m1 до m2 с шагом +1, естественно m1 меньше m2.

For i:=m1 to m2 do

begin

Оператор 1

. . .

Оператор N

end;

Блок схема и программа цикла For downto аналогична. Но счетчик i меняет свои значения от m1 до m2 с шагом -1, естественно m1 больше m2.

Команды, которые повторяются в цикле, расположены между операторными скобками begin и end.

Оператор цикла с параметром – счетчиком имеет ограничения:

i, m1, m2 могут быть переменными только целого типа;

i меняется в цикле на единицу;

параметр (счетчик) i нельзя изменить внутри тела цикла.

В тех случаях, когда начальное и конечное значения параметра цикла являются дробными удобнее применять цикл While. Начальное значение параметра цикла вычисляется до начала цикла. Конечное значение параметра цикла может быть неизвестно. Изменение параметра цикла по какому-либо закону в теле циклаобязательно, иначе цикл будет бесконечным.

Оператор цикла с предусловием While - do показан на рисунке 4.2.

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

Внимание! Настоятельно рекомендуется перед запуском программы с циклами While и Repeat обязательно ее сохранить, на случай если случайно не будет предусмотрено изменение параметра цикла.

4.1.3 Пример применения цикла For

Вычислить значения функции Y=A/K2, для каждого целого К, причем К меняется от 1 до 10 с шагом +1 и записать их в массив D.

Program for_to;

var k: integer; a, y: real;

D: array {1..20] of real;

begin

write(‘ Vvedite A ->’); readln (a);

for k := 1 to 10 do

begin

y := a / sqr(k); D[k]:=y;

writeln(’K=’, k:2, ’Y=’, y:8:3);

end;

end.

Значения параметра цикла k (начальное равное 1 и конечное значение равное 10) заданы в заголовке цикла. Цикл продолжается пока k не пробежит все значения от 1 до 10. Для каждого значения k вычисляется и печатается вычисленное значение функции и сохраняется в массиве.

4.1.4 Пример применения цикла While

Найти в массиве A(10) c пятого по десятый элемент первый отрицательный элемент и напечатать его.

{Фрагмент программы}

I:=5; N=10;

While ((A[i]>=0) and (i<=N)) do

Begin

Writeln (‘ Ind=’ , I , A[i]:4:1;);

i:=i+1;

End;

If I <= N

then Writeln (‘ Otritsat element=’ , A[i]:4:1;)

else Writeln (‘Otritsat elementa net’);

Цикл продолжается пока условие (A[i]>=0 and (i<=N)) истинно. Количество повторений цикла зависит от данных массива и заранее нельзя определить. После выхода из цикла печатается результат поиска.

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

Соседние файлы в папке Информатика1