Kod źródłowy PHP, chyba ext/standard/math.c |
Kod źródłowy PHP, chyba ext/standard/math.c |
28.12.2004, 20:05:12
Post
#1
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 20.11.2004 Ostrzeżenie: (0%) |
Pytanie odtyczy kodu źródłowego php.
Czy moze mi ktoś napisać jakie funkcje są wykorzystywane w czasie wykonywania skryptu mniej wiecej takiego:
wydaje mi się że w celu wykonania takeigo kodu jest wykorzystywany taki plik jaki dałem w opisie czyli ext/standard/math.c, ale tam są funkcje na funkcje trygonometryczne i podobne. Czy ktoś mi pomoże? |
|
|
30.12.2004, 08:27:20
Post
#2
|
|
Grupa: Zarejestrowani Postów: 109 Pomógł: 1 Dołączył: 19.03.2004 Ostrzeżenie: (0%) |
Nie jest to math.c na pewno - w tym pliku definiowane sa takie funkcje jak sin, cos, itp.
Za dzialania mat. odpowiedzialny jest plik zend/zend_operators.c |
|
|
2.01.2005, 18:07:48
Post
#3
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 20.11.2004 Ostrzeżenie: (0%) |
Plik, który podał netzah jest dobry, ale go praktycznie nie rozumiem. Moze ktoś ma/zna kody źródłowe prostego kalkulatora który robiłby np. takie zadania (3+3*4)/(4*43-476) .
Nie proszę o kody źródłowe Windowsowego kalkulatora |
|
|
2.01.2005, 19:04:19
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) |
coś Ci się chyba Zigi pomieszało.
Po pierwsze do wykonania tego skryptu oprócz inicjalizajnych i cleanupowych funkcji samego php wykorzystuje się tylko jakiś php-owy (albo nawet i nie, może ten z glibc) odpowiednik printf[3]. Po drugie nie ma czegoś takiego jak prosty kalkulator... a już na pewno nie prosty kalkulator obsługujący nawiasy. To już musi być jakiś analizator składni. Jeżeli chcesz prosty kalkulator to kiedyś takowy napisałem, ale on wykonuje wszytko po koleji i ma tylko 4 działania (ale za to obsługa big numbers... z openssl, ale to już mankamenty techniczne). Uruchamiasz: `./bncalc 1 + 2 + 3` itp Kod /* Adam <adam-wieckowski@tlen.pl> Więckowski @ 30.10.2004 Compile: gcc -std=gnu99 -lsll -lc -pedantic -o bncalc bncalc.c */ #include <stdio.h> #include <error.h> #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <openssl/bn.h> #include <openssl/err.h> int main(int ac, char *av[]) { BIGNUM *a, *b, *r; char buf[512]; BN_CTX *ctx=BN_CTX_new(); a=BN_new();b=BN_new();r=BN_new(); if(!BN_dec2bn(&r,av[1])) goto error; for(int i=2;i<=ac;i+=2) { if((ac-i)<2) { char *buf=BN_bn2dec(r); printf("%s\n", buf); /*OPENSSL_*/free(buf); BN_free(a);BN_free(b);BN_free(r); return 0; } if(!BN_dec2bn(&b,av[i+1])) goto error; if(BN_copy(a,r)==NULL) goto error; switch(*av[i]) { case '+': case 'a': if(!BN_add(r,a,b)) goto error; break; case '-': case 's': if(!BN_sub(r,a,b)) goto error; break; case '*': case 'm': case '.': if(!BN_mul(r,a,b,ctx)) goto error; break; case '/': case ':': case 'd': if(!BN_div(r,NULL,a,b,ctx)) goto error; break; } } error: fprintf(stderr,"%s\n",ERR_error_string(ERR_get_error(),buf)); exit(-1); } A jeżeli chcesz bardziej elastyczny kalkulator to już musisz rozbić działanie na części, ułożyć zgodnie z kolejnością wykonywania działań. Zainteresuj się może takimi rzeczami jak http://mathomatic.orgserve.de/math/. To JEST prosty kalkulator (15.000 linii kodu). A jeżeli chcesz zobaczyć jak robi to php, to zauważ, że on CAŁY jest jednym wielkim analizatorem składni. |
|
|
2.01.2005, 21:02:37
Post
#5
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 20.11.2004 Ostrzeżenie: (0%) |
Właśnie robie i mi nie wychodzi zrobienie takiego kalkulatora który rozbijał by wszystko na części a następnie to wykonywał wszystko po kolei. Po to był (i nadal jest) mi potrzebny odpowiedni kod źródłowy php (nie koniecznie nawet php).
Po kodach, do których mnie odsyłacie widzę, że robilem to zupełnie inaczej ale myśle że nie tak kompletnie źle. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 15:47 |