DOMANDA Aiuto 2 programmi c++

Stato
Discussione chiusa ad ulteriori risposte.

MPG

Utente Attivo
544
4
Cari ragazzi devo fare 6 esercizi per casa, quattro li ho svolti ma in questi due ho problemi..
Ho iniziato le funzioni tipo void e differenza con int.
Vi chiedo anche quando usare void, nel senso che da cosa il testo del problema fa capire se usarlo o meno ?
Ecco i due esercizi:

1)chiede l'inserimento di numeri reali (si ferma con l'inserimento di un numero negativo) e stampa e restituisce il maggiore.
2) Scrivere una funzione calcola_interesse(double s, double i, int t) che calcola e restituisce gli interessi su un importo s ad un tasso annuo i per un tempo di t giorni. interesse=(s*i*t)/365.0 Il programma (main) chiede ripetutamente all'utente di inserire un importo, un tasso e un tempo. Quando l'utente inserisce un importo negativo, il programma stampa a video la somma di tutti gli interessi su tutti gli importi inseriti fino a quel momento.

Francamente non so come farli....
 
Ultima modifica:

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
miiii... per curiosità, puoi postare il testo dei quattro che sei riuscito a fare???

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

MPG

Utente Attivo
544
4
Questi due li ho qui:
1)riceve un parametro intero e ne restituisce il valore assoluto; 2)chiede un intero positivo e ne stampa a video il fattoriale. Se l'intero è negativo stampa -1;
Gli altri 2 li ho in altro quaderno che pero' non ho qui.
Vuoi che posto i primi due fatti?
Post unito automaticamente:

Per questo "chiede l'inserimento di numeri reali (si ferma con l'inserimento di un numero negativo) e stampa e restituisce il maggiore." avrei provato cosi' ma non mi viene....

Codice:
#include <iostream>

using namespace std;
int n;
int CalcolaMaggiore()
{
    do
    {
        int max=0;
      cin>>n;
      if(n>max)
        n=max;
    }
    while(n>0);
    return max;
}
int main()
{
    cout<<CalcolaMaggiore();
    return 0;
}
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Questo vale anche per l'altro topic che hai aperto.
Il fatto stesso che "provi" implica che vai per tentativi.

Non potrà mai funzionare quel codice. Inizializzi max a 0 e il valore della variabile n viene letto da tastiera. Se il valore da tastiera è maggiore di max, allora il valore da tastiera è uguale a max, ed il ciclo si ripete, sino a che il valore inserito da tastiera non sarà <= 0; a questo punto viene restituito il valore di max, che non venendo mai modificato non può che essere 0. Sfortunatamente, qualsiasi valore inserirai, verrà sovrascritto da max, che è 0, e che farà terminare il ciclo.

Questo da un punto di vista puramente "teorico", in quanto questo codice non può nemmeno compilare: la variabile max esiste solo nel contesto del ciclo while (visto che è il suo "scope"), ma non fuori da esso. Da notare appunto che se dovesse anche compilare e venir eseguito, avresti sempre 0 come valore di ritorno.
 

MPG

Utente Attivo
544
4
Quando dico "provo" intendo che cerco di farlo da solo, non sapevo come altro spiegarmi.. Uno ci prova per cercare di farlo giusto....
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
si ma scusa, non hai un libro di c++? ho letto anche l'altro topic che hai aperto, mi sembra che procedi un po' alla cieca.
Non so se il C++ te lo stanno spiegando (né come te lo spiegano) ma, a mio avviso, un libro di riferimento è necessario (non solo a te: a TUTTI quelli che iniziano a programmare).
Se ne hai uno, che testo è? (titolo, autore, editore)
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Quando dico "provo" intendo che cerco di farlo da solo, non sapevo come altro spiegarmi.. Uno ci prova per cercare di farlo giusto....

La parte importante del mio intervento non era quella frase però. :P Era una considerazione dovuta principalmente a quanto ho letto nell'altro topic.
La parte importante era cercare di aiutarti a capire cosa non va in quell'algoritmo.
 

MPG

Utente Attivo
544
4
Come libro a scuola abbiamo "Programmare con C++" di Cesare Rota, editrice Hoepli.
Prima mi sono accorto dell'errore ma avevo già postato.
Il fatto di perdere anche il sabato a fare esercizio è prova che mi sforzo di capire non è che faccio apposta a chiedervi aiuto per non studiare..
Comunque ho fatto cosi' ma nulla, qualcosa mi sfugge..

