2017-02-03 2 views
-2

posted ich neulich hier, weil ich hinter der Syntax von Fortran war verwirrt und bekam eine Antwort, die sehr geholfen. Aber jetzt stecke ich in der gleichen Gurke, aber dieses Mal mit Ada.Konvertieren in Morse-Code in Ada

Im Folgenden ist der Kern meines Programms. Ich versuche, einen Satz vom Benutzer zu lesen und jedes Zeichen darin in Morse-Code umzuwandeln.

with Ada.Text_IO; 
with Ada.Strings; 
with Ada.Strings.Unbounded; 
with Ada.Strings.Unbounded; 
with Ada.Command_Line; 
use Ada.Text_IO; 

procedure MorseCode is 
    tempSentence : array(1 .. 20) of string; 
    last : Integer; 
    size : Integer; 
    i : Integer; 
begin 

Put("Enter the size of your sentence: "); 
Get(size); 
Put("Enter the sentence you would like to convert to morse code: "); 
Get_Line(tempSentence, last); 
Put_Line(tempSentence); 

While_Loop : 
while i < size loop 

if tempSentence(i .. i) = 'A' or tempSentence(i) = 'a' then 
    Put(".- "); 
elsif tempSentence(i .. i) = 'B' or tempSentence(i) = 'b' then 
    Put("-... "); 
elsif tempSentence(i) = 'C' or tempSentence(i) = 'c' then 
    Put("-.-. "); 
end if; 
end loop While_Loop; 

end; 
+0

... Und das Problem ist? – John3136

+2

Sie haben eine -1 zu Ihrer Fortran-Frage erhalten, weil es keine Beweise für Forschung auf Ihrer Seite gab. Nur weil ein netter Benutzer alles für dich repariert hat, bedeutet das nicht, dass dies ein akzeptables Verhalten ist. Und jetzt machst du das nochmal. Schauen Sie sich die Fehlermeldungen Ihres Compilers an, versuchen Sie diese zu beheben (wenn Sie keinen Sinn daraus ziehen können, benutzen Sie das Internet) und * dann *, wenn Sie bei einem bestimmten Fehler stecken bleiben, können Sie danach auf SO fragen . – flyx

Antwort

0

ich sollte wohl nicht, aber die Probleme hier gehen weit über einfache Syntaxfehler so ist hier ein paar Hinweise zu einem Ada-ähnlichen Ansatz.

Worte in Fettschrift sind etwa in einem guten Ada Buch genauer lesenswert.

Zuerst stoppt auf ein so niedriges Niveau zu denken. Strings Arrays von Zeichen sind, und Arrays in Ada bieten Einrichtungen wie Array Attribute Programmierung einfacher zu machen - und vor allem Programmpflege.

Arrays werden in der Länge festgelegt, wenn Sie sie erstellen, aber diese Länge hat erst dann bestimmt werden. So können Sie ein Array deklarieren und mit einem Funktionsaufruf initialisieren - es nimmt seine Größe vom Ergebnis des Funktionsaufrufs.

Mit dieser Anlage und beseitigen size als separate Sache insgesamt.

Wenn der declave-Block endet, wird das Array nicht mehr verwendet, sodass es automatisch freigegeben wird. Wenn es in einer Schleife ist, kann der Funktionsaufruf eine andere Zeichenfolge zurückgeben, sodass die Array-Grenzen jedes Mal anders sein können Problem.

Wir müssen alle Zeichen im Array durchlaufen, aber wir wissen nicht, wie groß es ist ... also fragen Sie es, zum Beispiel über seinen Bereich Attribut.

Und anstatt jeden Test zweimal zu schreiben, eine Funktion aus der Ada.Characters.HandlingPaket verwenden wir nur, um sicherzustellen, hve mit Kleinbuchstaben beschäftigen.

Auch wenn Aussagen sind eine schlechte Wahl für diese Aufgabe, eine Fall Aussage ist einfacher und kürzer - ich habe gezeigt, beide unter

with Ada.Text_IO; 
use Ada.Text_IO; 
with Ada.Characters.Handling; 


procedure MorseCode is 

begin 
    Put("Enter the sentence you would like to convert to morse code: "); 

    declare 
     Sentence : String := Get_Line; 
    begin 
     Put_Line(Sentence); 

     for i in Sentence'range loop 

     if Ada.Characters.Handling.To_Lower(Sentence(i)) = 'a' then 
      Put(".- "); 
     -- elsif etc ... not very nice 
     end if; 

     case Ada.Characters.Handling.To_Lower(Sentence(i)) is 
     when 'b' => Put("-..."); 
     when 'c' => Put("-.-."); 
     when others => null; 
     end case; 

     end loop; 
    end; 
end; 

Es gibt auch begrenzt und unbegrenzt Zeichenfolgen, die Sie in diesem einfachen Beispiel nicht benötigen. Sie sind manchmal etwas mühsam zu verwenden, Sie benötigen Typumwandlungen zwischen ihnen und einfache Strings.

+1

Ich würde ernsthaft in Erwägung ziehen, ein Array von begrenzten oder unbeschränkten Strings zu erstellen, die alle Morse-Code-Übersetzungen enthalten. Dieses Array sollte durch den entsprechenden Zeichenwert indiziert werden, so dass die Antwort eine Array-Suche und keine sehr lange Case-Anweisung ist. –

+1

Ich stimme zu. Ich habe das auch skizziert, habe mich aber dagegen entschieden, es der Antwort hinzuzufügen. –