Neuling braucht Hilfe :P



  • sakamalaka schrieb:

    Polnische Notation werde ich mir auf jeden Fall irgendwann anschauen, wenn ich den Taschenrechner so fertig habe, dass ich zufrieden bin!

    Nenene,

    sakamalaka schrieb:

    umgekehrt polnischer Notation

    und das solltest du dir durchaus mal vorher ansehen.
    Das macht die Umsetzung um einiges leichter.
    Die Bedienung davon ist etwas gewöhnungsbedürftig, aber in Forschung/Entwicklung durchaus gängig.



  • sakamalaka schrieb:

    In dem Tutorial kamen auch switch und case dran, ich denke damit kriege ich auch endlich meine umsetzung hin, dass der Benutzer direkt 5 / 4 eingeben kann und es als Division erkannt wird oder?

    Das ist noch etwas komplizierter. switch-case ist grundsätzlich nur die Vereinfachung einer verschachtelten if/else-if/.../else-Fallunterscheidung, die Du als solche schon richtig angewandt hast.

    Die Eingabe des Benutzers solltest Du Dir als endliche Zeichenkette von nicht vorhersehbarer Länge vorstellen. Diese Zeichenkette müsste Dein Taschenrechner messerscharf zerlegen, sodass jede Teilkette in eine von vier Kategorien fällt: Zahl (Operand), Operator, Leerzeichen und Quark. (Einen Ausdruck, der Quark enthält, bräuchte sich der Taschenrechner z.B. nicht einmal genauer anschauen.) Das gelänge Dir z.B. mit Stringstreams; das ist aber schon ein etwas fortgeschritteneres Thema als z.B. Schleifen.

    Eine weitere Komplikation ergäbe sich aus der Priorität von Operatoren ("Punkt- vor Strichrechnung") und arithmetischen Klammern: eine ganze Menge Terme kannst Du nicht einfach von links nach rechts schnurgerade durcharbeiten. Und wie erkennst Du, ob alle Klammern ordnungsgemäß wieder geschlossen wurden usw.? -- Das grenzt schon an erste Übungen, einen C++-Compiler zu schreiben (Stichwort: formale Grammatik). 🤡 -- Unter anderem auch daher meine Empfehlung mit der umgekehrten polnischen Notation, bei der dieses Problem nicht auftritt.



  • @Shamshir

    Das gelänge Dir z.B. mit Stringstreams; das ist aber schon ein etwas fortgeschritteneres Thema als z.B. Schleifen.

    Ist verständlich und da lasse ich erstmal die Finger von! 😃 Und auch die Komplikation mit größeren Termen traue mir noch lange nicht zu, alleine zu bewältigen 😃

    Switch + cases habe ich gestern ziemlich schnell einführen können und diese funktionieren auch einwandfrei!

    Ideal wäre, den Benutzer so lange Zahlen (oder irgendwelche Zeichenketten wie "asdf") eingeben zu lassen, bis er eine im Sinne Deines Programms gültige Auswahl trifft. Stichwort: Schleife als Kontrollstruktur. Schlüsselwörter: while, do-while, for. Welcher Schleifentyp ist hier optimal?

    Bezüglich der Kontrollschleife habe ich mir ebenfalls Gedanken gemacht und es lange mit einer while Schleife probiert. Habe mich am Ende allerdings von der Theorie dafür entschieden eine do/while Schleife an den Anfang zu setzen, bis eine der 4 Optionen gewählt wird.

    do{
    		cout<< "Herzlich Willkommen, bitte wählen sie eine der vier Optionen" << endl;
    		cout<< "1 -> Addition" << endl;
    		cout<< "2 -> Subtraktion" << endl;
    		cout<< "3 -> Multiplikation" << endl;
    		cout<< "4 -> Division" << endl;
    		cin>> Auswahl;	
    	  } 
    while ( Auswahl <1 && Auswahl >4);
    

    Allerdings habe ich wohl irgendwo einen Denkfehler, da diese Schleife nicht so lange ausgeführt wird bis eine der Zahlen 1-4 gewählt wird.

    Ich denke es ist relativ zwecklos weiter zu machen ohne mir erstmal ein Buch über c++ oder so zu holen, da ich merke, dass es bei mir an vielen kleinen Dingen hackt.

    Genauso habe ich versucht die Funktionen
    so zu ändern, dass nicht in jeder Funktion Zahlen eingegeben werden müssen, sondern man einmal in der main die zahlen eingibt.

    Allerdings sind dort genauso kleine Probleme aufgetreten, die ich mir nicht erklären kann.

    Ich könnte die Liste jetzt noch ein wenig weiter führen, aber ich merke, dass mir doch noch einige Sachen in den Grundlagen fehlen(z.B. wann benutze ich welchen Datentyp, wieso erkennt das Programm bei einem float keine Kommazahlen, usw.).^^



  • du musst auch schreiben

    while(auswahl<'1'&&auswahl>'4')
    

    . oder du gibst dem cin bekannt, dass du ausdrücklich eine zahl einlesen willst.

    Ich denke es ist relativ zwecklos weiter zu machen ohne mir erstmal ein Buch über c++ oder so zu holen, da ich merke, dass es bei mir an vielen kleinen Dingen hackt.

    doppelt unterstrichen und fett gedruckt! ich würde dir c/c++ von ulrich kaiser empfehlen, weil da echt gute übungsaufgaben drin sind, die es z.t. sehr in sich haben.



  • Logik-Fehler:

    while(auswahl<1 && auswahl>4)
    

    ergibt immer 'false' 😉



  • HansKlaus schrieb:

    ich würde dir c/c++ von ulrich kaiser empfehlen,

    An einem Buch mit "C/C++" im Titel würde ich doch große Zweifel haben.



  • manni66 schrieb:

    HansKlaus schrieb:

    ich würde dir c/c++ von ulrich kaiser empfehlen,

    An einem Buch mit "C/C++" im Titel würde ich doch große Zweifel haben.

    der titel soll vermutlich aussagen, dass in dem buch sowohl c als auch c++ behandelt wird. jedenfalls denke ich, dass es zumindest für den einstieg sehr gut geeignet ist.
    dass theoretische informatiker mit schwerpunkt weiterentwicklung von c oder c++ oder leute, die etwas aus dem compiler "herauskitzeln" wollen, ihre freude daran haben werden, bezweifle ich allerdings auch.
    ist halt mehr was für die praxis und zum "losprogrammieren", weil da die wichtigsten anwendungsfälle der programmierung behandelt werden, für alles andere gibts dann bestimmt wirklich bessere bücher.



  • HansKlaus schrieb:

    der titel soll vermutlich aussagen, dass in dem buch sowohl c als auch c++ behandelt wird. jedenfalls denke ich, dass es zumindest für den einstieg sehr gut geeignet ist.

    Ja, es ist so ein typisches "erst C, dann C++" Buch und daher gerade als Einstieg völlig ungeeignet.



  • naja man lernt damit halt das programmieren.
    andere bücher erklären alles ganz toll und bieten dann keine möglichkeit, das gelernte durch übungen zu verfestigen. vielleicht auch nicht unbedingt besser.



  • Was man nicht gelernt hat, kann man auch nicht in Übungen verfestigen.



  • das stimmt.
    aber eine frei programmierbare enigma, die ihre einstellungen auf der platte speichert und wieder abruft (wahllos herausgegriffene übungsaufgabe aus dem buch) ist etwas für das man nicht unbedingt die neuen elemente aus c++ 14 gegenüber bspw. c++ 06 braucht, die grundsätzlichen methoden der programmierung sollte man dafür aber schon beherrschen, und die bekommt man in dem buch dann doch beigebracht.



  • 1. Wenn man jetzt anfängt zu lernen sollte es auch aktuelles C++ sein
    2. es sollte C++ und nicht C sein



  • das ist eine übungsaufgabe aus dem c++-teil, genau genommen aus dem teil, in dem eine einführung in klassen stattfindet. mit vererbung ging es also noch gar nicht los.

    aber das buch war ja auch nur meine empfehlung. 😉

    edit: mein prof hat uns zu anfang des semesters erzählt, dass wir c++ 06 lernen würden (c++ 11 ist ein wahlmodul für besonders interessierte), weil in den meisten unternehmen aus kostengründen weiterhin mit 06 programmiert wird und das auch erst einmal eine weile so bleiben wird, und der umstieg auf 11 oder 14 dann nicht sooo wild ist. 🙄



  • HansKlaus schrieb:

    edit: mein prof hat uns zu anfang des semesters erzählt, dass wir c++ 06 lernen würden

    Interessant. Was soll dieses "c++ 06" denn genau sein? Das habe ich noch nie gehört. Zwischen C++03 und C++11 gab es jedenfalls keinen weiteren Standard.

    Auch halte ich es für sehr fragwürdig, C++11 als "Erweiterung" (nach C++98 oder was auch immer dein Prof. lehren will) zu behandeln. Wozu komplitierte Dinge lernen, wenn das gleich in C++11 alles viel einfacher geht? Es ist 2016 und es gibt auch C++14. Einen Standard vor C++11 zu lehren, ergibt keinen Sinn.

    Aus Kostengründen bei diesem ominösen C++06 bleiben? Man entwickelt mit C++11 so viel schneller als mit C++98 (allein schon die Lambdas sind absolut unverzichbar), dass man dieses Argument nicht zählen lassen sollte.



  • vielleicht wars auch 03, ich muss zugeben, mich nicht besonders mit den versionen beschäftigt zu haben.

    wie auch immer: was machst du denn mit den ganzen leuten, die das einfach nicht können, aber zig jahre programmiererfahrung haben? mit "ich hab mir das am wochenende mal angeguckt" kommst du in unserem tollen land ja nun auch nicht unbedingt weiter, weil hier ja fast schon ein zertifikat für den korrekten klogang verlangt wird, und rausschmeißen und durch neue leute ersetzen ist ja auch immer so eine sache.

    jedenfalls hat die örtliche industrie zumindest an meiner hochschule ein nicht unbedeutendes mitspracherecht (genau genommen wird die hochschule aufgrund fehlender studiengebühren durch die industrie finanziert), warum sollte er sich das ausdenken?

    wir haben wirklich keine lambdas in der vorlesung (dieses sommersemester) gehabt und der erste gedanke beim nachschlagen auf wikipedia war: kann man so machen, kann man auch nachlassen und die guten alten funktionszeiger verwenden. 😕



  • Dein Professor ist ein fauler Sack, der die Vorlesung, die er vor 20 Jahren ausgearbeitet hat, nicht anpassen möchte. Das ist alles.



  • also ich kann dir nur empfehlen dich mit dem neusten standard zubeschäftigen oder zumindest c++11 ...

    ein gutes buch dazu ist auch:
    Der C++-Programmierer: C++ lernen – professionell anwenden – Lösungen nutzen
    von Ulrich Breymann

    das behandelt nur c++ mit dem c++11 standard. 🙄

    HansKlaus schrieb:

    vielleicht wars auch 03, ich muss zugeben, mich nicht besonders mit den versionen beschäftigt zu haben.

    🙄
    vielleicht solltest du das erstmal tun...

    HansKlaus schrieb:

    wie auch immer: was machst du denn mit den ganzen leuten, die das einfach nicht können, aber zig jahre programmiererfahrung haben? mit "ich hab mir das am wochenende mal angeguckt" kommst du in unserem tollen land ja nun auch nicht unbedingt weiter, weil hier ja fast schon ein zertifikat für den korrekten klogang verlangt wird, und rausschmeißen und durch neue leute ersetzen ist ja auch immer so eine sache.

    die "leute" die viele jahre programmiererfahrung haben, zumindest die, die ich kenne, beschäftigen sich soweit ich weiß zumindest mit dem teil der für die entwicklung/ihr fachgebiet wichtig ist.

    sofern das projekt-technisch passt wird auch meines wissens nach in der wirtschaft der neuste standard bevorzugt da er einfach fehlerunanfälliger, einfacher und damit wartbarer ist.
    dies ist am ende einfach wirtschaftlicher... (zumindest machen wir es so)

    außerdem heißt es ja nicht umsonst standard ... 😉

    "Ein Standard ist eine vergleichsweise einheitliche oder vereinheitlichte, weithin anerkannte und meist angewandte (oder zumindest angestrebte) Art und Weise, etwas herzustellen oder durchzuführen, die sich gegenüber anderen Arten und Weisen durchgesetzt hat."
    https://de.wikipedia.org/wiki/Standard

    wenn sich dein prof oder sogar die örtliche Industrie dem verweigert(was ich mir nicht wirklich vorstellen kann) dann programmiert ihr am standard vorbei was sehr schade und ggf. unwirtschaftlich ist...

    außerdem warum auf eine jetzt schon "alte" technik/standard setzen bzw überhaupt lernen? 🙄

    HansKlaus schrieb:

    jedenfalls hat die örtliche industrie zumindest an meiner hochschule ein nicht unbedeutendes mitspracherecht (genau genommen wird die hochschule aufgrund fehlender studiengebühren durch die industrie finanziert), warum sollte er sich das ausdenken?

    sehr interessant, welche uni besuchst du?
    gibt es dort viel "örtliche Industrie"?

    alle unternehmen die ich kenne nutzen den neusten standard den die projektentwicklung zulässt.

    ich kenne auch kein unternehmen dem es egal, ist ob der code schon zur entwicklung veraltet ist... 🙄

    meiner erfahrung nach weißt du wenn du ein gutes c++11 buch durchgearbeitet hast, warum du die neuen standards nutzen solltest ...

    lg



  • HelPeRss schrieb:

    vielleicht solltest du das erstmal tun...

    die frage ist, ob ich überhaupt wirklich c++ brauche. ich habe eher die vermutung, dass ich mehr mit c und assembler zu tun haben werde.

    die "leute" die viele jahre programmiererfahrung haben, zumindest die, die ich kenne, beschäftigen sich soweit ich weiß zumindest mit dem teil der für die entwicklung/ihr fachgebiet wichtig ist.

    naja ist das denn wichtig? mir fiel jetzt pauschal kein grund ein, sich mit typinferenzen und anonymen funktionen zu beschäftigen. irgendwie scheint sich die programmierung dadurch eher zu verkomplizieren.

    sehr interessant, welche uni besuchst du?
    gibt es dort viel "örtliche Industrie"?

    fachhochschule kiel. die hat eigentlich einen recht guten ruf.
    hier gibt es werften, druckereien, einen waffenhersteller, die bundesmarine, eine leiterplattenfabrik, einen hafen und auch noch andere betriebe, die "scharf" auf it sind.

    ich kenne auch kein unternehmen dem es egal, ist ob der code schon zur entwicklung veraltet ist... 🙄

    was heißt veraltet? es gibt auch noch andere anforderungen wie stabilität.
    die programmfehler im ms compiler oder im gcc, die aufgetreten sind, seit man sie um c++ 06 erweitert hat, sind doch weitestgehend behoben.
    nur weil es neu ist, heißt es doch nicht, dass es besser ist. meistens ist erstmal das gegenteil der fall.



  • HansKlaus schrieb:

    HelPeRss schrieb:

    vielleicht solltest du das erstmal tun...

    die frage ist, ob ich überhaupt wirklich c++ brauche. ich habe eher die vermutung, dass ich mehr mit c und assembler zu tun haben werde.

    das solltest du nat. wissen.
    ist mir eig auch egal. 🙂

    HansKlaus schrieb:

    die "leute" die viele jahre programmiererfahrung haben, zumindest die, die ich kenne, beschäftigen sich soweit ich weiß zumindest mit dem teil der für die entwicklung/ihr fachgebiet wichtig ist.

    naja ist das denn wichtig? mir fiel jetzt pauschal kein grund ein, sich mit typinferenzen und anonymen funktionen zu beschäftigen. irgendwie scheint sich die programmierung dadurch eher zu verkomplizieren.

    sofern dir dafür kein grund einfällt brauchst es vll noch nicht oder weißt nicht wofür man es gebrauchen kann... 🙄
    wenn du es nicht nutzen möchtest tust du es eben nicht. 🙂

    dynamische container(vector,map) - automatiserte speicherverwaltung, automatisierte typisierung und noch vieles mehr

    lohnt sich aufjedenfall ...
    wie programmierst du denn c++ - mit rohen arrays und zeigern?

    es gibt auch noch weiteres aber beließ dich selbst oder wenn du es nicht brauchst oder nicht möchtest auch ok 🙂 .

    HansKlaus schrieb:

    sehr interessant, welche uni besuchst du?
    gibt es dort viel "örtliche Industrie"?

    fachhochschule kiel. die hat eigentlich einen recht guten ruf.
    hier gibt es werften, druckereien, einen waffenhersteller, die bundesmarine, eine leiterplattenfabrik, einen hafen und auch noch andere betriebe, die "scharf" auf it sind.

    ich kenne auch kein unternehmen dem es egal, ist ob der code schon zur entwicklung veraltet ist... 🙄

    was heißt veraltet? es gibt auch noch andere anforderungen wie stabilität.
    die programmfehler im ms compiler oder im gcc, die aufgetreten sind, seit man sie um c++ 06 erweitert hat, sind doch weitestgehend behoben.
    nur weil es neu ist, heißt es doch nicht, dass es besser ist. meistens ist erstmal das gegenteil der fall.

    ok klingt gut, ein bekannter war auch in kiel und fands gut. 👍

    aber das diese sich nicht für neue techniken und aktuelle standards interessieren und dies einhalten kann ich mir nicht vorstellen... 😮
    aber wenns so ist und du den neuen standard nicht brauchst oder gar kein c++ auch ok 🙂 .

    ich meinte eig linux, windows ... 🙄
    ja ok, industrie geräte musst halt immer schauen was unterstützt wird.

    aber ein c++ standard ist erstmal stabil!
    was soll an c++11 und c++14 nicht stabil sein ?
    (abgesehen von den gekennzeichnetet funktionen aber die sind ja wie schon besagt gekennzeicht - d.h. kannst du ja einfach nicht nutzen ... )

    es gibt soweit ich weiß nicht mal ein c++06 (wie auch schonmal von jmd. anderem erwähnt, glaube ich) 🙄 ...

    "neu ist nicht immer besser"
    ist schon richtig, aber c++14 ist von vor zwei jahren und ein neuer standard, der ist da um ihn zu benutzen ...

    wenn du c++11 und c++14 nicht nutzen willst lässt es halt aber es minimiert fehler durch automatiserte speicherverwaltung und viele weitere sachen und ist wesentlich übersichtlicher (auch mit einfachen dingen...) meiner meinung nach z.B. mit "range-for" schleifen.

    wenn du das nicht machst ist das deine sache, aber die definition von standard kennst du ja bereits, schon alleine diese sagt alles dazu .

    naja mir ist das sowie so schnuppe, ich nutze den neuen standard wenn das geht (auf manchen geräten oder in projekten geht das eh nicht...).

    lg



  • HelPeRss schrieb:

    dynamische container(vector,map) - automatiserte speicherverwaltung, automatisierte typisierung und noch vieles mehr

    lohnt sich aufjedenfall ...
    wie programmierst du denn c++ - mit rohen arrays und zeigern?

    es gibt auch noch weiteres aber beließ dich selbst oder wenn du es nicht brauchst oder nicht möchtest auch ok 🙂 .

    ja aber bei debian linux hast du (im stable) z.b. unglaublich alte, aber dafür weitgehend fehlerfreie software.
    was debian als testing bezeichnet, bezeichnet ubuntu als stable. welches dieser betriebssysteme würdest du denn im atomkraftwerk einsetzen?

    aber das diese sich nicht für neue techniken und aktuelle standards interessieren und dies einhalten kann ich mir nicht vorstellen... 😮
    aber wenns so ist und du den neuen standard nicht brauchst oder gar kein c++ auch ok 🙂 .

    naja und ich kann mir irgendwie nicht vorstellen, dass der prof einfach zu faul ist, sein skript anzupassen, und die geldgeber den ganzen tag auf dem golfplatz verbringen, anstatt zu kontrollieren, wie der nachwuchs ausgebildet wird.

    aber ein c++ standard ist erstmal stabil!
    was soll an c++11 und c++14 nicht stabil sein ?
    (abgesehen von den gekennzeichnetet funktionen aber die sind ja wie schon besagt gekennzeicht - d.h. kannst du ja einfach nicht nutzen ... )

    ja als microsoft seine xbox 360 auf den markt gebracht hat, dachte man auch, dass alles läuft und plötzlich gab es 100000 rückläufer, weil die verbindungen alle brüchig waren. das hat einen haufen geld gekostet und zusätzlich haben sich viele leute dann einfach eine ps3 gekauft, was dann auch noch bedeutet, dass microsoft keine lizenzgelder für die spiele kassieren konnte.

    natürlich läuft der standard erst einmal stabil, die fehler treten ja auch immer erst auf, wenn man das produkt ausliefert und der kunde irgendein verhalten zeigt, das man sich mit den schlimmsten drogen nicht hätte ausmalen können.

    es gibt soweit ich weiß nicht mal ein c++06 (wie auch schonmal von jmd. anderem erwähnt, glaube ich) 🙄 ...

    vielleicht hat der prof auch 03 gesagt. tatsache ist jedenfalls, dass wir aus den genannten gründen kein c++ 11 gelernt haben.

    c++ 11 ist wirklich nur ein wahlmodul im 5. semester (programming in c++11)
    https://module.fh-kiel.de/Iue/Studiengang?StudiengangID=47&FachrichtungID=1

    ist schon richtig, aber c++14 ist von vor zwei jahren und ein neuer standard, der ist da um ihn zu benutzen ...

    ja bei einem computerspiel oder einer bürosoftware sind fehler im compiler auch nicht so schlimm. wenn dir ein flugzeug abstürzt, weil der compiler die typinferenz falsch aufgelöst hat, ist das schon ziemlich ärgerlich.
    muss ja nicht passieren, aber es kann, und dadurch dass man c++14 bei weniger sicherheitsrelevanten dingen quasi ausprobiert und erst einmal die "kinderkrankheiten" beseitigt, kann man es ja später auch super für andere dinge verwenden.
    genau deshalb sagte der prof vermutlich auch, dass es noch jahre dauern wird, bis man c++ 11 (bei 14 sind wir ja noch gar nicht) richtig flächendeckend anwenden wird.

    wenn du c++11 und c++14 nicht nutzen willst lässt es halt aber es minimiert fehler durch automatiserte speicherverwaltung und viele weitere sachen und ist wesentlich übersichtlicher (auch mit einfachen dingen...) meiner meinung nach z.B. mit "range-for" schleifen.

    wenn du das nicht machst ist das deine sache, aber die definition von standard kennst du ja bereits, schon alleine diese sagt alles dazu .

    naja mir ist das sowie so schnuppe, ich nutze den neuen standard wenn das geht (auf manchen geräten oder in projekten geht das eh nicht...).

    lg

    mit wollen hat das nix zu tun. wenn ich mich den ganzen tag im keller verkrieche und mich nur von pizza und cola ernähre, juckt das niemanden, ob ich mit meinem selbst geschriebenen c++ 17 compiler "bisschen was zusammen programmiere", aber sobald da irgendwelche betriebswirte das sagen haben, läuft das denke ich mal doch etwas anders. 🙄


Anmelden zum Antworten