Forum: PC-Programmierung Hilfe! Muss in MFC einen Taschenrechner Programmieren.


von asd (Gast)


Lesenswert?

Hallo erstmal,

ich muss einen Taschenrechner in MFC programmieren. Kann aber garnix.
Ich bin schon soweit das er eine Zahl in ein Feld einträgt aber wenn
ich auf eine weitere Zahlentaste z.B. 0 drücke wird die vorherige
überschrieben.

Wie kann ich es machen das die Zahl nich überschrieben sondern angehänt
wird?

Danke im vorraus ;o)
mfg Alex

von Rufus T. Firefly (Gast)


Lesenswert?

Indem Du den String nicht überschreibst?

www.codeproject.com ist eine nette Anlaufstelle für MFC-Anfänger (und
auch fortgeschrittenere)

von asd (Gast)


Lesenswert?

Danke für die Seite, aber ich bin auch In Englisch keine so flotte
Biene. ;O( Trotz dem Danke versucch mich mal durch zu schlängeln.

Kannst du mir vielleicht auch sagen wie ich einen String überschreibe?
Bis jetzt hab ich immer nur den Buttons einen Wert zugewiesen den sie
ausgeben wenn man auf sie drückt.
Mein Button "0" sieht so aus:

void CpoiDlg::OnBnClickedButton10()
{
  UpdateData(true);
  Erg_1=0;
  UpdateData(false);
}

Danke für deine Hilfe :o)

von Rufus T. Firefly (Gast)


Lesenswert?

Was ist Erg_1?

von Tobi (Gast)


Lesenswert?

du solltest dir irgendwo einen string anlegen, an den du immer die
zahlen anhängst und den du jedes mal ausgibst

von asd (Gast)


Lesenswert?

Autor: Rufus T. Firefly
Datum: 09.02.2005 12:02

Was ist Erg_1?

Erg_1 ist das Feld in dem das Ergebnis zum Schluss ausgegeben werden
soll.

Autor: Tobi
Datum: 09.02.2005 12:19

Du solltest dir irgendwo einen string anlegen, an den du immer die
zahlen anhängst und den du jedes mal ausgibst.

Wie leg ich mir einen String an? Und wie geb ich die aus?

von T.Stütz (Gast)


Lesenswert?

wie wäre es mit

Ergebnis = Ergebnis * 10 + 1;  // wenn "1" Gedrückt dann aktuelle
                               // Zahl um eine Stelle nach Links und
                               // 1 dazuaddieren.

Gruss

von asd (Gast)


Lesenswert?

Dann soll ich es am besten so schreiben:
Bei Button 0

void CpoiDlg::OnBnClickedButton10()
{
  UpdateData(true);
  Ergebnis=Ergebnis*10+0;
  UpdateData(false);
}

Gruss zurück :O)

von asd (Gast)


Lesenswert?

Danke,danke,danke,danke x 10000

Es funktioniert mit  "Ergebnis=Ergebnis*10+0;". Ich habe das jetzt
mit jedem Button gemacht.

Jetzt hätt ich nur noch eine Frage. Wie stell ich es an, dass er auch
die Zahl multipliziert, dividiert, addiert oder subtrahiert wenn ich
auf die entsprechende Taste drücke? Und wie lasse ich ihn dann eine
zweite Zahl einlesen? :O(

ok eswaren zwei Fragen. ;o)

Gruss Alex

von Andreas krieger (Gast)


Lesenswert?

Wie siehts denn aus? soll der rechner auch punkt vor strich
berücksichtigen? Es wird dir nach überlegung doch klar sein, daß du
weitere variablen brauchst die du dann bei drücken weiterer
aktions-tasten +-x/= usw miteinander richtig in unterprogrammen
verrechnest
viel Erfolg.

von asd (Gast)


Lesenswert?

es währe nicht schlecht wenn das gehen würde. Aber wie gesagt ich bin
ein blutiger Anfänger. Ich bin mit Hilfe jetzt auch nur soweit
gekommen.

