Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C/C++] Ritorno due valori da una funzione...come?? aiuto..

    Come faccio a far ritornare ad una funzione due valori?? Se è possibile come dovrei fare?
    grazie mille
    Andrea
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non è possibile far ritornare due valori ad una funzione, anche perchè non ha nessun senso, per definizione di funzione.

    Se ti interessa avere un risultato multiplo, la soluzione da adottare è quella di far restituire un array di valori, esempio:
    codice:
    int* funzione(int x) {
       int * mioArray;
       ... /* corpo della funzione*/
       return mioArray;
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    2 modi:
    - Restituisci una struct con i due valori
    - Restituisci 1 o nessun valore; i valori rimanendi li restituisci come argomenti in uscita.

    Ecco come:
    codice:
    // C e C++
    // Uso: duenum(&var1, &var2);
    void duenum(int *a, int *b){
        *a = 30;
        *b = *a + 15;
    }
    
    // solo C++
    // Uso: duenum(var1, var2);
    void duenum(int &a, int &b){
        a = 30;
        b = a + 15;
    }
    Se usi il C++ è consigliabile il secondo modo.

  4. #4
    Originariamente inviato da LeleFT
    Non è possibile far ritornare due valori ad una funzione, anche perchè non ha nessun senso, per definizione di funzione.

    Se ti interessa avere un risultato multiplo, la soluzione da adottare è quella di far restituire un array di valori, esempio:
    codice:
    int* funzione(int x) {
       int * mioArray;
       ... /* corpo della funzione*/
       return mioArray;
    }
    Ciao.
    ma una funzione in C non puo' ritornare un'array vero?
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  5. #5
    Originariamente inviato da iguana13
    2 modi:
    - Restituisci una struct con i due valori
    - Restituisci 1 o nessun valore; i valori rimanendi li restituisci come argomenti in uscita.

    Ecco come:
    codice:
    // C e C++
    // Uso: duenum(&var1, &var2);
    void duenum(int *a, int *b){
        *a = 30;
        *b = *a + 15;
    }
    
    // solo C++
    // Uso: duenum(var1, var2);
    void duenum(int &a, int &b){
        a = 30;
        b = a + 15;
    }
    Se usi il C++ è consigliabile il secondo modo.
    ti posto il codice da me scritto della funzione...
    codice:
    float calcolo_par(int app2, float *req_par){
    /* calcolo del valore delle resistenze in parallelo mediante la tecnica della produttoria del vettore */
           float prodotto=1; //accomulatore per il prodotto tra le res. in par(IMPORANTE!! deve essere POSTA =1,ALTRIMENTI LA PRODUTTORIA SI ANNULERA' SEMPRE !!
           float somma_par=0; //accomulatore per la somma tra le res. in par
           float ris_par=0; //risultato del calcolo delle res. in parallelo
    
                  for (i=0; i<app2; i++){
                  prodotto=prodotto*req_par[i];
                  somma_par=somma_par+req_par[i];
                  }
     return prodotto;
     return somma_par;
    }
    dovrebbe ritornare sia prodotto che sum_par vorrei farli ritornare con una sola funzione..come potrei fare??

    Grazie mille
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da andrea_NET-_DSL
    ma una funzione in C non puo' ritornare un'array vero?
    E chi l'ha detto? Se fosse così mi sarei sognato il progetto di Sistemi Operativi....


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Originariamente inviato da LeleFT
    E chi l'ha detto? Se fosse così mi sarei sognato il progetto di Sistemi Operativi....


    Ciao.
    era una domanda o meglio a scuola ci hanno spiegato che una funzione in C puo' ricevere come argomento un array ma non resituirlo...

    Ho appreso una nuova cosA! grazie

    senti in merito al codice che ho postato sopra della funzione da me scritta come potrei fare?
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    La mia era una affermazione in stile piuttosto ironico!!

    Per restituire i due valori puoi fare come ti ha suggerito iguana13, costruendo una struct in cui vai ad inserire i due valori da ritornare e, di conseguenza, ritornare la struct.


    Oppure crei un array di float e assegni ad ogni valore ciò che devi restituire, quindi restituire l'array di float:
    codice:
    float *calcolo_par(...) {
       float *tmp = (float *) malloc(2 * sizeof(float));
       ... // Elaborazione dei due valori
       tmp[0] = prodotto;
       tmp[1] = somma_par;
       return tmp;
    }
    A questo punto puoi trovare i due risultati nell'array:
    codice:
    float *array_risultato;
    float prodotto;
    float somma_par;
    ...
    array_risultato = calcolo_par( <parametri>);
    prodotto = array_risultato[0];
    somma_par = array_risultato[1];
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    grazie mille :gren:

    alla prossima

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  10. #10
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Un'altra soluzione può essere quella di passare alla funzione due puntatori o due indirizzi in modo tale che la funzione li possa modificare.
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

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 © 2025 vBulletin Solutions, Inc. All rights reserved.