PDA

Visualizza la versione completa : [C] Puntatori a funzione e calcolo somma


delghi
03-09-2014, 15:17
Ciao a tutti mi servirebbe una mano a capire il funzionamento dei puntatori a funzione.
Nello specifico vi posto un esercizio che non riesco a fare:
Si scriva una funzione C che prende i seguenti parametri:
-due int x1 e x2;
-due float y1 e y2;
-una funzione f con risultato di tipo int, un parametro x di tipo int e un parametro y di tipo float
La funzione deve calcolare la somma dei risultati di f per tutte le possibili combinazioni di valori dei due parametri x e y, quando x varia tra x1 e x2(estremi inclusi) con incrementi di 2 e y varia tra y1 e y2 (estremi inclusi) con incrementi di 1.
Il prototipo della funzione che l 'esercizio chiede penso sia questo:
int funzione(int x1,int x2, float y1, float y2, int (f *) (int x,float y));

Ecco una bozza di codice che ho provato a scrivere ma penso proprio che non abbia senso :bh:
Grazie a tutti in anticipo!




#include <stdio.h>

int somma(int a, float b);

int * funzione (int x1,int x2, float y1, float y2,int (*f)(int x, float y));


int main(void){

int a=10,b=8;
float c=5,d=8;
int risultato[1000];


for (int i=0;i<1000;i++)

risultato[i]=*funzione(a, b, c, d, somma);

printf("risultato[0]=%d",risultato[0]);
return 0;
}


int somma(int a, float b){
int result;

result=a+b;


return result;

}

int * funzione (int x1,int x2, float y1, float y2,int (*f)(int x, float y)){
int max;
if(x1>x2)max=x1;
else max=x2;
int big;
int interi[max];
int i,j,k;
int risultati[max+big];
int *bo;
if(y1>y2)big=y1;
else big=y2;
float fl[big];


for (i=0; i<=max;i++) {
for (j=0; j<=big; j++){
for(k=0;k<max+big;k++){


risultati[k]=somma(interi[i], fl[j]);
}}}

i++ ;
bo=risultati;
return bo ;
}

Alex'87
03-09-2014, 15:52
Potresti rendere il codice leggibile indentandolo e utilizzando il tag CODE?

oregon
03-09-2014, 15:57
Potresti rendere il codice leggibile indentandolo e utilizzando il tag CODE?

... magari anche spiegando il senso delle varie parti ?

delghi
04-09-2014, 02:57
Non ha senso, non so manco io cosa volevo scrivere! Potreste suggerirmi come "calcolare la somma dei risultati di f per tutte le possibili combinazioni di valori dei due parametri x e y, quando x varia tra x1 e x2(estremi inclusi) con incrementi di 2 e y varia tra y1 e y2 (estremi inclusi) con incrementi di 1." Non so proprio da dove iniziare.

gogu
05-09-2014, 14:56
Non ha senso, non so manco io cosa volevo scrivere! Potreste suggerirmi come "calcolare la somma dei risultati di f per tutte le possibili combinazioni di valori dei due parametri x e y, quando x varia tra x1 e x2(estremi inclusi) con incrementi di 2 e y varia tra y1 e y2 (estremi inclusi) con incrementi di 1." Non so proprio da dove iniziare.


Scomponi il problema in parti,commenta le funzioni e scrivi il codice pi leggibile. Siamo in 3 che te lo diciamo gi. Il problema non affatto difficile e se vuoi una mano devi iniziare te a proporre un codice di bozza. Per questa volta non incollare un codice e dire "manco io cosa volevo scrivere". Dai, usa quel cervello !

:dh:

delghi
15-09-2014, 16:45
Ciao e scusate se non ho pi risposto ma ho avuto problemi con la connessione internet a casa!
Spero che il post sia ancora valido!
Seguendo i vostri suggerimenti ho provato a scrivere un codice che posto sotto.







#include <stdio.h>
//FUNZIONE CHE CALCOLA LA SOMMA TRA DUE NUMERI, UNO DI TIPO INT E UNO DI TIPO FLOAT
//QUESTA LA FUNZIONE CHE VIENE CHIAMATA TRAMITE PUNTATORE A FUNZIONE
int f(int x,float y){
int somma=x+y;
return somma;
}


//QUESTA INVECE LA FUNZIONE CHE RICHIEDE L'ESERCIZIO.
//NON RIESCO A CAPIRE COME IMPOSTARE IL CICLO PER FAR SI CHE X VARII TRA X1 E X2 CON INCREMENTI DI 2
//HO PROVATO AD INSERIRE AL POSTO DI i++ i+2, MA VA IN LOOP


void funzione (int x1,int x2,float y1,float y2){


int i,result;
float j;
for (i=x1; i<=x2; i++) {
for (j=y1; j<=y2; j++) {
result=(*f)(i,j);
printf("i=%d\n j=%f\n result=%d",i,j,result);
}
}
}


//HO PROVATO A FARE UNA PROVA, MA IN OUTPUT RICEVO STRANI RISULTATI.
int main(void){
int a=1,b=4;
float c=3.5,d=5.5;
funzione(a, b, c, d);

return 0;
}

// OUTPUT:i=1
// j=3.500000
// result=4
// i=1
// j=4.500000
// result=5
// i=1
// j=5.500000
// result=6
// i=2
// j=3.500000
// result=5
// i=2
// j=4.500000
// result=6
// i=2
// j=5.500000
// result=7
// i=3
// j=3.500000
// result=6
// i=3
// j=4.500000
// result=7
// i=3
// j=5.500000
// result=8
// i=4
// j=3.500000
// result=7
// i=4
// j=4.500000
// result=8
// i=4
// j=5.500000
// result=9


E comunque io proprio non capisco cosa vuol dire:
"La funzione deve calcolare la somma dei risultati di f per tutte le possibili combinazioni di valori dei due parametri x e y, quando x varia tra x1 e x2(estremi inclusi) con incrementi di 2 e y varia tra y1 e y2 (estremi inclusi) con incrementi di 1."
Va bene come impostata l'idea??
Grazie in anticipo

Loading