Kannst du mir vielleicht weiter helfen? Wäre echt nett.
Ich hoff das ich auch Erfolg ernten werde.

Gruss Alex

von Tobi (Gast)


Lesenswert?

@asd
ich würde ernsthaft empfehlen mich erst einmal in die grundlagen der
programmierung einzuarbeiten, bevor du weiter machst. solche sachen wie
der umgang mit strings usw sollten bekannt sein, sonst wird sehr schwer
werden

von asd (Gast)


Lesenswert?

Ich mach das je nicht beruflich. Es war eine Aufgabe das Spiel Schiffe
versenken zu Programmieren. Aber zum einüben in MFC hab ich mir gedacht
das ich erst einmal einen Tachenrechner programmiere. Und ich kann
garnix.

grus alex

von faust (Gast)


Lesenswert?

Um Berechnungen wie Addition, Subtraktion, Division, ... durchzuführen,
schreib dir doch für jede Rechenart eine Funktion.
z.B.

int addiere(int a, int b)
{
    int c;
    c = a + b;
    return c;
}

Als Anfänger solltest du das ganze erstmal als Konsolenprogramm
versuchen, später hast du die Möglichkeit die graphische Oberfläche zu
gestalten.

PS: Schiffe versenken find ich für den Anfang ganz schön hart.

von asd (Gast)


Lesenswert?

Ich hab das schon als Konsolenprogamm gemacht bloß möcht ich es jetzt
auch umsetzten können. Aber danke :o)

Wie kann ich es machen das er unterscheiden kann das die erste
eingegebene Zahl wie du geschrieben hast a ist und das die zweite Zahl
b ist?

Das Schiffe versenken Spiel wurde mir zugewiesen. Es ist schon schwer
aber wenn ich das schaffe (wenns geht mit deiner Hilfe ;o) als Mädchen,
das noch nie programmiert, hat ist das schon gut. denk ich

Danke für die bisherige Hilfe

von asd (Gast)


Angehängte Dateien:

Lesenswert?

So sieht mein Taschenrechner bis jetzt aus.

von faust (Gast)


Lesenswert?

Sorry ich keinn mich mit MFC nicht aus, aber er will eine DLL von mir
haben. (MFC70D.DLL)

Die Funktione addiere rufst du wie folgt auf:

int main( int argc, char * argv[])
{
    ...         //Variablen anlegen
    ...         //Wert summand_a einlesen
    ...         //Wert summand_b einlesen
    ergebnis = addiere(summand_a, summand_b);
    ...         //ergebnis ausgeben
}

von asd (Gast)


Angehängte Dateien:

Lesenswert?

So hab ich es bei dem Konsolenprogramm gemacht. Aber ich kann das
realisieren wenn ich zwei Fenster habe in das eine ich die erste und in
das zweite die zweite Ziffer eingebe. Dann geht das so.

Hab jetzt ein Foto von meinem Rechner gemacht. Kannst es dir anschauen.
Mach jetzt noch eins mit den Bezeichnungen für die Variabeln.

von asd (Gast)


Lesenswert?

Hab jetzt die Bezeichnungen für die Buttons und das Feld gegeben.

von asd (Gast)


Angehängte Dateien:

Lesenswert?

Jetzt aber!

von T.Stütz (Gast)


Lesenswert?

Wie du richtig erkannt hast brauchst du zum berechnen der
Addition/sub/Mul/Div jeweils 2 Operanden (a und b).

? wie gibst du bei einem Taschenrechner die beiden operanden ein ?

Du gibst die erste Zahl an, dann den Operator und danach den 2.Operand
danach gefolgt von einem "=" oder weiteren Operator.

=> Du brauchst also noch einen weiteren Speicher um den ersten/zweiten
Operand zu merken

=> bei einem Operator "+" / "-" ... "=" merken des Operanden
Bsp:

Du drückst "1","2","3" => ergebnis = 123
jetzt "+" => opd1 = ergebnis, Operator='+', ergebnis=0
dann "4","5" => ergebnis = 45
dann "=" jetzt wird erst das ergebnis berechnet
if (operand == '+') dann ergebnis = opd1 + ergebnis

