Tabelle in Array "darstellen"
-
int Array_1[4][4] = {{2,3,8,9}, {4,5,1,6}, {0,3,7,0}, {2,3,4,3}}
-
#include <iostream> #include <ctime> #include <iomanip> using namespace std; int main() { //Zufallsgenerator initialisieren srand(time(0)); //Array für Zahlen int arr[4][4]; //Zahlen in das Array schreiben for(int x = 0; x < 4; ++x) for(int y = 0; y < 4; ++y) arr[x][y] = rand(); //Tabelle ausgeben und größte Zahl merken int maxZahl = -1; for(int x = 0; x < 4; ++x) { cout << endl; for(int y = 0; y < 4; ++y) { if(arr[x][y] > maxZahl) maxZahl = arr[x][y]; cout << setw(5) << arr[x][y] << '\t'; } } cout << "\n\n"; cout << "groesste Zahl: " << maxZahl << endl; }
-
Ihr solltet aber besser C++ richtig lernen. learning by doing ist bei C++ nicht so angebracht, weil man dafür zu viel Mist bauen kann, wenn man nicht weiß, wie man es richtig macht. Das ist für kleine Projekte zwar kein Problem, für größere aber sehr wohl.

Da solltet ihr am Besten nach ein paar guten Büchern schauen. Es gibt hier im Forum mindestens drölf Threads dazu, die sich leicht via Suche finden lassen.
Doch hütet euch vor den Büchern des Jürgen Wolf! Diese sind voller gefährlichen Halbwissen. Dann ist learning by doing noch besser.
PS: @Belli: <cstdlib> für srand und rand noch, schätze ich.
-
Eisflamme schrieb:
Ihr solltet aber besser C++ richtig lernen. learning by doing ist bei C++ nicht so angebracht, weil man dafür zu viel Mist bauen kann, wenn man nicht weiß, wie man es richtig macht. Das ist für kleine Projekte zwar kein Problem, für größere aber sehr wohl.

Da solltet ihr am Besten nach ein paar guten Büchern schauen. Es gibt hier im Forum mindestens drölf Threads dazu, die sich leicht via Suche finden lassen.
Doch hütet euch vor den Büchern des Jürgen Wolf! Diese sind voller gefährlichen Halbwissen. Dann ist learning by doing noch besser.
PS: @Belli: <cstdlib> für srand und rand noch, schätze ich.
Super Vielen Dank

Da habt ihr mir wieder geholfen

