Neuling braucht Hilfe :P
-
Vielen Dank für die beiden Antworten!
@DirkB werde ich mir auf jeden Fall anschauen und versuchen umzusetzen. Wird dann ja doch ganz anders gemacht.^^
@Shamshir vielen Dank erstmal für den allgemeinen Tipp, sowas ist gut zu wissen!
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?
Ich wollte allerdings erstmal mit if und else anfangen einfach um Quellcode zu schreiben und die Notationen der jeweiligen Befehle zu verinnerlichen.Im Endeffekt ist dein Beitrag perfekt für mich, da mein Ziel ist, den Taschenrechner immer weiter zu optimieren, was den Quellcode und die Benutzung angeht. Ich denke so habe ich den größten Lernerfolg aus solch einem Projekt.
cin.sync() habe ich gelernt ist dafür da, dass nach der cin zahl2 eingabe das Enter drücken wieder gelöscht wird, da es sonst noch in einem Zwischenspeicher ist und cin.get() auslösen kann. Deshalb habe ich es dort reingeschrieben.^^
cin.get() verwende ich so wie du es vermutet hast. Das ist auch ein guter Tipp, werde ich versuchen!
Polnische Notation werde ich mir auf jeden Fall irgendwann anschauen, wenn ich den Taschenrechner so fertig habe, dass ich zufrieden bin!
Vielen Dank für die Beiträge! Haben mir sehr geholfen!

-
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.
-
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 Breymanndas 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/Standardwenn 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