DOMANDA C++: esercizio con funzione

MPG

Utente Attivo
544
4
Ho questo problema nell'ambito delle funzioni, sicuramente è banale per voi, vorrei sapere se l'ho svolto correttamente. Grazie
"Definire una funzione che dato il prezzo di vendita di un prodotto complessivo di iva restituisca il prezzo al netto di iva e l'ammontare dell'iva (iva al 20%)"
C++:
#include <iostream>

using namespace std;

double IvaCompresa(double &t,double &i,double &n)
{
    n=(100 * t) / 120;
    i=t-n;
}

int main()
{
    double totale;
    double netto;
    double iva;
    cin>>totale;
    IvaCompresa(totale,iva,netto);
    cout<<netto<<endl<<iva;
}
 
Ultima modifica da un moderatore:

pabloski

Utente Èlite
2,868
916
Beh hai usato la formula per lo scorporo dell'iva. L'unica cosa strana è perchè mai IvaCompresa ha come valore di ritorno double, quando poi non restituisce niente.
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Indenta bene il codice e mettilo come CPP!
Come suggerisce @pabloski la funzione deve avere come tipo di ritorno void. Inoltre il parametro t non dovrebbe essere un reference visto che non fai operazioni di assegnamento su di esso. Se lo vuoi reference è corretto metterlo costante però.

Comunque per vedere se lo hai svolto correttamente riesci a vedere se l’output è quello che ti aspetti, no?
 

MPG

Utente Attivo
544
4
Ma scusate con il void non si puo' usare il return ma solo il cout che io sappia...e non devo stampare a video..
Intendevi che dovrei scrivere "void IvaCompresa(const double &t, double &i,double &n)" ?
Per il risultato a video risulta giusto poi alla fine.
 
Ultima modifica:

MPG

Utente Attivo
544
4
Forse mi sono espresso male volevo dire che con void non viene restituito un valore (avevo scritto in quel senso non posso avere un return), è che la domanda del problema è "restituisca il prezzo al netto di iva e l'ammontare dell'iva (iva al 20%)" per cui pensavo che dovessi usare il void.


Cosi' va bene?

C++:
#include <iostream>


using namespace std;

void IvaCompresa(const double t, double &i,double &n)

{

n=(100 * t) / 120;
i=t-n;


}


int main()
{
    double totale;
    double netto;
    double iva;
    cin>>totale;
IvaCompresa(totale,iva,netto);
cout<<netto<<endl<<iva;



}
 
Ultima modifica:

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Forse mi sono espresso male volevo dire che con void non viene restituito un valore (avevo scritto in quel senso non posso avere un return), è che la domanda del problema è "restituisca il prezzo al netto di iva e l'ammontare dell'iva (iva al 20%)" per cui pensavo che dovessi usare il void.


Cosi' va bene?

Codice:
#include <iostream>


using namespace std;

void IvaCompresa(const double &t, double &i,double &n)

{

n=(100 * t) / 120;
i=t-n;


}


int main()
{
    double totale;
    double netto;
    double iva;
    cin>>totale;
IvaCompresa(totale,iva,netto);
cout<<netto<<endl<<iva;



}
[\code]
Sì, ma indenta bene quel codice per favore
 

Mursey

Super Moderatore
Staff Forum
Utente Èlite
8,244
5,674
@MPG indenta come ho corretto nel primo post e usa code=cpp
Inoltre \code è sbagliato, come per HTML la fine del tag si fa con /
 
Ultima modifica:
  • Mi piace
Reazioni: _Achille

tomm891

Utente Attivo
355
136
CPU
i5 9600k
Dissipatore
Corsair H55i
Scheda Madre
Asus Tuf z390m
HDD
Samsung
RAM
16GB HyperX
GPU
MSI GTX980ti
PSU
Cooler Master G750m
Case
Corsair Air 240
OS
Windows 10 Pro
Void vuol dire che la funzione restituisce vuoto (non nullo), te non vuoi che restituisca vuoto ma vuoi un double o un float, altrimenti come fai a ricavare il valore calcolato dalla funzione?

PS: dovrai aggiungere un return... nel tuo caso di i
 

MPG

Utente Attivo
544
4
Void vuol dire che la funzione restituisce vuoto (non nullo), te non vuoi che restituisca vuoto ma vuoi un double o un float, altrimenti come fai a ricavare il valore calcolato dalla funzione?

PS: dovrai aggiungere un return... nel tuo caso di i

Ma io devo restituire il netto e l'ammontare dell'iva non solo l'iva.... se mettessi "return i " non ho certo entrambi. Chiedo lumi a questo punto agli altri che mi hanno risposto nel thread cosa ne pensano, il code non va bene?
 

Andretti60

Utente Èlite
6,440
5,091
Void vuol dire che la funzione restituisce vuoto (non nullo), te non vuoi che restituisca vuoto ma vuoi un double o un float, altrimenti come fai a ricavare il valore calcolato dalla funzione?

PS: dovrai aggiungere un return... nel tuo caso di i
No.
1) Leggi bene it testo del problema: la funzione deve calcolare e tornare DUE valori.
2) un metodo definito void significa che non ritorna un bel nulla.
 

MPG

Utente Attivo
544
4
No.
1) Leggi bene it testo del problema: la funzione deve calcolare e tornare DUE valori.
2) un metodo definito void significa che non ritorna un bel nulla.

Ma sopra nel thread mi veniva detto che devo avere come ritorno void, quando all'inizio non l'ho messo non andava bene....
 

Andretti60

Utente Èlite
6,440
5,091
Ma sopra nel thread mi veniva detto che devo avere come ritorno void, quando all'inizio non l'ho messo non andava bene....
No, ti e' stato detto che il "tipo" di ritorno deve essere void (ossia non tornare nulla). In parole piu' semplici, la funzione e' "definita" void.
C'e' una nomenclatura per quello: una "funzione" e' qualcosa che ritorna un valore, mentre una "procedura" non ritorna nulla. Nel linguaggio C (e simili), la procedura e' una funzione definita "void".

Uno dei grossi problemi del C, ossia una parola chiave che ha diversi significati a seconda del contesto, in questo caso "void". Parlando di funzioni, segnifica che una funzione definita come "void" non ha un valore di ritorno. Parlando di variabili, un puntatore definito "void" significa che e' un puntatore generico che puo' venire convertito in qualsiasi cosa si voglia (comoda, ma e' una tecnica di programmazione altamente pericolosa).
 

tomm891

Utente Attivo
355
136
CPU
i5 9600k
Dissipatore
Corsair H55i
Scheda Madre
Asus Tuf z390m
HDD
Samsung
RAM
16GB HyperX
GPU
MSI GTX980ti
PSU
Cooler Master G750m
Case
Corsair Air 240
OS
Windows 10 Pro
No.
1) Leggi bene it testo del problema: la funzione deve calcolare e tornare DUE valori.
2) un metodo definito void significa che non ritorna un bel nulla.

Hai ragionissima. Avevo letto male.

Io farei così: (testato e funzionante) mi sono permesso di rinominare qualche variabile

C++:
#include <iostream>

//Passo le referenze delle due variabili che voglio settare e imposto i loro valori dentro alla funzione
void setCalcoloNetto(double totale, double& netto, double& iva)
{
    iva = (100 * totale) / 122; //l'iva è al 22!
    netto = totale - iva;
}

int main()
{
    double iva;
    double totale;
    double netto;

    totale = 2000; //setto un totale iniziale es. 2000 euro.

    setCalcoloNetto(totale, iva, netto);

    std::cout << "netto=" << netto << ", iva=" << iva << std::endl;
}
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili