Урок 3

Меню

Урок 5

Урок 4.

Проверка условий в программе.

Попробуем составить программу для решения квадратного уравнения ах2-вх+с=0.

PRINT "решение квадратного уравнения"
INPUT "введите коэффициенты А,В,С ",А,В,С
D=B^2-4*A*C
X1=(-B+SQR(D))/(2*A)
X2=(-B-SQR(D))/(2*A)
PRINT "корни уравнения:",Х1;Х2
END

     Эта программа вычислит корни для коэффициентов 1, 3, 2, но “откажется работать” с коэффициентами 1, 2, 3. Действительно, для чисел А=1, В=2, С=3 мы получим D=-8 и затем будем пытаться извлекать корень из отрицательного числа D. Как известно, вычислять корни уравнения можно только тогда, когда дискриминант D неотрицателен. Как можно различить в программе эти случаи? Для этого можно использовать управляющую конструкцию IF-THEN-ELSE. Одна из форм этой конструкции выглядит так:

     IF условие THEN первая группа операторов ELSE вторая группа операторов END IF

     До сих пор инструкции в наших программах выполнялись последовательно одна за другой, сверху вниз. Конструкция IF-THEN-ELSE выполняет разветвление на два “рукава” в этом потоке инструкций. В зависимости от выполнения данного условия процесс вычислений пойдет либо по одним инструкциям, либо по другим. Итак, если условие, указанное в конструкции IF, выполнено, то будет выполняться первая группа операторов, записанных между словами THEN и ELSE, в противном случае (если условие не выполнено) выполняется вторая группа операторов, записанная между словами ELSE и END IF. После выполнения как первой, так и второй групп операторов выполняются инструкции, записанные после слов END IF, “рукава” сливаются.

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

первая группа операторов   вторая группа операторов

     Простейшим примером условия служит сравнение двух арифметических выражений, например, А>0, X+Y < Z+5 и т. д. Для записи операций сравнения в условиях используются следующие значки:

> больше,

>= больше или равно,

< меньше,

<= меньше или равно,

= равно,

<> не равно.

Таким образом, можно переписать нашу программу так:

PRINT "решение квадратного уравнения"
INPUT "введите коэффициенты А,В,С ",А,В,С
D=B^2-4*A*C
IF D<0 THEN PRINT "корней нет" ELSE
X1=(-B+SQR(D))/(2*A)
X2==(-B-SQR(D))/(2*A)
PRINT "корни уравнения:",Х1;Х2
END IF
END

     В этой программе имеется разветвление по условию D<0. Если подсчитанное значение D оказывается отрицательным, то печатается сообщение, что корней нет, затем мы сразу попадаем в конец программы. В случае, когда значение D неотрицательно, мы сразу попадаем на группу операторов, вычисляющих корни и печатающих их значения. Эту программу можно записать, используя сравнение D>=0:

PRINT "решение квадратного уравнения"
INPUT "введите коэффициенты А,В,С ",А,В,С
D=B^2-4*A*C
IF D>=0 THEN
     X1=(-B+SQR(D))/(2*A)
     X2=(-B-SQR(D))/(2*A)
     PRINT "корни уравнения:",Х1;Х2
ELSE PRINT "корней нет"
END IF
END

Внешний вид программы немного изменился, но смысл остался тем же.

     Обратите внимание на то, как записаны операторы в конструкции IF-THEN-ELSE Считается правилом хорошего тона записывать операторы, вложенные в управляющие конструкции, с небольшим отступом вправо. Тогда сразу видно, где начинается разветвление и где оно заканчивается. Если в программе все операторы расставлены кое-как, то ясно, что писал ее непрофессионал и там много ошибок.

Замечание.

     Зачем заставлять компьютер два раза вычислять одно и то же выражение SQR(D)? Достаточно и одного раза! можно написать эту программу так:

PRINT "решение квадратного уравнения"
INPUT "введите коэффициенты А,В,С ",А,В,С
В= -В/А/2
С=С/А
D=B*B-C
IF D>-0 THEN
     D=SQR(D)
     X1=B+D
     X2=B-D
     PRINT "корни уравнения :",Х1;Х2
ELSE PRINT "корней нет"
END IF
END

     В этой программе квадратный корень вычисляется только один раз, да и арифметических операций меньше. Кстати все эти программы имеют еще один недостаток. Что получается, если в качестве значения для А ввести нуль? На нуль делить нельзя, а мы это нигде не проверяем. Строго говоря, следовало бы еще написать

IF A=O THEN ....

Но это уже задача для тех, кто хочет стать программистом.

     Конструкция IF-THEN-ELSE имеет несколько сокращенных вариантов. Во-первых, если при невыполнении указанного условия ничего делать не надо, то можно не писать слово ELSE. В этом случае конструкция принимает следующий вид:

IF условие THEN группа операторов
END IF

     Здесь при справедливости условия выполняется группа операторов, а если условие нарушено, то сразу переходим к тем инструкциям, которые следуют за словами END IF.

     Если запись операторов, входящих в конструкцию IF-THEN -ELSE, достаточно короткая, то ее можно расположить на одной строке, не указывая слов END IF,

