Основы алгоритмизации и программирования

Простые и составные условия. Принятие решений в программе. Основные алгоритмические конструкции: ветвление, повторение. Их запись на языке программирования Pascal. Работа операторов цикла for и while. Реализация алгоритмов с ветвлением, повторением.

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык русский
Дата добавления 23.11.2011
Размер файла 683,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Глава 2. Основы алгоритмизации и программирования

Н.В. Якунина, учитель информатики высшей категории СШ № 191 г. Минска, член авторского коллектива учебного пособия «Информатика» для 8 класса

§1. Простые и составные условия

1.1 Принятие решений в программе. Простые условия

Как известно, операторы (команды) ввода и вывода, оператор (команда) присваивания позволяют составлять линейные программы, в которых все команды выполняются последовательно, одна за другой. Но в жизни, решая те либо иные задачи, часто приходится принимать решения в зависимости от создавшейся ситуации либо от некоторого условия (условий). Например, если сделаны уроки, можно отдохнуть; если холодно - необходимо теплее одеться; если в театральной кассе имеются билеты, можно пойти в театр на спектакль, иначе можно просто погулять в парке. Принимая решения, человек рассуждает, анализируя ситуацию. В программировании можно также создавать программы, умеющие выполнять выбор. Для этого существуют команды, которые позволяют компьютеру принимать решения в зависимости от выполнения некоторого условия. Одной из таких команд является условный оператор языка программирования Pascal

If условие then оператор_1 else оператор_2;

В переводе на русский язык данная форма записи означает: если выполняется условие, то исполняется оператор_1, иначе исполняется оператор_2.

Рассмотрим на примере, как работает оператор if.

Например, необходимо дать задание компьютеру проверить, знают ли ученики таблицу умножения.

Пример 1. Проверка знаний таблицы умножения

program proverka;

var a:integer;

begin

writeln('Cколько будет 3x5?');

readln(a); {запрашивается ответ, вводимый с клавиатуры,

который записывается в переменную а}

if a=15 then writeln('Верно')

else writeln('Неверно');

{оператор if проверяет и анализирует значение переменной а. Если а=15, то компьютер выводит сообщение «Верно», в противном случае сообщает «Неверно»}

end.

Результат выполнения программы в случае ввода числа 15:

Cколько будет 3x5?

Верно

При ином ответе, например, 25, появится сообщение:

Cколько будет 3x5?

Неверно

Как видно из результатов, эта программа умеет «рассуждать», сравнивая число, которое вы ввели с клавиатуры с правильным ответом. И делает это она с помощью оператора if.

Оператор if анализирует некоторое условие, например, a>b либо a=15 либо а>0. Действия, которые затем будут выполняться, зависят от того, выполняется либо не выполняется конкретное условие. Эти действия (операторы) называются ветвями программы.

Условие - это выражение, стоящее в операторе if..then сразу после слова if. В зависимости от этого условия (его истинности или ложности) компьютер выполняет ту либо иную ветвь программы.

Для обозначения оператора if на блок-схемах используются ромбы, называемые блоками проверки условия. Алгоритмическая конструкция ветвления представлена на рисунке 2.1.

Рис. 2.1

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

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.2

Простое условие - это математическое сравнение двух выражений по величине (сравнение двух величин). Операции сравнения на языке программирования можно записать при помощи следующих знаков (таблица 1):

Таблица 1. Операции сравнения

Знак

Операция сравнения

=

Равно

<

Меньше

<=

Меньше либо равно

>

Больше

>=

Больше либо равно

<>

Не равно

Примеры простых условий:

a<>b

A<=0

A+3*c>=20

В качестве оператора_1 и оператора_2 может быть любая из уже известных вам команд.

1.2 Составные условия

При решении различных задач иногда возникает необходимость проверять выполнение двух (как например, 0<a<5) и более условий. Такие условия называют составными. Для записи составных условий на языке программирования используют следующие логические операции:

· and - логическое «и»;

· or - логическое «или»;

· xor - логическое «исключающее или»;

· not - логическое отрицание.

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

Правила выполнения логических операций

1. Составное условие, состоящее из двух простых условий, соединенных операцией and, верно (истинно) только тогда, когда верны оба простых условия.

2. Составное условие, состоящее из двух простых условий, соединенных операцией or, верно тогда, когда верно хотя бы одно из простых условий.

3. Составное условие not верно только тогда, когда простое условие ложно.