Was für Bücher könntest du miur denn empfehlen?Wie siehts mit Breymann aus ?^^
-
Eisflamme schrieb:
PS: @Belli: <cstdlib> für srand und rand noch, schätze ich.
Dachte ich auch, aber VS 2008 Express machts auch so ...
Der nimmt übrigens auch srand, srand time usw. ohne std:: bzw. using namespace std. Deshalb habe ich mich schon einige Male über die hier ab und an auftauchenden Hinweise (nimm cstdlib, dann ist blabla aber in std) gewundert.
-
Aber dass es ohne geht, wundert mich noch viel. rand und srand sind doch keine C++-Schlüsselwörter, also gehören die doch in Header rein? VC-Besonderheit?
Alexander_Klein_1993:
Einfach Mal das Forum durchsuchen, da findet man sehr, sehr schnell was. Ich habe "C++ professionell programmieren" gehabt und "C++ Primer" wird auch gern empfohlen, um nur zwei zu nennen.
-
Ach noch eine Frage zu den Grundlagen:
int Array_1[4][4] = {{2,3,8,9}, {4,5,1,6}, {0,3,7,0}, {2,3,4,3}} int groessteZahl = 0; for(int n = 0; n < 4; ++n) for(int m = 0; m < 4; ++m) if(groessteZahl < tabelle[n][m]) groessteZahl = tabelle[n][m];Wie kann ich mir das Bildlich vorstellen.
Also da steht ja:
1.Schleife : Solange n<4 tue n=n+1
2. Schleife : Solange m<4 tue m=m+1Wenn ich richtig liege, dann geht das Programm die Tabelle einzeln durch, oder ?
Also erstmal prüft es alle X Reihe und gleichzeitg die Y-Reihe.
Damit es ein schritt weiter läuft, gibt es ja diese n+1 bzw m+1 ?!?!?!?!So dann gibt es ja eine if Abfrage:
Kann mir das jemand erklären ?^^ (Also wie das Programm, da rangeht ?^^)
-
Gib die Tabelle doch einfach mal auf dem Bildschirm aus, so wie in meinem Beispiel oben, dann siehst Du doch, in welcher Reihenfolge die durch die for-Schleifen abgearbeitet wird.
Die größte Zahl wird immer dann berichtigt, wenn (if) eine gefunden wird, die größer ist, als die, die zur Zeit als größte gespeichert ist.@Eisflamme:
Ich habe die Vermutung, daß cstdlib implizit von einer Headerdateieingebunden wird, welche wiederum von iostream angezogen wird - möglicherweise ist die Verschachtelung auch noch tiefer ...Edit: Ich hab mal nach und nach alle Includes auskommentiert, cstdlib scheint sowohl von iostream als auch von iomanip implizit mit angezogen zu werden. Erst wenn ich alle includes weglasse, wird rand/srand als nicht deklariert angemeckert.
-
Alexander_Klein_1993 schrieb:
Ach noch eine Frage zu den Grundlagen:
int Array_1[4][4] = {{2,3,8,9}, {4,5,1,6}, {0,3,7,0}, {2,3,4,3}} int groessteZahl = 0; for(int n = 0; n < 4; ++n) for(int m = 0; m < 4; ++m) if(groessteZahl < tabelle[n][m]) groessteZahl = tabelle[n][m];Wie kann ich mir das Bildlich vorstellen.
Also da steht ja:
1.Schleife : Solange n<4 tue n=n+1
2. Schleife : Solange m<4 tue m=m+1Wenn ich richtig liege, dann geht das Programm die Tabelle einzeln durch, oder ?
Also erstmal prüft es alle X Reihe und gleichzeitg die Y-Reihe.
Damit es ein schritt weiter läuft, gibt es ja diese n+1 bzw m+1 ?!?!?!?!So dann gibt es ja eine if Abfrage:
Kann mir das jemand erklären ?^^ (Also wie das Programm, da rangeht ?^^)Schon, aber das sind wirklich absolute Grundlagen.
Es wird halt für jeden Durchlauf der äußeren Schleife jeweils die innere Schleife komplett durchlaufen. Wir durchlaufen also n=0 -> 3 einmal und m=0 -> 3 für jeden Durchlauf von n=0->3, also 4 Mal.
if ist eine Verzweigung. Wenn das in Klammern hinter dem if einen Ausdruck erbigt, der wahr ist (z.B. 0 == 0 oder halt auch mit Variablen), dann wird die Anweisung danach ausgeführt. Falls nicht, nicht. Es gibt auch die Möglichkeit einen else-Zweig nach der Anweisung nach dem if zu bauen:
if(0 == 0) tuWas; else tuWasAndres;Wenn man mehrere Ausdrücke ausführen möchte, muss man geschweifte Klammern benutzen.
if(0 == 0) { tuDies; tuBitteAuchDas; } else { sonstTuDies; undAuchNochDas; }Belli:
Ok, aber imo ist nicht chic zu "hoffen", dass irgendwelche Header andere inkludieren. Wenn ich A brauche und weiß, dass A in a.hpp ist, dann inkludiere ich a.hpp auch. Wenn man den Quellcode nämlich später verwendet, weil man eine Direct3D-Ausgabe der Tabelle nutzen möchte, die weder iostream noch iomanip braucht, klappt das Programm plötzlich nicht mehr.
-
Alexander_Klein_1993 schrieb:
Wenn ich richtig liege, dann geht das Programm die Tabelle einzeln durch, oder ?
Also erstmal prüft es alle X Reihe und gleichzeitg die Y-Reihe.
Damit es ein schritt weiter läuft, gibt es ja diese n+1 bzw m+1 ?!?!?!?!So dann gibt es ja eine if Abfrage:
Kann mir das jemand erklären ?^^ (Also wie das Programm, da rangeht ?^^)Ohne dir jetzt auf die Füsse treten zu wollen, aber wie Eisflamme schon anmerkte sind das Grundlagen, die du berherrschen solltest. Es macht wenig Sinn sich mit 2D arrays rumzuschlagen, wenn man simple if-Anweisungen oder Schleifen nicht versteht.
Kauft oder leiht euch ein gutes C++ Buch (mal das Forum durchsuchen, gibt zig threads, ansonsten http://www.c-plusplus.net/forum/251551) und arbeitet es gründlich durch. Danach sollten solche Fragen garnicht mehr auftreten, genausowenig wie deine Ursprüngliche Frage zum array oder der Suche nach dem kleinsten oder grössten Element.
Es führt einfach kein Weg daran vorbei Literatur zu lesen wenn ihr ernsthaft vorhabt mit C++ zu programmieren.In diesem Sinne: viel Spass und Erfolg beim Lernen und Programmieren.
-
Eisflamme schrieb:
Belli:
Ok, aber imo ist nicht chic zu "hoffen", dass irgendwelche Header andere inkludieren. Wenn ich A brauche und weiß, dass A in a.hpp ist, dann inkludiere ich a.hpp auch. Wenn man den Quellcode nämlich später verwendet, weil man eine Direct3D-Ausgabe der Tabelle nutzen möchte, die weder iostream noch iomanip braucht, klappt das Programm plötzlich nicht mehr.
Da hast Du recht, ich mach das ja auch nicht aus Prinzip Hoffnung, sondern ich hab ihn schlicht und einfach vergessen.
In anderen Fällen kommt es vor, dass ich den richtigen Header nicht weiss, und dann erst mal kompiliere, wenn's geht ... bin ich zufrieden.
-
Geht mir genau so. Die includes in meiner Engine sind alles andere als vollständig.