Оператор выбора
Запись логических выражений на языке Pascal и правила построения структурных операторов. Рассмотрение примеров использования пустого оператора. Реализация алгоритмической базовой конструкции выбора, организация ветвлений. Анализ выражения-селектора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 09.04.2013 |
Размер файла | 140,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Курсовой проект
По предмету: "Основы алгоритмизации и программирования"
На тему: "Оператор выбора"
Семей-2012
Содержание
Задание
Введение
1. Программирование разветвляющихся алгоритмов
1.1 Составной и пустой операторы
1.2 Организация ветвлений. Операторы выбора
1.2.1 Оператор ветвления IF
1.2.2 Оператор варианта CASE
1.2.3 Математические решения
Заключение
Список литературы
Приложение
Задание
на курсовой проект по дисциплине "Основы алгоритмизации и программирования"
Обучающийся_
Группа:_ Специальность: 1304000 "Вычислительная техника и программное обеспечение".
Консультант: _______
1. Тема курсовой работы "Оператор выбора".
2.Основное содержание:
Ш Содержание
Ш Заключение
Ш Приложение
Ш Список использованной литературы
3. Требование к оформлению
3.1 Пояснительная записка должна быть оформлена в редакторе Microsoft ® Word версии 2003,2007 в соответствии с требованиями
Пояснительная записка выполняется на листах формата А4 с применением печатающих и графических устройств вывода ЭВМ.
Шрифт Times New Roman. Размер шрифта - 14 пт, выравнивание - по ширине.
Рисунки выполняются в редакторах Word,Excel,Paintbrush.
Поля страница верхнее и нижняя границы - 2см, левая-3см, правая-1,5 см.
Абзацы в тексте начинают отступом в 1 см.
Каждый раздел пояснительной записки рекомендуется начинать с нового листа.
Разделы и подразделы должны иметь заголовки. Пункты, как правило, заголовков не имеют. Заголовки должны четка и кратко отражать содержание разделов и подразделов. Заголовки выполняют с прописной буквы без точки в конце, не подчеркивая. Переносы слов в заголовках не допускаются. Если заголовок состоит из двух предложений, их разделяют точкой.
К защите курсового проекта создается презентация, содержащая главную суть курсового проекта.
В пояснительной записке должны содержаться разделы:
· Введение
· Программирование разветвляющихся алгоритмов
· Составной и пустой операторы
· Организация ветвлений. Операторы выбора
· Оператор ветвления IF
· Оператор варианта CASE
· Математические решения
Дата выдачи_ 4 октября_ Дата окончания____________________
Руководитель __ _____ __________
Введение
Всякая Паскаль-программа есть последовательность операторов, которые подразделяются на простые и структурные. Каждый оператор имеет определенную структуру и записывается с использованием служебных слов и символов языка. Говорят, что оператор характеризуется своим синтаксисом и семантикой.
Оператор языка представляет собой неделимый элемент программы, который позволяет выполнять определенные алгоритмические действия.
Синтаксис оператора есть правило его описания, которое может быть задано либо в виде общей формы записи оператора, либо в виде синтаксической диаграммы. Синтаксическая диаграмма помимо синтаксиса задает и семантику оператора, т.е. определяет те действия, которые заложены в этом операторе, и порядок выполнения этих действий. Для некоторых сложных операторов помимо синтаксической диаграммы необходимо давать дополнительные пояснения по их семантике.
Семантика определяет смысловое значение предложений языка. Являясь системой правил истолкования отдельных языковых конструкций, семантика устанавливает, какие последовательности действий описываются теми или иными фразами языка и, в конечном итоге, какой алгоритм определен данным текстом на алгоритмическом языке.
Различают простые и структурные операторы. Простым оператором является оператор, не содержащий в себе других операторов. В простом операторе определяется, как правило, одно элементарное действие. В Паскале имеются три простых оператора: присваивания, вызова процедуры и перехода. Структурные операторы подразделяются, в свою очередь, на составные, условные, цикла и операторы над записями. Структурный оператор включает в себя другие операторы (как простые, так и составные).
Существует всего один оператор безусловного перехода Goto и четыре безусловных функции: Break, Continue, Exit, Halt.
Структурные операторы строятся из других операторов по определенным правилам. Операторы, входящие в структурный оператор, выполняются последовательно - в составных операторах и операторах над записями, альтернативно - в условных операторах, многократно - в операторах цикла.
Условный оператор позволяет в процессе выполнения программы выбирать одно из двух возможных действий в зависимости от значения логического выражения. Оператор выбора (или оператор варианта) дает возможность выполнить одно из нескольких действий в зависимости от значения скалярного выражения или выражения ограниченного типа.
Формат оператора варианта:
case <селектор> of
<константа 1> : <оператор 1>;
...
<константа N> : <оператор N>
else
<оператор>
end;
1. Программирование разветвляющихся алгоритмов
Структурные операторы строятся из других операторов по определенным правилам. Операторы, входящие в структурный оператор, выполняются последовательно - в составных операторах и операторах над записями, альтернативно - в условных операторах, многократно - в операторах цикла. Условные операторы и операторы выбора обеспечивают выполнение одного или нескольких операторов программы в зависимости от условия. Условие в операторе может записываться с помощью операций отношения или в виде логического выражения.
Логические выражения на языке Pascal записываются с помощью следующих операторов:
- Логическое сложение ("или") OR.
- Логическое умножение ("и") AND.
- Логическое отрицание ("не") NOT.
- Исключающее ИЛИ XOR.
Результат логических операций выражается булевой переменной со значением "true" - истина, "false" - ложь.
Операции отношения записываются следующим образом:
? < меньше,
? > больше,
? <= меньше или равно,
? >= больше или равно,
? =равно.
Результат выполнения логических операций выражается булевой переменной. На языке Pascal условный оператор IF имеет следующий формат:
IF <условие>
THEN BEGIN
<группа операторов 1>
END
ELSE BEGIN
<группа операторов 2>
END;
Группа операторов 1 выполняется, если условие истинно - TRUE, иначе выполняется группа операторов 2.
IF <условие>
THEN BEGIN
<группа операторов 1>
END
ELSE BEGIN
<группа операторов 2>
END;
1.1 Составной и пустой операторы
При формировании структурных операторов существуют некоторые ограничения на число входящих в него операторов. В частности, в операторе выбора IF (в школьном алгоритмическом языке команда "если") после служебного слова THEN (аналог - "то") может стоять только один оператор. Поэтому в Паскале возникла необходимость группирования операторов в единое целое - в один составной оператор.
Любая группа операторов, размещенных между словами BEGIN и END (иначе, операторные скобки), рассматривается как один - составной оператор. При выполнении составного оператора все его компоненты (операторы) выполняются в порядке их написания (линейно).
Составные операторы обрабатываются как единое целое, как один оператор, что имеет значение там, где синтаксис языка допускает использование только одного оператора. Это имеет место практически во всех структурных операторах. Примеры использования составных операторов будут рассмотрены в соответствующих разделах данного пособия.
Наряду с понятием "составной оператор" в языке существует специфическое понятие "пустой оператор". Пустой оператор - это оператор, который не предусматривает выполнения никаких действий. Зачем он нужен? Действительно, если оператор не выполняет никаких действий, то стоит ли его писать? Однако практика показывает, что иногда полезно иметь такое средство, например, при выполнении искусственной задержки выполнения программы:
FOR I := 1 TO 10 000 DO;
При выполнении данного оператора машина переменной I последовательно присвоит значения от 1 до 10 000. В теле цикла нет операторов, значит, кроме увеличения значений переменной на 1 ничего не будет выполнено, однако время на это затрачивается, и, следовательно, некоторое время программа "висит" на данном операторе.
Существуют и другие примеры использования пустого оператора, когда по синтаксису оператор формально необходим, но никаких действий внутри него не производится.
1.2 Организация ветвлений. Операторы выбора
Условные операторы и операторы выбора обеспечивают выполнение или невыполнение некоторого оператора (в том числе и составного) в зависимости от справедливости проверяемого условия. Эти операторы прерывают естественную линейную последовательность операций, выполняемых по очереди в порядке записи, после чего алгоритм может пойти по одной из двух (или более) возможных ветвей в соответствии с заданным условием. Такая алгоритмическая конструкция называется ветвлением. При обходе несколько шагов алгоритма пропускаются в зависимости от справедливости проверяемого условия.
В языке Паскаль алгоритмическая базовая конструкция выбора может быть реализована с помощью двух структурных операторов - IF и CASE, называемых операторами выбора. С их помощью можно выбрать для выполнения один из составных операторов (или ни одного оператора). Условные операторы обеспечивают выполнение или невыполнение некоторого оператора, группы операторов или блока в зависимости от заданных условий.
Оператор условия If может принимать одну из форм:
If условие then оператор1 {полная условная конструкция}
Else оператор2;
If условие then оператор; {неполная условная конструкция}
Оператор выбора Case является обобщением оператора If и позволяет сделать выбор из произвольного числа имеющихся вариантов. Он состоит из выражения, называемого селектором, и списка параметров, каждому из которых предшествует список констант выбора. Как и в операторе If, здесь может присутствовать слово Else, имеющее тот же смысл.
Формат оператора:
Case выражение-селектор of
Список 1: оператор 1;
…
Список N: оператор N
Else оператор
End
Оператор выбора работает следующим образом. Вначале вычисляется значение выражения <ключ выбора>, а затем в последовательности <констант выбора> отыскивается такая, которая соответствует <ключу выбора>, и выполняется <оператор>, который находится за соответствующей <константой выбора>. Если в списке не будет найдена надлежащая константа, управление передаётся операторам, стоящим за словом ELSE. Часть ELSE <оператор> можно опускать. Тогда при отсутствии в списке нужной константы ничего не произойдёт, и оператор выбора завершит свою работу. Любому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделённых запятыми.
1.2.1 Оператор ветвления IF
Бывает, что в процессе выполнения программы требуется реализовать разный набор команд в зависимости от произошедших до этого событий. В языках программирования это достигается с помощью специальных конструкций - условных операторов.
Чаще всего в качестве условного оператора в языках программирования используется конструкция if-else или ее сокращенный вариант if.
Оператор if-else
Когда выполнение основной ветки программы доходит до условного оператора if-else, то в зависимости от результата логического выражения в его заголовке выполняются разные блоки кода. Если логическое выражение вернуло true, то выполняется один блок (в Паскале начинается со слова then), если false - то другой (начинается со слова else). После выполнения одного из вложенных блоков кода, ход программы возвращается в основную ветку. Другой вложенный блок не выполняется.
Например, программа должна определять, ввел пользователь четное или нечетное число, и выводить на экран сообщение. Тогда программный код на языке Pascal может быть таким:
var n: integer;
begin
write ('Введите целое число: ');
readln (n);
if n mod 2 = 0 then
write ('Оно четное.')
else
write ('Оно нечетное.');
readln
end.
Бывают неполные формы условных операторов. В таком случае вложенный в if блок кода выполняется только в случая true логическом выражении заголовка. В случае false выполнение программы сразу передается в основной блок. Понятно, что ветка else в таком случае отсутствует.
В примере ниже, если переменная имеет значение меньше нуля, то ее значение изменяется (находится модуль числа). Если же значение переменной изначально больше нуля, то блок кода при операторе if вообще не выполняется, т.к. не соблюдено условие (n<0).
var n: integer;
begin
write ('Введите целое число: ');
readln (n);
if n < 0 then
n := abs (n);
write (n);
readln
end.
В качестве условия может стоять любое выражение, результатом вычисления которого является одно из булевых значений -- true или false.
Непосредственно после then может стоять только один оператор. При необходимости выполнения нескольких операторов они должны быть заключены в операторные скобки begin-end. Пример программы, которая меняет значения переменных местами, только если эти значения различны. Блок if содержит четыре выражения, поэтому заключен в begin-end.
var
a,b,c: integer;
begin
write('a=');
readln(a);
write('b=');
readln(b);
if a <> b then begin
c := a;
a := b;
b := c;
writeln('a=',a,'; b=',b);
end
else
writeln('Введены одинаковые числа');
readln;
end.
Допустимо вложение одного оператора if (или if-else) в другой. При этом следует соблюдать осторожность, т.е. бывает трудно определить какому if (внешнему или внутреннему) принадлежит ветка else. Рекомендуют использовать вложенную конструкцию if, только в ветке else. К тому же в языке Паскаль действует следующее правило: каждому then соответствует ближайшее else, не задействованное при установлении соответствия с другим then. Глубина вложенности операторов if может быть сколь угодно большой, но разобраться в таком коде будет очень сложно.
Оператор IF можно представить в общей форме записи как
IF <Условие> THEN <Оператор 1> ELSE <Оператор 2>,
где конструкция "Условие" есть логическое выражение, которое принимает два значения типа BOOLEAN: TRUE, FALSE (истинно или ложно).
Само логическое выражение складывается из операций сравнения: >, >=, <, <=, =, <>. Результат сравнения может быть TRUE или FALSE.
Логические выражения могут формироваться также и с помощью трех логических операций: NOT, AND, OR. Приоритеты всех используемых в Паскале операций таковы:
Высший: ( )
NOT *, /, DIV, MOD
AND
OR +, -
Низший: >, =, < , >=, <>, <=
В качестве условия может быть использована и логическая переменная, например:
I and J or K ---> (I and J) or K;
not X and Y ---> (not X) and Y, где I, J, K, X, Y - переменные типа BOOLEAN;
(A < B) or (B = 0), где A, B - переменные простого типа.
В операторе IF всегда за словами THEN и ELSE должен следовать один оператор. Этим оператором может быть не только оператор присваивания, но и любой другой. Если хотя бы один из них является снова оператором IF, то полученную конструкцию называют вложением.
Пример:
IF <условие1> THEN <ветвь 1>
ELSE IF <условие2> THEN <ветвь 2>
ELSE <ветвь 3>;
Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, чем составное условие, однако одновременно он уменьшает надежность программы. Не рекомендуется использовать более двух-трех уровней вложения IF. Вложения могут идти и после слова THEN.
При вложенности операторов каждое е1sе соответствует тому then, которое непосредственно ему предшествует;
* конструкций со степенью вложенности более 2--3 необходимо избегать из-за сложности их анализа при отладке программы;
* в условных операторах часто используют составной оператор begin … end. Если между begin и end находится только одна инструкция, слова begin и end лучше не писать;
* в условных операторах точка с запятой не ставится после then и перед else;
* самое простое логическое выражение -- одна переменная логического типа, которая играет роль целого выражения;
* сложные логические выражения могут содержать несколько отношений и/или логических переменных, связанных операциями and, оr, nod (не забывайте заключать каждое отношение в скобки);
* с целью предупреждения ошибок выполнения инструкцию if удобно использовать для соответствующей проверки.
содержит программу, которая вычисляет частное двух целых чисел. В связи с тем, что делить на ноль нельзя, организуем контроль ввода данных. Для контроля вводимых значений делителя используем оператор условного перехода if.
Вычисление частного двух целых чисел
var
a,b: integer; { операнды -- целые числа }
result: real; ( результат -- вещественное число }
begin
write('Введите значение делимого а: '); read(a);
write('Введите значение делителя Ь: '); read(b);
if b=0 { контроль ввода }
{ условие выполнено }
then writeln('Неверные исходные данные: делитель -- ноль')
{ условие не выполнено }
else
{ составной оператор нужен для объединения двух команд в единое целое }
begin { начало составного оператора }
result:=a/b;
writeln('Частное чисел ',а,' и ',Ь,' = ', result:7:3);
end; { конец составного оператора }
end.
Проверка числа на четность
var n: integer;
begin
write{'Введите целое число: '); readln(п);
write('Число ',п,' -- ');
if n mod 2=0 then writeln('четное') else writeln('нечетное');
end.
Сравнение возрастов
var age1,age2: integer;
begin
write('Введите возраст брата: '); readln(age1);
write('Введите возраст сестры: ');readln(age2);
if age1>age2 then writeln('Брат старше.')
else if age2>age1 then writeln('Сестра старше.')
else writeln('Они близнецы.');
end.
Запись вложенных условных операторов -- непростая задача и часто вызывает затруднения у начинающих программистов. В этом случае лучше составлять программу таким образом, чтобы она не содержала вложенных условных операторов. Например, изменим текст предыдущей программы так, чтобы он содержал сокращенные условные операторы, не вложенные один в другой.
Сравнение возрастов
var age1,age2: integer;
begin
write('Введите возраст брата: '); readln(age1);
write('Введите возраст сестры: ');readln(age2);
if age1>age2 then writeln('Брат старше.');
if age2>age1 then writeln('Сестра старше.');
if age1=age2 then writeln('Oни близнецы.');
end.
Тем не менее, во многих случаях применение вложенных условных операторов позволяет избежать сложных условий с использованием логических функций.
Проверка существования треугольника с заданными сторонами
var a,b,c: real;
begin
write('Введите три действительных числа: '); readln(a,b,с);
if (a+b>c) and (a+c>b) and (b+c>a) then
writeln('Треугольник с такими сторонами существует!')
else
writeln('Треугольник с такими сторонами не существует...');
end.
Решение квадратного уравнения
var
a,b,с: real; { коэффициенты уравнения }
x1,x2: real; { корни уравнения }
d: real; { дискриминант }
begin
writeln('введите в одной строке значения коэффициентов а, Ь, с'); readln (a,b, с) ;
if (a=0)and(b=0)and(c=0) then
begin
writeln('корень -- любое число1); goto lab1O1;
end;
if (a=0)and(b=0)and(c<>0) then
begin
writeln('корней нет'); goto lab1O1;
end;
if (a=0)and(b<>0)and(c<>0) then
begin
x1:=-c/b;
writeln('единственный корень:',x1:7:3); goto lab1O1;
end;
d:=b*b-4*a*c; { вычисление дискриминанта }
if d>=0 then
begin
x1:=-b+sqrt(d)/(2*a); x2:=-b-sqrt(d)/(2*a);
writeln('корни уравнения:');
writeln('x1=',x1:7:3); writeln('x2=',x2:7:3);
end
else writeln('вещественных корней нет');
lab1O1: { пустой оператор помечен меткой }
end.
Первый способ предпочтительнее, чем второй, так как конструкция THEN-IF менее удобна, чем ELSE-IF. С помощью конструкции ELSE-IF чаще всего осуществляется выбор одного из нескольких альтернативных вариантов. Заметим, однако, что иногда такое вложение можно заменить на последовательность операторов короткой формы IF-THEN. Это видно на следующем примере:
program QUARD;
var A, B, C : real; D : real;
begin
read (A, B, C); D := sqr (B) - 4 * A - C;
1-й вариант |
2-й вариант |
||
if D < 0 then write ('Не имеет корней'); |
if D < 0 then write ('Нет корней') else if D = 0 then write ('Один корень') |
||
if D = 0 then write ('Один корень'); if D > 0 then write ('Два корня'); |
else write ('Два корня'); |
||
end.
Рис. 2. Пример программы двух разных вложений
Однако в данном примере 2-й вариант более эффективен, так как имеет на одно сравнение меньше, и в случае D < 0 сразу же дает ответ, не делая последующих проверок.
Вычисляя выражения, стоящие в условии оператора if, Паскаль не записывает их значения в память. Например, после выполнения фрагмента - b:=6; if b+1>0 then s:=20 - в ячейке b будет храниться 6, а не 7. То же относится и к выражениям из оператора WriteLn. Например: b:=6; WriteLn (b+1) . И здесь тоже в ячейке b останется храниться 6, а не 7. И вообще, информация в ячейках памяти не меняется при вычислении выражений.
В Паскале существует специальный оператор, позволяющий сделать выбор из нескольких альтернатив - множественное ветвление, или оператор варианта.
1.2.2 Оператор варианта CASE
Обычно при написании программы не рекомендуется использовать многократно вложенные друг в друга условные операторы if -- программа становится громоздкой и ее трудно понимать. Считается, что число уровней вложения не должно превышать двух-трех. Но как быть, если необходимо проверить достаточно много условий и в зависимости от них выполнять те или иные действия? Для этих целей в языке Тurbо Раsсаl существует специаль¬ный оператор выбора саsе.
Инструкция саsе имеет вид:
CASE выражение-селектор OF
cписок 1 : begin оператор 1; end;
cписок 2 : begin оператор 2; end;
cписок N : begin оператор N; end
ELSE
begin оператор ; end;
END;
Выполнение оператора саsе начинается с вычисления выражения-селектора. Инструкции между begin и end выполняются в том случае, если значение выражения после слова саsе совпадает с константой из соответствующего списка. Если это не так, то выполняются инструкции, идущие после е1sе, расположенные между begin и end. Если е1sе отсутствует, выполняется оператор программы, следующий за саsе.
Обратите внимание -- в конце оператора саsе стоит ключевое слово end, для которого нет парного слова begin.
Например:
* селектор целочисленного типа:
CASE i OF
1 : Z:=i+10;
2 : Z:=i+100;
3 : Z:=i+1000;
END;
* селектор интервального типа:
CASE i OF
1..10 : writeln (`число',i:4,'в диапазоне 1 - 10');
11..20 : writeln (`число',i:4,'в диапазоне 11-20');
21..30 : writeln (`число',i:4,'в диапазоне 21-30')
ELSE writeln (`число вне диапазона')
END;
Кроме оператора if в языке программирования Паскаль предусмотрен так называемый переключатель case. Его можно трактовать как некий вопрос, имеющий большое число ответов (а не только два, как это имеет место в операторе if-else). Однако в отличие от if, case имеет ряд принципиальных ограничений. Его формат следующий:
case селектор of
значение1: оператор1;
значение2: оператор2;
значение3: оператор3;
...
else оператор N
end;
В заголовке оператора case вместо логического выражения фигурирует переменная, которую называют селектором. До этого в программе ей присваивается какое-либо значение. Эта переменная может иметь только перечисляемый тип (например, она не может быть вещественного типа). По ходу выполнения оператора case, значение переменной-селектора сравнивается с различными, описанными в нем альтернативами (метками-значениями). Как только совпадение будет найдено, то выполняется блок кода при данной метке и происходит выход в основную ветку программы. Значения-метки являются константами, которые может принимать селектор. Их тип и тип селектора должны быть совместимы по присваиванию.
Оператор выбора case позволяет организовать выбор из произвольного числа вариантов в отличие от оператора if, обеспечивающего выбор из 2-х вариантов.
Оператор выбора имеет следующий вид:
case < селектор > of <список констант 1> : <оператор1;>
<список констант 2> : <оператор2;>
. . .
<список констант N> : <операторN>
else <оператор>
end;
Если совпадений не будет, то выполняется блок else. Если блок else отсутствует (он является не обязательным), то никакой блок кода в операторе case не выполняется.
var n: integer;
begin
write ('Введите класс школы: ');
readln (n);
case n of
1..4: writeln ('Младшие классы.');
5..8: writeln ('Средняя школа.');
9,11: writeln ('Старшие классы. Выпускной.');
10: writeln ('Старшие классы.');
else writeln ('Error')
end;
readln
end.
На использование оператора выбора накладываются следующие ограничения:
· селектор должен иметь какой-либо порядковый тип;
· каждая альтернатива должна быть константой, диапазоном, списком диапазонов, но не переменной или выражением.
Оператор варианта состоит из выражения и списка операторов, каждому из которых предшествует одна или более констант, называемых константами выбора.
Общая форма записи
CASE <выражение> OF
константы: оператор;
....................
константы: оператор
ELSE <оператор>
END;
Выражение, стоящее между CASE и OF, называется селектором. Константы (значения выражения), предшествующие двоеточию, называются метками случаев. Порядок работы оператора: сначала вычисляется значение селектора, затем выполняется оператор, одна из меток которого совпадает со значением селектора. Все остальные операторы не выполняются, и управление передается следующему после END оператору. В случае короткой формы оператора CASE при несовпадении значения селектора (ключа) ни с одной из констант из списка никакой оператор не подлежит исполнению. Если же в операторе есть строка ELSE, то при несовпадении значения селектора ни с одной константой выполняется оператор, следующий за ELSE.
Выражение "селектор" может относиться к любому скалярному типу, кроме REAL. Метки случаев должны принадлежать тому же типу, что и селектор. Нежелательно, чтобы одна и та же метка появлялась более одного раза в операторе CASE. Если же это произойдет (компилятор не проверяет повторяемость меток), то выполнится тот оператор, который соответствует первому вхождению метки в список констант.
Оператор CASE особенно удобно использовать, во-первых, когда характер действий определяется значениями, которые не попадают в последовательно расположенные интервалы, во-вторых, когда нескольким дискретным значениям селектора соответствует одно и то же действие.
Примечание. В операторе CASE формально нет условий как таковых, однако проверка условий осуществляется в неявном виде на предмет совпадения константы со значением селектора.
1.2.3 Математические решения
Задача 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. В компьютер вводится слово. Компьютер должен просто распечатать его. Однако, если введенным словом будет "летчик", то компьютер должен напечатать вместо него слово "пилот".
Вот как будет выглядеть наша программа-"цензор":
VAR Slovo : String;
BEGIN
ReadLn (Slovo); { переменная Slovo будет иметь значением строку символов, введенных с клавиатуры }
if Slovo = 'летчик' then Slovo := 'пилот';
WriteLn (Slovo)
END.
Задача 3. Пример программы с оператором case:
VAR a,k : Integer;
BEGIN
a:=3;
case a*a+1 of {В СЛУЧАЕ ЕСЛИ a*a+1 РАВНО...}
8,3,20 :k:=0;
7,10 :begin k:=1; WriteLn(k) end;
12 ..18 :k:=3
End {Конец оператора CASE}
END.
Эта программа напечатает 1. Здесь мы видим несколько новых для нас элементов:
Во-первых, после слова case стоит не переменная, а выражение, поэтому с перечисленными перед двоеточиями значениями будет сравниваться число 10, полученное как 3*3+1. Кстати, выражение тоже обязано быть порядкового типа (о том, что такое тип выражения, мы строго поговорим в 14.4, а сейчас скажем только, что это выражение, имеющее значения порядкового типа).
Во-вторых, один из операторов, стоящих после двоеточий, составной. Это begin k:=1; WriteLn(k) end
В-третьих - конструкция 12 ..18 . Она обозначает то же, что и 12,13,14,15,16,17,18. Она служит в нашем случае для сокращения записи и называется диапазоном.
В-четвертых, здесь отсутствует конструкция else. Это значит, что если бы в нашей программе мы вместо a:=3 написали a:=0, то оператор case, не найдя совпадения, не выбрал бы ни один из трех своих вариантов и, не найдя также else, завершил бы свою работу, так ничего и не сделав.
Задача 4. Дано действительное x. Для функции f, график которой представлен на рисунке, вычислить f(x).
Решение задачи.
Математическая модель: функция вычисляется по следующей формуле:
Составим схему алгоритма, детализировав все блоки (рис. 2).
Дальнейшая детализация не требуется. Переводим алгоритм на язык Паскаль.
Program example1;
var x, f:Real;
begin
Write('Введите x: '); Readln(x);
if x<-1 then f:= -x-1 else
if (x>=-1) and (x<0) then f:= x-1 else
if (x>=0) and (x<1) then f:= -x+1 else f:= x+1;
Writeln('F= ',f:6:2);
Readln;
end.
Заключение
логический оператор алгоритмический выбор
Оказывается оператор выбора является удобным средством для обработки ситуаций с несколькими исходами, выбор между которыми производится на основе вычисления выражения. И каждый может содержать одно или несколько значений или интервалов. И рекомендуется всегда включать альтернативу else (с пустым оператором), так как его наличие показывает тщательное продумывание всех возможных вариантов, завершенность анализа выражения-селектора. Оператор выбора используется, например, во всех программах, взаимодействующих с пользователем в форме меню. Оператор выбора является структурированным и использует в своей записи операторы case, of, else, end и операторные скобки по необходимости. В процессе выполнения программы требуется реализовать разный набор команд в зависимости от произошедших до этого событий. В языках программирования это достигается с помощью специальных конструкций - условных операторов. В качестве условного оператора в языках программирования используется конструкция if-else или ее сокращенный вариант if. Также существует оператор выбора case, который имеет более специфичное применение. В качестве условия может стоять любое выражение, результатом вычисления которого является одно из булевых значений -- true или false. после then может стоять только один оператор. Оказывается селектор должен иметь какой-либо порядковый тип, и каждая альтернатива должна быть константой. После каждой метки располагается оператор, одно и то же действие необходимо выполнить для нескольких различных значений селектора варианта. Чтобы выполнить оператор выбора нужно: вычислить выражение-селектор, затем в списках констант ищется такое значение, которое совпадает с полученным значением селектора, далее исполняется оператор, помеченный данной константой. Если такой константы не найдено, то происходит переход к выполнению оператора, следующего после else. Но в операторе выбора также допускается несколько альтернативных вариантов. При этом с каждым вариантом связывается свой (отличный от других) элемент разбиения всех возможных значений условия на непустые (попарно не пересекающиеся) подмножества так называемых меток вариантов. Чтобы узнать, правильно ли выполнилась подпрограмма группы, достаточно непосредственно после ее выполнения проверить значение, предусмотрев в программе действия, которые нужно выполнить в случае обнаружения исключительной ситуации анализ аргументов контролируемой подпрограммы, повторный запрос данных и т.п.
Список литературы
1. Гудман С, Хидетниеми С. Введение в разработку и анализ алгоритмов. М., 1981.
2. Ульман Дж. Базы данных на Паскале. М., 1990.
3. Доналд Алкок. Язык Паскаль в иллюстрациях. М., 1991.
4. Джонстон. Учитесь программировать. М., 1989.
5. Лингер Р., Миллс X., Уитт Б. Теория и практика структурного программирования. М., 1982.
6. Мейер Б., Бодуэн К. Методы программирования. М., 1982.
7. Йенсен К., ВиртН. Паскаль: руководство для пользователя. М., 1989.
8. Фаронов В.В. Турбо Паскаль. Книга 1. Основы Турбо Паскаля. М., 1992.
9. Турбо Паскаль 7.0. - Киев, 1996.
10. Абрамов С. А., Зима Е. В. Начало программирования на языке Паскаль. М.,1987.
11. Поляков Д. Б., Круглое И. Ю. Программирование в среде Турбо Паскаль:М., 1992.
12. Хершель Р. Турбо Паскаль. Вологда, 1991.
13. Перминов О. Н., Программирование на языке Паскаль. М., 1988.
14. Сергиевский М. В., ШалашовА. В., Турбо Паскаль 7.0. М., 1994.
15. Белецкий Я. Турбо Паскаль с графикой для персональных компьютеров. М.,
16. Методические указания по выполнению курсовых работ по дисциплине "Алгоритмические языки и программирование" для студентов специальности 23.03 всех форм обучения./Воронеж. Политехн. ин-т; Сост. В.М. Шишкин, Н.Э. Самойленко. Воронеж. 1990.
17. ГОСТ 19.003-80. Единая система программной документации. Схемы алгоритмов и программ. Обозначения условные и графические. -М.: Государственный комитет СССР по стандартам. 1988, -144 с.
18. Методические указания к лабораторным работам № 5-8 по курсу "Алгоритмические языки и программирование" для студентов специальности 23.03 "Конструирование и технология радиоэлектронных средств" дневной и заочной форм обучения./Воронеж. Политехн. ин-т; Сост.: В.М. Шишкин, Н.Э. Самойленко. Воронеж. 1991.- 44 с.
19. Фаронов В.В. Турбо Паскаль 7.0 М.: Нолидж,2002
20. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0. -М.: Диалог-МИФИ, 1995, -288 с.
Приложение
При составлении логических выражений необходимо использовать скобки, чтобы выражение выполнялось правильно.
На языке нельзя записать:
двустороннее неравенство вида: 1 < X < 2
надо записывать в виде логического выражения (Х > 1) AND (X < 2);
двойное равенство Х = Y = Z записывается в виде выражения: (Х = Y) AND (Y = Z).
Для записи условия того, что Х не лежит в диапазоне от -3 до 2, можно использовать NOT((X > -3) AND (X < 2)) или ((X <= -3) OR (X >= 2)).
Три целых положительных числа рассматриваются как стороны треугольника. Определить тип треугольника (равносторонний, равнобедренный, разносторонний) или вывести сообщение "треугольник построить нельзя".
Для решения задачи необходимо определить:
- какие входные данные используются, и какие выходные данные ожидаются при завершении работы программы;
- найти особые ситуации, которые могут возникнуть при вводе данных и при их обработке;
- составить тестовый пример - подобрать всевозможные входные данные (правильные и как можно больше неправильных).
Входным данным ставятся в соответствие выходные данные. тестовых примеров может быть несколько. тестовый пример используется при проверке и отладке программы на ЭВМ.
Используя тестовый пример, можно построить алгоритм решения задачи. Алгоритмом называется последовательность действий над входными данными, приводящая к желаемым выходным данным.
Оператор задает полное описание некоторого действия, которое необходимо выполнить. Для описания сложного действия может потребоваться группа операторов.
Оператор условия If может принимать одну из форм:
If условие then оператор1 {полная условная конструкция}
Else оператор2;
If условие then оператор; {неполная условная конструкция}
Case выражение-селектор of
Список 1: оператор 1;
Список N: оператор N
Else оператор
End
1)Например, оператор выбора
case X of
'=' : K:=0
|'*', ' + ' : K:=1
|'-' : K:=2
else K:=3
end
равносилен оператору
if X = ' = ' then K := 0
elsif (X = '*') or (X = '+') then K := 1
elsif X = '-' then K := 2
else K:=3
end.
2)Используя оператор выбора, можно построить следующую программу печати названия дня недели по его номеру
module ПечатьДня;
var Номер : integer;
begin
read (Номер);
if (Номер < 1) or (Номер > 7)
then write ('Ошибка в номере!')
else
case Номер of
1: write ('ПОНЕДЕЛЬНИК')
| 2: write ('ВТОРНИК')
| 3: write ('СРЕДА')
| 4: write ('ЧЕТВЕРГ')
| 5: write ('ПЯТНИЦА')
| 6: write ('СУББОТА')
| 7: write ('ВОСКРЕСЕНЬЕ')
end
end ПечатьДня.
Перед ELSE точку с запятой ставить запрещено.
Размещено на Allbest.ru
Подобные документы
Реализация выбора в языках высокого уровня, использование сложных типов. Формат оператора выбора в языке Pascal. Изображение оператора варианта на блок-схеме. Понятие массива и способы их вводов. Описание компонентов приложения и программного кода.
курсовая работа [585,6 K], добавлен 17.08.2013Понятие и принципы реализации оператора ветвления, его значение и роль в языке программирования Паскаль. Основные логические операции и сложные логические выражения, их содержание. Программа упорядочения значений двух переменных, ее этапы и методы.
презентация [187,9 K], добавлен 02.04.2014Изучение циклических операторов: оператора цикла, управляемого счетчиком, оператора цикла с предусловием и постусловием. Минимизированные функции, текст программы. Алгоритм работы приложения по нахождению функции с помощью операторов break и continue.
лабораторная работа [474,2 K], добавлен 23.11.2014Характеристики операторов языка Си. Операторы безусловного и условного перехода: if, if-else, if-else if. Оператор переключатель switch. Оператор цикла с предусловием while, постусловием do-while. Упрощение логических выражений, взаимозаменяемость циклов.
лабораторная работа [30,0 K], добавлен 06.07.2009Представление выражения 2*а+b*с в виде дерева. Общие правила, связанные с определением приоритета операций. Три группы типов операторов. Приоритет аргумента. Множество предопределенных операторов. Одна из теорем де Моргана. Упражнения для повторения.
презентация [17,3 K], добавлен 17.10.2013Понятие логических выражений, их назначение в создании алгоритмов. Список операторов сравнения, используемых в табличном редакторе Excel. Синтаксис функции "если" и примеры ее использования. Логические операторы "и", "или", "не", "истина", "ложь".
презентация [108,9 K], добавлен 07.03.2013Ознакомление с формой записи и работой операторов условного if (если) и безусловного а goto (идти к) переходов как способами организации ветвления в программе. Изучение оператора выбора альтернативы - switch (переключатель). Использование функции default.
лабораторная работа [72,0 K], добавлен 15.07.2010Создание программы для перевода кодов с языка Pascal на язык Си. Обработка программ операторами case, assign, rewrite и write. Способы объявления файла, комментария, переменных, логических и арифметических выражений. Виды синтаксических анализаторов.
курсовая работа [461,0 K], добавлен 03.07.2011Условия и выражения, значением которых является величина логического (Boolean) типа. Вложенность условных операторов. Организация ветвлений в программах на Паскале, логические операции, их выполнение. Последовательности, связанные логическими операциями.
реферат [112,1 K], добавлен 01.04.2010Программирование линейных алгоритмов. Процедуры ввода READ и READLN и вывода WRITE и WRITELN. Примеры решения задач на языке Паскаль. Оператор присваивания и выражения. Основные способы формирования структурных операторов. Операторы вызова процедур.
курсовая работа [44,3 K], добавлен 18.03.2013