4. Составное условие, состоящее из двух простых условий, соединенных операцией xor, верно тогда, когда верно только одно из условий.

Примеры использования логических операций:

(2>5) and (2>3) - неверно (ложно)

(1<5) and (1>0) - верно (истинно)

(3>2) or (3<1) - верно

(3>2) or (2>0) - верно

(1>2) or (1<0) - неверно

not (5 > 6) - верно

not (6 > 5) - неверно

(2=0) xor (2<>2) - неверно

(2=0) xor (2>0) - верно

(3>0) xor (2>0) - неверно

Рассмотрим применение составных условий на примере программы, которая определяет, является ли введенное число двузначным.

Пример 2. Двузначное число

Program c2;

var a:integer;

begin

write ('Введите целое число: ');

readln (a); {исходное число}

if (a>=10) and (a<=99)then write ('число двузначное')

else write('число не двузначное');

{если (a>=10)и(a<=99), то вывести сообщение

'число двузначное', иначе - 'число не двузначное'}

end.

Результат выполнения программы в случае ввода числа 45:

Введите целое число: 45

число двузначное

Результат выполнения программы в случае ввода числа 125:

Введите целое число: 125

число не двузначное

Рассмотренная выше форма условного оператора if..then..else

называется полной. Она позволяет выполнять программу по одной из двух ветвей. Такую алгоритмическую конструкцию называют ветвлением (по аналогии с развилкой ветвей дерева). В языке программирования Pascal существует также cокращенная форма условного оператора, которая применяется в тех случаях, когда какое-либо действие (группу действий) нужно выполнить только при выполнении заданного условия.

Сокращенная форма условного оператора имеет вид:

If условие then оператор;

Если условие верно, то выполняется оператор, иначе управление передается следующему за if оператору программы. Блок - схема сокращенной формы записи алгоритма с ветвлением представлена на рисунке 2.3

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.3

Следующий пример демонстрирует использование сокращенной формы условного оператора.

Необходимо ввести некоторое целое число и, если оно четное, уменьшить его в 2 раза.

Алгоритм решения этой задачи в виде блок-схемы выглядит так

(рис. 2.4):

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.4

Программа, реализующая данный алгоритм, представлена в примере 3.

Пример 3. Уменьшение четного числа в два раза

program c2_2;

var a:integer;

begin

write('Введите целое число: ');

readln(a);

if (a mod 2=0) then

a:=a div 2;

write(a);

end.

Результат выполнения программы в случае ввода числа 16:

Введите целое число: 16

Результат выполнения программы в случае ввода числа 13:

Введите целое число: 13

1.3 Составной оператор

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

Пример:

If x>0 then

Begin

x:=x*2;

write (x);

end;

Такая группа (begin x:=x*2; write (x); end) называется составным оператором и рассматривается как единое целое.

Общий вид составного оператора может выглядеть следующим образом:

Begin

Оператор1;

Оператор2;

……………

End;

Зарезервированные слова Begin и End часто называют открывающей и закрывающей операторными скобками.

Рассмотрим пример, демонстрирующий использование составного оператора.

Пусть дано некоторое целое число. Требуется составить программу, которая выводит на экран монитора сообщение о том, какое это число: положительное либо отрицательное. И если это число положительное, уменьшает его в 2 раза, в противном случае возводит его в квадрат.

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

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.5

Программа, реализующая данный алгоритм, может выглядеть так:

Пример 4. Положительное либо отрицательное число?

program chislo;

var a,r:integer;

begin

write('Введите целое число: ');

readln(a);

if a > 0 then

begin writeln('положительное');

r:=a div 2;{число уменьшается в 2 раза }

end

else

begin writeln('отрицательное');

r:=a*a;{число возводится в квадрат}

end;

write ('r=',r)

end.

Результат выполнения программы в случае ввода числа -5:

Введите целое число: -5

отрицательное

r=25

Результат выполнения программы в случае ввода числа 8:

Введите целое число: 8

положительное

r=4

Важно помнить:

1. Нельзя ставить «;» перед словом else.

2. При записи составных операторов каждое зарезервированное слово begin должно быть «закрыто» словом end, то есть следует соблюдать правила вложенности операторных скобок.

Коротко о главном

· Проверять условия в программе на языке программирования можно с помощью условного оператора If..then.

· Полная форма условного оператора:

If условие then оператор_1 else оператор_2;

· Оператор If работает следующим образом: сначала проверяется условие и, если оно выполняется, то исполняется оператор_1, иначе исполняется оператор_2.

