PDA

View Full Version : [c]funzione in fondo all'albero


NA01
12-03-2005, 08:55
ho costruito un alberone binario, il problema è che in fondo io dovrei avere una funzione.
ad esempio una volta che faccio tutta la mia strada che mettiamo sia 0001 devo riuscire a aprire la funzione corrispondente all'istruzione 0001 che sarà diversa da quella raggiunta da, ad esempio 0010.
non ho la minima idea di come si possa fare (e nemmeno se si possa fare :sofico: ), però sarebbe molto comodo, perchè mi abbasserebbe tantissimo la mia complessità, e sopratutto mi butterebbe via una serie di più di 100 if :eek:


ciao!

anx721
12-03-2005, 14:26
in che senso aprire la funzione? cioè il percorso che fai sull'albero identifica univocamente una funzione e quando arrivi a una foglia devi esegurie la funzione corrispondente? se è cosi puoi mettere nelle foglie dei puntatori a funzione.

cionci
12-03-2005, 15:52
Se la serie di 0 e 1 identifica univocamente una funzione puoi calcolare il decimale corrispondente a quella sequenza di 1 e 0 e poi in base a quello usi uno switch...

Se le funzioni da richiamare hanno tutte lo stesso formato puoi benissimo mettere un puntatore a funzione nell'ultima foglia...

NA01
12-03-2005, 19:08
Se le funzioni da richiamare hanno tutte lo stesso formato puoi benissimo mettere un puntatore a funzione nell'ultima foglia...

cosa intendi per lo stesso formato?

vi spiego il problema. sto programmando una macchina virtuale per esercitarmi a scrivere nel suo assembler (su cui ho un esame).
ho scritto tutte le funzioni che eseguono sui registri e sulla memoria ciò che dovrebbero fare le loro corrispettive in linguaggio macchinasu questo processore inesistente.
uso gli 0 e gli 1 perchè ho già il programma che mi traduce il suo assembly in linguaggio macchina e mi sembrava più facile da realizzare (e poi fa molto più macchina virtuale una cosa che gestisce solo 0 e 1 :sofico:).

per chiamarle e evitare una serie enorme di if volevo usare un albero che dovrebbe eseguire meno passi e essere quindi più performante.
la soluzione che mi avete proposto sembrerebbe quello che mi serve (non ci avevo minimamente pensato :muro: :D ).

mi è venuta in mente un'idea malatissima, a voi dirmi se è realizzabile :mc:
se potessi realizzare un array di puntatori a funzione potrei usare come indice il valore decimale della sequenza e chiamare quindi la funzione iesima senza dover fare nemmeno un confronto.
ma si può fare un array di puntatori a funzione? il deitel e il prinz non ne parlano, e non ho altri libri di c


ciao e grazie!

Fenomeno85
12-03-2005, 19:14
scusate il piccolo ot ma che significa mettere un puntatore a una funzione?? come si va ad associare a un puntatore una funzione?? :mbe:

~§~ Sempre E Solo Lei ~§~

anx721
12-03-2005, 19:19
un puntatore a funzioni è semplicemente un puntatore che punta ad una funzione; esempio:


int (*fun)();


fun è stato dichiarato come un puntaore a una funzione che restituisce un intero; quindi è possibile fare questo:



int (*fun)();

int funzione(){
return 1;
}

int main(){
fun = funzione;
fun();
}


la variabile fun viene impostata in modo da puntare a "funzione", epoi viene invocata.


Si puo anche dichiarare un array di puntatori a funzione cosi:


int arrayfuns[10]();

in questo modo arrayfuns è dichiarato come un array di 10 puntatori a funzioni che prendono un numero qualsiasi di argomenti e ritornano int.

Fenomeno85
12-03-2005, 19:20
figata non lo sapevo :D

~§~ Sempre E Solo Lei ~§~

NA01
12-03-2005, 19:44
Originariamente inviato da anx721

int arrayfuns[10]();



prendo uno scalpello, ritiro il marmo e ti scolpisco una statua!!!:sofico:
avevo messo le partentesi al contrario e non funziava nulla. domani provo così!
si fa tutto molto più semplice :winner:

ciao e grazie