IF условие THEN операторы_1 ELSE операторы_2

или при отсутствии второй группы операторов так:

IF условие THEN операторы

     Несколько идущих подряд операторов здесь нужно разделять двоеточием. Вот пример записи вычисления абсолютной величины Y=|X|:

IF X>0 THEN Y=X ELSE Y=-X

А это пример с несколькими операторами:

IF D>0 THEN X1=-B+SQR(D): X2=-B-SQR(D) ELSE PRINT "нет корней"

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

А=1 : В=2 : PRINT A+B

Задания для практической работы.

     Напишите программу проверки пароля. Пусть пароль — некоторое число, зафиксированное в программе. Программа печатает приглашение “введите пароль” и вводит число. Если введенное число совпадает с фиксированным паролем, то программа выводит приветствие, если нет — сообщает о том, что пароль не угадан.

     Выясним, как следует поступать, если надо выполнить разветвление на три “рукава”, как, например, в следующей задаче. Для заданного Х вычислить значение А по формулам:

А=Х+1, если Х<0,

А=2Х, если 0<=Х<10,

А=0, если Х>=10.

Здесь можно идти разными путями.

Первый способ. Поместить одну управляющую конструкцию IF внутрь другой.

Поясним эту программу с помощью блок-схемы.

Второй способ. Познакомимся с дополнительными возможностями языка Basic. К сожалению, в условии нельзя непосредственно записать 0<=Х<10, но зато можно объединить несколько простых условий в одно сложное:

0<=Х AND X<10

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

INPUT"Х=",Х
IF X<0 THEN А=Х+1 — здесь Х <0
IF 0<=X AND X<10 THEN А-2*Х — здесь 0 <=Х < 10
IF X>=10 THEN A=0 — здесь Х >=10
PRINT "A=";A
END

Блок-схема для этой программы выглядит так.


    Конец

Рассмотрим теперь более подробно условие

0<=Х AND X<10.

     Слово AND — это обозначение логической операции “И”. Каждое отдельное неравенство в данный момент может быть или правильным или нет. Можно сказать, что любая операция сравнения имеет логическое значение “да” (неравенство или равенство выполнены) или “нет” (не выполнены). С этими логическими значениями можно выполнять логические операции И, ИЛИ, НЕ, которые обозначаются AND, OR, NOT, и тем самым объединять несколько простых неравенств в более сложное логическое выражение. Логические операции действуют по следующим правилам:

для двух логических выражений (двух сравнений), объединенных операцией AND, результат имеет значение “да”, если оба логических выражения имеют значение “да”. Для операции OR результат имеет значение “да”, если хотя бы одно из логических выражений имеет значение “да”. Операция NOT меняет логическое значение на противоположное.

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

Примеры.

Условие Х<0 или Х>100 можно записать так:

Х<0 OR X>100

Это же условие можно сформулировать словами “X не принадлежит отрезку [0,100]” и записать следующим образом:

NOT( 0<=X AND X<=100 )

Условие: “А, В, С одновременно обращаются в 0” можно записать так:

А=0 AND B=0 AND C=0

Задание для практической работы.

     1.Напишите программу, которая выводит на экран приглашение: “Который час?”, вводит с клавиатуры число X, имеющее смысл времени суток, и печатает слова “Доброе утро”, “Добрый вечер”, “Спокойной ночи” и т.п. в зависимости от введенного времени. Например, для 6<Х<10 она должна вывести “Доброе утро”. Программа должна реагировать на ввод неправильного времени: Х<0 или Х>24.

     2.Напишите программу, вводящую с клавиатуры три числа А,В,С и проверяющую, существует ли треугольник со сторонами А,В,С. Программа должна выдавать ответ “да/нет”.

Другие способы управления последовательностью выполнения инструкций

     Чтобы облегчить знакомство с конструкцией IF-THEN-ELSE, мы не рассказали о всех возможных формах ее записи. Теперь восполним этот пробел. В самом общем виде эта конструкция выглядит так:

IF условие_1 THEN
операторы_1
ELSEIF условие_2 THEN
операторы_2
• • • •
ELSE
операторы
END IF

     Групп со словом ELSE IF может быть несколько, а может не быть ни одной. Группа со словом ELSE также может присутствовать, а может отсутствовать. Работает конструкция следующим образом:

     Сначала проверяется условие_1. Если оно выполнено, то выполняются операторы _1, и дальше управление передается инструкциям, записанным после слов END IF. Если условие_1 не выполнено, то проверяется условие_2, и при его справедливости выполняются операторы_2. Если же и оно не выполнено, то проверяется условие_3, и т.д. Если ни одно из этих условий не выполнено, то выполняются операторы после слова ELSE. Слово ELSE также может отсутствовать; тогда, если проверка всех условий дает “нет”, то ни одна из групп операторов в этой конструкции не выполняется.

     Во всех случаях после выполнения соответствующей группы операторов управление передается на инструкции, следующие за словами END IF. Обратите внимание, что слова IF, ELSEIF, ELSE, END IF и операторы, включенные в эту конструкцию, должны располагаться на разных строках.


Урок 3

Меню

Урок 5

Яндекс цитирования Rambler's Top100
Сайт создан в системе uCoz