· Сокращенная форма условного оператора:

If условие then оператор;

· Простое условие - это математическое сравнение двух выражений по величине (сравнение двух величин).

· Простые условия объединяют в составные с помощью логических операций: and, or, xor, not.

· Общий вид составного оператора:

Begin

Оператор1;

Оператор2;

……………

End;.

Упражнения

1. Составить программу, которая проверяет знание даты основания города Минска. Программа должна запросить: «В каком году был основан город Минск (например, в 1067 либо в 993 либо в 1147 )?» и в случае верного ответа сообщать «Верно», в противном случае «Вы ошиблись».

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

3. Составить программу, которая вводит число с клавиатуры, и, если оно отрицательное, возводит его в квадрат.

4. Составить программу, которая проверяет, делится ли на 3 данное число.

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

§2. Реализация алгоритмов с ветвлением

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

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

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

Пример 1. Большее из двух

program bid;

var a,b:integer;

begin

writeln('Введите два разных числа');

write('a=');

readln(a);

write('b=');

readln(b);

if a>b then writeln('большее число=',a)

else writeln('большее число=',b);

end.

Результат выполнения программы в случае ввода чисел 15 и 12:

Введите два числа

a=15

b=12

большее число=15

Программа выполнила оператор, принадлежащий ветке then, так как условие (a>b) верно.

Результат выполнения программы в случае ввода чисел 11 и 18:

Введите два числа

a=11

b=18

большее число=18

Во втором случае программа выполнила оператор, принадлежащий ветке else, так как условие (a>b) неверно.

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

Пример 2. Времена года

Program seasons;

var nm:integer;

begin

write('Введите номер месяца ');

readln(nm);

if (nm>=3)and(nm<=5) then

writeln('весна');

if (nm>=6)and nm<=8) then

writeln('лето');

if (nm>=9)and(nm<=11) then

writeln('осень');

if (nm=12)or(nm<=2) then

writeln('зима');

end.

Результат выполнения программы в случае ввода числа 7:

Введите номер месяца 7

лето

В программе примера 2 выполняется только один из четырех операторов if, в зависимости от введенного номера месяца.

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

Даны коэффициенты a и b линейного уравнения ax+b=0. Требуется найти его корни, если они есть. Известно, что решение данной задачи зависит от значений a и b. Если а не равно 0, то x=-b/a. Если же а=0, то необходимо проверить равно ли b нулю. При b=0 корнем является любое число, в противном случае корней нет.

Пример 3. Решение линейного уравнения

program Lin_ur;

var a,b:integer;

x:real;

begin

writeln('Введите коэффициенты:');

write('a=');

readln(a);

write('b=');

readln(b);

if a<>0 then write('x=',-b/a)

else

if b=0 then write('корень - любое число')

else write('корней нет');

end.

Результаты выполнения программы при разных заданных а и b в трех случаях следующие:

1) a=0

b=0

корень - любое число

2) a=5

b=20

x=-4

3) a=0

b=4

корней нет

Таким образом, в качестве оператора_1 и оператора_2 может быть простой или составной оператор, в том числе еще один (и более одного) оператора if.

Важно помнить:

1. При использовании вложенных операторов if слово else относится к последнему if, у которого нет еще else.

2. Точка с запятой слева и справа от then и от else не ставится;

3. Чтобы текст программы был более понятен, вложенные блоки операторов принято оформлять со сдвигом вправо, лесенкой. При каждом следующем вложении операторы сдвигают еще на несколько позиций вправо

4. При наборе текста программы на языке программирования сразу же после слова begin рекомендуется писать слово end и потом уже между ними вставлять составные или вложенные операторы. Это позволяет избежать ситуаций с появлением непарных begin /end. Этим методом рекомендуется пользоваться также при наборе апострофов и скобок: набрав левую скобку, сразу же поставьте правую и тогда уже вписывайте текст между ними.

Упражнения

Составить программы решения следующих задач:

1. Ввести три числа. Если ни одно из чисел не равно нулю, то вычислить их среднее арифметическое. Нарисуйте блок-схему и составьте программу.

2. Если целое число m делится на целое число n, то вывести частное от такого деления. В противном случае вывести сообщение « Не делится».

3. Дано целое число. Определить, принадлежит ли оно интервалу (10, 20).

4. В компьютер поступают результаты соревнований по плаванию для трех спортсменов. Выбрать и напечатать лучший результат.

5. Решите уравнение а) ах-2=0; б) bx=5;

