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

    [c] sottoprogramma che restituisce 2 variabili

    ciao a tutti
    se voglio fare un sottoprogramma che mi restituisce una divisione scrivo:
    codice:
    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>
    int x, a, b;
    int Div(int a, int b) {
    if (b==0) return 0;
    return a/b;
    }
    int main(){
       x= Div (5,2);
        cout<<x<<"\n";
        system ("Pause");
        return 0;
    
    }
    ma se voglio un sottoprogramma che mi restituisce divisione e moltiplicazione come faccio??
    So di dover usare i puntatori ma nn ricordo la sintassi...
    se qualcuno fosse tanto gentile



    Grazie mille

  2. #2
    Puoi farlo in molti modi (ne scrivo solo alcuni)
    codice:
    //Usando due parametri distinti
    //con i reference
    void DivMolt(int a, int b, int & prodotto, int& quoto)
    {
        prodotto = a * b;
        quoto = b?a/b:0;
    }
    //con i puntatori
    void DivMolt(int a, int b, int * prodotto, int * quoto)
    {
        *prodotto = a * b;
        *quoto = b?a/b:0;
    }
    //Usando una struttura come valore di ritorno
    struct dm
    {
        int prodotto;
        int quoto;
    }
    dm DivMolt(int a, int b)
    {
        dm ret;
        ret.prodotto = a * b;
        ret.quoto = b?a/b:0;
    }
    Tra parentesi, il codice che hai scritto non è molto corretto...
    codice:
    //Usa i nuovi header C++ e non quelli obsoleti
    #include <iostream>
    //Non serve stdlib.h (e comunque avresti dovuto includere <cstdlib>)
    //Non serve stdio.h (e comunque avresti dovuto includere <cstdio>)
    using namespace std;
    //Non servono tutte le variabili globali che hai dichiarato
    //Devi inserire il prototipo delle funzioni prima di definirle!
    int Div(int a, int b);
    int Div(int a, int b)
    {
        if(b==0) return 0;
        return a/b;
    }
    int main()
    {
        cout<<Div(5,2)<<"\n";
        cout<<"Premi Invio per uscire...";
        cin.ignore(); //evita di usare la system(), usa i metodi standard
        return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Originariamente inviato da MItaly
    //Devi inserire il prototipo delle funzioni prima di definirle!
    int Div(int a, int b);
    Il tuo discorso tirava al perfetto tranne questa affermazione, non vera. Le funzioni le dichiari se ti serve dichiararle: in questo caso, dove la definizione precede l'uso, la dichiarazione è totalmente ridondante.

    Tipico esempio di funzione sempre definita e mai dichiarata è main().

  4. #4
    In C è possibile omettere i prototipi delle funzioni quando non sono necessari (anche se è sempre consigliabile metterli); in C++ invece i prototipi sono sempre obbligatori.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    E' buona regola non omettere mai i prototipi, realizzando una struttura simile:
    <header>
    <costanti>
    <variabili>
    <prototipi>
    <entry point>
    <definizione>
    Experience is what you get when you don’t get what you want

  6. #6
    Spesso poi, nei progetti un po' più grandi, conviene inserire tutti i prototipi di ciascun file .c (o .cpp) in un file di header con lo stesso nome (ma con estensione .h).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Originariamente inviato da MItaly
    In C è possibile omettere i prototipi delle funzioni quando non sono necessari (anche se è sempre consigliabile metterli); in C++ invece i prototipi sono sempre obbligatori.
    Completamente falso: in C++ i prototipi non sono obbligatori per niente. Tipico esempio di funzione sempre definita e mai dichiarata è main().

    codice:
    int Div(int a, int b);
    int Div(int a, int b)
    {
        ...
    }
    Questo pezzo di codice non è buona regola, è semplicemente ridicolo, sia in C che in C++.

    L'usare le forward declarations + main + definitions lo posso capire (consente la mutua ricorsione), ma qui stiamo discutendo sul codice postato, non su progetti a più sorgenti.

  8. #8
    Completamente falso: in C++ i prototipi non sono obbligatori per niente.
    Cpp essendo ibrido ha, anche, le caratteristiche del c
    Tipico esempio di funzione sempre definita e mai dichiarata è main().
    Non hai visto molti sorgenti vero ?
    codice:
    ... 
    
    int main ();
    int main ()
    {
        ...
        return 0;
    };
    Si usa tantissimo.

    Ridicolo è un parolone: sai perché quando guidi metti la freccia, per girare, anche se non c'è nessuno ?

    Comunque, dimmi un po' tu come si legge meglio il codice:
    codice:
    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int x, a, b;
    
    int Div(int a, int b);
    
    int main()
    {
        x= Div (5,2);
        cout<<x<<"\n";
        system ("Pause");
        return 0;
    }
    
    int Div(int a, int b) 
    {
        if (b==0) return 0;
           return a/b;
    }
    
    ///////////////////////////////////////////////
    
    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    int x, a, b;
    
    int Div(int a, int b) 
    {
        if (b==0) return 0;
           return a/b;
    }
    
    int main()
    {  
        x= Div (5,2);
        cout<<x<<"\n";
        system ("Pause");
        return 0;
    }
    Experience is what you get when you don’t get what you want

  9. #9
    vi ringrazio tutti ma spero di non aver dato vita ad una guerra sintattica...
    Cmq uso gli header obsoleti xkè sto spiegando programmazione a mio cugino appena iscritto ad ingegneria ed è una vita che non tocco il c, ovunque vada non lo usa quasi nessuno...
    cmq vi ringrazio
    Ciao

  10. #10
    Originariamente inviato da graffio83
    vi ringrazio tutti ma spero di non aver dato vita ad una guerra sintattica...
    Non preoccuparti, non faccio guerre dove non ci sono argomenti.

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.