Как обозначается if в блок схеме
Перейти к содержимому

Как обозначается if в блок схеме

  • автор:

Как обозначается if в блок схеме

Блок-схема алгоритмической структуры ветвления может быть представлена в двух формах: полной и неполной (рис. 1.19).

Рис. 1.19. Разветвляющаяся структура, записанная на языке блок-схем

Следует иметь в виду, что Действие 1 и Действие 2 — это условные обозначения. Они могут обозначать как одну команду, так и серию команд.

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

ЗАДАЧА 1.3. Пользователь вводит два числа, нужно найти максимальное значение. Блок-схема алгоритма представлена на ‎рис. 1.20.

Рис. 1.20. Блок-схема алгоритма с использованием полной формы структуры ветвления

После ввода значений a и b исполнитель вынужден сравнить значения а и b между собой. Если значение a>b, то будет выполнено присваивание. Переменной max присвоить значение a. В противном случае (ab) значение переменной max будет определено равным b.

Эта же задача может быть решена с помощью неполного ветвления, например так ‎(рис. 1.21):

Рис. 1.21. Блок-схема алгоритма с использованием неполной формы структуры ветвления

После ввода значений a и b переменной max будет присвоено значение a. На следующем шаге алгоритма исполнитель сравнит значения b и max между собой. Если значение b>max, то переменной max будет присвоено значение b. В противном случае исполнитель перейдет к следующему после ветвления действию алгоритма. В результате работы алгоритма будет выведено значение переменной max.

Как обозначается if в блок схеме

Показательная функция (экспонента)

Некоторые из перечисленных встроенных функций могут быть использованы с целыми числами или переменными целого типа (аргумент имеет тип integer).
К таким функциям относятся:
Квадратичная: x2 — sqr(x). Абсолютная величина: |x| — abs(x).
На Паскале нет функций вычисления arcsinx, arccosx, arcctgx. Как с помощью уже известных встроенных функций вычислить значения функций arcsinx, arccosx, arcctgx?
Для этого надо совершить небольшую экскурсию в математику и выразить значение функций arcsinx, arccosx, arcctgx через функцию arctgx.

Arcsinx

Пусть где |x| , тогда отсюда получаем,
окончательно имеем:

Функция

Математическая обозначение

Ее объявление на Паскале

Аналогичными рассуждениями можно получить выражения для arccosx и arcctgx.

Функция

Математическое обозначение

Ее объявление на Паскале

Пример 2. Составить программу решения квадратного уравнения
ax2 + bx + c = 0.
Наметим план составления программы или, иначе говоря, алгоритм.

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

Алгоритм
1. Начало.
Описание переменных и их типов.
2. Ввод значений коэффициентов.
3. Вычисление значения дискриминанта (d).
Если d < 0, тогда уравнение не имеет корней,
иначе,
если d = 0,
тогда уравнение имеет один корень,
вычислить значение этого корня и выдать его на экран,
иначе, уравнение имеет два корня,
вычислить их и выдать на экран.
4. Конец.

Составим программу, пользуясь алгоритмом.