Codice:
#include <iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
int n;
int max=0;
int CalcolaMaggiore()
{
  do
    {
      cin>>n;
      if(n>max)
        n=max;
    }
    while(n>0);
    return max;
}
int main()
{
    cout<<CalcolaMaggiore();
    return 0;
}
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Infatti per tutti noi non è un problema rispondere a domande ed aiutare a dipanare dubbi; in questo caso però sembra che non ti siano chiare cose che in realtà trovi tra le prime pagine di un qualsiasi libro di testo (come il caso dello scope, o dell'altro topic, più in generale).

Riguardo al funzionamento, vale sempre quanto ho detto sopra, riprendo la parte importante:
Inizializzi max a 0 e il valore della variabile n viene letto da tastiera. Se il valore da tastiera è maggiore di max, allora il valore da tastiera è uguale a max, ed il ciclo si ripete, sino a che il valore inserito da tastiera non sarà <= 0; a questo punto viene restituito il valore di max, che non venendo mai modificato non può che essere 0. Sfortunatamente, qualsiasi valore inserirai, verrà sovrascritto da max, che è 0, e che farà terminare il ciclo.
 

MPG

Utente Attivo
544
4
Francamente anche se non metto int max =0 mi viene un errore su if (n>max) "reference to max is ambiguos"....
Non riesco proprio ho dei limiti, non tutti sono portati a tutte le materie...
MI consigliate tra l'altro un altro buon libro in italiano? Il mio secondo me è limitato.....
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
comincia a spostare le variabili n e max dentro la funzione e togli
#include<cmath>
#include<cstdlib>
perché non ti servono neanche. Adesso ragiona su quanto ti ha detto @DispatchCode :
inizializzi max a zero, va bene
poi leggi n (va bene); fai conto che inserisci il numero 9: allora l'istruzione
if(n>max) n=max;
cosa fa secondo te? n=9, max=0 quindi n>max è vero... ma a questo punto poni n=0;
cioè ogni volta che leggi un numero positivo n, imposti la variabile n a zero! quindi il ciclo si interrompe subito;
invece se hai letto il numero 9, significa che hai trovato un nuovo massimo, l'istruzione corretta è
if(n>max) max=n;
hai capito ora?
 

MPG

Utente Attivo
544
4
Eccolo!!! Grande!!
L'altro esercizio per me è veramente difficile (sicuramente per te no) puoi indirizzarmi come farlo? Per oggi stop riprendero' domattina.
Grazie veramente.


Codice:
#include <iostream>


using namespace std;

int CalcolaMaggiore()
{
    int n;
    int max=0;
    do
    {
      cin>>n;
      if(n>max)
        max=n;
    }
    while(n>0);
    return max;
}
int main()
{
    cout<<CalcolaMaggiore();
    return 0;
}
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
era ora!
per l'altro esercizio stesso discorso: devi ragionare, non scrivere codice a caso.
Se riesci a farlo con carta e penna pian pianino lo farai anche al computer;
all'inizio gli interessi totali sono 0.0 euro (non hai ancora inserito nessun importo/interesse/giorni)
poi cominci ad inserire dati
esempio, supponi che s=100 euro, i = 2% annuo e che tieni i soldi in banca giusto per un anno (t=365 giorni)...
significa che in un anno su 100 euro ti danno 2 euro di interesse;
se li tieni per meno giorni, per es. 110 giorni avrai meno interessi: la formula ce l'hai devi solo considerare che, nelle percentuali
100% = 1, 10% = 0,1... 2%=0,02
per es, per 100 giorni avrai i=(100x0.02x110)/365.0= 0.6 euro circa
a questo punto interessi totali = 0.0+0.6 =0.6 euro
e continui così a fare prima il calcolo e poi aggiungendo gli interessi a interessi totali
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Ti ho risposto nell'altro topic; comunque signfica che quella funzione, stando alla firma, si aspetta dei parametri (e tu non li stavi passando).

Domattina provo...


IL tipo di parametri non sono questi?
double a;
double b;
double somma;

No, queste che dichiari qui sono variabili locali alla funzione sommaValori() e non i parametri della funzione. I parametri vengono indicati tra parentesi, tipo:

C++:
void sommaValori(double a, double b)
{
 // codice
}

in questo caso i parametri della funzione sono "a" e "b", entrambi di tipo double.
 
Stato
Discussione chiusa ad ulteriori risposte.

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

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili