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

Frage zu Aufgaben mit while-Schleifen und dem Befehl rand

 

Ratlos_96
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2018, 18:16     Titel: Frage zu Aufgaben mit while-Schleifen und dem Befehl rand
  Antworten mit Zitat      
Guten Abend,

ich programmiere erst seit wenigen Wochen bei meinem Studium mit Matlab und versuche mich aktuell an alten Prufüngsaufgaben. Da ich mit dem Vorlesungsskript und der "Hilfe-Funktion" bei Matlab nicht weiter komme, wende ich mich nun an Euch.
Wie ich die Programme aktuell angefangen habe, habe ich mal unter der Frage eingefügt.

Bei der ersten Aufgabe soll mittels einer while-Schleife der Benutzer immer wieder nach einer neuen Zahl z gefragt werden und diese zur vorherigen addiert werden. Nach jeder Eingabe soll die Anzahl der eingegebenen Zahlen und die Summe ausgegeben werden. Wenn die eingegebene Zahl größer als 9999 ist, soll das Programm beendet werden.

Code:
z = [];
i = 1;
k = 1;

while (k>0)
    fprintf('Bitte eine Zahl eingeben: ',i)
    z(i)= input(' ');
   
    if z(i) > 9999
       
        return
       
    else
       
    end
    i = i+1;
     
end

fprintf('Anzahl der eingegebenen Zahlen: %d', i);
fprintf('Summe der eingegebenen Zahlen: %d', z);





Bei der anderen Aufgabe soll durch den Befehl rand(1) eine zufällige Zahl zwischen 0 und 1 bestimmt werden. Falls diese größer als 0,5 ist, eine Zählvariable um eins erhöht und falls diese kleiner als 0,5 ist, eins abzieht. Dies soll n-mal wiederholt und am Ende der Wert der Zählvariablen ausgegeben werden.

Code:
function z = zufall(n)

z = rand(1)

if z > 0.5
   
else
   
   
end




Über Hilfestellungen und Ratschläge würde ich mich sehr freuen.

Viele Grüße und noch einen schönen Sonntag

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.07.2018, 18:36     Titel:
  Antworten mit Zitat      
Hallo,

und worin bestehen nun deine konkreten Fragen dazu?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratlos_96
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2018, 19:16     Titel:
  Antworten mit Zitat      
ich bekomme das Programm nicht zum Laufen und würde gerne erklärt bekommen, wie ich das machen muss.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.07.2018, 19:37     Titel:
  Antworten mit Zitat      
Hallo,

stelle bitte konkrete Fragen.
Was heißt hier "nicht zum Laufen bekommen"?
Bekommst du nicht das gewünschte Ergebnis? Eine Fehlermeldung? Inwiefern bzw. welche?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratlos_96
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2018, 19:54     Titel:
  Antworten mit Zitat      
Bei der ersten Aufgabe:
- wie kann ich die Zahlen immer weiter zueinander addieren?
- wie packe ich das Ganze für jede Zahl in meine Ausgabe ? (Summe, Anzahl der eingegebenen Zahlen)

Bei der zweiten Aufgabe:
Ich habe es mit einer If,else Bedingung versucht, habe aber dasselbe Problem wie bei der anderen Aufgabe mit dem verrechnen der einzelnen Werte

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.07.2018, 20:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
wie kann ich die Zahlen immer weiter zueinander addieren?

Entweder stückweise:
Code:
s = 0 % Initialisierung am Anfang
s = s + z(i); % Addition in der Schleife

oder einfach am Ende:
Code:


Zitat:
wie packe ich das Ganze für jede Zahl in meine Ausgabe ?

Die Frage verstehe ich nicht. Was ist denn "das Ganze für jede Zahl"?

Zitat:
habe aber dasselbe Problem wie bei der anderen Aufgabe mit dem verrechnen der einzelnen Werte

Dann s.o.

Zur Einarbeitung sehr empfehlenswert ist übrigens das kostenfreie MATLAB Onramp:
https://de.mathworks.com/training-schedule/matlab-onramp.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratlos_96
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2018, 21:09     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort und den Link.

Sollte ich es nicht hinbekommen, würde ich mich erneut melden

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratlos_96
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2018, 22:20     Titel:
  Antworten mit Zitat      
Code:
z=[];
i = 1;
k = 1;
s = 0;

