Chiamata funzione

di il
16 risposte

Chiamata funzione

Buon giorno
potreste darmi delle indicazioni , come vostro solito, per venire a capo di questo problema?
mi sembra strano il tipo di messaggio di errore che mi salta fuori per (f) somma e altrettanto quello per (f)potenza.
inoltre ,non so se è conseguenza dell'errore all'interno della dichiarazione delle funzioni, quando le richiamo all'interno
di un ciclo switch (qui non evidenziato) mi vengono fuoi degli altri errori, di cui non sto qui a descrivere per brevità.
la posizione di(f) somma , dichiarata prima del main, e quella di (f)potenza ,dichiarata dopo ,
sono volute, per testare l'effettiva chiamata da ogni punto del sorgente.
 
#include <iostream>

using namespace std;


  int somma(int dati)
    {  dati=0;
     cout<< "prego inserire 10 valori:  \n";
     for (int x=0; x<10 ; x++)
        cin>> dati;
        cout<< "i numeri inseriti sono: \n"<<dati;
     dati=dati+dati;
     cout<< "la somma e':  ";
return dati;
     }
int main()
{
    int a = somma ;
    cout << "a: " << a << "  somma: " << somma<< endl;


    long long b = potenza;
    cout << "b: "<< b << "  potenza:  " << potenza<< endl;
return 0;
}


    long long  potenza(long long b,long long e, long long res)
     {cout<< "prego inserire la base: \n";
      cin >> b;
      cout<< "prego inserire l'esponente: \n";
      cin >> e;
     
      for (int x=0; x<e; x++)
        int res=res*b;
        cout<< "risultato e':  ";
return res;
     }
Grazie in anticipo

