Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Циклы

.pdf
Скачиваний:
39
Добавлен:
02.06.2015
Размер:
239.3 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Электротехнический факультет Кафедра электрических станций

Циклические вычислительные процессы

Методические указания и задания к лабораторным и практическим занятиям

по дисциплине «Информатика» для студентов дневного отделения

специальностей 140204, 140211, 140104, 140601,140610

Киров 2009

2

УДК 519.95 С 23

Составители:

кандидат технических наук,

 

доцент Р.В. Медов

Подписано в печать

 

Усл. печ. л. 3,6

Бумага типографская

 

Печать матричная

Заказ №

Тираж

Бесплатно

Текст напечатан с оригинал-макета, представленного автором 610000, г. Киров. ул. Московская 36.

© Вятский государственный университет, 2009

3

Введение

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

1. Циклы в языке Pascal

Алгоритмы решения многих задач являются циклическими, то есть для получения результата определенная последовательность действий должна быть выполнена несколько раз. Последовательность повторяющихся действий называется циклом. Циклы обычно реализуются в программе с помощью операторов for, while, repeat.

1.1.Оператор цикла с параметром (for)

Оператор for используется, когда число повторений заранее известно. Формат записи:

for параметр := начальное_значение to конечное_значение do begin

тело цикла end;

Тело цикла повторяется для каждого значения параметра от начального до конечного.

Здесь параметр — имя переменной, определяющей число повторений операторов в теле цикла; начальное_значение — выражение, определяющие начальное значение параметра цикла; конечное_значение — выражение, определяющее конечное значение параметра цикла. Параметр цикла не может быть вещественной переменной. Типы параметра, начального и конечного значения должны быть совместимыми.

Если в теле цикла размещается только один оператор, то слова begin и end можно не писать.

При использовании служебного слова to после каждого выполнения тела цикла параметр автоматически увеличивается на единицу. Если вместо to написать downto, то параметр будет уменьшаться на единицу.

Например:

for i:=1 to 10 do a:=a+0.5; for i:=15 downto 5 do

begin a:=a-2.5; b:=b+1.5;

c:=c+a+b; end;

4

Блок-схема выполнения данного оператора может быть построена с использованием блока модификации (рисунок 1, а) или с использованием блоков границ цикла (рисунок 1, б).

параметр=нач.знач.

 

параметр=нач.знач. ..

.. кон.знач.

 

кон.знач.

тело цикла

тело цикла

параметр=параметр+1

а

б

Рисунок 1.

1.2.Оператор цикла с предусловием (while)

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

Формат записи данной инструкции таков: while условие do

begin

тело цикла end;

Пока условие истинно повторяются операторы в теле цикла.

Здесь условие — выражение логического типа, определяющее условие выполнения цикла.

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

Для завершения цикла необходимо, чтобы операторы между словами begin и end влияли на значение выражения условие (изменяли значение переменных, входящих в это выражение). При неправильной организации цикла может возникнуть бесконечный цикл, что приведет к «зависанию» программы.

Пример цикла с предусловием:

5

a:=0;

While a<10 do inc(a);

Блок-схема выполнения оператора while приведена на рисунке 2.

условие

нет

да

тело цикла

Рисунок 2.

1.3.Оператор цикла с постусловием (repeat)

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

В общем виде оператор repeat записывается следующим образом: repeat

тело цикла until условие;

Операторы в теле цикла будут повторяться до тех пор, пока условие не станет истинным.

Здесь условие — выражение логического типа, определяющее условие завершения цикла.

Пример цикла с постусловием: a:=0;b:=50;

repeat a:=a+2; b:=b-3;

until a>b; {цикл будет повторяться пока a не станет больше b} Блок-схема выполнения оператора repeat приведена на рисунке 3.

6

тело цикла

условие нет

да

Рисунок 3.

Главное отличие цикла repeat от цикла с предусловием состоит в том, что операторы в теле цикла в любом случае выполнятся, по крайней мере, один раз. В операторе repeat необходимо обязательно следить за тем, чтобы операторы, в теле цикла изменяли значение переменных, входящих в условие, иначе произойдет так называемое зацикливание (бесконечное повторение цикла).

1.4.Стандартные процедуры Break и Continue

Для гибкого управления циклическими операторами for, while и repeat в состав языка Pascal включены две процедуры:

break - реализует немедленный выход из цикла; действие процедуры заключается в передаче управления оператору, стоящему сразу после оператора цикла;

continue - обеспечивает досрочное завершение очередного прохода цикла; эквивалент передачи управления в самый конец циклического оператора.

Как правило, процедуры break и continue включаются в условный оператор и запускаются только при выполнении какого-то условия.

Введение в язык этих процедур практически исключает необходимость использования операторов безусловного перехода goto.

2. Циклические вычислительные процессы

Составление и реализацию циклических алгоритмов на языке Pascal рассмотрим на нескольких примерах.

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

Алгоритм решения данной задачи должен включать в себя следующие действия:

7

1.Присваивание начального значения суммы, равного нулю.

2.Цикл с постусловием, который будет повторяться до тех пор, пока не будет введен ноль. В цикле должна быть следующая последовательность действий:

