[dynamische] Arrays



  • Sylvus schrieb:

    Zu erst zu der Lesbarkeit:
    Ja ich weiß, das ist grausam, tut mir Leid!
    Habs irgendwie mit Dev C++ noch nicht hinbekommen, das automatisch zu machen und manuell ist es mir zu zeitaufwändig.

    Dazu empfehle ich, sich eine kostenlose Zweit-IDE zu installieren, zum Beispiel Visual Studio Express oder Code::Blocks.



  • Sylvus schrieb:

    //Anmerkung
    gerade wenn man üben will, kann man ja wohl auf Funkionen verzichten und selbst was versuchen. Ich weiß nicht, warum Leute so gereizt reagieren. Ein Forum ist für meine mentalen Probleme da 🙂

    Danke

    Das liegt wohl daran, dass du nicht begründet hast, warum du keinen std::vector benutzen willst. 😉
    Wenn du gesagt hättest, dass du einfach das auf einer niederen Ebene verstehen willst, wie man so etwas löst, dann wäre alles in Ordnung. Aber wenn du einfach sagst, dass du ihn nicht benutzen willst, oder er zu "komplex" ist, dann ist das eine falsche Annahme und sollte berichtig werden. std::vector ist sehr intuitiv zu benutzen und auch sehr anfänger freundlich (viel mehr, als das, was man machen muss, wenn man ihn nicht benutzt). Die "Schwierigkeit" leigt eigentlich höchstens darin, dass da noch so komische eckige Klammern vorkommen, welche sich, wie du später lernen willst etwas mit templates zu tun hat. Aber im Moment gibst du in diesen eckigen Klammern lediglich den Typen der Variable an, welche du speichern möchtest. Kleines Beispiel:

    #inlcude <iostream>
    #include <vector> // includen des vectors, damit wir ihn auch benutzen können
    
    int main ()
    {
     int size = 0;
     std::cout << "Bitte Groesse eingeben\n";
     std::cin >> size;
    
     std::vector<int> v (size); // <int> bedeutet hier, dass du int's speichern möchtest
                                // und bei size gibst du die Grösse an
    
    //benutze hier v genau gleich, wie ein Array
    //du hast aber noch mehr Möglichkeiten, siehe dazu Link
    
    //beachte hier, dass du selbst nichts aufräumen musst. Das macht vector selbst
    }
    

    Mehr darüber erfährst du hier:
    http://www.cplusplus.com/reference/stl/vector/

    Und wenn du ein wenig googles findest du bestimmt auch noch eine Menge Beispiele. Aber du solltest bereits sehen, dass es einfacher (und auch sicherer) ist mit dem vector zu arbeiten, als direkt mit dynamischen Arrays. (oder siehst du das anderst?)



  • 1. hab mir ne zweite Umgebung runtergeladen, scheint auch gut zu funktionieren.
    2. zu dem Vector hatte ich als erstes:
    http://www.cppreference.com/wiki/stl/vector/vector_constructors
    gefunden und das hat mich eher abgeschreckt.

    3. dein Beispiel sieht gut aus, aber dazu ne Frage:
    Ich will das Array ja global benutzten, so wie es aussieht, hast du es jetzt nur in der Funktion deklariert, oder?

    Grüße Sylvus
    P.S. ja ich mach das erst seit 2-3 Tagen^^

    Edit:
    Hab jetzt folgendes probiert:

    std::vector<string> SR;
    
    int main() {
        fin >> reihen;
        std::vector<string> SR (reihen);
    ...}
    
    int Suche(int X, int Y) {
        felder[K]++;
        SR[X][Y]='#';
    }
    

    das compiliert er zwar, aber bei der Ausführung gibt es Fehler...



  • Ja, weil du lokal eine andere Variable definierst, welche den globalen überdeckt und somit ist der globale immer noch leer.

    Das kannst du aber mit Boundchecks rausfinden. Siehe dazu:
    http://www.cplusplus.com/reference/stl/vector/size/

    Sprich du darfst nicht ausserhalb des gültigen Bereiches (0 bis n-1) zugreifen.

    Um das zu umgehen mache das wie folgt:

    std::vector<string> SR;
    
    int main() {
        fin >> reihen;
        SR.resize (reihen); //resizen
    ...}
    
    int Suche(int X, int Y) {
        felder[K]++;
        SR[X][Y]='#';
    }
    


  • Super! Ist ja doch nicht so schwer 🙂

    Jetzt hab ich noch eine letzte Frage, hoffe ich kann die hier noch so posten:
    Also ich will die größte Fläche (aus Sternen) mit dem Programm finden.
    Bekomme dadurch jetzt folgendes Ergebnis:

    .*.##.####.#.###.#..######.##########.......................
    *.*.#########.####.##..#.#####..###.#####...................
    .**..#..###.###..###.###.##.##.###..####....................
    **.#.##.######.*..#####.###....##.**.#......................
    **.###.##..####..#.##.#.#####.##..*.*.*.....................
    *.####...*.#..##########.#.....#...***......................
    ..####.**..##.#...#.###..#..*.##...***..*...................
    .#.#..*....###...##......##..######.*...*..*****............
    ####.**.**....***.#.#.####..*.######.****.*.****............
    #####.........*...###.#.##.**.#.##...*.***.*.*.*.**.*.**...*
    #####....*.*.***..#.###......#.###.##..*.....*.********..**.
    ###.....**..****.###.#.#####.##.##..##...**.**..***.*****.*.
    #..*.***.**.****...#...###..#.#######..**.*..**.**.....*.*..
    .*.*...*...**..*.####.#####.####...####.*..*..*..*....******
    ...**..**.**.**..###.##..##.#.####.##..#.*.**....*****.***.*
    **...*.******...*.##############.#######.*****...**..*****..
    *..***.*.*.****.**..#....#..#############**..*..*...*****.*.
    .****.**.**..*.*...###..####..####.#.##.#**..**...*..******.
    **.*****.**.***..########.##.##..######..**.**..*.*.*.**....
    ..*.*.****.**.*.####.###############..#.***..***.*....*.*..*
    .*****..*..**..###.###...####.##.#####.*.*.*****.***.*..*.**
    .*.***..*.****.#.###..*.##..#...*.#...***.**.***..***.*.*..*
    *..**..***.****.*..#.**..###.#...*.******..****.**..*..***..
    *.***..***.****.*.###....#####.*..*.*****.*....*.**.****.**.
    ****.*.*.*...*****.##.#.*.####..#.*.*.***.****.***...*****.*
    ..*.*********.*...##..##.#.#######.**.*.*********.*..*.**...
    *.**.*...*.**.***.#.#.######.##.#.******..***.****..**.*.***
    ****.*.********.*.###....#..#.###.*..*.***.**.*.*.*******.*.
    *.*..****.**..***.#.........###.#..*..*......****.*******.**
    .***.*****.*.*.***....*.#######.##..*..*..*.*..***.*********
    ******..*********.*.*.....#....#####..*.#**..*****...*....**
    ******...**.*.*.*.*..####.#.####.####.*.#**.*******..**.***.
    .******.*....*****.**.###.#.###..#####.##...*.***..**..****.
    *..*....**...*...**...#.##.#######.#.##.#..***.*********.*.*
    *...***....**..*.*.###.##.#.###.##.##.###..****..**..**..**.
    **...*****.****.***..##########...##....#**..*..***....**...
    *.*.**..********.*.**..#...########.*..*.**.***.**......**.*
    *.*.**.*.....*****.**.###.#.....####..#.#*.*.*****.**...**.*
    .*******.*..*******..*.#..#####....####.#**.**.***..*.***.**
    .*....**..*.******.***.####.##..####..###*.***....*****..*.*
    

    da gibts jetzt aber rechts unten Punkte, die nicht erreicht werden, aber müssten, weiß jemand warum?

    Danke



  • Sylvus schrieb:

    1. hab mir ne zweite Umgebung runtergeladen, scheint auch gut zu funktionieren.

    Hihi. Das ist nett.
    Normalerweise kommen gleich schlimme Beschimfungen über Dev C++ und jeden, der es benutzt, und der Fragesteller verliert die Lust.
    Fein, daß Du erstmal dabei geblieben bist. Aber ich fürchte, wir müssen noch über dein C++-Lehrbuch herziehen und über Deine Schuhgröße meckern. Sei nicht erstaunt, wenn das bei den nächsten Fragen oder gar in diesem Thread kommt. Wir Programmierer sind halt nicht mehr wesentlich toleranter als der Compiler, mit dem wir den ganzen Tag reden; aber das ist niemals böse gemeint. :xmas1:



  • Ich hab aber gar kein C++ Lehrbuch 😉
    Bin eigentlich nicht so unerfahren mit dem ganzen, nur in C++. Kann halt andere Sprachen und versuch mir das grad alles zu übertragen.
    Ich kenn also Pointer, Arrays, Bäume, Stapel... aber nicht in cpp und irgendwie ist hier doch eniges etwas anders.

    Danke für die Hilfe,
    mein Programm funktioniert inzwischen.

    Grüße Sylvus



  • Welche Schuhgröße hast Du?



  • 48

    ach quatsch die richtige Antwort ist natürlich 42 😉 😉 😉



  • Sylvus schrieb:

    48
    ach quatsch die richtige Antwort ist natürlich 42 😉 😉 😉

    Gute Antwort.
    Darf ich den Thread schließen, weil alles wichtige beantwortet wurde?
    Ich möchte vermeiden, daß die Schuhgrößendiskussion uns gleich überrennt. Es gibt nämlich unendlich viel zur 42 zu sagen, fürchte ich, und Du hast elegant von der uninteressanten Schuhgröße auf ein extrem interessantes Thema verzweigt.



  • klar und danke!

    Bis bald


Anmelden zum Antworten