You can subscribe to this list here.
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
(15) |
Jul
(36) |
Aug
(23) |
Sep
(1) |
Oct
(1) |
Nov
|
Dec
|
---|
From: Matteo S. <gna...@gm...> - 2009-10-29 17:19:41
|
Il giorno 29 ottobre 2009 15.18, Davide Zanin <dav...@gm...> ha scritto: > Allora come deciso lasciami (oggi spero basti) per sistemare apanum > così poi puoi divertirti a implementare le funzioni dette. > Se ti ricordi tutto bene altrimenti dimmi che faccio un file di riepilogo. > > Oggi mi sono dimenticato ma andrebbero sistemati i makefile (seguendo > questo schema): > make : compila la libreria > make install : installa la libreria > make unistall : disinstalla la libreria > make test : compila i file di test e lancia il programma di test (vedi > sotto) > make clean : cancella tutti file compilati (test e della lib) > in più bisogna aggiungere il modo per compilare in modo debug (che al > momento non mi viene in mente ma è poco importante per il momento). > Dimmi se ti par qualcosa vada cambiato o sistemato così faccio un file > in cui è indicato come deve essere fatto un makefile. > > Il programma test deve essere fatto così: > - una volta lanciato deve essere possibile scegliere tra test manuali > e automatici > - test manuali : pochi giusto quelli per I/O e funzioni di inizializzazione > - test automatici : tanti. devono scivere in un file test_nomelib.txt > quali test sono passati quali no > preparo io i primi per apanum così vedi e posso mettere subito in > difficoltà le tue funzioni > > Voglio darti lavoro da fare così hai di meglio che leggere Harry Potter! > Il giorno 29 ottobre 2009 17.09, Davide Zanin <dav...@gm...> ha scritto: > Ho scritto un po' di codice è ovviamente è più difficile del previsto. > Se dopo riesco testo un po'. L'obiettivo è che vada con gli int (però > ancora in base 100) e solo numeri naturali così puoi cominciare a > sperimentare tanto da base 100 a 1M non cambia niente per le > operazioni. In caso domani ti spiego. > > Ho anche aggiunto la funzione uStringReverse che rovescia una stringa. > Mi pareva giusto riportare tutto in mailing list =) comunque rispondendo alle 2 mail: - Ottimo fai pure con calma tanto prima di sabato di sicuro nn ci metto le mani =) - Della roba detta oggi mi ricordo credo tutto quindi per il momento non ci sn dubbi =) - Per il make Debug mi pare che gcc preveda la possibilità di compilare con o senza le info aggiuntive per i debug e credo che l' opzione sia qualcosa tipo -g.. comunque ora mi faccio un appunto e domani controllo =) |
From: Matteo S. <gna...@gm...> - 2009-09-06 17:35:22
|
ho finalmente finito di scrivere la funzione che spero vada bene perkè compila ma nn riesco a compilare il test ( ci ho perso 2 giorni e nn ne vengo a capo) ti posto il log della shell D:\Informatica\Progetti\Mathtool\ulib>make -f makefile.win test gcc.exe lib\utest.o lib\ustack_test.o lib\ulist_test.o lib\ubintree_test.o lib\u string_test.o lib\udict_test.o -lulib -o "utest.exe" lib\utest.o:utest.c:(.text+0x135): undefined reference to `testPushPop' lib\utest.o:utest.c:(.text+0x152): undefined reference to `testList' lib\ustack_test.o: In function `testPushPop': ustack_test.c:(.text+0xe): undefined reference to `puts' ustack_test.c:(.text+0x1a): undefined reference to `puts' ustack_test.c:(.text+0x26): undefined reference to `puts' ustack_test.c:(.text+0x32): undefined reference to `scanf' ustack_test.c:(.text+0x39): undefined reference to `printInt' ustack_test.c:(.text+0x3e): undefined reference to `uStackNew' ustack_test.c:(.text+0x4c): undefined reference to `malloc' ustack_test.c:(.text+0x5b): undefined reference to `uStackPush' ustack_test.c:(.text+0x76): undefined reference to `malloc' ustack_test.c:(.text+0x81): undefined reference to `uStackPush' ustack_test.c:(.text+0x93): undefined reference to `uStackIsEmpty' ustack_test.c:(.text+0xa5): undefined reference to `uStackPop' ustack_test.c:(.text+0xb4): undefined reference to `printf' ustack_test.c:(.text+0xc0): undefined reference to `uStackIsEmpty' lib\ulist_test.o: In function `testList': ulist_test.c:(.text+0xc): undefined reference to `malloc' ulist_test.c:(.text+0x67): undefined reference to `uListCreate' ulist_test.c:(.text+0x76): undefined reference to `printf' ulist_test.c:(.text+0x7d): undefined reference to `printInt' ulist_test.c:(.text+0x85): undefined reference to `uListPrint' ulist_test.c:(.text+0x91): undefined reference to `putchar' ulist_test.c:(.text+0x99): undefined reference to `uListIteratorNew' ulist_test.c:(.text+0xa7): undefined reference to `printf' ulist_test.c:(.text+0xb5): undefined reference to `printInt' ulist_test.c:(.text+0xc1): undefined reference to `printf' ulist_test.c:(.text+0xcf): undefined reference to `printInt' ulist_test.c:(.text+0xdb): undefined reference to `printf' ulist_test.c:(.text+0xe9): undefined reference to `printInt' ulist_test.c:(.text+0xf5): undefined reference to `printf' ulist_test.c:(.text+0x103): undefined reference to `printInt' ulist_test.c:(.text+0x10f): undefined reference to `printf' ulist_test.c:(.text+0x11d): undefined reference to `printInt' ulist_test.c:(.text+0x129): undefined reference to `printf' ulist_test.c:(.text+0x13f): undefined reference to `printf' ulist_test.c:(.text+0x14d): undefined reference to `printInt' ulist_test.c:(.text+0x159): undefined reference to `printf' ulist_test.c:(.text+0x167): undefined reference to `printInt' ulist_test.c:(.text+0x173): undefined reference to `printf' ulist_test.c:(.text+0x17b): undefined reference to `uListPrint' ulist_test.c:(.text+0x183): undefined reference to `free' ulist_test.c:(.text+0x18b): undefined reference to `uListFree' lib\ubintree_test.o:ubintree_test.c:(.text+0x5b): undefined reference to `printI nt' lib\ubintree_test.o:ubintree_test.c:(.text+0x89): undefined reference to `printI nt' lib\udict_test.o:udict_test.c:(.text+0xa): undefined reference to `uIntCmp' lib\udict_test.o:udict_test.c:(.text+0x30): undefined reference to `uNewInt' lib\udict_test.o:udict_test.c:(.text+0x3e): undefined reference to `uNewInt' lib\udict_test.o:udict_test.c:(.text+0x5a): undefined reference to `uNewInt' lib\udict_test.o:udict_test.c:(.text+0x68): undefined reference to `uNewInt' lib\udict_test.o:udict_test.c:(.text+0x84): undefined reference to `uNewInt' lib\udict_test.o:udict_test.c:(.text+0x92): more undefined references to `uNewIn t' follow lib\udict_test.o:udict_test.c:(.text+0xc2): undefined reference to `printInt' lib\udict_test.o:udict_test.c:(.text+0xce): undefined reference to `uNewInt' lib\udict_test.o:udict_test.c:(.text+0xe2): undefined reference to `printInt' lib\udict_test.o:udict_test.c:(.text+0xee): undefined reference to `uNewInt' lib\udict_test.o:udict_test.c:(.text+0x102): undefined reference to `printInt' C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../ulib.lib(ubintree.o):ubintree.c:( .text+0x44): undefined reference to `uMalloc' C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../ulib.lib(ubintree.o):ubintree.c:( .text+0x53): undefined reference to `uMalloc' C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../ulib.lib(ubintree.o):ubintree.c:( .text+0xdf): undefined reference to `uMalloc' C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../ulib.lib(ubintree.o):ubintree.c:( .text+0xed): undefined reference to `uMalloc' C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../ulib.lib(ubintree.o):ubintree.c:( .text+0x1ce): undefined reference to `uMalloc' C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../ulib.lib(ubintree.o):ubintree.c:( .text+0x1ff): more undefined references to `uMalloc' follow collect2: ld returned 1 exit status make: *** [test] Error 1 Dimmi tu ti prego cs sbaglio perchè non capisco e mi serve testare quello che scrivo... poi dai un sec una controllata se gli ultimi due file di test che ho aggiunto sn corretti ( avevo cambiato il nome alle funzioni perkè erano cambiate nei file relativi ad alberi e liste ) |
From: Matteo S. <gna...@gm...> - 2009-08-24 18:21:44
|
sto ancora sistemando =P ti ho detto solo di aspettare la mia prox commit dove metto su correzioni varie di tutti i tipi =) nn ho detto quando =P credo che al max per domani mattina dovrebbe esserci =) |
From: Davide Z. <dav...@gm...> - 2009-08-24 17:41:06
|
Peccato tu ti sia dimenticato di fare commit! 2009/8/24 Davide Zanin <dav...@gm...>: > aggiorno, rigenero carico! :) > > 2009/8/24 Matteo Sumberaz <gna...@gm...>: >> se nn l'hai fatta già tu la rev 165 rigenera appena la vedi tutti i >> doxy plz ( quelli di ulib ) ho sistemato parecchio in teoria >> >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day >> trial. Simplify your report design, integration and deployment - and focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Mathtool-develop mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/mathtool-develop >> > |
From: Davide Z. <dav...@gm...> - 2009-08-24 17:38:44
|
aggiorno, rigenero carico! :) 2009/8/24 Matteo Sumberaz <gna...@gm...>: > se nn l'hai fatta già tu la rev 165 rigenera appena la vedi tutti i > doxy plz ( quelli di ulib ) ho sistemato parecchio in teoria > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Mathtool-develop mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/mathtool-develop > |
From: Matteo S. <gna...@gm...> - 2009-08-24 17:18:28
|
se nn l'hai fatta già tu la rev 165 rigenera appena la vedi tutti i doxy plz ( quelli di ulib ) ho sistemato parecchio in teoria |
From: Davide Z. <dav...@gm...> - 2009-08-24 13:56:28
|
se riesco a fare quello che ho in mente ti sconvolgerò di brutto! Così nel frattempo tu hai tutto il tempo per divertirti con ulib e apalib.... |
From: Davide Z. <dav...@gm...> - 2009-08-21 16:48:24
|
- Ho provato a inserire uSTringGetToken in math tool e funziona solo che ci sono problemi per la gestione delle parentesi (non ho idea se tu testi ogni tanto) a tale proposito vedi i prossimi punti. - Tutto quello che c'è in ulib deve cominciare per u (minuscolo). Decidiamo poi una volta per tutte lo stile dei define globali, vanno sicuramente in maiuscolo (tranne la prima u) ma poi è meglio uMALLOCERROR o uMALLOC_ERROR? - Ho commentato un pochino ustring.h perchè mi rompeva ogni volta andare sul .h per vedere le definizioni al posto di usare la documentazione (quando finisco o finisci tu la rigenero e la carico sull'svn). - Mi metterò a lavorare più su math tool ora perchè è un po' tutto buttato là a caso. Mio consiglio (ma non è un imposizione) è che tu dai massima priorità (non nella vita ma a in math tool) a finire la getToken (con quello che ti dico dopo, gestione dei '+', '-' e del punto) e se vuoi divertirti con le operazioni + e - in apalib (* e / necessitano di queste). -Ora cosa aggiungerei a getToken. Per renderlà una funzione veramente potente aggiungerei un terzo parametro char *sep. Sep sta per separatore (non mi viene in inglese). Devi pensare a sep come un array di char più che ad una stringa (l'ultimo è sempre il solito '\0'). Questo array specifica tutti i cararetteri che devono essere intesi come separatori di numeri o parole. E sono un tipo a se (uSEPTYPE) Ad esempio: Passo la stringa ciao233(ciao)22 e con sep = ") (" (lo spazio in mezzo e solo per capirsi) allora deve spezzare in questi token: i = 0 => "ciao" uSTRTYPE i = 4 => "233" uNUMTYPE i = 7 => "(" uSEPTYPE i = 8 => "ciao" uSTRTYPE i = 12 => ")" uSEPTYPE i = 13 => "22" uNUMTYPE se non si vogliono separatori basta passare NULL come sep. i separatori hanno priorità assoluta se ad esempio uno passa il + o il . come separatore allora +100.85 viene spezzato in '+', "100", '.', "85" sarebbe bello poi (ma questo si può far dopo) che da type si possa si possa sapere sia se il token ritornato è un numero o una stringa e se è un separatore o no. Questo si fa come linux gestisce i permessi, cioè valutando un singolo bit. cazzo quanto ho scritto :) |
From: Davide Z. <dav...@gm...> - 2009-08-14 08:25:34
|
Sto implementando in tutti i makefile la possibilità di dare attivare un opzione per compilare con l'opzione -g che serve per poi poter debbugare il codice con gdb. Basterà scrivere make DEBUGMODE=1 (sia quando si compila la libreria che il programma di test). Spero nel pomeriggio di riuscire ad implementarlo su tutti i makefile per windows e linux. Ti lascio il link ad una semplice guida e pure ben fatta per gdb http://www.badpenguin.org/press/infomedia/gdb.html Se poi ho ancora tempo ma dubito, preparo quel discorso sul define uDEBUG, mtDEBUG e apaDEBUG per la stampa di un messaggio in caso di errore. Tra l'altro devo anche aggiungere le opzioni ai makefile perchè gcc mostri tutti i warning. |
From: Davide Z. <dav...@gm...> - 2009-08-14 08:19:05
|
Ti scrivo questa email di semi-protesta perchè secondo me non stiamo usando bene l'svn. Mi pare che siamo troppo legati a questo lo fai tu e quello che faccio non lo tocca nessuno :) Provo a dirti come secondo me bisognerebbe fare: - ti sei preso il task x, bene adesso decidi di implementarlo allora blocchi i file che ti servono. Non devi per forza temerli bloccati tutti perchè magari su certi devi solo aggiungerci un include o un define quindi una volta fatte queste piccole modifiche puoi anche caricarli subito. Hai finito di implementare quello che dovevi ma non funziona (non compila o non da i risultati sperati) allora hai tre strade: tieni i file bloccati e ci dai un occhio più tardi o un altro giorno, caricati i file e sblocchi il file (e questo significa che tutti sono liberi di modificarlo), carichi ma lo tieni bloccato (significa che non trovi l'errore ma vuoi poi modificarlo tu). Penso tu capisca cmq la prima soluzione serve per evitare che qualcun'altro vada a modificare un file che in locale hai un versione più aggiornata, la due serve perchè 2 teste sono meglio di 1 e la terza come la seconda però con un po' di orgoglio. - modifichiamo pochissimo. Se un qualsiasi file ha qualcosa che non ti piace o non va bene (nomi di funzioni, mancano commenti, errori di scrittura, ecc.) puoi anzi devi sistemarlo senza paura. Tanto se poi proprio non va bene basta ripristinare da svn la versione precedente. Ti dico questo perchè ogni tanto mi prendono manie di perfezione, nel senso che prendo un file e ci correggo tutto, anche le stupidate, commenti brutti, indentazioni non proprio belle, nomi di funzioni, e da un po' ho preso di mira uString ma non so mai se quello che carichi è la versione più aggiornata o hai altro in locale... Lo stesso vale per te se vedi anche delle piccole cose da correggere correggi, al massimo quando tenti di bloccare ti dfice che il file è già bloccato... |
From: Davide Z. <dav...@gm...> - 2009-08-13 21:58:19
|
No bè ma non è il 99 in se che mi infastidisce :) Il discorso è che bisogna per forza inizializzare prev_type però inizializzarlo con un valore che non assumerà mai e poi controllare in tutti gli if se è il primo ciclo non è la soluzione più felice... Domani con calma ti mando un email su l'svn e lavoro su debug e simili per poter usare anche il debbuger gdb, che ho iniziato ad usare ed è molto facile però in compenso una potenza. |
From: Matteo S. <gna...@gm...> - 2009-08-13 21:42:56
|
il 99 l'ho messo per fastidio perkè nn capivo dv nn andasse il tutto =) avevo messo -1 all'inizio ma poi mi è venuto il dubbio che i char nn tenessero i negativi.. cs del tutto sbagliata credo =) cmq domani do un occhio alla commit... ora è tardi =P |
From: Davide Z. <dav...@gm...> - 2009-08-13 18:38:45
|
Ho corretto ora funziona però c'è ancora qualcosina da limare (guarda con il diff e i commenti in caso hai dubbi chiedi ovviamente). 1- bruttina la soluzione di mettere prev type a 99, io c'avrei un'alternativa ma non voglio toglierti il divertimento (si può anche usare direttamente *type al posto di usare un altra variabile) 2- usa i define che hai fatto anche nei if mi pare tutto... |
From: Matteo S. <gna...@gm...> - 2009-08-13 16:29:33
|
purtroppo ero al tel e appena ti ho visto ti sei scollegato cmq ho committato T_T |
From: Davide Z. <dav...@gm...> - 2009-08-13 16:23:05
|
lol allora io che avevo bestemmiato perché per un'ora ero rimasto senza corrente mi posso consolare... Perfetto sei finito in un tipo errore da allocazione in c... non è che ora funziona, semplicemente sembra funzionare ma l'errore è ancora li... al 100% è dovuto a una lettura o scrittura in una zona non accessibile di memoria... se fai commit posso darci un occhio... Il giorno 13 agosto 2009 17.03, Matteo Sumberaz<gna...@gm...> ha scritto: > Come da titolo un pò confusionario, grazie ad un delicato temporale > che ha fulminato qualche centralina sn stato senza linea per 2 > giorni.. T_T nel contmpo cmq ho capito la sorgente del seg fault che > ritornava qualsiasi tentativo di fare un uStrinGetToken con + di una > lettera... il problema era che quando si printava qualcosa non lo si > faceva seguire da \n.... ho modificato e ora va ma il quesito che mi > si pone è: MA PERKE' ORA FUNZIA?!?!?! perkè alla fine di un print devo > mettere \n se no mi da seg fault??? > > In attesa di una tua illuminante email ^^ > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Mathtool-develop mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/mathtool-develop > |
From: Matteo S. <gna...@gm...> - 2009-08-13 15:03:54
|
Come da titolo un pò confusionario, grazie ad un delicato temporale che ha fulminato qualche centralina sn stato senza linea per 2 giorni.. T_T nel contmpo cmq ho capito la sorgente del seg fault che ritornava qualsiasi tentativo di fare un uStrinGetToken con + di una lettera... il problema era che quando si printava qualcosa non lo si faceva seguire da \n.... ho modificato e ora va ma il quesito che mi si pone è: MA PERKE' ORA FUNZIA?!?!?! perkè alla fine di un print devo mettere \n se no mi da seg fault??? In attesa di una tua illuminante email ^^ |
From: Davide Z. <dav...@gm...> - 2009-08-10 13:45:59
|
L'utilità della seconda è risparmiare printf. 2009/8/10 Matteo Sumberaz <gna...@gm...>: > per la prima modifica va bene, ma non capisco la seconda che utilità > possa avere ( a parte risparmiare un paio di printf ) cmq se vuoi fai > pure =) > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Mathtool-develop mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/mathtool-develop > |
From: Matteo S. <gna...@gm...> - 2009-08-10 12:33:52
|
per la prima modifica va bene, ma non capisco la seconda che utilità possa avere ( a parte risparmiare un paio di printf ) cmq se vuoi fai pure =) |
From: Davide Z. <dav...@gm...> - 2009-08-10 08:35:47
|
2 modifiche che vorrei fare a tutte le lib, in attesa di approvazione :) 1- aggiungere un define xDebug (uDebug, mtDebug, apaDebug) che se impostato ad 1 stampa a video un messaggio specificando l'errore che si è verificato ogni volta che viene chiamata la funzione uSetError ( e le altre), chiedendo poi se si vuole terminare il programma (t) oppure continuare (c). Utile per le compilazioni di prova. 2- modificare tutte le funzioni che stampano a video del tipo uListPrint. Al posto di un solo parametro y, cioè quello da stampare le farei così ad es. uList (char *prev, uList *l, char *next), Prev è una stringa che verrà stampata prima della lista, mentre next è la stringa che verrà stampata dopo la lista. Così se voglio stampare "La lista è 'lista'" e poi andare a capo basta faccia uListPrint ("La lista è ", l, "\n") al posto di usare 3 printf. Ovviamente posso voler non stampare niente prima e dopo allora basta scrivo "". |
From: Matteo S. <gna...@gm...> - 2009-08-09 19:39:19
|
credo ci siano dei problemi con il programma di test di uStringGetToken, la mia implementazione mi pare corretta ( ho scritto codice corretto e compilante al primo colpo =P alla faccia di chi dice che nn si può ) però uStringRead va in segfault se si inserisce + di un carattere... |
From: Matteo S. <gna...@gm...> - 2009-08-08 18:49:21
|
evidentemente ci siamo capiti male =) cmq nn importa oggi ero un pòoccupato e ho acceso il pc solo ora... stanotte o domani corrego ^^ |
From: Davide Z. <dav...@gm...> - 2009-08-07 11:27:39
|
Ho provato a testare uStringGetToken e dopo un po' che nn andava mi son reso conto che ci siamo capiti male. Il terzo parametro della funzione char *type non indica il tipo del dato che vogliamo leggere ma il tipo di dato che uStringGetToken ha letto. Del tipo che se alla posizione che si vuole leggere si trova una stringa allora type vale un certo valore mentre se è un numero ne vale un altro. Viene passato il puntatore a type perchè altrimenti le modifiche a type non verrebbero riportate all'esterno della funzione (vedi architettura degli elab), per assegnare un valore basta fai *type = 0. Mi permetto solo di fare una piccola modifica isNum la rinomino uCharIsNum, diventa una macro, e la sposto in udatatype.c in più aggiungo uCharIsChar che ritorna true se il char passato è un carattere stampabile ('a','b', virgole, punti, parentesi,... dal 32 al 126 numeri esclusi). Se vuoi verificare se un char è un numero o carattere basta fai if (uCharIsNum (c)){} |
From: Davide Z. <dav...@gm...> - 2009-08-03 08:45:19
|
Ma così mi sembra ancora più un casino.... Pensandoci però mi par meglio con binario anche perchè molti casi che prima abbiamo considerato non hanno problemi tipo: 4*-3 una volta passato il 4 e il * con uStrinGetToken, richiamando di nuovo la funzione verrà automaticamente restituita la stringa -3 perchè uStringGetToken deve riconoscere che il meno davanti ad un numero fa parte del numero 4--3 stessa cosa di prima, quando passa il 4, uStringGetToken si accorge che c'è un meno però seguito da un altro meno che a sua volta è seguito da un numero. Decide quindi di ritornare la stringa "-" perchè il meno che c'è dopo fa parte del numero dovrà però anche essere implementata la funzione meno unario (non mi viene in mente il nome) perchè in questo caso non si può operare come sopra: 4*-(8*2) sono costretto a calcolare 8*2 poi cambiare di segno e poi fare la moltiplicazione. |
From: Matteo S. <gna...@gm...> - 2009-08-02 09:39:43
|
(a*b)-(-c) devo scriverlo come (a*b)+-(-c) ... poi secondo me non riesci più a gestirlo in modo che aggiunga i + in automatico... se invece facissimo come operatore binario? facendo banalmente -a = 0-a se il carattere prima di "-" != da un numero... mi spiego con un esempio: (a*b-c)*-d a*b = x x - c = z z * (0-d) poichè davanti a "-" cè una * (a-b)/-b a-b = c c / (0-b) poichè davanti a "-" c'è una / -(-a) 0-(-a) 0-(0-a) a non so magari cè qualche caso in cui tutta sta roba nn vale... |
From: Davide Z. <dav...@gm...> - 2009-08-01 09:22:12
|
vediamo un di chiarire le idee di cosa manca a math tool e come deve esser fatto. Prima però 2 funzioni importanti che dovrebbero essere implementate in uString (importanti perchè utili a math tool): 1- uString *uStringGetToken (uString *s, int pos, char *type); ritorna il token che si trova alla posizione pos. Per token si intende una parola o un numero. Deve essere in grado di riconoscere la virgola e il - per i numeri (se hanno senso nel contesto) mentre tutto il resto è parola. Type ti dice se è una parola o un numero. Un po' di esempi forse è meglio: "ciao27,2hj-" pos = 0 => "ciao" pos = 4 => "27,2" pos = 8 => "hj-" pos = 2 => "ao" 2-void uStringCatChar (uString *s, char c); aggiunge c alla fine di s. Perchè farne una funzione? Perchè ti tornerà utile per uStringGetToken. Questa funz infatti controlla se s ha spazio per c, aggiunge c, sposta '\0' e incrementa la lunghezza di 1. Molto utile perchè altrimenti bisogna sempre creare una stringa anche per un char e poi usare uStringCat. Ora math tool. Al momento math tool a grandi linee funziona così: 1- prende la stringa inserita 2- la divide in token e ne fa una lista 3- analizza la lista e crea l'exp tree 4- valuta l'exp tree le parti decisamente da migliorare sono la 2 e la 3. Per il momento concentriamoci sulla 2. Quello che voglio è dividere la stringa usando uStringGetToken. Se è un numero aggiungerlo alla lista. Se ritorna una parola verificare se è presente nel dizionario, se c'è aggiungerla alla lista altrimenti segnalare errore. Com'è fatta adesso è una lista di stringhe. La mia idea idea era di farla diventare una lista di token. struct token{ void *elem; char type; } token può tenere un apanum o un tokenFunc (nel campo elem) in base al valore di type. tokenFunc mantiene per ogni funzione (sen, cos, +, -...) tutti i dati utili. struct tokenFunc{ uString *name; char priority; pFunc f; //puntatore alla funzione che la implementa char numPar; //numero di parametri char typePar; // se i parametri si trovano tra l'operatore (+,/,...) o dopo (sen, cos, ..) //e altro se serve } i tokenFunc si trovano nel dizionario e vengono caricati all'avvio di math tool. Pensavo anche di creare un file da cui vengono caricati questi dati così da rendere molto flessibile la libreria. Penso che organizzando così la lista risulti abbastanza semplice creare l'exp tree al punto 3. Resta il problema del -. E' un operatore bianrio o unario? Per me unario altrimenti diventa un casino gestire cose come 4*-5... Però così si hanno dei casi particolari da gestire come 4-5 in cui bisogna aggiungere un + in mezzo (4+-5) o 4--5 che diventa 4+5. Quindi in definitiva così non serve neanche implementare una apaSub visto che si traduce in una somma... Potremmo per il momento rendere obbligatorio l'inserimento del + in casi come 4-5 e gestirli poi più avanti. Non so quanto si capirà perché al solito ho idea di come fare ma non so dirlo... Cmq son qua per dubbi... |