алгоритм ветвление оператор цикл

§3. Алгоритмическая конструкция «Повторение»

3.1 Цикл (повторение)

Нетрудно заметить, что программы, которые составлялись в предыдущих параграфах, обладают одним общим свойством: при их выполнении каждое действие (группа действий) совершается один раз (в линейных программах) либо вообще не совершается (в программах с ветвлением). В жизни часто встречаются случаи, в которых требуется один и тот же набор действий выполнять много раз подряд: «закручивать гайку, пока она не завернется до отказа», «идти, пока не дойдешь…» и т.д.

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

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

Циклы позволяют записать действия в компактной форме. Например, для вычисления суммы первых десяти натуральных чисел можно выбрать простое решение и записать вычисление в строчку, употребив 9 операций сложения:

Sum:=1+2+3+4+5+6+7+8+9+10;

А если число слагаемых достаточно велико (1000 или 10000)? Представьте, себе программу с оператором присваивания, который занимает несколько страниц и содержит 999 и более операций сложения! Очевидно, такое решение в этом случае не подходит.

Рассмотрим подробнее алгоритм вычисления суммы первых 5 натуральных чисел по шагам. В переменную Sum будем накапливать сумму чисел, в переменную i будем записывать очередное натуральное число.

0 шаг: sum0 =0

1 шаг: i=1 sum1=sum0+i=0+1=1

2 шаг: i=2 (i=i+1=1+1) sum2=sum1+i=1+2=3

3 шаг: i=3 (i=i+1=2+1) sum3=sum2+i=3+3=6

4 шаг: i=4 (i=i+1=3+1) sum4=sum3+i=6+4=10

5 шаг: i=5 (i=i+1=4+1) sum5=sum4+i=10+5=15

Нетрудно заметить, что при вычислении суммы повторяются всего две операции, причем в определенном порядке:

1. Прибавить слагаемое к ранее полученной сумме:

2. Увеличить на 1 значение слагаемого.

Следовательно, задачу можно решить с помощью следующего алгоритма:

1. Присвоить переменной Sum значение, равное 0 (Sum:=0).

2. Присвоить переменной i (слагаемое) значение, равное 1 (i:=1).

3. Добавить к сумме значение слагаемого i (Sum:= sum+i).

4. Увеличить i на 1 (i:=i+1).

5. Повторить шаги 3 и 4.

Повторив операции 3 и 4 5 либо 9 либо 999 (или более) раз, получим требуемую сумму. Это пример алгоритмической конструкции «Цикл (повторение)».

В языке программирования Pascal имеются разновидности цикла, например:

* цикл «для» ( for..to/downto);

* цикл «пока» (while).

Каждая из этих разновидностей цикла имеет свои особенности.

3.2 Оператор цикла for

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

Пример 1. Сумма первых десяти натуральных чисел

program summa;

var i,sum:integer;

begin

sum:=0; {начальное значение суммы}

for i:=1 to 10 do {Для переменной цикла i (счетчика цикла)

от 1 до 10 выполнить (i меняется от 1 до 10 с шагом 1) следующий оператор - тело цикла}

sum:=sum+i; {эта строка - тело цикла. Оно выполняется 10

раз. В переменной sum накапливается сумма, каждый раз прибавляя к ее предыдущему значению sum очередное значение i}

writeln('Sum =',sum);{вывод результата}

end.

Результат выполнения программы:

Sum =55

В программе summa (пример 1) переменная i является целочисленной управляющей переменной цикла for (или его счетчиком). В заголовке оператора for указаны начальное и конечное значения переменной цикла i. В данном случае начальное значение переменной цикла равно 1. При первом выполнении тела цикла i:=1, при втором - i:=2, и т.д. При последнем выполнении тела цикла i:=10. Каждый раз перед выполнением тела цикла текущее значение переменной цикла i сравнивается с конечным значением. После каждого выполнения тела цикла переменная i увеличивается на 1. Как только i превысит конечное значение, выполнение цикла прекращается и осуществляется переход на следующий после for оператор программы.

На примере 1 был рассмотрен частный случай применения оператора for. В общем виде оператор for может быть представлен в двух формах.

Первая форма последовательно наращивает переменную цикла, увеличивая ее каждый раз на 1:

For <переменная цикла>:= <начальное значение> to <конечное значение> do <оператор>;

Кратко: For i:=N1 to N2 do <оператор>;

Вторая форма последовательно уменьшает переменную цикла на 1:

