c++ - Zahlen gespiegelt in einem Array > PROBLEM:AUSGABE
-
Hallo liebe Leute,
ich sitze jetzt schon einige zeit an einem programm welches u.A ein Array(max 10 Zahlen) umgekehrt/gespiegelt ausgeben soll..
sprich: aus 54321 soll 12345 werden..
das programm muss aber so aussehen:1. die Anzahl der Arrayelemente soll eingeben werden
Es erscheint ein Menü mit 5 Auswahlmöglichkeiten:
1.Das Array mit der vorgegebenen Zahl der Elemente soll (neu) eingelesen werden.
2.Ein Tauschalgorithmus (Teil von Bubblesort)aus Praktikum 6 ist durchzuführen
3.Das Array soll gespiegelt werden
4.Das Array soll am bildschirm ausgegeben werden
5.Das Programm soll beendet werden.Wenn ihr euch mein quellcode anschaut, werdet ihr genauer verstehen, wie das programm funktioniert.
was mein problem ist, ist der 3 bzw 4 punkt. Wenn ich die Ausgabe direkt innerhalb des case'3' mache, dann funktioniert es.
Jedoch soll die ausgabe erst danach durch das Menü geschehen.
und dort erscheint, wenn ich, nach dem ich das array in pnkt 3 eingeben hab,auf die ausgabe pnkt 4 klicke, einfach nur das Array, wie ich es eingeben habe..:S
es funktioniert aber mit dem punkt 2 und der ausgabe punkt 4.. hmmm...schaut euch mein quellcode einfach mal an:
#include <iostream> #include <iomanip> using namespace std; void main() { int x[10], n, y; char op; cout << "Wieviele Zahlen moechten Sie einlesen? (bis zu 10 Zahlen):" << endl; cin>>n; while ( n > 10 ) // n größer 10 { cout << "\n"; cout << "Es sind zu viele! Bitte maximal 10 eingeben: " << endl; cin >> n; } do{ cout<<"\n\n Was wollen Sie tun:"<<endl; cout<<" 1 - die " <<n<< " Zahlen (neu) eingeben"<<endl; cout<<" 2 - Bubblesort P5"<<endl; // Die zuletzt eingelesenen " <<n<< " Zahlen aufsteigend sortiert ausgeben."<<endl; // cout<<" 3 - Gespiegelter Array"<<endl; //Die zuletzt eingelesenen " <<n<< " Zahlen absteigend sortiert ausgeben."<<endl; cout<<" 4 - Ausgabe " <<n<< " Zahlen ausgeben."<<endl; cout<<" 0 - Das Programm beenden."<<endl<<endl<<endl; cout<<"\n\n Eingabe: "; cin >> op; switch (op) { case '1' : cout << "n\n\Geben Sie nun die Zahlen ein: "<<endl; for (int i=0; i < n; i++) cin >> x[i]; break; case '2' : for (int c = 0; c < n-1; c++) { if (x[c] > x[c+1]) { y = x[c]; x[c] = x[c+1]; x[c+1] = y; } } cout<<"Array gespeichert... \n\n"<<endl; break; case '3': for (int c = n-1; c >=0; c--) //cout<<setw(2)<<"["<<x[c]<<"]"; cout<<"Array gespeichert... \n\n"<<endl; break; case '4' : for (int c = 0; c < n; c++) cout<<setw(2)<<"["<<x[c]<<"]"; cout << endl; break; } } while (op != '0'); //CASE 0 ...wenn 0 dann beende das programm }Ich hoffe ihr könnt mir weiterhelfen.. :S
Vielen Dank im Voraus.
-
Du sollst das Array bei 3. wohl nicht ausgeben, sondern umgedreht speichern. Das sollte nicht allzu schwer sein. (Tipp: std::reverse kann das auch. ;))
PS: In dem Programm sind unzählige Fehler, aber ich bin gerade zu faul.. wenn du wenigstens [ cpp ]-Tags nutzen und richtig einrücken würdest..
-
Zum "spiegeln" des arrays kannst du std::reverse benutzen.
#include <algorithm> ... case '3': std::reverse(x, x + 10); break; ...
-
Q schrieb:
Zum "spiegeln" des arrays kannst du std::reverse benutzen.
#include <algorithm> ... case '3': std::reverse(x, x + 10); break; ...wenn ich das so in case'3' übernehmen, kommen da ganz komische Werte raus..
:S.. sry.. ich bin noch n anfänger.. hab grad echt n blackout..

-
Dann muss das an deinem Inhalt im Array liegen. Folgendes Programm funktioniert z.B.
#include <iostream> int main() { int x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::reverse(x, x + 10); std::cout << x[0]; }Kannst es ja mal ausprobieren. Ausgegeben wird 10, obwohl es vorher das letzte Element war.
-
hmm.. du hast recht...
aber irgenwie klappt es in meinem programm nicht..
die Ausgabe sind immer wieder n komische werte: -829.....die speicherung des array in punkt 2 (Teil vom bubblesort) und die ausgabe klappt aber.. und auch richtig..
was könnte denn am inhalt falsch sein??
och ich bin verzweifelt..

_____
EDIT: ES HAT GEKLAPPT DANKE.. Hab vor lauter verzweiflung nichts mehr kapiert.. jetz hab ich es:
es musste statt der 10 nur n hin.. weil ich ja die länge des arrays selber vorgebestd::reverse(x, x + n)
ich danke euch vieeeeelmals... :D.. ihr seid die besten..

-
Zeig doch mal konkreten Code. Arrays sind sehr anfängerunfreundlich, da gibt es dutzende Sachen, die du falsch gemacht haben könntest und die alle dieses Verhalten (nämlich undefiniertes) zur Folge haben.
-
das stimmt SeppJ..
schau mal mein EDIT an..

danke nochmals für die hilfe..
