Diagonale Ausgabe eines Arrayinhalt...
-
Hallo,
ich hänge gerade an einer Aufgabe, die uns von der UNI gestellt worden ist. Das ist die Aufgabe 3 von diesem Skript: http://www2.fbi.fh-darmstadt.de/~schuette/Vorlesungen/ProgrammierenI/Praktikum/Uebungen/Uebung_3/Programmstruktur.pdf
Die Grössebestimmung des Array sowie das eingeben des Inhaltes war eigentlich das kleinste Problem. Nur mir fehlt irgendwie ein Denkanstoß für die diagonale Ausgabe des Arrays. Die Sortierung werde ich mit Bubblesort machen. Ich hänge da jetzt schon 3 Tage an dieser Aufgabe. Da muss irgendein logisches System drinnen stecken ;o)
Hier mein bisheriger Code:
#include <iostream> using namespace std; int zahlenmenge [9][9]; // Größe des Arrays festlegen int zeilen = 0, spalten = 0; void arrayeingabe (); //void arraysortierung (); //void arrayausgabe (); void main() { arrayeingabe(); // Eingabe für das Array aufrufen cout << "Z: " << zeilen << "S: " << spalten << endl; } void arrayeingabe() { //int zeilen = 0, spalten = 0; do { cout << "Zeilen des Arrays (1-10) : "; cin >> zeilen; if ((zeilen < 1) || (zeilen > 10)) cout << "Falsche Eingabe. Bitte korrigieren Sie ihre Eingabe." << endl; }while ((zeilen < 1) || (zeilen > 10)); do { cout << "Spalten des Arrays (1-10) : "; cin >> spalten; if ((spalten < 1) || (spalten > 10)) cout << "Falsche Eingabe. Bitte korrigieren Sie ihre Eingabe." << endl; }while ((spalten < 1) || (spalten > 10)); for (int arrayzeile = 1; arrayzeile <= zeilen; arrayzeile++) { for (int arrayspalte = 1; arrayspalte <= spalten; arrayspalte++) { cout << "Geben Sie bitte die Zahl fuer " << arrayzeile << " x " << arrayspalte << " ein : "; cin >> zahlenmenge [arrayzeile][arrayspalte]; } } for (int arrayzeile = 1; arrayzeile <= zeilen; arrayzeile++) { cout << endl; for (int arrayspalte = 1; arrayspalte <= spalten; arrayspalte++) { cout << zahlenmenge [arrayzeile][arrayspalte] << "\t"; } } cout << endl; } /* void arraysortierung() { bool sortiert = false; do { }while (sortiert == false); } void arrayausgabe() { bool sortiert = false; do { }while (sortiert == false); }*/Vielen Dank.
Gruss,
Cyrill
-
hm eine for-Schleife über alle Zeilen, dann ne while Schleife
for(int i = 0; i < zeilen;++i) { int currentRow = i; int currentColumn = 0; while ((currentRow >= 0) && (currentColumn < spalten)) { cout << zahlenmenge[currentRow][currentColumn] << " " << flush; --currentRow; ++currentColumn; } }Nicht getestet
Aber so in er Art würd ichs machen
-
jo ich seh grad, die Ausgabe gibt dir nur die Hälfte aus^^
Du musst das ganze dann natürlich auch noch für die Spalten machen, um die untere Hälfte auszulesen. Also kopieren, unten drunter einfügen und entsprechend anpassenedit: oder du trickst etwas, in etwas so
for(int i = 0;i < zeilen + spalten - 1;++i) { int currentRow = i; int currentColumn = 0; while ((currentRow >= 0) && (currentColumn < spalten)) { if (currentRow < zeilen) { cout << zahlenmenge[currentRow][currentColumn] << " " << flush; } --currentRow; ++currentColumn; } }
-
Hm irgendwie funktioniert das nicht ganz. Also wenn ich den Code einsetze, bekomme ich was ausgegeben, aber das sind nicht ganz die Zahlen die ich eingegeben hatte.
Ein Auszug aus dem Konsolenfenster:
----------------------------------------------------
Zeilen des Arrays (1-10) : 11
Falsche Eingabe. Bitte korrigieren Sie ihre Eingabe.
Zeilen des Arrays (1-10) : 3
Spalten des Arrays (1-10) : 3
Geben Sie bitte die Zahl fuer 1 x 1 ein : 1
Geben Sie bitte die Zahl fuer 1 x 2 ein : 2
Geben Sie bitte die Zahl fuer 1 x 3 ein : 3
Geben Sie bitte die Zahl fuer 2 x 1 ein : 4
Geben Sie bitte die Zahl fuer 2 x 2 ein : 5
Geben Sie bitte die Zahl fuer 2 x 3 ein : 6
Geben Sie bitte die Zahl fuer 3 x 1 ein : 7
Geben Sie bitte die Zahl fuer 3 x 2 ein : 8
Geben Sie bitte die Zahl fuer 3 x 3 ein : 9
0 0 0 0 1 0 4 2 5
Z: 3S: 3
Press any key to continue
----------------------------------------------------Danke für die Hilfe.
Gruss,
CyrillDer Code:
#include <iostream> using namespace std; int zahlenmenge [9][9]; // Größe des Arrays festlegen int zeilen = 0, spalten = 0; void arrayeingabe (); //void arraysortierung (); //void arrayausgabe (); void main() { arrayeingabe(); // Eingabe für das Array aufrufen cout << "Z: " << zeilen << "S: " << spalten << endl; } void arrayeingabe() { //int zeilen = 0, spalten = 0; do { cout << "Zeilen des Arrays (1-10) : "; cin >> zeilen; if ((zeilen < 1) || (zeilen > 10)) cout << "Falsche Eingabe. Bitte korrigieren Sie ihre Eingabe." << endl; }while ((zeilen < 1) || (zeilen > 10)); do { cout << "Spalten des Arrays (1-10) : "; cin >> spalten; if ((spalten < 1) || (spalten > 10)) cout << "Falsche Eingabe. Bitte korrigieren Sie ihre Eingabe." << endl; }while ((spalten < 1) || (spalten > 10)); for (int arrayzeile = 1; arrayzeile <= zeilen; arrayzeile++) { for (int arrayspalte = 1; arrayspalte <= spalten; arrayspalte++) { cout << "Geben Sie bitte die Zahl fuer " << arrayzeile << " x " << arrayspalte << " ein : "; cin >> zahlenmenge [arrayzeile][arrayspalte]; } } for(int i = 0;i < zeilen + spalten - 1;++i) { int currentRow = i; int currentColumn = 0; while ((currentRow >= 0) && (currentColumn < spalten)) { if (currentRow < zeilen) { cout << zahlenmenge[currentRow][currentColumn] << " " << flush; } --currentRow; ++currentColumn; } } /*for (int arrayzeile = 1; arrayzeile <= zeilen; arrayzeile++) { cout << endl; for (int arrayspalte = 1; arrayspalte <= spalten; arrayspalte++) { cout << zahlenmenge [arrayzeile][arrayspalte] << "\t"; } }*/ cout << endl; } /* void arraysortierung() { bool sortiert = false; do { }while (sortiert == false); } void arrayausgabe() { bool sortiert = false; do { }while (sortiert == false); }*/
-
DragonShaolin schrieb:
Hm irgendwie funktioniert das nicht ganz. ...
Der Code:... for (int arrayzeile = 1; arrayzeile <= zeilen; arrayzeile++) { for (int arrayspalte = 1; arrayspalte <= spalten; arrayspalte++) { cout << "Geben Sie bitte die Zahl fuer " << arrayzeile << " x " << arrayspalte << " ein : "; cin >> zahlenmenge [arrayzeile][arrayspalte]; } } ...Die Indizierung geschieht von 0 bis n-1 statt von 1 bis n. Also:
for (int arrayzeile = 0; arrayzeile < zeilen; arrayzeile++) { for (int arrayspalte = 0; arrayspalte < spalten; arrayspalte++) { cout << "Geben Sie bitte die Zahl fuer " << arrayzeile << " x " << arrayspalte << " ein : "; cin >> zahlenmenge [arrayzeile][arrayspalte]; } }dann sollte es gehen
Gruß
Werner
-
Stimmt, funktioniert nun.
Vielen Dank. Ich sitze hier 3 Tage rum und ihr bekommt das gleich hin.
Gruss,
Cyrill
-
lag jetzt also an der Eingabe und nicht an meiner Schleife ja?
*Wie gesagt habs net getestet*Frage: ist das ein Copy & and Paste Fehler oder warum fehlt die schließenede {-Klammer bei der While-Schleife, welche du von mir übernommen hast?