a.Ввод очередного числа

b.Условие: если введенное число положительно, то его необходимо добавить к текущему значению суммы.

3.Вывод суммы на экран.

Для реализации алгоритма потребуются две вещественных переменных для хранения вводимого числа и суммы.

Запустите MS Visio и составьте блок-схему программы, приведенную на рисунке 4.

начало

sum=0

Ввод x

sum=sum+x

x=0

нет

да

 

Вывод sum

 

конец

Рисунок 4.

Запустите Pascal и наберите текст программы:

8

Program Example_1;

Uses

crt;

{или wincrt}

var

x,sum:real;

begin

 

clrscr;

writeln('Программа расчета суммы положительных чисел');

sum:=0; repeat

write('введите следующее число:');

readln(x);

if x>0 then sum:=sum+x; until x=0;

writeln('Сумма = ',sum:5:2);

writeln('Программа завершена. Нажмите Enter.');

readln end.

Запустите программу, проверьте результаты и пригласите преподавателя для проверки.

Задание 2. Найти сумму всех целых чисел, больших -50 и меньших 200, которые кратны 5 или 8 и заканчиваются на 5 или 0.

Алгоритм решения данной задачи должен включать в себя следующие действия:

1.Присваивание начального значения суммы, равного нулю.

2.Цикл с параметром, который будет повторяться от значения -49 до 199. В цикле каждое значение должно проверяться на условие: если значение кратно 5 или 8 и при этом заканчивается на 5 или 0, то его необходимо добавить к текущему значению суммы.

3.Вывод суммы на экран.

Для реализации алгоритма потребуются две целочисленные переменные для параметра цикла и суммы.

Самостоятельно составьте блок-схему алгоритма.

Наберите текст программы:

Program Example_2;

Uses

crt;

{или wincrt}

var

i,sum: integer;

begin

 

clrscr;

writeln('Программа расчета суммы значений');

sum:=0;

for i:= -49 to 199 do

9

if ((i mod 5=0) or (i mod 8=0))and ((i mod 10=5) or (i mod 10=0)) then sum:=sum+i;

writeln('Сумма чисел, подходящих по условию = ',sum); writeln('Программа завершена. Нажмите Enter.');

readln end.

Проверьте правильность ее работы, после чего пригласите преподавателя для проверки.

Задание 3. Дано целое неотрицательное число n. Определить количество нулей в его десятичной записи. Например, для n =103062 ответ 2.

Алгоритм решения данной задачи должен включать в себя следующие действия:

1.Ввод целого неотрицательного числа n.

2.Условие: если n=0, то количеству нулей z присваивается единица, иначе выполняются следующие действия:

a.Количеству нулей z присваивается ноль.

b.Цикл с предусловием: пока переменная n больше нуля выполняются следующие действия:

Условие: если остаток от деления n на 10 равен нулю (число заканчивается на ноль), то количество нулей z увеличивается на единицу.

Переменная n уменьшается в 10 раз с помощью целочисленного деления (дробная часть отбрасывается).

3.Вывод на экран количества нулей в числе.

Для реализации алгоритма потребуются две целочисленные переменные.

Самостоятельно составьте блок-схему алгоритма.

Наберите текст программы:

Program Example_3;

Uses

crt;

{или wincrt}

var

z:integer; n:longint;

begin

 

clrscr;

writeln('Подсчет количества нулей в числе'); writeln('Введите целое неотрицательное число -> ');

readln(n);

if n=0 then z:=1 else

begin z:=0;

10

while n>0 do begin

if n mod 10=0 then z:=z+1;

n:=n div 10; end;

end;

writeln('количество нулей = ',z); writeln('Программа завершена. Нажмите Enter.');

readln end.

Проверьте правильность ее работы, после чего пригласите преподавателя для проверки.

Задание 4. Даны два натуральных числа m и n. Определить их наименьшее общее кратное (НОК).

НОК двух натуральных чисел m и n – это наименьшее из натуральных чисел, которые делятся без остатка на m и n. Как известно НОК можно найти, как

произведение наибольшего общего делителя m и n (НОД) на отношения НОДm

и НОДn .

Алгоритм решения данной задачи должен включать в себя следующие действия:

1.Ввод двух натуральных чисел m и n.

2.Нахождение НОД, включающее следующие действия:

a.Нахождение минимального из двух чисел с помощью условия: если m > n, то переменной k присваивается n, иначе переменной k присваивается m.

b.НОД присваивается единица.

c.Цикл с параметром i от 2 до k, в котором проверяется условие: если m и n делятся без остатка на текущее значение i, то НОД присваивается это значение.

3.Нахождение НОК=НОД*(m div НОД)* (n div НОД)

4.Вывод на экран наибольшего общего делителя.

Самостоятельно составьте блок-схему алгоритма, наберите текст программы, проверьте правильность ее работы, после чего пригласите преподавателя для проверки.

Задания для самостоятельной работы (для каждого задания составить словесный алгоритм, нарисовать блок-схему и реализовать алгоритм в виде программы на языке Pascal):