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

bestimmte while schleife

 

ThoRie
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2019, 21:26     Titel: bestimmte while schleife
  Antworten mit Zitat      
Hallo Smile

Ich habe mal ein Anliegen zu folgendem Code:

Code:
function c=sandhaufenzwei(a,b,n)
  c=a+b;

 
  for i=1:n
    for j=1:n
   
      if c(i,j)>3
        c(i,j)=c(i,j)-4;
     
      if i-1>0
        c(i-1,j)=c(i-1,j)+1;
      endif
      if j-1>0
        c(i,j-1)=c(i,j-1)+1;
      endif
      if j+1<=n
        c(i,j+1)=c(i,j+1)+1;
      endif
      if i+1<=n
        c(i+1,j)=c(i+1,j)+1;
      endif
       
      endif  
   
        endfor
  endfor



endfunction
 

Und zwar macht die Funktion jetzt schon einmal grundsätzlich, was sie soll. Allerdings soll sie das ganze nicht nur ein Mal machen, sondern immer wiederholen, bis alle Elemente 3 oder kleiner sind. Ich hatte daher versucht eine while-Schleife à la
Code:
while c(i,j)>3
...
endwhile
 

darum zu bauen. Allerdings sagt er mir dann, dass er i und j nicht initialisiert hat. Also habe ich die beiden for-Schleifen noch einmal darum gesetzt. Dann hat er totalen Mist gemacht.

Ich will also wirklich konkret, dass er zuerst addiert, dann die Elemente durchgeht und dann, falls er mindestens eins findet, welches größer als 3 ist, die Berechnung durchführt. Dann soll er wieder abfragen, ob ein Element größer als 3 ist usw.

Vielleicht kann mir da ja jemand helfen Smile

PS.: Für eine bestimmte Anzahl von Spalten und Zeilen (immer gleich viel). Hatte ich den Code schon einmal geschrieben, sodass er auch reibungslos funktioniert. Er soll aber eben von der Zeilen- und Spaltenzahl her unabhängig und für alle n nutzbar sein.
Private Nachricht senden Benutzer-Profile anzeigen


ThoRie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2019, 13:22     Titel:
  Antworten mit Zitat      
Also, ich habe das Problem jetzt grundsätzlich einmal gelöst bekommen:
Code:
function c=sandhaufen(a,b,n)
  c=a+b;
  while any(c(:)>3)
    for i=1:n
      for j=1:n
        if c(i,j)>3
          c(i,j)=c(i,j)-4;
        endif
        if i-1>0
          c(i-1,j)=c(i-1)+1;
        endif
        if i+1<=n
          c(i+1,j)=c(i+1,j)+1;
        endif
        if j-1>0
          c(i,j-1)=c(i,j-1)+1;
        endif
        if j+1<=n
          c(i,j+1)=c(i,j+1)+1;
        endif
      endfor
    endfor
   
  endwhile
  figure
    mesh(c);
    view([45 45]);
endfunction
 

Allerdings habe ich immer noch das Problem, dass es ab einer 4x4-Matrix arschlange dauert. Und ich muss den Code unter anderem auch auf eine 101x101-Matrix anwenden. Hat jemand eine Idee, wie man das beschleunigen kann?

PS.: Ich werde auch nochmal ein neues Thema zu der zweiten Schleife öffnen und es dann hier verlinken Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
ThoRie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2019, 13:27     Titel:
  Antworten mit Zitat      
Hier kommt ihr zu der "neuen" Frage Smile
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.