WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Mehrere while-Schleifen kombinieren?

 

freakY1337
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2017, 19:51     Titel: Mehrere while-Schleifen kombinieren?
  Antworten mit Zitat      
Ziel des Teilprogramms ist es, dass als Variable x eine ganze Zahl mit/oder ohne Vorzeichen eingegeben werden muss. (z.b. 3,-3,+3).
Wenn jetzt z.b. 3.1 eingegeben wird soll eine Fehlermeldung ausgegeben werden.
Wenn eine 0 eingegeben wird soll ebenfalls eine Fehlermeldung ausgegeben werden.
Wenn z.b. eine Zahl mit zwei Vorzeichen eingegeben wird (++3) soll auch eine Fehlermeldung ausgegeben werden.

Ich habe jetzt zwei einzelne while Schleifen, die einmal überprüfen, ob eine ganze Zahl eingegeben wurde und eine weitere, ob eine 0 eingegeben wurde.

Ist es jetzt irgendwie möglich, dass diese beiden Schleifen zusammenlaufen?

Code:
%
while 1 %Ganze Zahl
   x=input('GanzeZahl (+/-): ');
    if x~=round(x)
    fprintf('Nur ganze Zahlen!\n')
    continue
    end
    if x==round(x)
    break
    end
end

while 2 %keine 0
    x=input('GanzeZahl (+/-): ');
    if x==0
    fprintf('keine 0!\n')
    continue
    end
    if round(x)==x
    break
    end
end

 
Private Nachricht senden Benutzer-Profile anzeigen


Maluco
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 27.06.17
Wohnort: ---
Version: R2017b
     Beitrag Verfasst am: 29.12.2017, 17:11     Titel:
  Antworten mit Zitat      
Wenn ich es richtig verstanden habe, willst du einfach nur ganze Zahlen außer der 0 erlauben. Dann würde ich das einfach so machen:

Code:
while 1 %Ganze Zahl
   x=input('GanzeZahl (+/-): ');
    if x~=round(x) || x==0
    fprintf('Nur ganze Zahlen und keine 0!\n')
    continue
    end
    if x==round(x)
    break
    end
end


War es das, was du gesucht hast?
Private Nachricht senden Benutzer-Profile anzeigen
 
freakY1337
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2017, 17:20     Titel:
  Antworten mit Zitat      
im Prinzip ist es schon das.
Nur würde ich gerne zwei verschiedene Fehlermeldungen ausgeben.
Einmal für eine ganze Zahl und einmal, dass eine 0 nicht zulässig ist. Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
Maluco
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 27.06.17
Wohnort: ---
Version: R2017b
     Beitrag Verfasst am: 29.12.2017, 17:34     Titel:
  Antworten mit Zitat      
Was hältst du davon?

Code:
while 1 %Ganze Zahl
   x=input('GanzeZahl (+/-): ');
    if x~=round(x)
    fprintf('Nur ganze Zahlen!\n')
    continue
    elseif x==0
    fprintf('keine 0!\n')
    continue
    elseif x==round(x)
    break
    end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
freakY1337
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2017, 18:18     Titel:
  Antworten mit Zitat      
du bist mein Held Very Happy funktioniert!

ein letztes Problem hab ich auch noch.

Mein Programm soll einmal durchlaufen.
Dann soll eine Aufforderung kommen, ob es noch einmal durchlaufen werden soll.
mit "j" soll es noch einmal durchlaufen und mit "n" soll es beendet werden.
ich habs jetzt zwar so, dass es mit "j" noch einmal durchläuft und mit "n" beendet, allerdings beendet es das Programm mit jedem beliebigen Buchstaben und nicht nur mit "n".

Am besten wäre dann noch ein Hinweis, dass nur "j" oder "n" eingegeben werden darf, wenn dies nicht der fall war.

Code:

Antwort='j';
while strcmp(Antwort,'j')
if strcmp(Antwort,'j')
...
PROGRAMM
...
elseif strcmp(Antwort,'n')
        fprintf('Das Programm wird beendet!\n');
        break
else
        fprintf('Nur j oder n!\n')
end  
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Maluco
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 27.06.17
Wohnort: ---
Version: R2017b
     Beitrag Verfasst am: 30.12.2017, 02:12     Titel:
  Antworten mit Zitat      
Gern geschehen ;)

Bei deinem zweiten Problem, bin ich mir nicht so sicher, ob ich dich richtig verstanden habe. Dein Code produziert ja eine Dauerschleife, die du auch nur mit 'j' aufrufen kannst.

Mein Vorschlag hat eine Dauerschlaufe, die mit 'j' fortgeführt und mit 'n' unterbrochen wird. Bei falscher Eingabe beende ich es auch, aber das kannst du für dich entscheiden, wie du da fortfahren möchtest. Ich hoffe es hilft.

Code:
while 1
    ...
    % PROGRAMM
    ...
    exist Antwort;
    if ans
        if strcmp(Antwort,'j')
        elseif strcmp(Antwort,'n')
            fprintf('Das Programm wird beendet!\n');
            break
        else
            fprintf('Nur j oder n!\n')
            break
        end
    end
    Antwort = input('Weiter?(j,n): ','s')
end
clear Antwort


Alternativ könntest du die fehlerhafte Eingabe umgehen, indem du ein Dialogfeld öffnest. Das ist darüber hinaus visuell freundlicher und könnte so aussehen:

Code:
while 1
    ...
    % PROGRAMM
    ...
    Antwort = menu('Noch einmal?','Ja','Nein');
    if Antwort == 1
        fprintf('Das Programm wird noch einmal gerechnet!\n');
    elseif Antwort == 0 || Antwort == 2
        fprintf('Das Programm wird beendet!\n');
        break
    end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
freakY1337
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2017, 20:59     Titel:
  Antworten mit Zitat      
Die Lösung mit dem Dialog ist eigentlich ganz gut, nur brauch ich es eben so, dass es im Command Window als Text angezeigt wird..
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.