ERLEDIGT
NEIN
NEIN
ANTWORTEN
15
15
ZUGRIFFE
872
872
EMPFEHLEN
-
26.01.09 19:48 #1
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
Hiho muss bis morgen in der Schule nurmerische Integration Simpson und Newtown Verfahren fertig haben( Trapez und Parabel Formeln).
Ich habe soweit alles fertig Eingabe...
Mein Problem ist nun das ich eine Eingabe haben möchte wo man die zu integrierende Funtion einträgt.
Bislang habe ich die Funktion immer in meineSourcecode festgelegt.
wenn ich z.b.
sin(x)*sqrt(x) habe
muss in ich erkenne aha
und:
Code :1 2 3 4
float f(float x) { return sqrt(x) * sin(x); }
wenn ich nun etwas anderes eingebe muss sich dies Fuktion ändern.
Ich hatte schon an eine switch case Anweisung gedacht aber da gäbe es bei verketten unendlich viele möglichkeiten.
Hat jemand eine Idee?Geändert von 3Cyb3r (26.01.09 um 20:52 Uhr)
Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
26.01.09 21:43 #2
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
Hi
Ich hab eine eingabe z.b.
sin(x) als string.
wie mache ich aus diesem string ein Befehl der während der laufzeit aufgerufen wird?
als wenn ich das in den code schreiben würde ständ dann da sin(x);.
Also ich muss wissen wie ich eine Funktion die in eine srtring steht ausführe.
Das Problem ist cc ist keine Interpreter Sprache und ich glaubnicht das Python Script
kompatibel mitm TI ist-.-. Wie macht das denn dann ein Taschenrechner?
Oder kennt jemand ein Tutorial Code Assembler Interpreter für so etwas welchen ich integrieren kann (wie eine Funktion)?Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
Hm also du musst das ganze dann schon parsen ... dann das ganze einfach in folgendes packen:
...Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
typedef struct function { typedef double (*fn_type)(double); fn_type call; const char* string; } function_t; function_t registered[] = { {&sin, "sin"}, {&cos, "cos"} }; double call_function(const char* string, const double value) { function_t* ptr_end = registered + sizeof(registered) / sizeof(function_t); for (function_t* ptr_it = registered; ptr_it != ptr_end; ++ptr_it) if (strcmp(string, ptr_it->string) == 0) return (*(ptr_it->call))(value); /* error handling */ } int main() { printf("%d", call_function("sin", 90)); }
-
Da wirst du wohl nicht anders können als einen Interpreter dafür zu schreiben...
ob das bis morgen geht?
Edit: Hab irgendwie nicht mitgekriegt, dass da schon zwei Beiträge sind...
Geändert von sheel (26.01.09 um 23:19 Uhr)
-
26.01.09 22:09 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hoppala, plötzlich ist alles verschoben...

