array sortieren 2!!
-
Danke, der Algorithmus hat funktioniert!! Jetzt folgt noch ein weiterer Schritt, vielleicht kann jemand helfen:
Zur Wiederholung:
- ich gebe in mein Programm Buchstaben ein
- die Buchstaben werden in Zahlen umgewandelt
- die Zahlen werden sortiert und ausgegebenJetzt muss ich die sortierten Zahlen wieder in die Buchstaben umwandeln! Kann mir jemand helfen??
Eingabe: a,b,c,d,e Ausgabe(sortiert): 1,3,9,14,16 erwünschte Ausgabe: d,b,a,c,e
Seht euch dazu bitte nochmal den oberen Quelltext an! Jemand eine Idee??
kira
-
Willst du jetzt nicht langsam mal anfangen, deine Hausaufgaben selber zu machen?
-
Dieses Forum gibt es ja, um Leuten zu helfen, die nicht mehr weiter wissen! Wenn Alle alles könnten, wäre so ein Forum ja unnötig, oder??
Auf jeden Fall weiß ich bei meinem Prog nicht mehr weiter und frage deshalb, ob es vielleicht jemanden gibt, der/die mir helfen kann!! Ob das dann jemand macht, kommt auf Freundlichkeit und Hilfsbereitschaft an, auf die ich dann sehr dankbar wäre!@Optimizer: Aber wenn dir mein Problem wie eine Hausaufgabe vorkommt, dann muss es für dich ja eine Leichtigkeit sein und du kannst mir ja vielleicht dabei helfen.....;)
Gruß
kira
-
cin >> b; // Hier bin ich ein bißchen ratlos. // Keine Ahnung wie man nur 5 Zeichen einliest.
Vielleicht mit cin.get() (ungetestet).
http://www.cppreference.com/cppio_details.html#get
-
Hallo,
Dieses Forum gibt es ja, um Leuten zu helfen, die nicht mehr weiter wissen!
Klar, aber wir haben eher den Eindruck, dass du dir keine Mühe gibst, die Aufgabe selbst zu lösen. Wenn wir dir eine fertige Lösung präsentieren, dann hast du nichts davon, weil du dich mit dem Thema nicht auseinandergesetzt hast.
Mach dir z.B. mal Gedanken, weshalb soetwas nicht funktionieren kann:
for(int a=0;a<5;a++) { int array[5]={0};
Wäre schon wichtig!
Jetzt muss ich die sortierten Zahlen wieder in die Buchstaben umwandeln! Kann mir jemand helfen??
Überleg mal ein bißchen und dann poste uns deinen Code. Wir werden dir bestimmt weiterhelfen.
Verstehe es nicht als Kritik, sondern als Anregung selbst zu programmieren.
Schließlich profitierst du am meisten davon.MfG
-
Ok, dann werde ich euch mal was erzählen.....
Meine Informatik- und C++ -Kenntnisse habe ich aus einem Jahr Informatik-Unterricht in der Schule! Ich habe in meiner ersten Unterrichtsstunden gelernt, was man mit "cout" macht und habe dann ziemlich bald mein erstes Programm geschrieben, das berühmte "Hello World"! Übrigens hatte ich noch nicht einmal einen Computer, als ich zu programmieren anfing! Ich musste sogar lernen, wie man den Windows Explorer öffnet!
Jetzt zu meinem aktuellen Programm:
Ich habe vor ungefähr 3 Wochen damit angefangen, arbeite Tag und Nacht daran, es besteht bis jetzt aus 2283 Zeilen Quelltext, 29 Funktionen, 104 Variablen, 330 if-Anweisungen, 96 Schleifen und 44802 Zeichen(wobei hier die Lehrzeichen fürs Einrücken mitgerechnet sind)!Dann bin ich an dem Punkt angekommen, an dem ich meine umgewandelten Zahlen sortieren musste! Das hätte ich natürlich mit einem bubblesort ohne Weiteres hinbekommen, aber wenn ich das gemacht hätte, hätte ich meinen Folge-Algorithmus in einer anderen Weise schreiben müssen, als ich es eigentlich wollte! Deswegen kommt mir die Funktion sort() sehr gelegen!
Da ich noch nicht viel mit sort() gearbeitet habe, kam ich auf die Idee ein Paar Leute im Forum danach zu fragen! Zuvor wollte ich meinen array in einen stringstream umzuwandeln und den dann sortieren, aber da hätte ich mit 2-stelligen Zahlen Probleme bekommen und außerdem hätte mein Folge-Algorithmus gar nicht dazu gepasst und ich wäre noch weniger weiter gekommen!Alles in Allem war ich dann sehr dankbar, als ein "you" mir die Variante mit den Vektoren vorgeschlagen hat! Ich habe die Lösung von "you" dann in mein Programm eingebaut und bin auch schon deutlich weiter gekommen! Jetzt bin ich aber an dem Punkt angelangt, an dem ich die Vektoren wieder in Buchstaben zurück "verwandeln" muss! Und ich weiß nicht wie!! Ich muss dazu sagen: Ich habe noch NIE mit Vektoren gearbeitet!!
Ihr müsst also verstehn, dass ich in der Richtung ziemlich aufgeschmissen bin, da es ja absolutes Neuland ist!Insgesamt gesehen weiß ich nicht, wie der Eindruck entstehen kann, dass ich mir dabei keine Mühe gebe....
Ich würde mich freuen, falls es jemanden gibt, der mir helfen kann und will...
Gruß
kira(ich bin übrigen keine Frau, auch wenn da "kira" steht! Das ist nur ein Spitzname - gefällt mir auch nicht!)
-
Du musst nicht die "Vektoren" zurück in Zeichen verwandeln. Ein Vektor ist nicht groß was anderes als ein Array. Auf die einzelnen Elemente kannst du mit [] zugreifen, genau wie bei einem Array.
Ich verstehe gerade dein Problem nicht? Wie du die einzelnen ints in Zeichen zurückverwandelst weisst du doch, oder?vector<int> array; ... int i = array[index]; // Ich habe den int an der Position index ausgelesen char a = // wie auch immer du dein int in ein char umwandeln willst
-
Nachtrag:
Mach dir z.B. mal Gedanken, weshalb soetwas nicht funktionieren kann:
for(int a=0;a<5;a++) { int array[5]={0};
Wäre schon wichtig!
Ich weiß jetzt nicht genau auf was du hinaus willst, aber wieso sollte das nicht funktionieren?? Da ich ursprünglich nicht mit Vektoren gearbeitet habe, hat das wunderbar funktioniert! Ich musste auf jeden Fall alle Elemente aus array[5] auf "0" setzen, da bei Eingabe eines Buchstaben wie z.B. "f" die "0" ausgegeben werden sollte! Ich habe ja nur die Werte für a,b,c,d,e definiert! Dass ich das ganze auch außerhalb der Schleife hätte legen können, ist mir bekannt!
cin >> b; // Hier bin ich ein bißchen ratlos. // Keine Ahnung wie man nur 5 Zeichen einliest.
Mit meiner Lösung(oben) lassen sich nur 5 Zahlen einlesen! Wo ist hier das Problem??
kira
-
Du kannst mehr einlesen und erzeugst damit undefiniertes Verhalten.
Wenn du 6 einliest, wird einfach an der Stelle arraystart + 5 im Speicher der Wert geschrieben, egal ob das Array dort schon zu Ende ist oder nicht.
Damit schreibst du in irgendwelche Speicherbereiche und wenn du noch Glück hast, kickt das Betriebssystem dafür dein Programm.
-
Ich poste hier nochmal meinen Quelltext, der sich mittlerweile ein bißchen verändert hat!
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int y=0; char b[5]; do { cout<<"Buchstabe: "; cin>>b[y]; y++; } while(y<5); vector<int> array; vector<int>::iterator it; for(int a=0;a<5;a++) { if(b[a]=='a')array.push_back(9); if(b[a]=='b')array.push_back(3); if(b[a]=='c')array.push_back(14); if(b[a]=='d')array.push_back(1); if(b[a]=='e')array.push_back(16); } sort(array.begin(), array.end()); // hier wird sortiert for(it=array.begin();it!=array.end();++it) { bool ausgeben=true; for(int b=0;b!=array.size();++b) { if(array[b]==1 && array[b+1]==3)ausgeben=false; if(array[b]==1 && array[b-1]==3)ausgeben=false; } if(ausgeben==true)cout<<*it; //Ausgabe nur, wenn "1" und "3" nicht nebeneinander liegen } cout<<"\n"; while(next_permutation(array.begin(), array.end())) //hier werden Permutationen gebildet { for(it=array.begin();it!=array.end();++it) { bool ausgeben=true; for(int b=0;b!=array.size();++b) { if(array[b]==1 && array[b+1]==3)ausgeben=false; if(array[b]==1 && array[b-1]==3)ausgeben=false; } if(ausgeben==true)cout<<*it;//Ausgabe nur, wenn "1" und "3" nicht nebeneinander liegen } cout<<"\n"; } return 0; }
So und jetzt bin ich wie gesagt ratlos, wie ich alle Zahlen wieder in Buchstaben zurück verwandle! Ich weiß z.B. nicht welche Werte in array und in it stehen! Ich weiß also nicht mit welchen Werten ich arbeiten muss! Und an welcher Stelle ich die Umwandlung vollziehen muss, weiß ich auch nicht, weil ich sowas ja noch nie programmiert habe! Wenn mir jemand die Lösung postet, wäre ich unendlich dankbar....
Gruß
kira
-
Ich hab dir doch gesagt, wie du die Werte, die in array stehen, ausliest. Den iterator it brauchst du für vector gar nicht, falls dir der jetzt zu kompliziert ist.
Du kannst in einer for-Schleife durch den ganzen Vector gehen, genauso wie bei einem Array.
-
Hallo,
mir ist nicht ganz klar warum du ausgerechnet diese Zahlen wählst. Warum nimmst du nicht den nativen Zahlenwert z.B. a=97 ? Da bräuchtest du nichtmal explizit zuweisen weil a 97 repräsentiert. Dein sort funktioniert dann trotzdem.
-
Hmmm...ist ja doch ganz einfach
Also erstmal:
#include <iostream> using namespace std; int main() { for(;;) { cout<<"DANKE!\n"; } return 0; }
Die Zahlenwerte sind nur Beispiele! In meinem eigentlichen Programm lauten die ganz anders! Aber warum ich auch da nicht mit "97" für "a" arbeiten kann, wäre jetzt zu kompliziert zu erklären!
Gruß kira
-
Hallo,
kommst du jetzt nach den vielen Beiträgen zurecht, oder haben wir dich ganz verwirrt!?
Ich kann mir dein Programmteil nochmals anschauen, wenn du wirklich nicht weiter weisst..
MfG
-
Danke für das Angebot, aber ich habs hinbekommen, es funktioniert!
Danke
kira
-
@ you:
Hab nochwas:
Kannst du mir sagen, ob es bei meinem Programm-Teil mit gepostetem Quelltext möglich ist, eine einzelne Permutation per Zufall auszuwählen und auszugeben?? Vielleicht weißt du auch wie..??
(Ich hab echt schon alles ausprobiert!)Gruß
kira
-
Hallo,
1. Melde dich hier im Forum an. Hat schon seine Vorteile..
2. Poste nochmal deinen Code.. die ausgereifte VarianteMfG "you"
-
kira = b2
@ you: Hab mich schon gewundert, warum du nicht registriert warst...
Hier mein Code:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int y=0,zahler=0; char b[5]; do { cout<<"Buchstabe: "; cin>>b[y]; y++; } while(y<5); vector<int> array; //vector<int>::iterator it; //wird bei Umwandlung in Buchstaben nicht mehr benötigt for(int a=0;a<5;a++) { if(b[a]=='a')array.push_back(9); if(b[a]=='b')array.push_back(3); if(b[a]=='c')array.push_back(14); if(b[a]=='d')array.push_back(1); if(b[a]=='e')array.push_back(16); } sort(array.begin(), array.end()); // hier wird sortiert //for(it=array.begin();it!=array.end();++it) //wird bei Umwandlung in Buchstaben nicht mehr benötigt //{ bool ausgeben=true; for(int i=0;i!=array.size();++i) { if(array[i]==1 && (array[i+1]==3 || array[i-1]==3))ausgeben=false;//Ausgabe nur, wenn "1" und "3"(b und b)nicht nebeneinander liegen } if(ausgeben==true) { for(int c=0;c!=array.size();c++) { if(array[c]==9)cout<<"a "; //hier wird umgewandelt if(array[c]==3)cout<<"b "; if(array[c]==14)cout<<"c "; if(array[c]==1)cout<<"d "; if(array[c]==16)cout<<"e "; } } //} cout<<"\n"; while(next_permutation(array.begin(), array.end())) //hier werden Permutationen gebildet { //for(it=array.begin();it!=array.end();++it) //wird bei Umwandlung in Buchstaben nicht mehr benötigt //{ bool ausgeben=true; for(int i=0;i!=array.size();++i) { if(array[i]==1 && (array[i+1]==3 || array[i-1]==3))ausgeben=false;//Ausgabe nur, wenn "1" und "3"(d und b) nicht nebeneinander liegen } if(ausgeben==true) { for(int c=0;c!=array.size();c++) { if(array[c]==9)cout<<"a "; //hier wird umgewandelt if(array[c]==3)cout<<"b "; if(array[c]==14)cout<<"c "; if(array[c]==1)cout<<"d "; if(array[c]==16)cout<<"e "; } if(c==array.size()) { zahler++; cout<<"\n"; } } //} } cout<<"\n\nEs gibt "<<zahler<<" Uebereinstimmungen!"; return 0; }
So also ich hab die Ausgabe wieder in Buchstaben! Jetzt würde ich mir aber gern eine Buchstaben-Kette per Zufall ausgeben lassen!
In meinen Programm wird die 1. Permutation duch sort() gebildet und die restlichen durch next_permutation()! Falls es dir möglich ist, eine Permutation aus next-permutation() per Zufall auswählen zu lassen, dann bleibt ja zusätzlich noch die 1. Permutation durch sort() stehn! Somit hätte ich zwei Ausgaben, obwohl ich nur eine bräuchte! Ist auch dieses Problem zu lösen?Vielleicht hast du eine Idee...
Gruß
b2
-
Wenn du 5 Buchstaben eingibst (abcdef) existieren insgesamt 2^5 Möglichkeiten = 32 Möglichkeiten.
1. Du speicherst alle möglichen Permutationen in einem vector
2. Mitint i = rand()%(max - min) + min
lässt du dir eine Zufallszahl zwischen min und max ermitteln. max = 2^5 = 32!
3. Dann holst du dir das Element and der Stelle i und somit eine zufällige PermutationMfG
Noch etwas.. Wofür brauchst du das Ganze? Was wird das für eine Anwendung?
-
Ich werds dir erzählen, wenn ich damit fertig bin, das ist nämlich eine komplexere Sache...habs aber hoffentlich bald geschafft
Mein Problem bei der Sache ist aber schon, wie ich alle möglichen Permutationen in einem Vector speichere?! Wie spreche ich überhaupt eine einzelne Permutation in meinem Programm an?? Ich weiß wie ich alle auf einmal anspreche, aber nur eine einzelne??
Kannst du mir nicht so einen kleinen Algo für die Zufalls-Ausgabe postenIn meinem geposteten Prog dürfte kein Fehler sein, kannsts ja vielleicht gleich da einbauen...Du musst natürlich nicht, du würdest mir aber gewaltig damit helfen!
(Wenn ich die Zufallspermutation eingebaut habe, muss ich nur noch die Ausgabe gestalten und wäre dann endlich fertig)Gruß
kira, b2