2016-04-28 6 views
1

Wie würde ich mehrere Bedingungen in einer if-Anweisung gehen?Wie mehrere Bedingungen in einer if-Anweisung in Ada haben

Eg. Der Benutzer wird eine Reihe von Fragen durch das Programm gestellt:

1.) Geben Sie eine Höhe zwischen 0 und 1000

(Benutzertypen in Daten)

2.) Geben Sie Geschwindigkeit zwischen 0 und 500

(Benutzertypen in Daten)

3.) Geben Sie Temperatur zwischen 0 und 200

(Benutzertypen in Daten)

das Programm druckt dann diese Liste Zahlen

ich gesetzt haben

  1. Höhe = user Wert
  2. Geschwindigkeit = user Wert
  3. Temperatur = user Wert // ignorieren zurück in meinem (.ads) Datei, dass jeder dieser Bereiche einen kritischen Wert hat.

    Ich möchte eine if-Anweisung erstellen, die mehrere Bedingungen hat. in pseudo: Wenn Geschwindigkeit = kritische Geschwindigkeit & Temperatur = kritische Temperatur & Höhe = kritische Höhe dann print ("some message") sonst nichts tun

Antwort

5

Die syntax of an if-statement ist

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

und die syntax of “condition” ist

condition ::= boolean_expression 

(das ist ein Ausdruck, der zufällig boolean ist); die syntax of “expression” ist

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

so Ihr Code wie

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

Sie auslassen die else Klausel aussehen würde, und Sie and then anstelle von einfachen and wenn aus irgendeinem Grund sagen kann, sollten Sie nicht das überprüfen Rest der Bedingung, wenn der erste Teil bereits False ist. Dies wird als Kurzschlussauswertung bezeichnet, und es ist nicht der Standard in Ada (es ist in C).

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

wertet Y/X selbst wenn X 0 ist.

+0

Danke Simon! Eine sehr iterative Aufteilung, sehr hilfreich :) – DaveSwans

+0

Hier ist ein Link zu einer anderen Frage, die ich in den Kommentaren nicht stellen konnte, weil es für einen Kommentar zu lang war. Wenn Sie bitte etwas Licht werfen könnten, wäre es sehr geschätzt. http://stackoverflow.com/questions/36957726/shortened-method-to-reduce-statements-in-a-ada-procedure – DaveSwans

4

In Ada finden Sie die und, oder und nicht boolean Operator:

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

Bei Fragen Auswerteauftrag, werden Sie die und dann oder die oder sonst verwenden Syntax (andernfalls kann der Compiler die Reihenfolge für die Optimierung ändern). Ausdrücke werden in der Reihenfolge 'und dann'/'oder sonst' ausgewertet.

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

Mit einem oder sonst kann schreiben Sie wie folgt vor:

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

Beachten Sie, dass Sie nicht und und oder zusammen mischen (weil dies für Entwickler zu viele Verwirrung führt) . Sie müssen Klammern um sie herum verwenden, wenn Sie es tun.

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

Es gibt auch xor. – darkestkhan