16 Risposte

  • Re: Chiamata funzione

    Ma cosa intendevi fare con

    int a = somma;

    ???

    E la funzione somma, perché accetta un parametro dati che poi non utilizza?
    Addirittura scrivi

    dati=dati+dati;

    che non ha senso ...
  • Re: Chiamata funzione

    Int a = somma... (adesso mi prendo la solita scarica da parte di oregon )
    doveva essere la chiamata della funzione somma all'interno del main.
    dati = dati +dati ( secondo la mia concezione ) avrebbe dovuto permettermi di sommare 10 inserimenti da tastiera consecutivi... se poi dici che non ha senso, ti ringrazio e vedo come arrivarci diversamente.
  • Re: Chiamata funzione

    Se dici che una funzione ha un parametro (dati) devi chiamarla passando quel parametro, altrimenti è un errore.
    Se la funzione quel parametro non deve averlo, allora pensaci, e toglilo.

    Pensa ancora un po' su cosa hai scritto dentro la funzione. Hai un ciclo for in cui chiedi il valore della stessa variabile, senza sommarla da nessuna parte. Per sommarla, hai bisogno di un'altra variabile. Con una sola non puoi riuscire mai. E la somma va fatta dentro al ciclo non fuori.
  • Re: Chiamata funzione

    L'esercizio a cui faccio riferimento chiedeva: di operare una scelta da tastiera per decidere se si voleva procedere con la somma di dieci numeri interi oppure calcolare l'elevamento a potenza di un numero ,a scelta da tastiera ,con un esponente , sempre con la stessa modalità di scelta.
    il codice completo aveva un ciclo switch che aveva una variabile x che se corrispondeva a 1 era un operazione, al 2 era un'altra.
    ovviamente non ho ancora masticato bene tutti i meccanismi in atto , e per questo , dopo che è un po che ci vado dietro senza risultato , chiedo il vostro aiuto.
  • Re: Chiamata funzione

    Ops stavamo scrivendo in contemporanea ... ok do un occhiata alla funzione.
    grazie
  • Re: Chiamata funzione

    Le funzioni non mi danno piu errori.
    in effetti il programma parte; mi fa fare la scelta e ... stop.
    da che parte mi giro?
    ripropongo il codice completo
    #include <iostream>
    
    using namespace std;
    
    int somma (int dati, int v);
    long long potenza (long long b, long long e, long long res);
    
    int main ()
    {
        int x = 0;
        cout<< "prego operare la vostra scelta\n" << "premere1 per somma\n"<< "premere2 per potenza\n";
        cin>>x;
        switch (x)
        {
            case 1: somma;break;
            case 2: potenza;break;
            case 3: cout<<"no operation valid\n"; break;
        }
        return 0;
    }
    
        int somma ( int dati, int v)
        {
            cout<<"prego inserire i valori";
            int x=0;
            cin >> dati;
            for (x=0; x<10; x++)
                {
                   dati = v;
                   dati = dati+v;
    
                cout<<"dati: \n" << dati;}
                return dati;
        }
    
        long long potenza(long long b, long long e, long long res)
        {
            cout << "inserire la base: \n";
            cin >> b;
            cout << "inserire l'esponente: \n";
            cin >> e;
            int x =0;
            for (x=0; x<e ; x++)
            {
                res=res*b;
                cout<< "res: \n"<< res;
    
            }
           return res;
    
    
    }
    grazie
  • Re: Chiamata funzione

    Hai peggiorato la situazione.
    Potresti spiegare cosa significa questa linea

    int somma (int dati, int v)

    in ogni sua parte?

    Cosa sono gli argomenti di una funzione e a cosa servono? E nel tuo caso?

    Se non compresi l'uso delle funzioni, non ha senso andare avanti scrivendo codice a caso.
  • Re: Chiamata funzione

    Ecco è arrivata la scarica
    è codice non masticato oregon , non direi codice a caso. thanks
  • Re: Chiamata funzione

    Se tu spiegassi le tue scelte si capirebbe dove sbagli e sarebbe normalissimo per un principiante.
    Ma finché mostri del codice senza spiegarlo, per me non può che essere stato scritto a caso.

    Sono sicuro che il tuo é il primo caso, ma non hai ancora dato le spiegazioni richieste...
  • Re: Chiamata funzione

    Hai ragione oregon! il codice va commentato! e anche piu che palese che sto mettendo assieme dei pezzi di codice di cui , ancora, non ho il pieno controllo. é per questo che arrivo a chiedere indizi su come potere arrivare alla soluzione solo dopo che ci giro intorno da un po'. e sono certo che il tuo modo di scrollare serve a dare la sveglia, chapeau!
    ti elenco le parti di cui non sono sicuro, gli indizi che spero mi darai/darete saranno gli elementi che dovrò rafforzare.

    tipo nome (parametri) {stato/i}; 1) se non dichiaro la protofunzione (tipo nome (parametri); ) prima del main , perdo la possibilità di chiamarla da qualunque punto del codice?

    2)il ciclo switch mi permette di chiamare una o piu funzioni?

    3)quando scrivo :

    funzione;
    int main ()
    { a = funzione;
    return 0;} sto dicendo al codice : quando arrivi a leggere 'a' fai partire la funzione ,con tutti i comandi inseriti? o sto facendo il passo più lungo della gamba?

    se hai qualche cosa in più che non ho notato e che è bene che riguardo, a tuo parere, sono piu che contento di seguirne la pista.
    avrei anche un'altra cosa da chiedere, è un argomento che abbiamo trattato in un altro mio post.
    vi chiedero lumi a riguardo riagganciandomi a quel post, non appena avrò risolto questo .
    grazie mille!
  • Re: Chiamata funzione

    Prima di tutto non si parla di "ciclo switch" perché lo switch non serve a costruire cicli (come fa il for o il while); quindi è un errore (anche grave) scriverlo e fa capire subito che hai studiato poco ... (ad un professore che ti sta esaminando ...).

    Per il resto, non hai risposto. Va bene quello che scrivi in 1) ma non dici perché hai scelto di scrivere proprio

    int somma (int dati, int v)

    Facciamo un passo avanti. Ti dico che dovresti scrivere

    int somma ()

    e quindi chiamare dal main

    int s = somma();

    A questo punto cerca di capire perché e cosa devi scrivere dentro la funzione somma
  • Re: Chiamata funzione

    In effetti , ciclo switch, mi suonava male già mentre lo scrivevo . non ho risposto alle tue domande proprio perchè voglio ridurre al minimo le informazioni da parte vostra. è logico che , con più elementi, si potrebbe dare una spiegazione più dettagliata. preferisco essere nella condizione di sbatterci il muso fino a quando non mi si accende luce. mi succede sempre cosi .
    grazie oregon!
  • Re: Chiamata funzione

    @Brugli, non preoccuparti delle informazionik da parte nostra.

    Il TUO compito e' fornire PIU' DETTAGLI possibili: questo aiuta NOI a capire il punto in cui sbagli ragionamento.

    Il NOSTRO compito e' quello di fornirti spiegazioni oppure farti delle domande su cui TU, per rispondere in modo completo, devi fare dei RAGIONAMENTI.

    Poi la logica e' semplice: se ti facciamo una domanda su una certa parte del tuo codice e' evidente che in QUEL PUNTO c'e' un errore
    Quindi, TU, per essere SICURO della risposta, dovrai rileggere/ristudiare quel particolare concetto coinvolto nel pezzetto di codice incriminato.

    Accendere la luce e' una buona cosa, ma se sei nella casa sulla cascata

    http://www.thingsiliketoday.com/wp-content/uploads/2014/03/casa-sulla-cascata.jpg

    e per cercare l'interruttore esci dalla finestra dalla parte della cascata, ...
  • Re: Chiamata funzione

    E allora: Game over! insert coin for a new game
    chiaro che i problemi del mio codice, per voi , saltano subito all'occhio e con mezza indicazione mi spianate la strada.
    era anche chiaro che l'interno della funzione somma ,scritta in quel modo non funzionasse, dopo che oregon mi fatto il primo appunto ovviamente.
    se avete notato non era il suo funzionamento il mio cruccio bensi il funzionamento della sequenza di codice dello switch e tutto quello che potesse essere a contorno della dichiarazione e chiamata delle funzioni.
    grazie! la vostra disponibilità mi lascia senza parole.

    Sia la luce!... quasi ... forse...
Devi accedere o registrarti per scrivere nel forum
16 risposte