Hoffe das gibt nen Anstoß

Gruss

von asd (Gast)


Lesenswert?

Guten Morgen

Ich weiß jetzt schon einmal was für einen Weg ich gehen muss. danke.
Aber kannst du mir auch sagen wie ich einen zweiten Speicher erstelle?

Den ersten Schritt habe ich ja schon gemacht indem ich die Zahlen
eingeben kann und er gibt sie mir auch richtig aus.
Jetzt verteh ich bloß nicht was du als nächstes geschrieben hast.
"jetzt "+" => opd1 = ergebnis, Operator='+', ergebnis=0"
Wie soll ich das in MFC umsetzen?


Alex

von Tobi (Gast)


Lesenswert?

in mfc musst du dazu garnix umsetzten.

du brauchst 2 weitere variablen:
- eine für das rechenzeichen
- eine für die 2. zahl

wenn ein rechenzeichen eingegeben wird speicherst du das in der
vorgesehenen var, kopierst die bisher eingegebene zahl in die 2.
variable und liest wieder ein

von asd (Gast)


Lesenswert?

Das hat mir leider nicht geholfen. Denn ich weiß nicht wie ich das
umsetzten in MFC soll. Also ich weiß nicht wie ich das schreiben soll.

Sorry

von Tobi (Gast)


Lesenswert?

sorry, aber ich werde hier keinen fertigen code posten. dieser teil der
umsetzung hats nichts, aber auch garnichts mit mfc zu tun sondern mit
reinem programmieren. wie hast du den rechner denn als konsolenprogramm
gemacht?
überigens gibt es eine menge gute c++ tutorials im netz, da sollte man
sich auch hin und wieder mal selber ein paar details zusammenlesen

von asd (Gast)


Lesenswert?

Wir hatten ein einwöchige Schulung. Ich habe davon zweit Tage verpasst
da ich krank war. jetzt hieß es ich sollt das Spiel Schiffe versenken
in MFC machen. Von dem ich noch nie was gehört habe.

Ich habe von dir auch keinen vertigen Post gewollt. Und auserdem
brauchst du ja auch nicht versuchen mir zu helfen, wenn du sowieso nur
strunzen (für doofe nörgeln) kannst.

Toll freu dich du kannst so einen Mist ich aber nicht. Sei doch ruhig
wenn du nicht helfen willst. Es gibt andere hier die mir schon sehr
weit geholfen haben in dem sie mir Sachen kla gemacht haben.

Also Schnabel zu oder hilf mir indem du mir Sacher erkläst.

Gruss Alex

von Tobi (Gast)


Lesenswert?

tsts.. auch noch zickig werden

von asd (Gast)


Lesenswert?

Ich doch nur nach Hilfe gefragt du sagts gleich das du mir keinen Psot
geben willst den ich auch gar net haben will.

Ich brauch doch nur Hilfe............

