Mehrdimensionaler Array, Doppelte Werte löschen
-
Hallo liebe Community,
Ich versuche gerade , bei mehrdimensionalen Arrays doppelte Werte zu löschen, aber er springt mir immer nicht in die nächste Zeile. Ich poste mal das komplette Programm, damit ihr euch einen Überblick verschaffen könnt. Es funktioniert alles, bis auf die Funktion eliminieren, die die doppelten Werte auf 0 setzen soll.
# include <iostream.h> # include <conio.h> const long ZEILEN=3; const long SPALTEN=3; class CTabelle { private: int Tabelle[ZEILEN][SPALTEN]; void initialisieren(int); public: CTabelle(); void eingeben(); void anzeigen(); void fuellen(); void eliminieren(); }; int main(void) { char wiederholen='j'; do { system("CLS"); CTabelle TabellenObjekt; //TabellenObjekt.fuellen(); TabellenObjekt.anzeigen(); TabellenObjekt.eingeben(); TabellenObjekt.eliminieren(); TabellenObjekt.anzeigen(); cout << "Wiederholen? [j/n]";cin>>wiederholen; } while (wiederholen!='n'); return 0; } CTabelle::CTabelle() { initialisieren(0); } / void CTabelle::eingeben() { bool Merker=false; int Eingabe; cout <<"Bitte geben Sie nur Ganzzahlen ein, bei 0 erfolgt Abbruch"<<endl; for (int i=0;i<ZEILEN;i++) { for (int j=0;j<SPALTEN;j++) { cout <<i<<".Zeile & "<<j<<" Spalte:";cin>>Eingabe; if (Eingabe==0){Merker=true;break;} else {Tabelle[i][j]=Eingabe;} } if (Merker==true){break;} } } void CTabelle::anzeigen() { for (int i=0;i<ZEILEN;i++) { for (int j=0;j<SPALTEN;j++) { cout <<Tabelle[i][j]<<" "; } cout <<endl<<endl; } } void CTabelle::initialisieren(int Uebergabe) { for (int i=0;i<ZEILEN;i++) { for (int j=0;j<SPALTEN;j++) { Tabelle[i][j]=Uebergabe; } } } void CTabelle::fuellen() { int g=0; for(int i=0;i<ZEILEN;i++) { for (int j=0;j<SPALTEN;j++) { Tabelle[i][j]=g++; } } cout << "Gefuelltes Array!"<<endl; } void CTabelle::eliminieren() { int Suchwert=0; for (int i=0;i<ZEILEN;i++) { for (int j=0;j<SPALTEN;j++) { Suchwert=Tabelle[i][j]; if(Suchwert !=0) { for(int a=+1;a<ZEILEN;a++) { for(int b=0;b<SPALTEN;b++) { if (Tabelle[a][b]==Suchwert) { Tabelle[a][b]=0; } } } } } } }Kann mir jemand weiterhelfen?
Gruß -- fuwangschu
-
Ich habe es mir nicht genauer durchgelesen, aber du solltest <iostream> statt
<iostream.h> schreiben. Die ist veraltet! Außerdem beötigst du conio.h gar
nicht, da du getch() glaube ich nicht verwendest!
-
Warum verwendest Du keine Standardcontainer wie z.B. std::vector? Dann kannst Du doch mit einfachen Dingen wie unique() oder replace_copy_if() o.ä. arbeiten.
-
witte_ schrieb:
Warum verwendest Du keine Standardcontainer wie z.B. std::vector? Dann kannst Du doch mit einfachen Dingen wie unique() oder replace_copy_if() o.ä. arbeiten.
hmmm, das müsste allerdings (wenn ich mich recht erinnere) mit Arrays genauso gehen ...
Gruß,
Simon2.
-
Er hat die Arraydimensionen aber statisch erzeugt.
-
witte_ schrieb:
Er hat die Arraydimensionen aber statisch erzeugt.
ja - und ?
Nur zur Klarstellung: Ich rate ebenfalls sehr stark zur Verwendung von Std-Containern im Gegensatz zu Arrays .... aber nicht wegen der Std-Algorithmen.
Gruß,
Simon2.
-
Also das ist eine Aufgabe die ich bekommen habe. Vieles ist veraltet, es soll aber so gemacht werden ... fragt mich auch nicht warum^^, ich mache es einfach :P. Er löscht schon ein paar Werte, aber nicht alle :(.
-
Aah, mein Fehler,
Tabelle[a][b]=0; <= mit int 0 füllen, kein Pointer auf NULL setzen. Habe den Quelltext zu schnell gelesen.
Warum hast Du
for(int a=+1;a<ZEILEN;a++)
a ist doch noch gar nicht definiert. Starte mot a=0 und teste in der inneren Schleife ob a !=i && b != j
-
Oh, das war ein Fehler!! Ich hatte da 0 drin und hab ein bisschen rumexperimentiert und mal 0+1 geschrieben. Wenn ich 0 drin habe ersetzt er mir garnichts, wenn ich 0+1 drin habe ersetzt er nur teilweise und durcheinander :(.
-
Habe es gelöst!!!
for(int a=i+1;a<ZEILEN;a++) !! Damit ersetzt er alle Werte im Array!
Vielen Dank für eure Hilfe ! Bis zum nächsten mal :).
Mfg -- fuwangschu