2016-04-28 3 views
1

Как бы я мог иметь несколько условных выражений в инструкции if?Как иметь несколько условных выражений в инструкции if в Ada

Например. Пользователю предлагается набор вопросов по программе:

1.) Введите высоту между 0 и 1000

(типы пользователей в данных)

2.) Введите Скорость от 0 до 500

(типы пользовательских данных в)

3.) Ввод температуры между 0 и 200

(типы пользовательских данных в)

Затем программа печатает назад

  1. значение высоты = пользователь
  2. значение скорости = пользователь
  3. температура = пользовательское значение // игнорирующие эти цифры список

Я установил в моей (.ads), что каждый из этих диапазонов имеет значение критики.

Я хочу создать оператор if, который имеет несколько условных выражений. в псевдо: Если скорость = критическая скорость & температура = критическая температура & высота = критическая высота затем печати («некоторые сообщения») еще ничего не делать

ответ

5

syntax of an if-statement является

if_statement ::= 
    if condition then 
     sequence_of_statements 
    {elsif condition then 
     sequence_of_statements} 
    [else 
     sequence_of_statements] 
    end if; 

и syntax of “condition” является

condition ::= boolean_expression 

(то есть выражение, которое является логическим); syntax of “expression” является

expression ::= 
    relation {and relation} | relation {and then relation} 
    | relation {or relation} | relation {or else relation} 
    | relation {xor relation} 

так что ваш код будет выглядеть

if velocity = critical_velocity 
    and temperature = critical_temperature 
    and altitude = critical_altitude 
then 
    print ("some message”); 
else 
    null; 
end if; 

Вы можете оставить оговорку else, и вы можете сказать and then вместо обычного and, если по какой-то причине вы не должны проверить остальное условие, если первая часть уже равна False. Это называется оценкой короткого замыкания, и это не по умолчанию в Ada (он находится на C).

if X /= 0 and Y/X > 2 then 

оценивает Y/X, даже если X является 0.

+0

Спасибо, Саймон! Очень итеративная разбивка, очень полезно :) – DaveSwans

+0

вот ссылка на другой вопрос, который я не мог просить в комментариях, потому что это слишком долго для комментария. Если бы вы могли пролить свет, это было бы очень признательно. http://stackoverflow.com/questions/36957726/shortened-method-to-reduce-statements-in-an-ada-procedure – DaveSwans

4

В Ada вы будете использовать и, или и не булева оператора:

if Velocity = Critical_Velocity 
    and Temperature = Critical_Temperature 
    and Altitude = Critical_Altitude 
then 
    Ada.Text_IO.Put_Line ("Crash"); 
else 
    ... 
end if; 

Когда вопросы порядка оценки, вы будете использовать и затем или или иначе синтаксис (иначе компилятор может изменить порядок оптимизации). Выражения будут оцениваться в порядке «, а затем«/»или« еще ».

if Velocity = Critical_Velocity 
    and then Temperature = Critical_Temperature 
    and then Altitude = Critical_Altitude 
then 
    Ada.Text_IO.Put_Line ("Crash"); 
else 
    ... 
end if; 

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

if Velocity = Critical_Velocity 
    or else Temperature = Critical_Temperature 
    or else Altitude = Critical_Altitude 
then 
    Ada.Text_IO.Put_Line ("Crash"); 
else 
    ... 
end if; 

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

if (Velocity = Critical_Velocity and Temperature = Critical_Temperature) 
    or else Altitude = Critical_Altitude 
then 
    Ada.Text_IO.Put_Line ("Crash"); 
else 
    ... 
end if; 
+0

Существует также xor. – darkestkhan

Смежные вопросы