For <переменная цикла>:= <начальное значение> downto <конечное значение> do <оператор>;

Кратко: For i:=N1 downto N2 do <оператор>; (N1> N2)

В представленных формах оператора цикла For……do - заголовок цикла, <оператор> - тело цикла. Тело цикла может быть простым или составным оператором. Переменная цикла, ее начальное и конечное значения должны принадлежать к одному и тому же типу данных (чаще всего это целочисленный тип integer, но могут быть и другие типы, кроме вещественного).

Блок-схема цикла с заданным числом повторений For..to может иметь следующий вид (рис. 2.6):

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.6

А теперь вычислим сумму первых N натуральных чисел с помощью оператора for..downto. В этом случае программа примера 1 может выглядеть следующим образом:

Пример 2. Сумма первых N натуральных чисел

program summa_N;

var i,n,sum:integer;

begin

write ('n='); {ввод исходных данных с клавиатуры}

readln(n); {n - количество первых натуральных чисел}

sum:=0; {начальное значение суммы}

for i:=n downto 1 do {переменная цикла i (счетчик цикла)

меняется от 10 до 1 с шагом -1}

sum:=sum+i; {тело цикла}

writeln('Sum =',sum);{вывод результата}

end.

Результат выполнения программы при n=10:

n=10

Sum =55

Важно помнить:

1. Не рекомендуется изменять управляющую переменную цикла в теле цикла с помощью команды присваивания. Это может привести к «зацикливанию» программы (бесконечному повторению тела цикла) либо к неверным результатам выполнения программы.

2. Если в заголовке оператора for..to начальное значение переменной цикла больше конечного значения, то тело цикла не выполнится ни разу.

3. Если в заголовке оператора for..downto начальное значение переменной цикла меньше конечного значения, то тело цикла не выполнится ни разу.

4. При выходе из цикла текущее значение переменной цикла больше равно конечному значению в операторе for..to и наоборот в операторе for..downto.

5. Телом цикла может быть не один оператор, а группа операторов (составной оператор), которую обязательно надо заключать в операторные скобки begin… end.

Рассмотрим несколько примеров использования оператора for.

Пример 3. Вывод на экран 5 первых нечетных натуральных чисел

Program N5;

var i,x:integer; {i - переменная цикла, в переменную

x записываем нечетные числа}

begin

x:=1; {первое нечетное натуральное число равно 1}

for i:=1 to 5 do {переменная i (счетчик цикла) меняется

от 1 до 5 с шагом 1}

begin

write(x,' '); {вывод нечетного числа}

x:=x+2; {следующее нечетного число на 2 больше

предыдущего}

end;

end.

Результат выполнения программы:

1 3 5 7 9

В примере 3 телом цикла является составной оператор, который образуют команды write(x,' ') и x:=x+2.

Блок-схема алгоритма программы примера 3 представлена на рисунке 2.7.

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.7

Пример 4. Вывод на экран чисел: 5,6,7,8,9.

program N5_9;

var i:integer; {i - переменная цикла и в то же время выводимое

число}

begin

for i:=5 to 9 do {переменная i (счетчик цикла) меняется

от 5 до 9 с шагом 1}

write(i,' '); {вывод очередного числа - тело цикла}

end.

Результат выполнения программы:

5 6 7 8 9

Из примера 4 видно, что начальным значением управляющей переменной цикла for..to не обязательно должна быть единица. Чтобы узнать, сколько раз выполнится тело цикла for, нужно найти разность между крайними значениями переменной цикла (по модулю) и прибавить к результату 1. Например, в данном примере 4 тело цикла выполнится (9-5)+1 раз, то есть 5 раз, что соответствует условию задачи.

Коротко о главном

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

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

· Переменная цикла изменяется с шагом +1, если оператор имеет форму:

For <переменная цикла>:= <начальное значение> to <конечное значение> do <оператор>.

· Переменная цикла изменяется с шагом -1, если оператор имеет форму:

For <переменная цикла>:= <начальное значение> downto <конечное значение> do <оператор>.

· Переменная цикла чаще всего имеет целочисленный тип (integer).

Упражнения

1. Сколько раз выполнится тело цикла:

For n:=3 to 6 do write ('*');

2. Что будет выведено на экран монитора в результате выполнения цикла:

For i:=1 to 5 do write (i,' ');

3. Составьте программу, которая 6 раз выведет на экран монитора ваше имя.

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

а) 5 первых четных натуральных чисел;

б) N первых натуральных чисел:

в) N первых четных натуральных чисел;

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

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

3.3 Оператор цикла While

Оператор цикла for отлично выполняет свои функции, когда число повторений действий заранее известно. Однако такая ситуация встречается в программировании далеко не всегда. Часто приходится решать задачи, когда число повторений действий в теле цикла неизвестно и определяется в ходе решения задачи. В этом случае применяют цикл с условием. В языке программирования Pascal имеется две разновидности цикла с условием:

Ш цикл с предварительным условием - условие цикла проверяется перед выполнением тела цикла;

Ш цикл с последующим условием - условие цикла проверяется после выполнения тела цикла.

Остановимся на цикле с предварительным условием (кратко, с предусловием). Цикл с предусловием - это цикл, который повторяется до тех пор, пока условие выполняется (истинно). Блок-схема цикла с предусловием представлена на рисунке 2.8.

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.8

Для реализации цикла с предусловием используется оператор While. В общем виде оператор While на языке программирования Паскаль может быть представлен так:

While <условие> do заголовок цикла

<оператор>;тело цикла

Если тело цикла состоит из нескольких операторов, их нужно заключить в операторные скобки begin…end. В этом случае оператор While будет выглядеть так:

While <условие> do заголовок цикла

Begin

<оператор_1>;тело цикла

<оператор_2>;

…………

End;

Значение выражения <условие>, записанное после слова While, проверяется перед каждым выполнением оператора (операторов) тела цикла.

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

Рассмотрим, как работает оператор While на известном вам примере вычисления суммы N первых натуральных чисел. Кстати, задачи, которые можно решить с помощью оператора for, всегда можно решить и с помощью оператора While.

Пример 5. Сумма первых N натуральных чисел

program summa_N;

var i,n,sum:integer;

begin

write ('n='); {ввод исходных данных с клавиатуры}

readln(n); {n - количество первых натуральных чисел}

sum:=0; {присвоим переменной sum начальное значение 0,}

i:=1; {а переменной i- начальное значение 1}

while i<= n do {пока i<=n выполнить }

begin

sum:=sum+i; {тело цикла}

i:=i+1; {переменная I меняется внутри цикла, и ее

величина определяет очередное повторение цикла

end;или завершение его }

writeln('Sum =',sum);{вывод результата}

end.

Результат выполнения программы в случае задания n=10:

n=10

Sum =55

Цикл в этой программе работает следующим образом:

· вначале i=1,n=10,sum=0;

· условие i<=10 в заголовке оператора while верно, поэтому начинается выполнение тела цикла;

· значение суммы увеличивается на 1: sum=sum+i=0+1=1;

· i увеличивается на 1, то есть i=i+1=1+1=2;

· условие i<=10 вновь верно, поэтому тело цикла выполняется очередной раз;

· значение суммы sum=sum+2=1+2=3, а переменной i=i+1=2+1=3;

· после выполнения данной последовательности действий (sum=sum+i и i=i+1) 10 раз получаем sum=0+1+2+…+10, i=11;

· условие i<=10 ложно, поэтому цикл завершается. Следующим действием будет вывод результата.

Важно помнить:

1. Если условие сразу оказывается ложным, цикл с условием не выполнится ни разу!

2. В теле цикла должны быть операторы, которые в какой-то момент изменят значение условия, сделав его ложным. Если этого не случится, цикл будет бесконечным, то есть программа «зациклится».

3. Зациклившуюся программу следует остановить с помощью команды

Программа -> Завершить, иначе она будет выполняться бесконечно (точнее, до выключения компьютера).

1. В операторах for и while точка с запятой не ставится ни перед словом do, ни после него!

Решим еще одну задачу с помощью оператора while.

Сколько слагаемых должно быть в сумме 2+4+6+8+…., чтобы эта сумма оказалась больше некоторого данного натурального числа N.

Пример 6. Наименьшее количество слагаемых из четных натуральных чисел для суммы, большей N.

Program Kol_slag;

var i,x,sum,n:integer; {i - счетчик слагаемых, в переменную x

будут записываться слагаемые, в переменной sum будет накапливаться сумма}

begin

x:=2; {первое слагаемое равно 2}

i:=1; {начальное значение счетчика слагаемых равно 1}

sum:=2;

write ('n=');

readln(n); {ввод числа n}

while sum<=n do {пока sum<=n выполнить тело цикла}

begin

x:=x+2;{следующее слагаемое на 2 больше

предыдущего}

i:=i+1; {увеличение счетчика слагаемых на 1}

