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.

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

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

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

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

Программа решения задачи может иметь вид:

program max_3;

var a, b,c:integer;

begin

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

readln(a, b,c);

if (a>b)and (a>c)

then

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

else

if (b>a)and (b>c)

then

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

else

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

end.

Результат выполнения программы при а=3, b=5, c=2:

Введите три разных целых числа

3

5

2

Большее число=5

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

Пример 7. Определить, является ли указанный год високосным. Год считается високосным, если его номер делится нацело на 4, кроме тех случаев, когда он делится на 100. Если номер года делится на 400, то он все равно високосный. Например, високосные годы – 48, 1968, 1600, 2000, а не високосные – 159, 1800, 1900.

НЕ нашли? Не то? Что вы ищете?

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

program vis_god;

var a:integer;

begin

writeln('Введите год');

readln(a);

if (a mod 400=0)or ((a mod 100 <>0)

and (a mod 4 =0)) then writeln('год високосный')

else writeln('не високосный');

{если (a mod 400=0)или ((a mod 100 <>0) и (a mod 4 =0)), то вывести сообщение 'год високосный', иначе - 'год не високосный'}

end.

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

Введите год

1900

Не високосный

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

Введите год

2008

Год високосный

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

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

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

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

Упражнения

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

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

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

3.  Дано целое число. Нарисуйте на экране монитора круг, вписанный в квадрат, если число отрицательное, или квадрат, вписанный в круг, если число положительное.

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

5.  Дано двузначное число. Определите какая из его цифр больше, первая или вторая.

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

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

8.  Имеется круг радиусом r. Можно ли в данном круге вырезать квадратное отверстие со стороной a? Результат выполнения программы подтвердите рисунком.

9.  Длины сторон треугольника равны a, b,c. Определите, является ли этот треугольник равносторонним, равнобедренным или разносторонним.

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

§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. Рассмотрим работу этого оператора на примере. Пример 1. Вычислить сумму первых 10 натуральных чисел.

Программа решения задачи может иметь вид:

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7