while (k>0)
   
    fprintf('Bitte eine Zahl eingeben: ', i)
    z(i)= input(' ');
   
    if z(i) > 9999
        k=0;
        disp('Programmende');
       
       break
       
    else
         s = s + z(i);
         
    end
   
    i = i+1;
     
fprintf('Anzahl der eingegebenen Zahlen: %d \n', i);
fprintf('Summe der eingegebenen Zahlen: %d \n', s);

end
 



Das Programm läuft soweit eigentlich, nur startet die Anzahl der eingegebenen Zahlen immer mit 2. Wenn ich bei der Initialisierung am Anfang i = 0 setze funktioniert das Programm allerdings nicht mehr...

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.07.2018, 23:18     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
nur startet die Anzahl der eingegebenen Zahlen immer mit 2

Das sollte sich doch leicht korrigieren lassen? z.B. durch Abziehen von 1?

Zitat:
Wenn ich bei der Initialisierung am Anfang i = 0 setze funktioniert das Programm allerdings nicht mehr...

Lass uns doch bitte nicht raten, was nicht funktioniert. Du bekommst vermutlich eine Fehlermeldung, dann poste sie doch bitte auch. Die weitere Verwendungsweise von i sollte im übrigen Hinweise darauf geben, wo das Problem liegt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.07.2018, 12:08     Titel:
  Antworten mit Zitat      
Hallo Ratlos_96

Kennst Du den Debugger schon? Siehe https://www.mathworks.com/help/matl.....process-and-features.html . Setze einen Breakpoint in den Code und lasse das Programm dann Zeile für Zeile laufen. Dabei wird schnell klar, was genau passiert und welche Änderungen Du brauchst.

Die Anzeige der "Anzahl der eingegebenen Zahlen" startet bei 2, weil Du vorher i vergrößerst. Wenn Du mit i=0 beginnst, muss z(i) scheitern (bitte immer Fehlermeldungen posten, wenn Du welche bekommst!), weil Indices in Matlab größer als 0 sein müssen.

"while k > 0" ist sinnfrei, denn break beendet die Schleife bereits.

In "fprintf('Bitte eine Zahl eingeben: ', i)" wird i gar nicht benutzt, denn es fehlt ein dazu passender Format-Specifier.

Code:
z = [];
count = 1;
s = 0;
while true
    z(count)= input('Bitte eine Zahl eingeben: ');    
    if z(count) > 9999
        disp('Programmende');        
        break
    end
    s = s + z(count);
    fprintf('Anzahl der eingegebenen Zahlen: %d\n', count);
    fprintf('Summe der eingegebenen Zahlen: %d\n', s);

    count = count + 1;  % NACH der Anzeige der Iterationen
end

Ich finde "count" hübscher als "i", aber das ist Geschmackssache.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratlos_96
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2018, 13:29     Titel:
  Antworten mit Zitat      
Danke für deine hilfreiche Antwort.

Ich habe zu meiner zweiten Frage mittlerweile auch ein Programm, welches keine Fehlermeldung erzeugt. Allerdings bin ich mir nicht sicher, ob das Programm auch das macht, was es soll. Da die Zahlen ja zufällig bestimmt werden, kann ich es ja auchnicht "nachrechnen/überprüfen". Macht das Ganze so Sinn oder liege ich damit komplett daneben?


Code:
function z = zufall(n)

s = 0;

for z=1:1:n
   
z(n) = rand(1);

if z > 0.5
    s = s + z(n);
else
    s = s - z(n);
end

end

fprintf('Ergebnis: %4.2f ', s);


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.07.2018, 14:35     Titel:
  Antworten mit Zitat      
Hallo Ratlos_96,

Fast.
Code:
function z = zufall(n)
s = 0;
for k = 1:n          % Nicht: for z =1:n
  z(k) = rand(1);    % Nicht z(n)
  if z(k) > 0.5      % Nicht: if z > 0.5
      s = s + z(k);
  else
      s = s - z(k);
  end
end
fprintf('Ergebnis: %4.2f ', s);

Du kannst das sehr einfach überprüfen, in dem Du den bereits erwähnten Debugger verwendest.

if benötigt immer eine skalare Bedingung. "if z > 0.5" wird deswegen implizit als "if all(z(:) > 0.5) && ~isempty(z)" ausgeführt. Das ist aber nicht gewollt, sondern "if z(k)".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratlos_96
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2018, 15:08     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort(en). Das hat mir wriklich sehr geholfen

LG
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.