sum:=sum+x; {прибавление очередного слагаемого к сумме}

end;

writeln (i,' слагаемых');

end.

Результат выполнения программы при N=30:

n=30

6 слагаемых

Блок-схема алгоритма программы примера 6 представлена на рисунке 2.9.

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.9

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

Коротко о главном

· Для организации многократно повторяющихся действий (команд) с неизвестным числом повторений используется оператор цикла с предусловием: While <условие> do <оператор>;

· После слова While надо записывать условие выполнения тела цикла.

· Цикл While выполняется до тех пор, пока условие, записанное после слова While, истинно (верно).

· Выполнение цикла While прекращается, как только условие примет ложное значение.

Упражнения

1. Может ли завершиться выполнение цикла while, условие которого выглядит так: a*a+b*b+2>1 ?

2. Cколько звездочек будет напечатано в результате выполнения

приведенного фрагмента программы:

i:=1; readln(n);

while i<=n do

begin

write('*');

i:=i+2

end;

при а) n=5; б) n=o в) n=1 ?

3. Сколько слагаемых должно быть в сумме 1+2+3+4+…., чтобы эта сумма оказалась а) больше 20; б) больше некоторого данного числа N.

Составьте программы и блок-схемы.

5. Составьте программу, которая вычисляет сумму натуральных чисел на отрезке [5, 10] с помощью оператора While.

§4. Реализация алгоритмов с повторением

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

Вы уже знаете, что цикл имеет свои разновидности и особенности при записи на языке программирования Pascal. Для каждой из разновидностей цикла есть свой круг задач, наиболее естественно решаемых именно с ее помощью. Составляя алгоритмы с повторениями для решения задач, необходимо оптимально выбирать разновидность цикла в каждом конкретном случае. Например, вам необходимо составить программу для подсчета суммы вводимых с клавиатуры целых чисел до первого отрицательного. Так как неизвестно, сколько чисел надо ввести, логично будет использовать оператор While, в заголовке которого условием выполнения тела цикла будет проверка введенного числа на положительность.

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

Размещено на http://www.allbest.ru/

18

Размещено на http://www.allbest.ru/

Рис. 2.10

Программа, реализующая представленный алгоритм, может выглядеть следующим образом:

Пример 1. Подсчет суммы введенных чисел до первого отрицательного

Program Sum_do_otr;

var

sum,a:integer; {в переменной sum накапливаем сумму,

в переменную а вводим числа}

begin

sum:=0; {обнуляем сумму}

write ('введите первое число ');

readln (a); {вводим первое число}

while a>=0 do {проверка числа на положительность}

{если введенное число отрицательное,

происходит выход из цикла}

begin {начало тела цикла}

sum:=sum+a; {добавляем введенное число к сумме}

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

readln (a) {ввод очередного числа}

end;

writeln ('sum=',sum) {вывод результата}

end.

Результат выполнения программы при введенных числах 2, 3, 5, -4:

введите первое число 2

введите число 3

введите число 5

введите число -4

sum=10

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

введите число -5

sum=0

Из примера 1 видно, насколько важен порядок выполнения действий в теле цикла. Если переставить местами операторы в теле цикла, программа будет работать совершенно иначе и может привести к логическим ошибкам. Логические ошибки не мешают выполнению программы, но приводят к неверным результатам. Для того чтобы понять, правильно ли работает программа, рекомендуется выполнять вручную несколько шагов цикла с отслеживанием значений всех переменных. Такой метод отладки программы называется трассировкой. Трассировка программы вычисления произведения первых пяти натуральных чисел будет продемонстрирована ниже (см. таблицу 2). А сейчас продолжим учиться составлять алгоритмы с повторением.

Ранее был представлен пример вычисления суммы N первых натуральных чисел. На основе этого алгоритма составим программу, которая вычисляет произведение первых N натуральных чисел.

Нам известно количество повторений действий, поэтому целесообразно для решения задачи использовать оператор For. Алгоритм вычисления произведения N натуральных чисел почти такой же, как и при вычислении суммы. Разница лишь в том, что операцию сложения в теле цикла необходимо заменить на операцию умножения, а начальное значение переменной, в которой будет накапливаться произведение, должно быть равным 1 (Умножение на 1 не влияет на произведение).

Программа вычисления произведения первых N натуральных чисел может выглядеть так:

Пример 2. Произведение первых N натуральных чисел

Program Proizv_N;

var i,n,P:integer;

begin

write ('n='); {ввод исходных данных с клавиатуры}

readln(n); {n - количество первых натуральных чисел}

P:=1; {начальное значение P, в которую будет

накапливаться произведение, равно первому натуральному числу}

for i:=2 to n do

P:=P*i; {тело цикла}

writeln('P =',P); {вывод результата}

end.

Результат выполнения программы в случае ввода числа 5:

n=5

P =120

Таблица 2. Трассировка программы примера 2.

Оператор

Результат проверки условия продолжения цикла

i

P

Вычисление

P:=1; N:=5;

Да

1

For i:=2 to 5 do

P:=P*i

Да

2

2

1*2=2

For i:=2 to 5 do

P:=P*i

Да

3

6

2*3=6

For i:=2 to 5 do

P:=P*i

Да

4

24

6*4=24

For i:=2 to 5 do

P:=P*i

Да

5

120

24*5=120

For i:=2 to 5 do

P:=P*i

Нет - выход из цикла

6

120

-

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

Упражнения

1. Cоставьте программу, которая вычисляет сумму первых N четных чисел.

2. Cоставьте программу, которая вычисляет произведение первых N нечетных чисел.

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

4. Сколько слагаемых должно быть в сумме 1+3+5+7+…., чтобы эта сумма оказалась больше 40.

5. Сколько слагаемых должно быть в сумме 1+2+3+4+…., чтобы эта сумма оказалась больше некоторого данного числа A.

6. Дан рост учеников 8 класса, состоящего из N человек.

Определите, сколько учащихся имеет рост выше 170 см.

Размещено на Allbest.ru


Подобные документы

  • Свойства алгоритма как определенного содержания и порядка действий над объектами. Базовые алгоритмические структуры: следование, ветвление, повторение. Структурированные типы данных. Реализация на языке программирования задач при помощи алгоритмов.

    контрольная работа [598,6 K], добавлен 06.12.2014

  • История развития языка программирования Pascal, его основные концепции. Вычисления в математических задачах. Изменение порядка выполнения инструкций программы. Выполнение оператора цикла. Логические выражения, линейные алгоритмы, условные операторы.

    методичка [847,6 K], добавлен 10.01.2013

  • Описание особенностей программирования циклических алгоритмов на С/С++. Использование операторов цикла для организации повтора в программе определенных действий. Создание и реализация программы приближенного вычисления интеграла методом трапеций.

    лабораторная работа [86,3 K], добавлен 25.03.2019

  • Понятие алгоритма, его свойства. Дискретность, определенность, результативность, формальность как свойства алгоритма. Программа как описание структуры алгоритма на языке алгоритмического программирования. Основные структурные алгоритмические конструкции.

    реферат [1,3 M], добавлен 18.11.2010

  • Основные типы циклов программирования. Методы применения специальных функций break, continue и цикла while. Обработка массивов информации. Условия применения циклических алгоритмов на языке программирования С++. Инициализация одномерного массива.

    курсовая работа [1,7 M], добавлен 06.01.2014

  • Free Pascal как свободная реализация языка Паскаль, совместимая с Borland Pascal и Object Pascal - Delphi, но при этом обладающая и некоторыми дополнительными возможностями. Основы алгоритмизации и программирования, создание визуальных приложений.

    учебное пособие [4,2 M], добавлен 13.12.2011

  • История создания и развитие Pascal. Особенности пакета программирования Turbo. его возможности редактора текстов, компилятора и отладчика. Построения программы на языке Turbo Pascal, ее структура, типы алгоритмов, одномерные и многомерные массивы.

    курсовая работа [519,3 K], добавлен 25.06.2011

  • Структура и основные элементы языка Turbo Pascal. Алгоритм составления простейших программ на Turbo Pascal. Применение условного оператора и сильноветвящихся алгоритмов. Циклы с предусловием и постусловием, сочетание циклических и условных операторов.

    реферат [64,0 K], добавлен 20.03.2016

  • Обзор основных используемых языков программирования (С++, Java, Pascal). Анализ существующих методов шифрования паролей. Основные понятия объектно-ориентированного программирования. Реализация приложения для генерирования паролей на языке Object Pascal.

    курсовая работа [822,4 K], добавлен 07.07.2012

  • Ознакомление с формой записи и работой операторов условного if (если) и безусловного а goto (идти к) переходов как способами организации ветвления в программе. Изучение оператора выбора альтернативы - switch (переключатель). Использование функции default.

    лабораторная работа [72,0 K], добавлен 15.07.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.