Problem mit Auslese
-
Du übersetzt das nicht zufällig mit einem C Compiler? Dein Code sieht nämlich sehr nach C aus, aber du hast (versehentlich?) eine Schleife im C++-Stil geschrieben. Das würde ein C Compiler natürlich nicht fressen.
-
ich benutze die MS Visual 2005 Version für C++.
Denke der Compiler wird dann ein C++ Compiler sein...
ich bekomme ja die Ausgabe mit ppmatrix[0][i] hin, geht dieses nicht in einer for-Schleife, dann manchmal ändern sich die Einträge ja...
-
Warum verwendest du dann nichst std::cout?
printf gehört zur C Library.Unabhängig davon ist eine Ausgabe innerhalb einer Schleife natürlich kein Problem.
Ist x initialisiert? Wenn ja, wie und wo? Evetl. im falschen scope (Gültigkeitsbereich).
Ein Tip noch: lad dir eine neuere Version der IDE runter
MS Visual Studio Express ist kostenlos.
-
muss es dann so aussehen?
for (int i = 0; i < x; i++)
{
std::cout << "Geben Sie eine Zahl ein: " << std::flush;
std::cin >> ppmatrix[0][i];
}ich erweitere ein mir gegebenes Programm. x ist bereits vorher eingelesen wordem. er beschwert sich immer über fopen... wasi st ein IDE? 2005 benutze ich, weil das der Aufgabensteller so wollte...
-
naja, bevor ich verzweifel...
ich wollte eine for Schleife haben, damit ich die Ergebnisse in ein Array schreiben kann, welches ich dann dem Inhalt nach sortiere, jedoch auch die Position ausgebe. Also aus (0,2,1,5) wird (0,1,2,5) mit den Positionen (1,3,2,4). Wie kann ich denn meinen Teil ohne for Schleife in ein Array Schreiben?printf("%d\n",ppmatrix[0][0]);
printf("%d\n",ppmatrix[0][2]);
printf("%d\n",ppmatrix[0][3]);
printf("%d\n",ppmatrix[0][4]);
printf("%d\n",ppmatrix[0][5]);
printf("%d\n",ppmatrix[0][6]);
printf("%d\n",ppmatrix[0][7]);
printf("%d\n",ppmatrix[0][8]);
printf("%d\n",ppmatrix[0][9]);
printf("%d\n",ppmatrix[0][10]);
printf("%d\n",ppmatrix[0][11]);Diese Lösungen in ein Array, wie ist das machbar?
Hoffe es ist halbwegs verständlich, was ich will...
-
Naja - erstmal solltest du dich fragen, ob du C++ oder C programmieren möchtest. Sowohl printf als auch fopen sind C-Funktionen.
Zum Problem:
In C++ gäbe es beispielsweise die Möglichkeit dies über eine (multi)map einfach zu realisieren (nur eine Möglichkeit - gibt natürlich mehrere).Vorteil: Du musst dich nicht mit umständlich 2dimensionalen arrays ärgern, das Sortieren erfolgt automatisch und du musst dich nicht um die Speicherverwaltung kümmern (scheinst ja angeben zu wollen, wieviele Werte du eingeben möchtest - insofern müsstest du Speicher auf dem heap allozieren).
Mit einer map (jeder Wert soll nur einmal vorkommen) säh das ungefähr so aus:
#include <iostream> #include <map> #include <algorithm> int main(int argc, char** argv[]) { std::map<int,int> werte; int anzahlWerte = 0; std::cout<<"Wieviele Werte sollen eingegeben werden: "; std::cin>>anzahlWerte; for (int i = 0; i!=anzahlWerte; ++i) { int wert; std::cout<<i+1<<". Wert: "; std::cin>>wert; werte.insert(std::pair<int,int>(wert,i+1)); } for(std::map<int,int>::iterator it = werte.begin(); it!=werte.end(); ++it) std::cout<<"Wert: "<<(*it).first<<" - urspr. Position: "<<(*it).second<<std::endl; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); return 0; }
Möchtest du es über ein "mehrdimensionales" Array realisieren - dann würd ich für x Werte ein array[x][2] nehmen, wobei immer der eingegebene Wert zusammen mit der ursprünglichen Position gespeichert wird. Dann sortieren und dann eben die arrays wieder ausgeben.
-
Wolkenmann schrieb:
davor sind nur warnungen...
das sind alle fehlermeldungen.
wie müsste ich denn eine for schleife machen, sodass die werte von ppmatrix[0]{i] ausgegeben werden?Wenn die Schleife so aussieht, wie du sie hier eingestellt hast, ist sie vollkommen korrekt. Du hast irgend einen Murks vor diese Stelle. Eine Warnung sollte man nicht einfach ignorieren, häufig weisen die auf Fehler hin.
-
ich danke euch für eure Hilfe.
hatte es an falscher Stelle deklariert, und es kann nicht in der forSchleife direkt deklariert werdem..
Wie kann ich denn das ausgegebene in ein Array packen?
for (l = 2; l < x; l++)
{
printf("%d\,",ppmatrix[0][l]);
}
x ist bereits eine vorher gegebene eingelese Zahl. ich würde gern ppmatrix[0][l] den Inhalt davon in ein Array packen und später sortieren.
Ist dieses schwierig?
ICh weiß durch euch, dass printf eine C Anweisung ist, jedoch das ganze umzustellen, dazu fehlt mir das C++ Wissen...
-
Da du VS2005 benutzt, benenne mal deine fragliche Quelldatei von name.cpp in name.c um, dann compiliert VS das automatisch als C und nicht als C++.
Wenn du was kopieren willst, dann musst du erstmal das Zielarray definieren, dann zuweisen und anschließend sortieren usw. z.B. (ziemlich offtopic hier!)int ziel[100]; for (i = 2; i < x; i++) { printf("Zuweisung erfolgt: %d\n",ppmatrix[0][i]); ziel[i] = ppmatrix[0][i]; }
und dann sortieren z.B.
int cmp(const void *a,const void *b) { return *(int*)a-*(int*)b; } qsort( ziel, 100, sizeof*ziel, cmp );
-
super, das mit dem ins Array einlesen klappt.
habe es versucht zu deklarieren mit int a = x; ziel[a]
jedoch klappt das nicht...
Wie teste ich denn, ob es richtig sortiert worden ist? printf("..."); ?
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
wenn
int ziel[x];
nicht klappt, hast du kein ANSI C99, das macht aber nichts, es geht dann:
int *ziel; ... ziel = malloc(x*sizeof(int)); ... /* und NICHT vergessen, diesen dynamischen Speicher am Ende wieder freizugeben */ free( ziel );
Die Testausgabe für korrekte Sortierung kriegst du aber selbst hin.
-
bislang habe ich alles in meine mainFunktion
int main(int argc, char* argv[]) { ... }
geschrieben, jedoch wenn ich das sortieren will beschwert sich der compiler.
muss ich es nach der mainFunktion benutzen, oder muss es in die mainFunktion hinein. Ich verstehe nicht so richtig, an welche Stelle der Sortieralgorithmus muss...
der compiler beschwert sich dann beimqsort( ziel, 100, sizeof*ziel, cmp );
wenn ich es jedoch weglasse außerhalb der mainfunktion beschwert er sich nicht mehr.
-
Da scheint es doch an prinzipiellem Wissen zu fehlen, wenn du noch nicht mal weißt, wo Funktionen hingehören.
Gib mal den Code an, von mir aus auch auf codepad.org/ideone.com, sonst wird dass hier nichts mehr.
-
da hast du recht, da fehlt mir das Wissen.
habe schon ein Programm gegeben bekommen, muss es nur noch 'verfeinern'.
das hier zu posten, ich weiß nicht, ob der Ersteller damit einverstanden ist.
Müsste es denn in meine main Funktion?
-
Na an Minderwertigkeitskomplexen leidest du nicht, wenn du die Aufgabe, ein C Programm zu verfeinern übernimmst und nicht weißt, wie Funktionen zu definieren sind. Spätestens bei Nachfragen deines Auftraggebers zu deinen Verfeinerungen wirst du Schwierigkeiten bekommen.
Funktionen in C können nicht innerhalb von {} Bereichen definiert werden, ebenso müssen sie in den Codeteilen ZUVOR definiert oder mindestens deklariert werden;
int bla1() {} int bla2(); main() { bla1(); bla2(); } int bla2() {bla1();}
-
Da hats du recht, aber auch wenn du es nicht glaubst eure Hilfe hat mir das ganze zu verstehen leichter gemacht. Dafür danke ich euch.
Die main Funktion kann auch zu Beginn des Programms stehen, oder ist es wichtig, die erst später im Programm zu haben?
Eine wichtige Frage zu meinem Arrayanlegen.
Ich habe ein Array angelegtfor (l = 2; l < m; l++) { ziel[l] = ppmatrix[0][l]; printf("%d\,",ziel[l]);
Dann passt es, aber sobald ich dieses Array außerhalb der main Funktion benutzen möchte, außerhalb der forSchleife die noch um diese forSchleife ist, dann kommen nicht die Zahlen als Ergebnis, die vorher richtig waren.
Die ändern sich um einige Tausend.
Weswegen ist dieses so, dass ich mein Array nur innerhalb dieser Schleife benutzen kann? Vorher erhalte ich die richtigen Ergebnisse....