- •Информатика. Алгоритмизация
- •Алматы 2009
- •1 Лабораторная работа 1. Создание линейного алгоритма
- •1.1 Составление линейного алгоритма и программы
- •1.2 Варианты заданий и контрольные вопросы
- •Контрольные вопросы
- •2 Лабораторная работа 2. Разветвленный алгоритм. Повторения
- •2.1 Создание разветвленного алгоритма и программы
- •2.2 Варианты заданий и контрольные вопросы
- •Контрольные вопросы
- •3 Лабораторная работа 3. Алгоритм с оператором выбора
- •3.1 Создание алгоритма с оператором выбора
- •3.2 Задания и контрольные вопросы
- •Контрольные вопросы
- •4 Лабораторная работа 4. Циклические алгоритмы
- •4.1 Создание циклических алгоритмов и программ
- •4.2 Задания и контрольные вопросы
- •5 Лабораторная работа 5. Применение циклических алгоритмов
- •5.1 Применение циклов
- •5.2 Задания и контрольные вопросы
- •6 Лабораторная работа 6. Подпрограмма – функция
- •6.1 Создание подпрограмм - функций
- •6.2 Задания и контрольные вопросы
- •7 Лабораторная работа 7. Символьная и строковая информации
- •7.1 Обработка символов
- •7.2 Варианты заданий и контрольные задания
- •Приложение a Элементы блок – схем и клавиатура
- •Клавиатура
- •Приложение б Структура программы и встроенные функции
- •Приложение в Основные элементы языка Turbo Pascal
- •Часто встречающиеся ошибки в программах
- •Список литературы
- •Содержание
- •Информатика. Алгоритмизация
Контрольные вопросы
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 не контролирует выход за пределы массива. Поэтому в программе операнды, выделенные подчеркиванием, необходимы, на тот случай, если в массиве не окажется отрицательных элементов. |