Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Иллюстрация if и case




Оператор выбора case

Условный оператор if

Операторы ветвления

Содержание

Ветвления. Массивы. Циклы

Лекция 3.

Номенклатура выпускаемых изделий и их количественное соотношение.

Фонд времени работы оборудования и режим работы предприятия;

Технические нормы производительности оборудования и трудоемкости выпускаемой продукции;

Количество, состав и техническое состояние оборудования, а также производственные площади;

Универсальной формулы для определения ПМ нет, т.к.

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

ПМ цехов определяется по ПМ основного технологического оборудования.

Измеряется: натуральных ед. (м, шт.) реже – в руб.

учитываются отраслевые особенности и тип производства и др. характеристики, такие как:

Пример (расчет ПМ предприятия с ведущим цехом, оснащенным однотипным оборудованием- ткацкими станками): _

М= Тплан /t ед * N м (ткани);

Тплан – плановый фонд времени работы оборудования;

t ед - затраты времени на единицу продукции;

N – среднегодовое количество однотипного оборудования.

 

Операторы ветвления: if и case. Массивы: описание и использование. Операторы цикла: for, while и repeat. Прерывание циклов: break, continue и goto.

 

 

Ветвления. Массивы. Циклы.. 1

Операторы ветвления. 1

Условный оператор if. 1

Оператор выбора case. 3

Иллюстрация if и case. 3

Массивы.. 5

Описание массива. 5

Нумерация. 5

Описание переменных размерностей. 6

Обращение к компонентам массива. 7

Задание массива константой. 7

Операторы циклов. 8

for-to и for-downto. 8

Инкрементный цикл с параметром.. 8

Декрементный цикл с параметром.. 9

while и repeat-until 10

break и continue. 10

Оператор безусловного перехода goto. 11

Пример использования циклов. 11

Вывод массива, удобный для пользователя. 12

 

 

К операторам, позволяющим из нескольких возможных вариантов выполнения программы (ветвей) выбрать только один, относятся if и case.

 

Оператор if выбирает между двумя вариантами развития событий:

 

if <условие>

then <один_оператор>

[else <один_оператор>];

 

Обратите внимание, что перед словом else (когда оно присутствует, конечно же) символ ";" не ставится - ведь это разорвало бы оператор на две части.

 

Условный оператор if работает следующим образом:

Сначала вычисляется значение <условия> - это может быть любое выражение, возвращающее значение типа boolean.

Затем, если в результате получена "истина" (true), то выполняется оператор, стоящий после ключевого слова then, а если "ложь" (false) - без дополнительных проверок выполняется оператор, стоящий после ключевого слова else. Если же else-ветвь отсутствует, то не выполняется ничего.

 

Что же произойдет, если написать несколько вложенных операторов if?

 

В случае, когда каждый оператор if имеет собственную else-ветвь, все будет в порядке. А вот если некоторые из них этой ветви не имеют, может возникнуть ошибка. Компилятор языка Pascal всегда считает, что else относится к самому ближнему оператору if. Таким образом, если написать

 

if i>0 then if s>2

then s:= 1

else s:= -1;

 

подразумевая, что else-ветвь относится к внешнему оператору if, то компилятор все равно воспримет эту запись как

 

if i>0 then if s>2

then s:= 1

else s:= -1

else;

 

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

 

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

 

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

 

if i>0 then if s>2

then s:=1

else

else s:=-1;

 

либо так:

 

if i>0 then begin if s>2

then s:=1

end

else s:=-1;

 

Вообще же, если есть возможность переписать несколько вложенных условных операторов как один оператор выбора, это стоит сделать.

 

 

Оператор case позволяет сделать выбор между несколькими вариантами:

 

case <переключатель> of

<список_констант>: <один_оператор>;

[<список_констант>: <один_оператор>;]

[<список_констант>: <один_оператор>;]

[else <один_оператор>;]

end;

 

Замечание: Обратите внимание, что после else двоеточие не ставится.

 

Существуют дополнительные правила, относящиеся к структуре этого оператора:

 

Переключатель должен относиться только к порядковому типу данных, но не к типу longint.

Переключатель может быть переменной или выражением.

Список констант может задаваться как явным перечислением, так и интервалом или их объединением.

Повторение констант не допускается.

Тип переключателя и типы всех констант должны быть совместимыми.

 

Пример оператора выбора:

 

case symbol(*:char *) of

'a'..'z', 'A'..'Z': writeln('Это латинская буква');

'а'..'я', 'А'..'Я': writeln('Это русская буква');

'0'..'9': writeln('Это цифра');

' ',#10,#13,#26: writeln('Это пробельный символ');

else writeln('Это служебный символ');

end;

 

Выполнение оператора case происходит следующим образом:

 

вычисляется значение переключателя;

полученный результат проверяется на принадлежность к тому или иному списку констант;

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

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

 

В качестве примера, иллюстрирующего использование операторов ветвления, приведем несколько различных реализаций функции sgn(x) - знак числа х. Из математики известно, что эта функция имеет следующие значения:

 

sgn(x) = -1, если x < 0;

sgn(x) = 0, если x = 0;

sgn(x) = 1, если x > 0.

 

Реализовать эту функцию для случая, когда х вещественное, можно следующими способами (при условии, что x:real; sgn: -1..1;):

 

1.

if x=0 then sgn:= 0;

if x<0 then sgn:= -1;

if x>0 then sgn:= 1;

 

Это так называемая реализация "в лоб". Здесь нет никаких хитростей и никаких попыток оптимизации: даже если сработает первый вариант, второй и третий все равно будут проверены, невзирая на то, что результат уже получен.

 

2.

if x=0

then sgn:= 0

else if x<0 then sgn:= -1

else sgn:= 1;

 

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

 

3.

if x=0

then sgn:=0

else sgn:=x/abs(x);

 

Еще одна попытка сократить текст программы. Здесь используется стандартная функция abs(), которая возвращает абсолютное значение аргумента. Проблема в данном случае состоит в том, что "/" - деление дробное, но ведь нам необходим целый, а не вещественный ответ! "Давайте воспользуемся стандартной функцией округления", - скорее всего, скажет внимательный читатель.

 

4.

if x=0

then sgn:=0

else sgn:=round(x/abs(x));

 

И действительно, исправленный вариант будет выдавать верный результат.

 

5.

case x=0 of

true: sgn:=0;

false:

sgn:=round(x/abs(x));

end;

 

А вот еще один (правда, несколько неестественный) способ с использованием оператора выбора. Вся хитрость этого варианта в том, что выбирающий ветви переключатель обязан принадлежать к перечислимому типу, именно поэтому пришлось заменить "х" на "х = 0". Напомним, что эта операция сравнения выдает результат логического типа boolean, и именно логические константы true и false фигурируют в качестве меток выбора.

 

Конечно же, мы перебрали далеко не все возможные способы реализации функции sgn(x) (ведь сколько людей, столько и способов выражать свои мысли - хоть в литературе, хоть в программировании). Однако уже на этом простеньком примере видно, что способов запрограммировать желаемое всегда больше, чем один, и вряд ли самое простое решение будет и оптимальным.

 




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


Дата добавления: 2013-12-13; Просмотров: 236; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.026 сек.