Programm stimmt nicht oder unvollständig



  • 007 schrieb:

    naja mir fällt da grad noch was anderes auf nämlich das mein Programm nur zahlen von 1-11 ind wörter umwandelt die anderen leider nicht nun wie kann ich das ändern das ich nicht jede zahl mit case bla und so weiter schreiben muss

    Sowas in der Art hast du doch schon mit deinen String-Arrays vorbereitet. Also mach einfach weiter. Das soll dir ja schließlich keiner hier vorkauen. Probier einfach noch ein wenig rum, setz deinen Verstand ein, und bei weiteren Detailfragen melde dich.



  • Ich bin das schon so lange am versuchen darum hab ich mich ja erst hier gemolden weil ich nicht mehr weiter weiss nun ist es schon so spät und bin langsam ko von dem ganzen...

    Darum wäre ich echt froh um Hilfe...



  • 007 schrieb:

    Ich bin das schon so lange am versuchen darum hab ich mich ja erst hier gemolden weil ich nicht mehr weiter weiss nun ist es schon so spät und bin langsam ko von dem ganzen...

    Darum wäre ich echt froh um Hilfe...

    Ok, Moment...



  • Gut, ausnahmsweise:

    #include <iostream>
    #include <limits>
    
    using namespace std; 
    
    int main() 
    { 
    	const char *Strings12[]={"null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwoelf"}; 
    	const char *Strings19[]={"drei", "vier", "fuenf", "sech", "sieb", "acht", "neun"}; 
    	const char *Strings99_pre[]={"einund", "zweiund", "dreiund", "vierund", "fuenfund", "sechsund", "siebenund", "achtund", "neunund"}; 
    	const char *Strings99_post[]={"zwanzig", "dreissig", "vierzig", "fuenfzig", "sechzig", "siebzig", "achtzig", "neunzig"}; 
    	int eingabe; 
    
    	cout<<"Geben sie eine zahl ein> "; 
    	if(cin>>eingabe) {
    		if(eingabe<0) {
    			cout << "Bitte keine negativen Zahlen eingeben!" << endl;
    		}else	if(eingabe<=12) {
    			cout << Strings12[eingabe];
    		}else if(eingabe<=19) {
    			cout << Strings19[eingabe%10-3] << "zehn";
    		}else if(eingabe<=99) {
    			cout << Strings99_pre[(eingabe%10)-1] << Strings99_post[(eingabe/10)-2];
    		}else {
    			cout << "Bitte nur Zahlen kleiner 100 eingeben!" << endl;
    		}
    	}else {
    		cout << "Bitte eine Zahl eingeben!" << endl;
    	}
    	std::cin.clear(); 
    	std::cin.ignore(std::numeric_limits<int>::max(),'\n');
    	getchar();
    }
    

    Jetzt pack eine Schleife und eine kleine Ablaufsteuerung (z.B. Programm abbrechen) rein.

    EDIT: Du kannst ja auch noch Hunderter und Tausender einbauen, das ist nicht so schwer...

    EDIT2: Und verbring die nächste Zeit am besten damit, dir einige Grundlagen beizubringen. Nur so kommt man auf Dauer weiter. Lies mal ein Tutorial oder ein Buch, das bringt einfach mehr als einfach drauf loszuprogrammieren. Wie du selbst gemerkt hast, erreicht man sein Ziel nicht ohne Verständnis der Sprachmittel und Grundwissen. 🙂



  • Danke schon mal

    Was ist Strings



  • 007 schrieb:

    Danke schon mal

    Was ist Strings

    http://de.wikipedia.org/wiki/Zeichenkette
    😮



  • Ich glaube eher er meint die Variable...denn du hast keine Strings verwendet außer C-Strings...



  • Vielleicht sollte man das Problem in die FAQ aufnehmen. Die "Zahlenumwandler" nehmen ja gar kein Ende mehr. Jeden Tag einer. 😃



  • Mitleid schrieb:

    Vielleicht sollte man das Problem in die FAQ aufnehmen. Die "Zahlenumwandler" nehmen ja gar kein Ende mehr. Jeden Tag einer. 😃

    Das steht schon seit Ewigkeiten dort.

    Leider sind die FAQ so gut wie nutzlos, da viele der dort aufgenommenen Fragen entweder selten gestellt werden, sich thematisch überlappen oder sich in nutzlosen Beiträgen verlieren. Das Ganze sollte man mal neu strukturieren, aber momentan lesen wohl die wenigsten die FAQ. 😞



  • Echt? Das steht drin? Hab das eigentlich nur als Scherz gemeint. 🙂

    Dann bräuchte das Forum neben den FAQ so etwas wie eine Hausaufgabenecke. Obwohl, na ja, würde mehr schaden als nützen.

    Ich weiß nicht, zu meiner Zeit war der ganze Computerkram noch freiwillig. Wir haben uns richtig gefreut vor die Kisten zu dürfen. Da war jeder stolz auf seine individuelle, wenn auch teils seltsame, Lösung.

    Sollten die heute c++ auf den regulären Lehrplan stehen haben, dann fände ich das schon sehr übertrieben. Aber, anders kann ich mir die Menschen nicht erklären, die hier, oft ohne jegliches Wissen, die Hausaufgaben gemacht bekommen wollen. Da muss das Interesse ja absolut NULL sein.



  • Hm ja, da hast du Recht. Zeitweise scheint es hier von armen bemitleidenswerten Studenten, die von ihren Professoren mit veraltetem C++-Wissen zu sinnfreien Aufgaben verdonnert werden, nur zu wimmeln...

    Schade finde ich auch, dass es zum Teil noch Leute gibt, die das unterstützen.

    Aber zum Glück gibts immer noch die "gute Sorte": Motivierte, interessierte Leute, die sich in die Möglichkeiten und Abgründe von C++ vorwagen wollen. 🙂



  • Mentras schrieb:

    Ich glaube eher er meint die Variable...denn du hast keine Strings verwendet außer C-Strings...

    Hm, ich hab keine Ahnung, was er meinte. Denn eine Variable "Strings" gibt es in dem Code auch nicht. Und er hat ja nicht gefragt, was "String12" ist. Hörte sich für mich tatsächlich nach einer grundsätzlichen Frage nach dem Begriff String an. Egal, jedenfalls habe ich mich mit den C-Strings nur an das gehalten, was er bereits zu kennen scheint, um ihn nicht weiter zu verwirren. Denn sein Wissen hält sich noch arg in Grenzen, er steht wohl noch ganz am Anfang. Aber vielleicht hätte man ihm direkt std::string zeigen sollen, schließlich hat er schon mit strcpy rumexperiementiert, das kann bei seinem Wissensstand schnell in die Hose gehen...

    Und wenn's eine Hausaufgabe ist: Herrje, welcher Trottel stellt denn immer solche Aufgaben?! 👎

    EDIT: Übrigens gibt es sicher viele Leute, die vom Programmieren nix wissen wollen, aber schulisch damit in Berührung kommen und entsprechend unmotiviert da rangehen. Ich denke da an meine Berufsschulzeit. Ich war der einzige Informatikkaufmann, der Spaß im VB- und C++-Unterricht hatte (auch, wenn die Lehrer, die wir Kaufleute bekamen, grausig waren). Ich habe auch in der Firma fast ausschließlich programmiert. Aber die anderen angehenden Informatikkaufleute kannten es nicht, wollten es nicht und mussten es in ihrer Firma nicht können. Eine gewisse Unmotiviertheit kann ich da schon nachvollziehen.



  • const char *
    

    Ohne jetzt irgendwie nerven zu wollen.
    Kann mir mal jemand erklären warum man oft sowas in C++ Programmen sieht ?
    Dafür gibt es doch (schon lange) std::string. Hat es irgendeinen Vorteil, wenn man char Zeigerketten nimmt ?
    Oder hat sich das nur aus gewohnheit eingebürgert ?
    Ich sehe oft C++ Code, der mit C durchsetzt ist. Kommt das davon das Profs früher nur C "gelernt" haben und sich heute ohne weiteres dazulernen wollen mit so einem "C/C++ Mixcode" durchschlagen ?



  • stud_op schrieb:

    ...Kommt das davon das Profs früher nur C "gelernt" haben und sich heute ohne weiteres dazulernen wollen mit so einem "C/C++ Mixcode" durchschlagen ?

    Wohl nicht nur Profs.
    Es gibt einfach (zu) viele, die Neuem zu wenig aufgeschlossen sind und lieber Dinge so machen "... wie ich sie immer gemacht habe ...".
    Da will ich mich gar nicht ausnehmen - oftmals erscheint das "organischer", "schneller", .... aber ich lerne immer wieder, dass diese Ansatz mir mehr Probleme bereitet als er löst.

    Außerdem gibt es haufenweise Leute, die nicht an "guten Programmen" interessiert sind, sondern lediglich daran, dass "...irgendwie das passiert, was ich will...".

    Gerne werden diese beiden Bequemlichkeitsansätze noch mit "Performancevorteilen" begründet, die in 99% der Fälle nicht zutreffen und in 102% der Fälle irrelevant sind. 😉

    Aber es gibt natürlich Situationen, wo char* Vorteile ggü. std::string hat (Compiler-/Sprach-/Plattform-/...-Übergänge, ...).

    Gruß,

    Simon2.



  • Man darf nicht vergessen, dass es viele Situationen gibt,in denen man sowieso gezwungen wird, mit C-like-Elementen zu arbeiten. Wenn das SDK, das man benutzen muss, nunmal mit char* u.ä. arbeitet, hat man einfach keine Wahl. Dabei ist es ganz egal, was man selbst bevorzugt. Mein aktuelles Beispiel ist das SDK eines Framegrabbers, das dem typischen C-mit-Klassen-Design entspricht.



  • Kann sein, das man jetzt sagt, das ich mich ziemlich weit entfernt der Realität bewege. Aber wenn man auf solche Umstände trifft, das man zu einem Umgang mit solch einem SDK oder aber auf C Code allgemein trifft, ist es dann abwegig über eine Wrapper Klasse nachzudenken ?
    Muss natürlich auch praktikabel sein (Kosten-Effizienz).
    Ich sage mir entweder es wird C oder aber C++ gefordert. Wenn es dem Kunden letztendlich wurscht ist (Hauptsache es funktioniert) dann sollte man doch für sowas kämpfen.



  • stud_op schrieb:

    Kann sein, das man jetzt sagt, das ich mich ziemlich weit entfernt der Realität bewege. Aber wenn man auf solche Umstände trifft, das man zu einem Umgang mit solch einem SDK oder aber auf C Code allgemein trifft, ist es dann abwegig über eine Wrapper Klasse nachzudenken ?

    Ja, ist es manchmal. Denn wenn ich (gerade bei einem solch umfangreichen SDK) meine Zeit in einen Wrapper investiere, kann ich in der Zeit nunmal nicht an der eigentlichen Aufgabe werkeln. Traurig, ist aber so. Und da nur einmal die Bilderfassung über diesen Framegrabber programmiert wird und im optimalen Fall nie wieder angerührt werden muss, ist die von dir angesprochene Kosten-Effizienz relativ fragwürdig. Also selbst, wenn ich dir Zeit dafür hätte (und die habe ich nicht, da mal wieder alle Terminvorgaben vorgestern enden), wäre ein wirklicher, den immensen Aufwand rechtfertigender Nutzen doch nicht garantiert.

    Ich stelle das Nutzen der Funktionalität des Grabbers (bezogen nur auf das, was wir brauchen) mit wenigen Funktionen zur Verfügung, hier gibts also kein Problem. Und wenn irgendwas schiefläuft oder sich ändert (Bugs, neues SDK mit veränderten Funktionen...), muss man sich sowieso mit dem SDK selbst beschäftigen, ob da jezt noch ein Extra-C++-Deluxe-alles-abdeck-Wrapper drumherum ist oder nicht.



  • stud_op schrieb:

    const char *
    

    Ohne jetzt irgendwie nerven zu wollen.
    Kann mir mal jemand erklären warum man oft sowas in C++ Programmen sieht ?
    Dafür gibt es doch (schon lange) std::string. Hat es irgendeinen Vorteil, wenn man char Zeigerketten nimmt ?

    Du hast uns const char* gezeigt. Das wird für konstante Zeichenketten verwendet, zum Beispiel Stringliterale. Für sowas ist der Overhead von std::string einfach nicht gerechtfertigt:

    const std::string Str = "Hallo!";
    

    Selbst für die Schnittstelle zu C-APIs kann man sich bereits Arbeit abnehmen lassen, indem man mit std::vector<char> arbeitet, oder einer vergleichbaren C-konformen Stringklasse.



  • Kann man beim Verwenden von string schon von Overhead sprechen ?
    Ist dann vector<char> kein Overhead ?
    😕



  • stud_op schrieb:

    Kann man beim Verwenden von string schon von Overhead sprechen ?

    Sicher. Die dynamische Speicherverwaltung, Optimierungen zur schnellen Vergrösserung, das Kopieren des Stringliterals sind allesamt unnötig. Auch ist der Kopierkonstruktoraufruf eines std::string s weitaus rechenzeitintensiver als die Kopie eines Zeigers. std::string ist ja schön und gut, aber übertreiben sollte man es trotzdem nicht.

    stud_op schrieb:

    Ist dann vector<char> kein Overhead ?
    😕

    Doch, aber hier ist er eher gerechtfertigt, zumal du hier dynamische Operationen wie Anhängen von Zeichen durchführen willst. Das wird mit rohen Zeigern eine ziemliche Frickelei.


Anmelden zum Antworten