Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Taschenrechner programmieren?! Komme nicht weiter!!!

Diskussion: Taschenrechner programmieren?! Komme nicht weiter!!! im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Grüßt euch leute, ich sollte in der übung ein taschenrechner programmieren! also die aufgabe war, das man die ganze ...

Antwort
Alt 23.02.08, 16:59   #1 (permalink)
 
Benutzerbild von fecub
 
Registriert seit: 14.08.07
fecub Leistung: Facit NTK
Likes: 0
Standard Taschenrechner programmieren?! Komme nicht weiter!!!

Anzeige

Grüßt euch leute,
ich sollte in der übung ein taschenrechner programmieren!
also die aufgabe war, das man die ganze rechen aufgabe schreibt, und das program rechnet es halt dann aus.
die aufgabe kann man so schreiben wie man möchte, also zwischen den zahlen können auch buchstaben sein, das program filtert nur die zahlen und das operanten aus!


Ich habe es mir so überlegt das ich die einzelnen zahlen und operanten mit ne scheife rauspicke!!
das rauspicken hat geklappt nur jetzt weiß ich nicht wie ich mit den zahlen rechnen könnte.

::::hier ist der code::::

Code:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	
	char aufgabe[100];
	char zeichen[100];
	int i,z;
	int ziffer[100];
	i=0;
	z=0;

	//rechenaufgabe einscannen
	printf("\n\t\tTaschenrechner! \n\n");
	printf("\tbitte rechenaufgabe eingeben: ");  gets(aufgabe); 
	
	
	
	
	//zahlen werden entsprechenden zugewiesen
	while(aufgabe[i] != '\0')
	{
		if(aufgabe[i] < 48 || aufgabe[i] > 57)
		{
			printf("");
			i++;
		}
		else
		{
			ziffer[i] = aufgabe[i];
			i++;
		}
		
		if(aufgabe[i]==42 || aufgabe[i]==43 || aufgabe[i]==45 || aufgabe[i]==47)
		{
			zeichen[z]=aufgabe[i];
			i++;
		}
		
	}

	//... ab hier komm ich nicht weiter


	printf("\n");
	return EXIT_SUCCESS;		
}
würde mich freuen wenn ihr mir weiterhelfen würdet.

Gruß
fecub ist offline   Mit Zitat antworten
Alt 23.02.08, 18:31   #2 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Ich würde den eingelesenen String splitten mit z.B. strtok(). Also Tokens auslesen die operatorgetrennt sind. z.B 3+4. Operator ist hier +. Dann bleibt 3 und 4 über. Diese Tokens kannst du anschließend mit atof() zu double casten.
mauralix ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 23.02.08, 18:44   #3 (permalink)
 
Registriert seit: 13.12.07
vv4yn3 Leistung: Facit NTK
Likes: 0
Standard

So wie du das gemacht hast bekommst du nur einstellige Zahlen, ich weiß nicht ob du das so möchtest. Außerdem musst du bedenken, dass du von den Werten der Zahlen jeweils 48 oder '0' abziehen musst, sonst sind die Zahlen um 48 größer als der Anwender eingegeben hat. ( Wobei '0' schöner ist, weil man im Quellcode leichter nachvollziehen kann was du damit bezweckst)
vv4yn3 ist offline   Mit Zitat antworten
Alt 23.02.08, 18:59   #4 (permalink)
Themenstarter
 
Benutzerbild von fecub
 
Registriert seit: 14.08.07
fecub Leistung: Facit NTK
Likes: 0
Standard

@mauralix
könntest du mir vieleicht ein kleines beispielcode zeigen

@vv4yn3
ja es muss auch drei stellen rechnen können.
Genau da ist mein problem, gibt es nicht irgendwie eine funktion z.b die 2 variablen zur einer varibale miteinander verbindet????
fecub ist offline   Mit Zitat antworten
Alt 23.02.08, 19:12   #5 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Ich helfe ja immer gern :-)
So kannst du die Tokens in Zahlen konvertieren.
Code:
   char str[100]={"12+4*3+1/5+100%2"};
    char *op={"+-/*%"};
    char *tok;
    double number;
    
    tok = strtok(str,op);
    
    while(tok){
        number = atof(tok);
        printf("token=%f\n",number);
        tok = strtok(NULL,op); /* Jetzt mit NULL aufrufen !!! */
    }
mauralix ist offline   Mit Zitat antworten
Alt 23.02.08, 19:12   #6 (permalink)
 
Registriert seit: 13.12.07
vv4yn3 Leistung: Facit NTK
Likes: 0
Standard

Du kannst es eigentlich ganz einfach selbst lösen.

Wenn wir zum beispiel den String

"343+465" hernehmen und jetzt die beiden Zahlen auslesen wollen, müssen wir einmal an der ersten Stelle beginnen. Wenn mehrere Ziffern hintereinander stehen, dann ist das eine Zahl, wenn wir eine Ziffer finden müssen wir also einfach prüfen, ob die nächste Stelle ebenfalls eine Ziffer ist.

Wir nehmen eine Integer Variable, der wir, wenn wir die erste Ziffer einer Zahl finden den Wert dieser Ziffer zuweisen.
Wenn das nächste Zeichen keine Ziffer ist, dann rechnen wir mit dieser Variable.
Andernfalls multiplizieren wir die Variable mit 10, dadurch rückt die Ziffer eine Stelle weiter, bei unserem Beispiel hätten wir also zuerst den Wert 3, das nächste Zeichen ist eine Ziffer also multiplizieren wir mit 10, dann haben wir 30, nun addieren wir die nächste Ziffer dazu, das ergibt 34, das nächste Zeichen ist wieder eine Ziffer, also machen wir das ganze nochmal und erhalten 343 danach kommt keine Ziffer also verwenden wir die Variable für die Berechnung.