Naja, mein Senf auch noch:
Hi.
Du müßtest von deinem Ausdruck einen Syntaxbaum im Speicher erstellen den du dann immer wieder auswerten kannst.
Siehe http://www.tutorials.de/forum/1138857-post5.html
Da hat RedWing allerdings nur ein einfacher Parser für math. Ausdrücke ohne Variablen und Funktionsaufrufe programmiert. Es dann nochmal schwieriger wenn du solche Elemente erlaubst.
Du könntest allerdings eine Zuordnung von Strings zu unären Funktion (bzw. Funktionszeigern) definieren und dann die entsprechende Funkton aufrufen.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
29.01.09 12:59 #6
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
Ich bin verwirrt Devdevil könntest du vielleicht einmal ein luffähiges Beispiel posten?
Was genau soll fn_type oder eher wie sollte sie aussehen?Geändert von 3Cyb3r (29.01.09 um 13:15 Uhr)
Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
29.01.09 13:33 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Geändert von deepthroat (29.01.09 um 13:39 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
29.01.09 14:00 #8
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
Hi welche inlcude brauch ich dafür?
Für fn_type?Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
29.01.09 14:10 #9
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
29.01.09 14:37 #10
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
Ok hab das mal beim msvs 6.0 getestet funtkioniert einwandfrei
.
Allerdings meckert der TI C Kompiler gnadelos rum.
TIGCC IDE ist das.
Code :1 2 3
typedef double (*fn_type)(double); ->>Expected specifier-qualifier-list before 'typedef'.
Code :1 2 3 4
function_t registered[] = { {&sin, "sin"}, {&cos, "cos"} }; ->>'sin' undeclared here (not in a function). ->>'cos' undeclared here (not in a function).
C99 mode is dasBei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
29.01.09 15:30 #11
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hast du den typedef aus dem struct rausgenommen?

Dies liegt daran, das auf dem TI keine richtige C Bibliothek verfügbar ist und die ganze math. Funktionen Präprozessormakros sind.
Du könntest richtige Funktionen definieren:
GrußCode c:1 2 3
double _sin(double d) { return sin(d); }
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
29.01.09 16:21 #12
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
Ja habe ich, wenn ich das typedef wecknehme bekomme ichnoch mehr Fehler
Code :1 2 3 4 5 6 7 8 9 10
function_t registered[] = { {&_sin, "sin"}, {&_cos, "cos"} }; Expected '=', ',', ';', 'asm' or '__attribute__' before 'registered'. function_t* ptr_end = registered + sizeof(registered) / sizeof(function_t); 'ptr_end' undeclared (first use in this function). 'registered' undeclared (first use in this function). function_t* ptr_it; 'ptr_it' undeclared (first use in this function).
Kann ich nicht irgendwie das Makefile des Kompilers benutzen und mit dem msvs 6.0 oder 9.0 das ganze Kompilieren?Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
29.01.09 16:46 #13
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Nochmal zum Mitschreiben: du mußt das typedef aus dem struct rausnehmen, z.B. direkt vor das struct schreiben...
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
29.01.09 16:50 #14
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
Ja schon klar hatte ein anderen Fehler funktioniert jetzt alles einwadfrei.
Danke für die Hilfe hat mich echt weitergebract mach das jetzt noch mit dem verketten
mit rechenzeichnen und mehr Funktionen und dann werde ich den Code mal posten für die, die es Interessiert.Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
29.01.09 19:55 #15
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
So neue Frage.
pos[i]=tmp-cfunction;Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//global char cfunction[256]; // nun wird eingelesen // später in einer funktion char* tmp; char opk[] = "*/+-"; int pos[100]; pos[0]=-1; int i=1,j=0; tmp = strpbrk(cfunction, opk); while (tmp != NULL) { pos[i]=tmp-cfunction; tmp = strpbrk (tmp+1,opk); i++; }
Diese Zeile ist bestimm falsch um die Stelle eine Zeichens zu speichern
geht dies einfach mit
pos[i]=tmp-(char*)cfunction;?
Also mit 0 eingerehcnet.Geändert von 3Cyb3r (29.01.09 um 19:58 Uhr) Grund: was frag ich eigentlich oder die ist falsche
Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
Ähnliche Themen
-
Numerische Konstanten
Von Topsen im Forum C/C++Antworten: 1Letzter Beitrag: 17.07.08, 09:56 -
C / Numerische Integration nach der Trapezregel
Von köln im Forum C/C++Antworten: 11Letzter Beitrag: 03.06.07, 15:14 -
Numerische Namensabfrage in SQL?
Von Pestilence im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 31.10.06, 11:05 -
numerische Eingabe für Sonderzeichen
Von ziriander im Forum Office-AnwendungenAntworten: 4Letzter Beitrag: 07.05.04, 10:17 -
Numerische Ausdruecke Abfragen //
Von tilman im Forum PHPAntworten: 6Letzter Beitrag: 21.10.01, 20:58





Zitieren


Login






