Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++ (alle ISO-Standards) ::  Aktuelle Array Position  
Gehen Sie zu Seite 1, 2, 3, 4  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
b4mbus
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.04.2018
Beiträge: 15
Beitrag b4mbus Mitglied 22:20:47 16.04.2018   Titel:   Aktuelle Array Position            Zitieren

Hallo Leute!

Ich hab da ein kleine Problem und komme trotz Sucherei im www leider nicht weiter :(

Ich habe die Aufgabe für das Testat an der Uni ein Waldbrand in einem Programm zu erzeugen. Das funktioniert auch recht gut, bis auf eine Sache.

Ich habe ein Array Wald[i][k] Bäume sind 'X' brennende Bäume '+' und abgebrante Bäume '-'

Wenn jetzt ein Baum brennt soll er seine umstehenden Bäume anzünden, also quasi Wald[i+1][k], Wald[i-1][k], Wald[i][k+1],Wald[i][k-1].

Das funktioniert aber leider nur für die Bäume rechts und darunter :( Die Bäume drüber und links von der aktuellen Position werden nicht angezündet..

https://imgur.com/a/deODo
Im Bild kann man sehen, dass auf der aktuellen Position der obere Baum nicht angezündet wird

C++/CLI:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
for(i=0; i<20; i++) {
            // Schleife fuer Spalten, X-Achse
            for(k=0; k<30; k++) {
 
            if(c > schritt){
 
       
            if((Wald[i][k]=='+'&&Wald[i+1][k]=='X')||(Wald[i][k]=='+'&&Wald[i-1][k]=='X')||(Wald[i][k]=='+'&&Wald[i][k+1]=='X')||(Wald[i][k]=='+'&&Wald[i][k-1]=='X')){
 
                if(Wald[i+1][k]=='X')Wald[i+1][k]='+';
                if(Wald[i-1][k]=='X')Wald[i-1][k]='+';
                if(Wald[i][k+1]=='X')Wald[i][k+1]='+';
                if(Wald[i][k-1]=='X')Wald[i][k-1]='+';
 
            }
 
 
            if(Wald[i][k]=='+')Wald[i][k]='-';
 
 
           schritt++;
 
            }
 
        cout<<Wald[i][k]<<" ";
 
            }
    cout<<endl;
 
 
        }


Ich hoffe es kann mir jemand helfen. Sollte ich noch was vergessen haben hier rein zu schreiben sagt es mir, dann trage ich es nach.

Danke schonmal!
Belli
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 2714
Beitrag Belli Mitglied 23:06:47 16.04.2018   Titel:              Zitieren

Wenn ich das auf die Schnelle richtig sehe, dann sind die Bäume [i-1][k] und [i][k - 1] doch schon auf dem Bildschirm ausgegeben, wenn Du sie als brennend kennzeichnest?!
manni66
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.11.2017
Beiträge: 273
Beitrag manni66 Mitglied 23:09:27 16.04.2018   Titel:              Zitieren

Du greifst auf Werte außerhalb des Arrays zu. Was ist z.B. i-1 für i==0?
Benutze einen Debugger.
b4mbus
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.04.2018
Beiträge: 15
Beitrag b4mbus Mitglied 23:13:20 16.04.2018   Titel:              Zitieren

Sorry aber ich kann der Aussage grade nicht folgen. In dem Moment wenn die Schleife auf die aktuelle Position springt (siehe Bild) wird der Baum darunter angezündet. Der rechts daneben brennt ja schon von dem Baum darüber. Aber der darüber wurde werder in dem aktuellen Schritt angezündet, noch in dem Schritt i-1
b4mbus
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.04.2018
Beiträge: 15
Beitrag b4mbus Mitglied 23:16:12 16.04.2018   Titel:              Zitieren

manni66 schrieb:
Du greifst auf Werte außerhalb des Arrays zu. Was ist z.B. i-1 für i==0?
Benutze einen Debugger.


Ich dachte mir so etwas schon. Allerdings weiß ich nicht wie ich sowas umgehen kann.

Mit dem Thema Debugger werd ich mich mal auseinander setzen. Ich hab keine Ahnung noch wie das geht.
Belli
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 2714
Beitrag Belli Mitglied 23:21:20 16.04.2018   Titel:              Zitieren

Der Baum darüber ist doch schon einen Schleifendurchlauf vorher, als i noch eins kleiner war, auf dem Bildschirm ausgegeben worden, und zu dem Zeitpunkt hat er noch nicht gebrannt.
Nun, in diesem Durchlauf setzt Du [i-1][k] auf '+', aber dieser Baum wird doch nicht mehr ausgegeben, sondern cout gibt doch immer nur den aktuellen Baum aus.
Deshalb siehst Du auch nur, dass der rechte und der untere Baum angezündet werden, denn die werden erst noch, beim nächsten k, bzw. beim nächsten i, ausgegeben.
b4mbus
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.04.2018
Beiträge: 15
Beitrag b4mbus Mitglied 23:27:34 16.04.2018   Titel:              Zitieren

Oh verdammt. Stimmt! Die Ausgabe ist ja schon vorbei.... Verdammt, dann muss ich ja alles über den Haufen werfen hier, denn die Ausgabe wurde ja schon gemacht :eek: :eek: :eek:
b4mbus
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.04.2018
Beiträge: 15
Beitrag b4mbus Mitglied 23:29:18 16.04.2018   Titel:              Zitieren

Gibts den keine Möglichkeit das aktuelle Array auszugeben und nicht immer die einzelnen Schritte?
Belli
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 2714
Beitrag Belli Mitglied 23:32:03 16.04.2018   Titel:              Zitieren

Klar, nimm die couts aus der Schleife und mach dahinter noch mal eine Schleife, in der nur die couts stehen, so dass Du zuerst das ganze Array neu berechnest, und danach gibst Du es in einem Rutsch aus.
Belli
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 2714
Beitrag Belli Mitglied 23:35:55 16.04.2018   Titel:              Zitieren

Wie sorgst Du denn eigentlich dafür, dass nicht alle untereinander stehenden Bäume sofort anfangen zu brennen?

Wenn ich mir vorstelle, dass in Spalte 15 i Bäume übereinander stehen, und der in Zeile 0 brennt, dann zündest Du bei i=0 den darunter an, und wenn Du die nächste Zeile durchgehst, erkennst Du nicht mehr, ob der Baum [1][15] schon vorher gebrannt hat, oder ob Du ihn gerade erst angezündet hast, also zündest Du jetzt [2][15] an, und so weiter, oder sehe ich das falsch?
C++ Forum :: C++ (alle ISO-Standards) ::  Aktuelle Array Position  
Gehen Sie zu Seite 1, 2, 3, 4  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.