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

Matrix durchzählen

 

Cavio10
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2017, 16:27     Titel: Matrix durchzählen
  Antworten mit Zitat      
Hallo liebe Forenmitglieder,

ich habe folgendes Problem: Ich soll ein Programm für einen Abzählreim von 10 Kindern schreiben. Es wird jeweils bis 7 gezählt und das Kind fehlt dann raus. Dann wird beim nächsten Kind wieder von vorne angefangen bis nur noch 1 Kind übrig ist. Das Ergebnis wird dann angezeigt. Bis jetzt habe ich mir folgendes überlegt:

Code:

B= [1:1:10];

if size(B)> 1

% jetzt "Abzähl" Schleife
% Ergebnis nach jedem Abzählen löschen mit

B=B(B~=Ergebnis);
     
else
     write *, B

end if
 



Ich bin noch ganz neu in Matlab. Ich weiß einfach nicht wie ich das Zählen umsetzen soll...es darf ja dann auch nicht wieder ganz vorne anfangen Confused

Für Vorschläge und Tipps wäre ich sehr dankbar!
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: 08.04.2017, 14:40     Titel: Re: Matrix durchzählen
  Antworten mit Zitat      
Hallo Cavio10,

Code:
B= 1:10;  % Einfacher als [1:1:10]
% if size(B)> 1   % size(B) gibt eine Matrix zurück! Besser LENGTH oder NUMEL
% Zudem brauchst Du eine Schleife:

while numel(B) > 1
  % Jetzt möchtest Du ein Element von B löschen:
  B(index) = [];
end
% write *, B  ??????
disp(B);

Jetzt bleibt die Frage, wie Du den Wert für "index" findest. Da ich annehme, dass das eine Hausaufgabe ist, schlage ich vor: Probiere es weiter und poste den Code, falls Du nicht weiter kommst.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2017, 12:15     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für deine Antwort. Ich habe jetzt für den Index i den Startwert 1 festgelegt...und das muss ja erhöht werden also i+1...aber so richtig funktioniert das noch nicht ^^ es soll ja bloß bis 7 zählen, löschen und dann weiterzählen....

Code:



clear all

% Matrix mit 10 Elementen für 10 Kinder
i=1
A=1:10;

% while Schleife beginnt bei 1 zu zählen in Schritten von 7 bis die Größe die
% Anzahl der Elemente in der Matrix nur noch 1 ist
% das Element soll aus der Matrix gelöscht werden

    while numel(A) > 1
         A(i)=i+1
         A=A(A~=A(i));
    end

disp('Das Ergebnis ist');
disp(A);

 
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.04.2017, 21:43     Titel:
  Antworten mit Zitat      
Hallo Cavio10,

Es fehlt noch das Zählen bis 7. Verwende eine FOR-Schleife.
A=A(A~=A(i)) ist wohl nicht praktisch. Bleibe lieber bei den Indizes.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2017, 10:32     Titel:
  Antworten mit Zitat      
Ich habe jetzt Folgendes versucht:

Code:


while numel(A) > 1
        for i=1:6:9 % For- Schleife mit Inkrement 1
            A(i)=[];
            fprintf('Gelöscht wird A(i) = %d\n', A(i));
        end
end

 


Ich habe gedacht, dass ich das ganze durch die 10 Elemente ja 9 Mal durchlaufen muss bis nur noch ein Element übrig ist...aber ich glaube ich verstehe das mit der for-schleife falsch...das erste ist der Startwert. Müsste ich dann nicht mit 7 anfangen? Der Wert in der Mitte ist das Inkrement, um das der Startwert erhöht wird. Aber es soll doch beim Zählschritt 7 bleiben....oje Confused
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: 10.04.2017, 12:53     Titel:
  Antworten mit Zitat      
Hallo Cavio10,

Was macht denn "for i=1:6:9"? Es zählt alle Zahlen ab, die von 1 bis 9 gehen mit der Schrittweite 6. Also: i=1, i=7, fertig. Es ist also nicht "Schleife mit Inkrement 1", sondern mit "Inkrement 6". Nützlich ist das nicht.

Stelle Dir das Abzählen doch mal real vor: 10 Kinder stehen in einer Reihe:
Code:

Jetzt zählst Du 7 Kinder ab:
Code:

Beim ersten mal stoppt das beim 7. Element von A. Du willst aber nicht einfach das 7. löschen, denn bei der nächsten Runde startet das Zählen ja beim neuen 7. Kind (das vorher das 8. war). Du brauchst also noch einen weiteren Zähler:
Code:
Kinder = 1:10;
iKind = 1;  % Zeiger auf das aktuelle Kind
while numel(Kinder) > 1
  for iZaehler = 1:7
    iKind = iKind + 1;  % Nächstes Kind
    if iKind > numel(Kinder)  % Fange wieder beim 1. an
       iKind = 1;
    end
  end
  Kinder(iKind) = [];
end

Nun gibt es einiges zu überlegen: Soll das wirklich bei iKind=1 starten, oder wäre 0 nicht besser? Wenn in der ersten Runde das 7. Kind ausgeschieden ist, soll dann das Zählen beim 8. weitere gehen? Eigentlich muss es doch das neue 7. sein.

Verwende am besten den Debugger, um die nötigen Änderungen zu untersuchen. Setze einen Breakpoint in die erste Zeile und gehe Zeile für Zeile durch den Code.

Programmieren ist nicht einfach. Es erfordert einige Übung solche Algorithmen in abstrakten Code umzusetzen. Wenn es schwierig wird, hilft of eine konkrete Vorstellung des Vorgangs.

Gruß, Jan
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 - 2025 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.