:o(

von Tobi (Gast)


Lesenswert?

"Also ich weiß nicht wie ich das schreiben soll."
das hört sich nunmal sehr nach einer frage nach code an. wenn das nicht
so gemeint war nehm ich das natürlich zurück. leider fragen hier zu oft
leute nach fertigen sachen..

du brauchst wie gesagt eine varibale für das rechenzeichen:

dort schreibst du bei einem druck auf +,-,/,* das zeichen rein

z.b operator = "+";

zusätlich musst du die vorher eingegebene zahl in einer andere variable
speichern:

zahl2 = zahl1;

dann zahl1 wieder auf null setzten für neue eingaben:

zahl1 = 0;

die sache ist, jetzt musst du noch erkennen wenn etwas gerechnet werden
muss. dafür wäre noch eine variable geeignet, die speichert, ob du schon
2 zahlen beisammen hast

bool zahl2_vorhanden;
standardmässig oder nach dem löschen ist diese var false.

nachdem du zahl2 = zahl1 gemacht hast ist zahl2_vorhanden = true

als nächstes musst du dann schaun, ob, wenn ein rechenzeichen gedrückt
wird noch eine alte rechnung da ist. grob ungefähr alles so:

zahl1 = 0;
zahl2 = 0;
operator = 0;
zahl2_vorhanden = false;

** jetzt 1. zahl eingeben und z.b + drücken

zahl2 = zahl1;
operator = "+";
zahl1 = 0;
zahl2_vorhanden = true;

** jetzt 2. zahl eingeben. und ein rechenzeichen drücken:

zahl2_vorhanden ist jetzt true, d.h erst rechnen:

if (operator == "+")
zahl2 = zahl2+zahl1;

if (operator == "-")
...usw

danach zahl1 = 0 setzten und wieder von vorne beginnen
das ergenis steht dann immer in zahl2 drin

von Tobi (Gast)


Lesenswert?

nachtrag:
beim letzten abschnitt nach den if anweisungen noch das neue
rechenzeichen speichern!

von asd (Gast)


Lesenswert?

Ok danke ich werds versuchen.
Arbeite gerade daran in MFC mein Schifferversenken zu programmieren.
Bin jetzt soweit das er Schiffe setzt, muss aber noch schauen das ich
es hinbekommedas er mir auch zweier und dreier Schiffchen baut.

Nochmal danke für deine Hilfe.

von faust (Gast)


Lesenswert?

???
alex???
???

Hast du zuvor schon einmal, in irgend einer Sprache programmiert?

Es ist ja schön, dass du schon "Einer" Schiffe setzen kannst. Ich geh
mal davon aus, dass du dein Schiff per Zufallszahl setzt. Wenn du
längere Schiffe setzen willst, dann musst du eben ein oder mehrere
Felder dazufügen, in die entsprechende Richtung, die du haben willst
(oder auch zufällig).

Aber das Taschenrechnerprogrämmchen solltest du auf alle Fälle vorher
fertigmachen und verstehen, weil du sonst von dem was wir dir sagen
werden nicht viel verstehen wirst. Also, erst die kleinen Brötchen
backen!!

von asd (Gast)


Lesenswert?

Ich hab noch nie programmiert.
Ok Chef. Ich back jetzt kleine Brötchen. Fang gleich an.

:o) Alex

von Alex (Gast)


Lesenswert?

Danke für eure Hilfe!!!

Bin ein Stückchen weiter gekommen.

von Thimo (Gast)


Lesenswert?

Mich würde interessieren wer von einem absolutem Programmieranfänger
gleich verlangt ein ganzes Spiel zu programmieren.

von Hans (Gast)


Lesenswert?

och ein spiel wäre nicht soo schwer.. parser für richtig geile
taschenrechner sind komplexer als man das meinen würde ;)

da sitzt man auch wenn man weis wies geht eine zeit lang...

gut mit infix=>postfix sollts fix gehn ;)

schifferl versenken programmieren ohne hintergrundwissen über oop stell
ich mir sehr amüsant vor G

ich würd da mir ein mehrdimensionales pointer array anlegen... die mit
0 füllen und dann die anzahl der schifferl die du setzen willst objekte
anlegen.. im pointer array setzt zu jetzt überall wo das schifferl stehn
soll einen pointer auf das jeweilige schiff-objekt..

beim versenken brauchst nur auf die zu beschießende stelle schaun.. ist
da eine 0 ist wasser und sonnst weist sofort welches schiff dran ist
;)...
im schiff müsstest noch ein array reinpacken in dem die getroffenen
zellen stehn..
im einfachsten fall ein CTypedPtrArray oder ein ob array.. das füllst
mit objekten wo eigentlich nur zeile und spalte drinnen ist..

das durchsuchst bei jedem treffer und damit weist du dann ob schon
getroffen wurde oder nicht... umgekehrt könntest du das teil auch mit
den positionen füllen wo das schiff steht und jede position die
getroffen wurde rauslöschen... wenn keine elemente drinnen sind ist das
ding tot... je nach geschmack ;)

gut genug hilfe jetz viel spass beim codieren G

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.