Die nächste Zahl können wir auf die gleiche Weise lesen.

Und mit dieser Methode können die Zahlen beliebig lang sein.
vv4yn3 ist offline   Mit Zitat antworten
Alt 23.02.08, 19:33   #7 (permalink)
Senior Member
 
Benutzerbild von t3rr0r.bYt3
 
Registriert seit: 07.01.03
t3rr0r.bYt3 Leistung: Z3
Likes: 19
Standard

Oder du merkst dir einfach die Anfangs- und End-Position im String, die eine Zahl eingrenzen (bei "343+465" die Positionen 0,2 und 4,6) und parst dann die Sub-Strings.
Um zu schauen, ob ein Character eine Zahl ist, kann man z.b. schauen, ob der ASCII-Wert im richtigen Bereich ist.
t3rr0r.bYt3 ist offline   Mit Zitat antworten
Alt 23.02.08, 19:37   #8 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Ich hab doch schon gezeigt wie es geht. Das kostet normalerweise mindestens ein Bier, wenn ich das ausserhalb meiner Arbeitszeit mache
mauralix ist offline   Mit Zitat antworten
Alt 23.02.08, 19:58   #9 (permalink)
 
Registriert seit: 15.01.08
LionC Leistung: Facit NTK
Likes: 0
Standard

ma son blöder tipp von einem blöden batcher: lern batch

dauert mit dem richtigen tut 1-2 tage bis des drauf hast un mit batch is das ganze voll einfach.
LionC ist offline   Mit Zitat antworten
Alt 23.02.08, 22:51   #10 (permalink)
Themenstarter
 
Benutzerbild von fecub
 
Registriert seit: 14.08.07
fecub Leistung: Facit NTK
Likes: 0
Standard

leutz danke für die tipps!!!!

@mauralix
thx für den code

@vv4yn3

bor, darauf wäre ich niemals gekommen!! das war ne große hilfe. danke danke!!

aber ich habe sie als char deklariert, weil ich sonst nicht an den operanten komme.
wenn ich sie als integer deklarieren würde, würde ich doch probleme bekommen. Wie könnte ich das eigentlich lösen???

aber ich versuchs mal zu proggen könnten jederzeit weiter fragen auftauchen
fecub ist offline   Mit Zitat antworten
Alt 23.02.08, 23:41   #11 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

das gabs schon mal als Aufgabenreihe:
"Aus klein mach groß": Teil2 - Zahlen und Satzzeichen
"Aus klein mach groß": Teil3 - Rechnen mit Zahlen
"Aus klein mach groß": Teil4- Zahlen anordnen
Am Ende entsteht ein vollständiger Infixrechner (kann Eingaben wie (12*(13+14)-16/17) Verarbeiten)
Enthält eventuell den einen oder anderen nützlichen Tipp
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 24.02.08, 18:55   #12 (permalink)
Senior Member
 
Benutzerbild von t3rr0r.bYt3
 
Registriert seit: 07.01.03
t3rr0r.bYt3 Leistung: Z3
Likes: 19
Standard

Ich frag mich nur, warum vv4yn3 das parsen selbst machen will, da bietet doch jede Standard-Lib was an (in Java z.b. Integer.parseInt(String s))?

Damit erfindet ihr gerade das Rad neu, und auch eher ungeschickt: was passiert, wenn deine Zahl zu groß und überläuft? Da muss man sich um die Grenzen kümmern usw.
Außerdem kann es evtl. mal erwünscht sein, die eingelesene Zahl als base2 oder base16 oder sowas zu interpretieren, somit multipliziert man nimmer mit 10, sondern eben mit 2 oder 16 usw. --> das muss parametrisiert werden.

All das nimmt einem jeder Standard-Parser ab.
t3rr0r.bYt3 ist offline   Mit Zitat antworten
Alt 24.02.08, 23:59   #13 (permalink)
Themenstarter
 
Benutzerbild von fecub
 
Registriert seit: 14.08.07
fecub Leistung: Facit NTK
Likes: 0
Standard

sinn der sache ist ja, das wir das ohne zusätzlichen libs machen sollen!!!
fecub ist offline   Mit Zitat antworten
Alt 25.02.08, 00:15   #14 (permalink)
Senior Member
 
Benutzerbild von t3rr0r.bYt3
 
Registriert seit: 07.01.03
t3rr0r.bYt3 Leistung: Z3
Likes: 19
Standard

Ich sagte nicht umsonst *Standard*-Lib. Ich habe jetzt keine Ahnung von dieser Sprache, aber Google spuckt mir auf die schneller sowas aus:

System::Int32:arse(System::String);

Vielleicht wird damit klar, was ich meine.
t3rr0r.bYt3 ist offline   Mit Zitat antworten
Alt 25.02.08, 00:39   #15 (permalink)
Themenstarter
 
Benutzerbild von fecub
 
Registriert seit: 14.08.07
fecub Leistung: Facit NTK
Likes: 0
Standard

fecub ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Taschenrechner programmieren?! Komme nicht weiter!!!
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
komme nicht weiter sommerkatze Windows 2 22.08.08 11:18
Komme mit Linux nicht ins internet RedEagle Internet Allgemein 8 02.09.07 23:39
Komme nicht ins BIOS Black_Box_91 Die Problemzone 8 29.11.05 14:34
Komme nicht mehr als Root ins Kde HighTower Linux/UNIX 12 09.08.04 16:30
Komme nicht weiter resign Windows 1 22.03.04 15:27


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61