Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Funzione di funzione C++

    ciao a tutti

    avrei un problema nel richiamare una funzione che ha come argomento un Array

    facci un esempio:

    codice:
    #include <iostream>
    using namespace std;
    
    void Prob(float *Array)
    {
        float P[9];
        float Somma;
        int x;
        
        Somma=10000;
        for (x=0;x<9;x++)  
            P[x]=Array[x]/Somma;
    }
    
    int main()
    {
        float Array[]={1000,2000,2000,500,1500,0,1000,1000,1000};
        float P[9];
        int x;
        
        for (x=0;x<9;x++)
        {
            P[x]=Prob(*Array);
            cout<<P[x]<<endl;
        }
    }
    ma mi da errore dicendo che non riesce a convertire da float a float

    come posso fare?

    grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Prima di tutto, cosa c'entra il titolo "Funzione di funzione" ?

    Per il resto, la funzione non restituisce nulla (è void), quindi non ha senso usarla come hai fatto nel main ... L'array P è locale alla funzione .... per restituirlo dovresti allocarlo dinamicamente e restituirne il puntatore al chiamante.

    Inoltre, il parametro da passare è il puntatore all'array Array (usa dei nomi migliori altrimenti non fai altro che aumentare la confusione), che altro non è che il suo nome (non *Array).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Prima di tutto, cosa c'entra il titolo "Funzione di funzione" ?

    Per il resto, la funzione non restituisce nulla (è void), quindi non ha senso usarla come hai fatto nel main ... L'array P è locale alla funzione .... per restituirlo dovresti allocarlo dinamicamente e restituirne il puntatore al chiamante.

    Inoltre, il parametro da passare è il puntatore all'array Array (usa dei nomi migliori altrimenti non fai altro che aumentare la confusione), che altro non è che il suo nome (non *Array).
    il funzione di funzione sta per richiamare una funzione da una funzione.

    invece ho trovato questo esempio dove il void restituisce un valore:
    codice:
    // passing parameters by reference
    #include <iostream>
    using namespace std;
    void duplicate (int& a, int& b, int& c)
    {
    a*=2;
    b*=2;
    c*=2;
    }
    int main ()
    {
    int x=1, y=3, z=7;
    duplicate (x, y, z);
    cout << "x=" << x << ", y=" << y << ", z=" << z;
    return 0;
    }

  4. #4
    Il void lì non restituisce nessun valore, semmai memorizza dei valori in variabili passate by reference.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    ok

    l'ho modificato ma ancora non va

    codice:
    #include <iostream>
    using namespace std;
    
    float Prob(float A)
    {
        float P[9];
        float Somma;
        int x;
        
        Somma=10000;
        for (x=0;x<9;x++)  
            P[x]=A[x]/Somma;
        return(P);
    }
    
    int main()
    {
        float A[]={1000,2000,2000,500,1500,0,1000,1000,1000};
        float P1[9];
        int x;
        
        P1=Prob(A);
        for (x=0;x<9;x++)
            cout<<P1[x]<<endl;
        
        return(0);
    }

  6. #6
    Scusa, tu devi restituire un array e dichiari e la funzione e il suo parametro come semplici float? Come speri che possa funzionare?
    Il metodo corretto per fare quello che vuoi fare è passare l'array per puntatore e modificarlo da dentro la funzione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Originariamente inviato da MItaly
    Scusa, tu devi restituire un array e dichiari e la funzione e il suo parametro come semplici float? Come speri che possa funzionare?
    Il metodo corretto per fare quello che vuoi fare è passare l'array per puntatore e modificarlo da dentro la funzione.
    quindi come devo dichiarare la funzione?

  8. #8
    codice:
    #include <iostream>
    using namespace std;
    
    void Prob(float * A)
    {
        float Somma = 10000.0f;
        for (int x=0;x<9;x++)  
            A[x]/=Somma;
    }
    
    int main()
    {
        float A[]={1000,2000,2000,500,1500,0,1000,1000,1000};
        int x;
        
        Prob(A);
        for (x=0;x<9;x++)
            cout<<A[x]<<endl;
        
        return(0);
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da MItaly
    codice:
    #include <iostream>
    using namespace std;
    
    void Prob(float * A)
    {
        float Somma = 10000.0f;
        for (int x=0;x<9;x++)  
            A[x]/=Somma;
    }
    
    int main()
    {
        float A[]={1000,2000,2000,500,1500,0,1000,1000,1000};
        int x;
        
        Prob(A);
        for (x=0;x<9;x++)
            cout<<A[x]<<endl;
        
        return(0);
    }
    Così distrugge l'array sorgente ... prova ad allocare un secondo array dinamicamente e a restituirlo con un puntatore (come ti avevo già detto) oppure a passare un altro argomento con l'array di destinazione come ti ha suggerito MItaly ...

    E rivedi tutti i concetti "teorici" legati ai puntatori e alle funzioni ...

    P.S. Il fatto che una funzione è chiamata da un'altra non giustifica quel titolo (che non ha senso) ... e poi, visto che il tuo problema è nel passaggio di parametri in in/out, avresti dovuto indicare nel titolo questo tipo di problematica ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    si si me ne sono accorto e l'ho modificato come mi serviva


    grazie a tutti per l'aiuto

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.