Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    7

    [C] Puntatori a funzione e calcolo somma

    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
    Grazie a tutti in anticipo!


    codice:
    #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 ;
    }
    Ultima modifica di LeleFT; 03-09-2014 a 17:18 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Potresti rendere il codice leggibile indentandolo e utilizzando il tag CODE?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Potresti rendere il codice leggibile indentandolo e utilizzando il tag CODE?
    ... magari anche spiegando il senso delle varie parti ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    7
    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.

  5. #5
    Utente di HTML.it L'avatar di gogu
    Registrato dal
    Jun 2008
    Messaggi
    169
    Quote Originariamente inviata da delghi Visualizza il messaggio
    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 !

    Is 'aint over 'till is over"

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    7
    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.


    codice:
    
    
    #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
    Ultima modifica di delghi; 15-09-2014 a 16:59

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.