Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Условный операторIF или как компьютер делает выбор






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

Теперь посмотрим, как писать разветвляющиеся программы на Паскале.

Выучим сначала три английских слова:

if читается " иф" переводится " если"
then читается " зэн" переводится " то"
else читается " элз" переводится " иначе"

Теперь приведем пример нового для вас оператора:

IF a=28 THEN WriteLn (f) ELSE k: =44

Переводится он так:

ЕСЛИ a=28 ТО печатай f ИНАЧЕ присвой переменной k значение 44.

Другими словами, мы предлагаем компьютеру сначала подумать, правда ли, что a=28, и если правда, то выполнить оператор WriteLn (f), в противном случае выполнить оператор k: =44. Таким образом, мы с вами впервые написали оператор, при выполнении которого компьютер не просто выполняет, что приказано, а сначала думает и делает выбор (пока одного из двух).

Мы видим, что оператор if включает в себя другие операторы, которые выполняются или не выполняются в зависимости от какого-то условия. Чтобы понять, зачем может пригодиться оператор if, рассмотрим следующую задачу.

Задача 1. Компьютер должен перемножить два числа - 167 и 121. Если их произведение превышает 2000, то компьютер должен напечатать текст ПРОИЗВЕДЕНИЕ БОЛЬШОЕ, иначе текст ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ. После этого компьютер в любом случае должен напечатать само произведение.

Программа:

VAR a, b, y: Integer;

BEGIN
a: =167;

b: =121;

y: =a*b;

if y> 20000 then WriteLn ('ПРОИЗВЕДЕНИЕ БОЛЬШОЕ')

else WriteLn ('ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ');

WriteLn (y)

END.

Пояснение: В программе 5 операторов, последний – WriteLn (y). Поскольку эти 5 операторов выполняются по порядку, то он выполнится обязательно.

 

Задача 2. В компьютер вводятся два произвольных положительных числа - длины сторон двух кубиков. Компьютер должен подсчитать объем одного кубика - большего по размеру.

Обозначим a1 - сторону одного кубика, a2 - сторону другого, bol - сторону большего кубика, V - объем кубика. Приведем три варианта программы:

 

ВАРИАНТ 1   VAR a1, a2: Real; BEGIN ReadLn (a1, a2); ifa1> a2 then WriteLn (a1*a1*a1: 15: 5) else WriteLn (a2*a2*a2: 15: 5) END.
ВАРИАНТ 2   VAR a1, a2, V: Real; BEGIN ReadLn (a1, a2); if a1> a2 thenV: =a1*a1*a1 else V: =a2*a2*a2; WriteLn (V: 15: 5) END.
ВАРИАНТ 3   VAR a1, a2, bol, V: Real; BEGIN ReadLn (a1, a2); if a1> a2 then bol: =a1 else bol: =a2; V: =bol*bol*bol; WriteLn (V: 15: 5) END.

 

Поясним последний вариант. Программа состоит из четырех операторов, которые выполняются в порядке записи. Первым после запуска выполняется оператор ReadLn (a1, a2), который ждет от нас ввода двух чисел. Пусть мы сегодня ввели числа 3 и 2. Компьютер понимает, что a1 равно 3, a2 равно 2, и переходит к выполнению оператора if. Он видит, что 3> 2, и поэтому выполняет оператор bol: =a1, а оператор bol: =a2 не выполняет. В результате в ячейке bol оказывается число 3. Затем компьютер переходит к следующему оператору - V: =bol*bol*bol и вычисляет V=3*3*3=27. Следующий оператор WriteLn (V: 15: 5) печатает число 27.00000.

Если завтра мы запустим эту же программу и введем числа 6 и 10, то компьютер увидит, что утверждение 6> 10 ложно, и поэтому выполнит оператор bol: =a2, а оператор bol: =a1 выполнять не станет. В результате в ячейке bol окажется число 10 и будет напечатано число 1000. 00000.

 

А теперь, дорогой читатель, вам пришла пора освоить пошаговый режим выполнения программы на компьютере. В обычном режиме компьютер выполняет программу настолько быстро, что вы не успеваете заметить, в каком порядке он выполняет отдельные операторы программы, а без этого часто невозможно понять ее логику. Пошаговый режим заставляет компьютер при выполнении программы задерживаться на каждой строке программы столько, сколько нужно человеку. Сейчас вам необходимо проделать то, что сказано в части IV в пункте «Пошаговый режим» параграфа «Исправление ошибок. Отладка программы».

 

Итак, если паровая машина избавила человека от тяжелого физического труда, то оператор if избавил человека от тяжелого умственного труда, в нашем случае - от необходимости решать, какое из двух чисел больше другого.

Оператор if можно записывать и без части else. Например, if s< t then w: =a+1. Это означает, что если s< t, то нужно выполнить оператор w: =a+1, в противном случае ничего не делать, а просто перейти к следующему оператору.

Для примера рассмотрим простейшую задачу: В компьютер вводится слово. Компьютер должен просто распечатать его. Однако, если введенным словом будет " колхозник", то компьютер должен напечатать вместо него слово " фермер".

Вот как будет выглядеть наша программа-" цензор":

VAR Slovo: String;
BEGIN
ReadLn (Slovo); { переменная Slovo будет иметь значением строку символов, введенных с клавиатуры }
if Slovo = 'колхозник' then Slovo: = 'фермер';
WriteLn (Slovo)
END.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал