Einzelnen Beitrag anzeigen

Mo53

Registriert seit: 16. Mai 2021
59 Beiträge
 
Delphi 10.3 Rio
 
#1

Austauschen einer Case Anweisung mit einer Sinnvolleren

  Alt 26. Mai 2021, 17:43
Hallo Leute,
Ich bin dabei ein Programm zu schreiben, was ein Menü ausgibt in dem man auswählen kann in einem vorher eingegebenem String die Operatoren in Strings umzuwandeln also + = plus etc.
Nun habe ich es mit einer Case Anweisung probiert für jeden einzelnen Operator, jedoch besteht jetzt das Problem, das die Überprüfung endet sobald ein Operator gefunden und umgetauscht wurde. Ich komme leider nicht drauf wie ich das anders erstellen kann sodass das Programm die Überprüfung für die Operatoren nicht beendet sobald eins gefunden wurde.
Würde mich sehr freuen wenn mir jemand auf die Sprünge helfen kann .

Delphi-Quellcode:
{$APPTYPE CONSOLE}
{$R+,Q+,X-}

uses
  System.SysUtils;

var
 abbruch : Boolean;
 menueEingabe : Char;
 satz : String;
 laufVariable,anzahlPlus,anzahlMinus,anzahlMal,anzahlGeteilt : Word;
 plus,minus,mal,geteilt : String;

begin
  abbruch := (menueEingabe = upcase('x')) or (menueEingabe = 'x');
  plus := ' plus ';
  minus := ' minus ';
  mal := ' mal ';
  geteilt := ' geteilt ';

  repeat
    writeln('A) Satz eingeben');
    writeln('B) Anzahl Operatoren im Satz bestimmen');
    writeln('C) Operatoren in Satz ausschreiben');
    writeln('D) Alle Wörter entfernen, die keinen Operator erhalten');
    writeln('X) Ende');

  readln(menueEingabe);

  case menueEingabe of
   'A','a' : readln(satz);
   'B','b' : begin
              if length(satz) > 0 then
                 begin
                   anzahlPlus := 0;
                   anzahlMinus := 0;
                   anzahlMal := 0;
                   anzahlGeteilt := 0;
                   for laufVariable := 1 to length(satz) do
                     begin
                       case satz[laufVariable] of
                         '+' : inc(anzahlPlus);
                         '-' : inc(anzahlMinus);
                         '*' : inc(anzahlMal);
                         '/' : inc(anzahlGeteilt);
                       end;
                     end;
                    writeln(anzahlPlus,' + und ',anzahlMinus,' - und ',anzahlMal,' * und ',anzahlGeteilt,' / im Satz gefunden');
                 end
              else writeln('Eingabe ungültig!');
             end;
   'C','c' : begin
                if length(satz) > 0 then
                   for laufVariable := 1 to length(satz) do
                     begin
                        case satz[laufVariable] of
                         '+' : begin
                                delete(satz,laufVariable, 1);
                                insert(plus,satz,laufVariable);
                               end;
                         '-' : begin
                                delete(satz,laufVariable,1);
                                insert(minus,satz,laufVariable);
                               end;
                         '*' : begin
                                delete(satz,laufVariable,1);
                                insert(mal,satz,laufVariable);
                               end;
                         '/' : begin
                                delete(satz,laufVariable,1);
                                insert(geteilt,satz,laufVariable);
                               end;
                       end;
                       end;
                       writeln(satz);


             end;
   'D','d' : begin
                if length(satz) > 0 then
                 writeln('Richtig D')
                else writeln('Eingabe ungültig!');
             end;
   'X','x' : abbruch := TRUE

    else writeln('Eingabe ist ungültig!');
  end;

  until (abbruch);

  readln;
end.
  Mit Zitat antworten Zitat