Program Problem3; < Программа решения квадратного уравнения >
uses WinCrt;
var
a, b, c, d, x1, x2 : real;
begin
write(«Введите коэффициенты уравнения «); readln(a, b, c);
d := b*b — 4*a*c;
if d < 0 then writeln(«Уравнение не имеет корней»)
else
if d=0
then writeln(«Уравнение имеет один корень «,-b/(2*a))
else
begin
x1 := (-b — sqrt(d))/(2*a);
x2 := (-b + sqrt(d))/(2*a);
write(«Уравнение имеет два различных корня «);
writeln(«x1 = «, x1, » x2 center»>ИМЯ ПРОГРАММЫ И КОММЕНТАРИЙ

Имя программы «Problem3;», после этого в комментарии записано содержание программы: «;».

РАЗДЕЛ ОПИСАНИЙ

В разделе описаний указаны имена переменных и их типы. Понятно, что переменные a, b, c нужны для значений коэффициентов уравнения, переменная d для значений дискриминанта, а x1 и x2 для корней уравнения. Понятно, что все они принимают вещественные значения, ограничиться целыми невозможно, и имеют тип: real.

РАЗДЕЛ ОПЕРАТОРОВ

Раздел операторов начинается вводом информации. С помощью оператора:
write(«Введите коэффициенты уравнения «); readln(a, b, c);
на экран выводится информация, записанная в этом операторе write:
Введите коэффициенты уравнения
В ответ на этот запрос, пользователю надо ввести коэффициенты уравнения, разделяя их пробелами (проще говоря, ввести через пробелы).
Обратите внимание на такую мелочь, в операторе writeln, перед вторым, «заканчивающим» запись апострофом, оставлен пробел. Для чего? Только из эстетических соображений. Следующий оператор readln(a, b, c); будет вводить информацию, которую вы наберете с клавиатуры. Если этого пробела не будет, то вводимое число будет писаться вплотную к слову «уравнения», что, конечно, некрасиво.
Далее вычисляется значение дискриминанта и присваивается переменной d.
Первым условным оператором if проверяется условие d < 0, если оно выполняется, тогда на экран выдается сообщение, записанное после then в операторе writeln: «Уравнение не имеет корней», иначе после else, новое условие if d = 0, тогда выполняются операторы после then, т.е. выдается сообщение, что уравнение имеет один корень, вычисляется его значение и выдается на экран, так как всё это записано в скобках оператора writeln, иначе, остается одно, — когда дискриминант больше нуля, тогда надо выполнить несколько операторов, которые записаны после else. Но поскольку их несколько, то необходимо открыть операторные скобки begin, в которых и записать вычисление значений корней и вывод их на экран. После чего необходимо закрыть операторные скобки служебным словом end.
После этого программа заканчивается служебным словом end с обязательной точкой в конце.
Каждая операторная скобка, начинаемая словом begin должна обязательно «закрываться» словом end. Если это слово оказывается перед оператором else или является предпоследним, то точка с запятой после end не ставится. Во всех других случаях end заканчивается точкой с запятой, а заканчивающий программу — точкой.

6. Форматированный вывод информации

Если вы выполните программу, то столкнетесь с неприятным явлением — результат, т.е. числовые значения корней, будут выдаваться на экран в экспоненциальной форме.
Так, после ввода значений коэффициентов: 2 3 -10, на экран будет выдан результат:
Уравнение имеет два различных корня

x1 = -3.1084952830E+00 x2 = 1.6084952830E+00

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

Здесь r — имя переменной, значение которой выводится (в данном случае — x1 или x2), формат f1 указывает, сколько позиций нужно для всего числа, включая знак числа, целую часть, точку и дробную часть числа; f2 — число позиций дробной части числа (после точки).
Если формат указан, то значение переменной r выводится в виде константы с фиксированной запятой, например: 12.35, .123. Если параметры f1 и f2 опущены, то вещественная переменная выводится в виде константы с плавающей запятой, например: 2.534E03, 5.67E-12 и т.п. В этом случае значения f1 и f2 устанавливается по умолчанию.
Надо вообще заметить, что вещественное число в формате с фиксированной точкой печатается так:
несколько пробелов; знак минус (-) или пробел; последовательность цифр (целая часть); точка; последовательность цифр (дробная часть).

Рассмотрим несколько примеров форматированного вывода результатов для вещественных переменных.

Пример 3. Пусть переменная r получает значение частного от деления вещественных переменных a на b.

Составим небольшую программу и выполним ее несколько раз, устанавливая различные значения для форматированного вывода результата.

Program Problem;
uses WinCrt;
var
a, b, r : real;
begin
write(«Введите значение переменной a «); readln(a);
write(«Введите значение переменной b «); readln(b);
r := a/b;
writeln(«Результат равен «, r)
end.

При первом выполнении программы не устанавливайте параметров для форматированного вывода. Вы получите результат в форме с плавающей запятой. При следующем выполнении для a введите значение 1, для b 3, а для вывода результата установите следующий формат: r:6:2; затем, r:1:5; r:0:4 и т.п.

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

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

1. Наберите программу в первоначальном ее варианте и выполните, а затем измените ее, применив форматированный вывод результата, и выполните еще раз. Сравните результаты.

2. Составьте программу решения линейного уравнения ax = b и выполните ее.

Пример 4. Два прямоугольника заданы длинами сторон. Написать программу, после выполнения которой выясняется, можно ли первый прямоугольник целиком разместить во втором. (Рассмотреть только случай, когда соответствующие стороны прямоугольников параллельны.)

Program Problem4;
uses WinCrt;
var
a1, b1, a2, b2 : real;
begin
write(«Введите длину и ширину первого прямоугольника «); readln(a1, b1);
write(«Введите длину и ширину второго прямоугольника «); readln(a2, b2);
if ((a1 < a2) and (b1 < b2)) or ((b1 < a2) and (a1 < b2))
then writeln(«Первый прямоугольник размещается во втором»)
else writeln(«Первый прямоугольник не размещается во втором»)
end.

Задание 3

1. Введите эту программу и выполните.

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

7. Некоторые встроенные функции и процедуры, применимые к целым типам. Логический тип boolen

Наименование Тип результата Действие
abs(x) Целый Возвращает модуль числа x
dec(x [, i]) Процедура Уменьшает значение x на i, при отсутствии i — на 1
inc(x [, i]) Процедура Увеличивает значение x на i, при отсутствии i — на 1
odd(x) Логический
(Boolean) Возвращает true, если аргумент — нечетное число, false — если четное
random(x) Как у параметра x Возвращает псевдослучайное число, равномерно распределенное на интервале 0 sqr(x) Целый Выдает квадрат аргумента x

Логический тип (boolean). Значение логического типа может быть одна из предварительно объявленных констант false (ложь) или true (истина)

К целому и логическому типам применимы следующие функции.
Функция ord(x) выдает порядковый номер значения выражения x, т. е. ord(x)=x для x, принадлежащих любому целому типу.

Применение это функции к логическому типу дает следующие результаты:
ord(false) = 0;
ord(true) = 1;
false < true
К целому и логическому типам можно применять функции:
pred(x) — выдает предыдущее значение порядкового типа (в т. ч. целого или логического типов, pred(x) = ord(x) — 1, ord(pred(x)) = ord(x) — 1 для целого типа x, pred(true)=false — для логического типа);
succ(x) — выдает следующее значение порядкового типа, которое соответствует порядковому номеру ord(x) + 1, т. е. ord(succ(x)) = ord(x) + 1 — для целого типа и succ(false) = =true — для логического типа.

Чтобы четко понимать действие этих функций, рассмотрим их работу на примерах.

Пример 5. Использование логического типа. Составить программу, которая подтверждает правильность ввода чисел, если первое число меньше — истина, наоборот — ложь.

Program Problem5;
uses WinCrt;
var
a : boolean;
b, c : integer;
begin
writeln(«b < c");
write(«Введите b Введите c < ", c, " "); writeln(a)
end.

Пример 6. Использование функции определения четности. Программа должна определять четность и нечетность чисел. Если число четное — выдается на экран «четное», в случае нечетного числа — выдается «нечетное».

Программа

Program Func_odd;
uses WinCrt;
var
i : integer;
l : boolean;
begin
write(«Введите целое число «); readln(i);
l := odd(i);
if l then writeln(i, » — число нечетное»)
else writeln(i, » — число четное»)
end.

Пример 7. Составить программу, выводящую на экран слово «Да», если точка с координатами (x, y) принадлежит заштрихованной области, и «Нет» — в противном случае.

Рис. 11. Заданная область

Заштрихованная область представляет собой часть круга радиуса R, расположенной в первой четверти. Точки (x, y), лежащие внутри круга с центром в начале координат и радиусом R, удовлетворяют неравенству . Кроме того, точки, лежащие в первой четверти координатной плоскости, должны удовлетворять условиям: . Учитывая то, что точки, лежащие внутри заштрихованной области, должны одновременно удовлетворять всем трем условиям, соответствующее логическое выражение может быть записано так: (x*x + y*y = 0) and (y >= 0).

Program Problem7;
uses WinCrt;
var
x, y, R : real;
begin
write(«Введите координаты точки «); readln(x, y);
write(«Введите радиус окружности «); readln(R);
if (x*x + y*y = 0) and (y >= 0)
then writeln(«Да»)
else writeln(«Нет»)
end.

Пример 8. Составьте программы определения большего из трех действительных чисел a, b и c.

Рис. 13
Задание 4

1. Используя блок-схему составить и выполнить программу. Изменить программу так, чтобы в случае равных чисел, она выдавала «Числа равны».
2. Даны три числа a, b, c. Написать программу, в результате которой числа удвоятся, если и числа будут заменены на их абсолютные величины в прочих случаях.

8. Вычисление значений функции

Пример 9. Вычислить значение функции по формуле: .

Program Problem9;
uses WinCrt;
var
a, b, c, y : real;
begin
write(«Введите значения a, b, c «); readln(a, b, c);
y := a*b + c*sin(a*b);
writeln(«Значение функции равно y Введите значение аргумента x Значение функции равно y Введите значение аргумента x Значение функции равно y Введите значение аргумента x Значение функции равно y random_articles»>

Родился в семье художника в Петербурге (по другим сведениям, в Полтаве). В 1913 г. после окончания гимназии поступил в Петербургский университет на юридический факультет. Не закончив курса, он отправился на фронт начавшейся первой мировой войны добровольцем; участвовал в боях, отличаясь храбростью и отвагой, за что удостоен пяти орденов; командовал батальоном; был трижды ранен, отравлен .

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

Единицы измерения времени Современные единицы измерения времени основаны на периодах обращения Земли вокруг своей оси и вокруг Солнца, а также обращения Луны вокруг Земли. Такой выбор единиц обусловлен как историческими, так и практическими соображениями: необходимостью согласовывать деятельность людей со сменой дня и ночи или сезонов; смена фаз Луны влияет на высоту .

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

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

Теперь, когда с условными выражениями разобрались, можно переходить к основной теме урока – условному оператору .

Шаблон оператора if — else

Тут возможны два основных варианта:

// первый вариант if (условное_выражение) оператор_1; // второй вариант if (условное_выражение) оператор_1; else оператор_2;

Ну и картинки, конечно. Куда же без картинок?

Блок-схемы оператора if-else

Рис.1 Блок-схемы оператора if-else.

Работает этот оператор так. Вычисляется значение условного выражения. Если получается истина, то выполняется оператор_1 из основной ветки, а если ложь, то либо ничего не происходит (в первом варианте), либо выполняется оператор_2 из побочной ветки (во втором варианте).

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

#include int main(void)

Ну да, правильно, он выведет TRUE! . Условие же истинно. Вы же ещё не забыли, что единица – это истина? Я сейчас страшное скажу. Любое ненулевое число воспринимается как истина. Проверьте это самостоятельно.

Ну ладно, а теперь вот такой пример. Что по-вашему выведет данная программа?

#include int main(void)

Надеюсь, вы дали правильный ответ и вас не смутила строчка с выводом FALSE! , которое я специально добавил, чтобы запутать вас. Да, эта программа ничего не выведет. Условие в скобах ложно, а значит, оператор не будет выполнен. Всё по правилам.

Давайте ещё один примерчик, для закрепления. Будьте предельно внимательны, я там подготовил для вас всякого. Итак, что выведет данный код?

#include int main(void)

Верю, что у вас всё получилось! Если не получилось, не расстраивайтесь – ещё будет время потренироваться.

Ну а сейчас давайте о нюансах – они, как обычно, имеются.

В каждой ветке условного оператора может быть записан лишь ОДИН оператор.

Вот, посмотрите на пример.

#include int main(void)

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

А теперь внимание на экран.

Результат работы программы Листинг 11

Рис.2 Результат работы программы Листинг 11

Но решение есть! И это решение – составной оператор <> . Если мы заключим несколько операторов в фигурные скобки, то они будут восприниматься как один единый оператор. Поэтому, чтобы программа заработала правильно, добавим в неё составной оператор:

#include int main(void) < int x = 0; scanf("%d", &x); if ( x < 0 )< printf("x = %d\n", x); x = (-1)*x; >printf("%d\n", x); return 0; >

Ну вот, теперь всё как надо. Проверьте самостоятельно. Кстати, из опыта. Я вам настоятельно советую всегда использовать фигурные скобки, даже если внутри них будет один оператор. Очень часто это позволяет избежать глупых ошибок.

Внутри управляющей конструкций if-else можно использовать любые конструкции языка, в том числе ещё одну конструкцию if-else .

Вот так например:

#include int main(void) < int x = 0; scanf("%d", &x); if ( x < 0 ) < printf("Negative!\n"); >else < if ( x == 0 )< printf("Zero!\n"); >else < printf("Positive!\n"); >> return 0; >

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

Использование вложенных условных операторов порождает ещё одну особенность.

else всегда относится к ближайшему if , у которого нет своего else

if ( n > 0 ) if ( а > b ) z = a; else z = b;

Согласно нашему правилу, else относится к внутреннему (второму) if . Если хотим, чтобы else относился к внешнему (первому) if , то можно воспользоваться составным оператором.

if ( n > 0 ) < if (а >b) z = a; > else z = b;

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

Сохрани в закладки или поддержи проект.

Практика

Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим

Исследовательские задачи для хакеров:

  1. В языке Си существует ещё одна конструкция, работающая с условными выражениями. Это тернарная условная операция ?: . Самостоятельно найдите в интернете описание этой конструкции и изучите, как она работает.

Дополнительные материалы

  1. Задачи на условный оператор от Яндекса

Конструкция if-else (если -иначе)

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

If (условия выбора)

// Если условие выбора истинно, то будут выполняться

// оператор или операторы блока 1.

// В противном случае (иначе)

// если условие выбора ложно, то будут выполнять­ся

// оператор или операторы блока 2.

// Записанные далее операторы будут выполняться

// в любом случае, независимо от условия выбора.

Если результатом проверки условия выбора является значе­ние true (истина), то будут выполнены операторы блока 1. Далее будет выполняться первый оператор, следующий за послед­ней фигурной скобкой. Операторы блока 2 выполняться не бу­дут. Если проверка условия выбора даст результат false (ложь), то операторы блока 1 будут пропущены, и будут выпол­нены операторы блока 2. Далее будет выполняться первый

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

Пример 4.

If (a > b)

// Эти операторы будут выполняться, min = b;

// если условие выбора a>b истинно.

// Эти операторы будут выполняться, min = a;

// если условие выбора a > b ложно.

// Записанные далее операторы будут выполняться

// в любом случае, независимо от условия выбора.

Если a > b, то переменной max будет присвоено значении a, переменной min значение b, в противном случае наоборот переменной max присваивается значение b, а переменной min — значение a. Рассмотренную конструкцию допускается записывать в одной строке, как в следующем примере 5.

Пример 5.

Если в фигурных скобках записано по одному оператору, то скобки можно опустить, как в примере 6.

Пример 6.

if (a > b) max = a;

Вложенные конструкции оператора if

В том случае, когда определённый блок операторов (или один оператор) нужно выполнить после проверки ни одного, а неско­льких условий, то используют несколько конструкций оператора if. Операторы if, находящиеся внутри другого оператора if, называются вложенными конструкциями оператора if.

If (Условие 1 выбора)

// Если условие 1 выбора истинно будут выполняться,

// записанные в скобках операторы блока 1.

// В противном случаи будет выполняться

// вложенная конструкция оператора

// Начало вложенной конструкции оператора

If (условие 2 выбора)

// Если условие 2 выбора истинно будут выполняться,

// записанные здесь в скобках операторы блока 2.

// В противном случае, если условие 2 выбора ложно

// будут выполняться, записанные здесь в скобках

// операторы блока 3.

// Конец вложенной конструкции оператора if

Если условие 1 выбора истинно, то выполняются опера­торы блока 1, и далее первый оператор, который следует за пос­ледней фигурной скобкой, концом вложенной конструкции опера­тора В противном случае выполняется вложенная конструкция оператора if. Если условие 2 выбора вложенного оператора if истинно, то выполняются записанные в фигурных скобках опера­торы блока 2, и далее первый оператор, который следует за пос­ледней фигурной скобкой, концом вложенной конструкции опе­ратора if. В противном случае, если условие 2 выбора ложно выполняются операторы блока 3. Рассмотрим пример записи вложенной конструкции оператора if.

// Начало вложенной конструкции if.

// Конец вложенной конструкции if.

Допускаются и другие виды записи вложенной конструкции оператора if, например запись в одной строке.

Поскольку фигурные, операторные скобки являются обязате­льными только в случае записи в них нескольких операторов, поэ­тому в данном случае они могут быть отпущены.

Пример 9.

Операторы логического сравнения

Эти операторы называются логическими сравнениями (logical comparisons), поскольку они возвращают результат сравнения в виде значения true (истина) или false (ложь) имеющие тип bool. Для записи и проверки условия равенства двух выражений, в алгоритмическом язык C# используется символ ==. Аналогично: символ > используется для проверки условия «больше»; символ для проверки условия «меньше»; >= — «больше или равно»; «меньше или равно»; != «не равно». Например: a!=b, означает, что оператор логического сравнения != возвращает значение true, если a не равно b.

Для переменных типа bool используются специальные сос­тавные логические операторы:

| — дизъюнкция (логическое или, or), используется, чтобы убеди­ться в том, что хотя бы одно из выражений true, истинно;

! — отрицание (логическое не, not), возвращает обратное логичес­кое выражение;

^ — исключение (логическое исключающее или), используется для того, чтобы убедиться в том, что одно из двух выражений true, истинно.

Операторы &, | и а обычно используются с целыми типами данных, а также могут применяться к типу данных bool.

Кроме того могут применяться операторы && и ||, которые отличаются от своих односимвольных версий тем, что выполняют ускоренные вычисления. Например в выражении a && b, b вычисляется лишь в том случае, если а равно true, истинно. В выражении a\\b, b вычисляется в том случае, если a равно false, ложно.

В условии оператора if записано обычное алгебраическое не­равенство -1 x < 1.

В условии оператора if записаны алгебраические неравенства x < -1либо x > 1.

Оператор проверки выбирает одно из двух выражений в зави­симости от проверки значения логического условия. Его синтаксис:

Имя переменной = (условие выбора)?Значение1:значение2

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

Оператор безусловного перехода goto (перейти к) осущест­вляет переход, без проверки каких-либо условий, к оператору, обо­значенному соответствующей меткой. Синтаксис этого оператора выглядит следующим образом: метка: оператор

goto метка

где метка метка. Это любой допустимый идентификатор C#, который помещается слева от оператора, которому надо передать управление выполнением программы и отделяется от него двоето­чием. Причём метка может ставиться у оператора расположен­ного как до оператора goto, так и после него. В случае если опе­ратор goto используется самостоятельно, без каких либо конст­рукций, то первый оператор, следующий за оператором goto, дол­жен иметь свою метку, иначе он не будет выполнен в процессе работы программы. Обычно оператор goto используется совместно с оператором условного перехода if, и используется в программах редко, т. к. есть более эффективные операторы.

Конструкция switch (переключатель)

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

switch (выражение)

case константа 1:

последовательность операторов блока 1

break;

case константа 2:

последовательность операторов блока 2

break;

последовательность операторов блока n

break;

Этот оператор работает следующим образом. Значение выра­жения последовательно сравнивается с константами. Как только будет обнаружено совпадение, выполняется оператор или после­довательность операторов, связанных с этим совпадением, до оператора break. Оператор break передаёт управление оператору, следующему за конструкцией switch. Если совпадений нет, то вы­полняется последовательность операторов, следующая после опера­тора default. Эта ветвь не является обязательной.

При использовании конструкции switch действуют следую­щие правила:

выражение в конструкции switch должно быть целочисленного типа (char, byte, short или int) перечислимого типа или же типа строкового;

нельзя использовать числа с плавающей точкой;

константы оператора case должны иметь тот же тип, что и выражение в конструкции switch;

в одном операторе switch не допускается наличие двух одинаковых по значению констант;

допускается использовать одну и ту же последовательность операторов, в этом случае оператор break не записывается.

Пример 13.

ml: Console.WriteLine(«Возьмите целое число»);

int a = int.Parse(( Console.ReadLine()));

Console.WriteLine(«a = » + a +» n = » + n);

if (a != 0) goto m1;

В данном примере в программу вводится и присваивается пе­ременной а, любое целое число. С помощью конструкции switch происходит анализ. Если переменная а имеет значение равное 1, переменной n присваивается значение 10 и далее следует вывод этих переменных. Если а имеет значение равное 2 или 3, то пере­менной n присваивается значение 20 и далее вывод этих пере­менных. Во всех остальных случаях переменной n присваивается значение 0. Программа продолжает работать до тех пор, пока пере­меной а, не будет задано значение 0.

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

В операторе switch отсутствует возможность задания диапа­зона выбора, что является его недостатком. Например, в языке программирования Visual Basic в аналогичном операторе задание диапазона выбора допускается.

Графическое изображение блока

Операторы и функции эквивалентные блоку

Операторы ввода, функция InputВох и другие

Операторы вывода, функция MsgBox и другие

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

Разветвляющиеся программы это — такие программы, в кото­рых на определённых этапах происходит анализ значений тех или иных параметров и в зависимости от этого выбирается один из воз­можных вариантов дальнейшего хода программы. Практически все более или менее сложные программы являются разветвляющимися. Для их написания используются рассмотренные конструкции уп­равляющих операторов принятия решения.

При написании разветвляющих программ предварительно сос­тавляется блок-схема алгоритма решения задачи. Блок-схема это — графическое изображение алгоритма или последовательности ре­шения задачи программирования.

Для составления блок-схем используются стандартизованные графические изображения (блоки) определённых операторов алго­ритмического языка. Некоторые из них представлены в таблице 3.1.

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

Составить блок-схему и написать программу для определения наибольшей из трёх заданных величин X , Y и Z. Полученное значение присвоить переменной F, т. е. вычисляет F = max(X, Y, Z). Замечание: Данный пример является тренировочным, на прак­тике подобные задачи решаются с помощью соответствующих встроенных функций.

Пояснения к блок-схеме. После ввода численных значений для переменных X ,У и Z производиться их последовательное срав­нение друг с другом на предмет выявления наибольшего из них. Первоначально сравниваются значения переменных X и У. Если ус­ловие X > У выполняется (истинно), то далее переменная с наибо­льшим значением, а именно X сравнивается с Z. Если поставлен­ное в блоке сравнения условие X > Z верно, то переменной F будет присвоено значение переменной X в противном случае — значение переменной Z. Аналогично поступаем в случае если условие X > У, не выполняется (ложно).

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

float f;

m1: Console.WriteLine(» Введите значение X»);

float x = float.Parse((Console.ReadLine()));

Console.WriteLine(» Введите значение Y»);

float y = float.Parse((Console.ReadLine()));

Console.WriteLine(» Введите значение Z»);

float z = float.Parse((Console.ReadLine())); if (x > y)

Console.WriteLine(‘\n’ + » Дано: X= » + x + » y= » + y + » z= » +

z + ‘\n’+ » Результат: F= » + f);

Console.WriteLine(‘\n’ + «Для повторного ввода» + «набрать

любую клавишу.» + ‘\n’+ «Для завершения программы

string p = Console.ReadLine();

Рассмотренный алгоритм решения задачи примера 14 не явля­ется единственным. Ниже представлена блок-схема другого вари­анта алгоритма и основной фрагмент программы, с использовани­ем оператора проверки

Блок-схема Основной фрагмент программы

Задание. Составить блок-схему и написать программу, которая определяет номер N области, в которой находиться точка М(х, у) с заданными координатами (см. рисунок 3.1). Границы области относить к области с наибольшим номером.

Пояснения к блок-схеме. В первом блоке производиться ввод численных значений для переменных X и Y, которые являются координатами точки М. Далее целесообразно сравнить переменную Y (координата по оси Y) с нулём. В блок-схеме это первый блок срав-нения, если его условие Y > 0 не выполняется (ложно), то координата по оси Y точки М отрицательна или равна нулю, а это значит, что она расположена ниже оси X или на ней, т. е. в области с номером N = 4. Если условие Y > 0 первого блока сравнения выполняется (истинно), то точка М расположена выше оси X, а это значит, что она может находиться в одной из областей с номером N = 1, N = 2 или N = 3. Далее для определения номера области X 2 + Y 2 < 16,которое следует из уравнения окружности X 2 + Y 2 = R 2 , где радиус окружности. Если заданное условие выполняется, то точка расположена внутри окружности , а так как Y > 0, то внутри полу­окружности. Согласно условию задачи внутри полуокружности точка может находиться либо в области с номером N = 1, либо в области с N = 2. Если условие X > 0 третьего блока сравнения выполняется (истинно), то точка расположена в области с N = 2, в противном случае с N = 1. После чего идёт печать результата.

Если условие X 2 + Y 2 < 16второго блока сравнения не выполня­ется (ложно), то точка М находиться вне полуокружности и над осью X так как Y > 0 т. е. в области N = 3. Далее представлена программа, составленная по рассмотренной блок-схеме.

m2: Console.WriteLine(» Введите для точки М»+

» координату по X «);

float x = float.Parse((Console.ReadLine()));

Console.WriteLine(«Введите для точки М» + «координату

float y = float.Parse((Console.ReadLine()));

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *