PROBLEMA CON QUESTO PROGRAMMA.

di il
10 risposte

PROBLEMA CON QUESTO PROGRAMMA.

Ciao a tutti ragazzi, mi sto cimentando da poco nel mondo della programmazione in C++, sia per necessità di studio (università) sia per passione.
Vi voglio mostrare questo esercizio poiché non capisco dove sbaglio e spero possiate essermi d'aiuto.
#include <iostream>
using namespace std;

int main ()

{
int n;
int somma = 0;
int massimo = 0;
cout <<"inserisci valore di n" << '\n';
cin >> n;

while (n > 0)
{
if (n > massimo)
massimo = n;
somma = somma + n;
cout <<"inserisci un intero" << '\n';
cin >> n;

}

cout <<" la somma è " << somma << '\n';
cout <<" il massimo è" << massimo << '\n';

return 0;

}
Il problema di questo programma è che il ciclo while è andato in loop facendomi inserire valori all'infinito. Potete dirmi dove sbaglio?

10 Risposte

  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    Che un while vada in loop mi sembra tautologico... non esci scrivendo zero?
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    Usa il tag code per il codice.

    Comunque io a prima vista non vedo errori. Assicurati di scrivere un valore <= 0 per terminare il ciclo
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    Weierstrass ha scritto:


    Che un while vada in loop mi sembra tautologico... non esci scrivendo zero?
    Allora tecnicamente si, il programma termina nel momento in cui si inserisce un numero <= a 0, il problema è che il programma non viene proprio eseguito nemmeno nella condizione di verità. Si ferma a chiedermi il numero intero in entrata e me lo chiede in loop, senza effettuare nessun'altra operazione.
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    Ma tu che valori inserisci?
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    Ho appena guardato il programma, e non vi sono errori di alcuni tipo, L'ho anche provato e funziona correttamente, credo che tu non abbia capito il funzionamento del ciclo "while" ovvero tradotto letteralmente "finché". Infatti il tuo programma richiederà in input il valore del numero finché esso non sia <= a 0, in parole povere finché non si verificherà un immissione di un valore pari a 0 :

    inserisci valore di n
    3
    inserisci un intero
    1
    inserisci un intero
    2
    inserisci un intero
    3
    inserisci un intero
    4
    inserisci un intero
    6
    inserisci un intero
    0
    la somma Þ 19
    il massimo Þ6

    ..ecco il tuo programma eseguito, come puoi vedere è terminato una volta che ho inserito il valore 0. Se tu vuoi che siano richiesti in input tanti valori quanto il valore di "n", quindi se dico che è n = 3, allora richiedo 3 valori ti consiglio di utilizzare o un "do, while" oppure un " for" entrambi 2 tipologie di cicli. Ho provato a integrarli all'interno del tuo programma, ma per farlo mi serve che tu mi dica quale sia il problema da risolvere, altrimenti non essendone a conoscenza non posso darti una mano. Ho provato così:

    #include <iostream>
    using namespace std;

    int main ()

    {
    int n;
    int n1; // è una variabile che serve da appoggio per non perdere il valore originale di n
    int somma = 0;
    int massimo = 0;
    cout <<"inserisci valore di n" << '\n';
    cin >> n;

    n1 = n; // così facendo riesco a inizializzare n1 a n, e calibro il ciclo con n1

    for(int i = 0; i < n1; i++){
    if (n > massimo)
    massimo = n;
    somma = somma + n;
    cout <<"inserisci un intero" << '\n';
    cin >> n;
    }



    cout <<" la somma è " << somma << '\n';
    cout <<" il massimo è" << massimo << '\n';

    return 0;

    }

    Con maggiori informazioni posso sicuramente crea un programma più performante.
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    Magari puoi anche usare i tag CODE per il codice ...

    Comunque ancora rossross ci deve rispondere sui problemi che ha ...
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    Insesperto ha scritto:


    Ho appena guardato il programma, e non vi sono errori di alcuni tipo, L'ho anche provato e funziona correttamente, credo che tu non abbia capito il funzionamento del ciclo "while" ovvero tradotto letteralmente "finché". Infatti il tuo programma richiederà in input il valore del numero finché esso non sia <= a 0, in parole povere finché non si verificherà un immissione di un valore pari a 0 :

    inserisci valore di n
    3
    inserisci un intero
    1
    inserisci un intero
    2
    inserisci un intero
    3
    inserisci un intero
    4
    inserisci un intero
    6
    inserisci un intero
    0
    la somma Þ 19
    il massimo Þ6

    ..ecco il tuo programma eseguito, come puoi vedere è terminato una volta che ho inserito il valore 0. Se tu vuoi che siano richiesti in input tanti valori quanto il valore di "n", quindi se dico che è n = 3, allora richiedo 3 valori ti consiglio di utilizzare o un "do, while" oppure un " for" entrambi 2 tipologie di cicli. Ho provato a integrarli all'interno del tuo programma, ma per farlo mi serve che tu mi dica quale sia il problema da risolvere, altrimenti non essendone a conoscenza non posso darti una mano. Ho provato così:

    #include <iostream>
    using namespace std;

    int main ()

    {
    int n;
    int n1; // è una variabile che serve da appoggio per non perdere il valore originale di n
    int somma = 0;
    int massimo = 0;
    cout <<"inserisci valore di n" << '\n';
    cin >> n;

    n1 = n; // così facendo riesco a inizializzare n1 a n, e calibro il ciclo con n1

    for(int i = 0; i < n1; i++){
    if (n > massimo)
    massimo = n;
    somma = somma + n;
    cout <<"inserisci un intero" << '\n';
    cin >> n;
    }



    cout <<" la somma è " << somma << '\n';
    cout <<" il massimo è" << massimo << '\n';

    return 0;

    }

    Con maggiori informazioni posso sicuramente crea un programma più performante.
    Ok grazie ho finalmente capito dove sbagliavo. Effettivamente non avevo compreso a pieno il funzionamento del ciclo. Comunque l'esercizio richiesto è riguardante appunto il capitolo del ciclo while e chiedeva di creare un programma che inserisse una sequenza di n interi e che poi venisse calcolato e stampato il massimo e la somma. Credevo di aver sbagliato qualcosa io all'interno del programma invece semplicemente non avevo inserito il valore sentinella che mi fermasse l'esecuzione del programma.
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    oregon ha scritto:


    Magari puoi anche usare i tag CODE per il codice ...

    Comunque ancora rossross ci deve rispondere sui problemi che ha ...
    Nella risposta precedente ho descritto l'esercizio, ma ho capito quale fosse l'errore
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    semplicemente non avevo inserito il valore sentinella che mi fermasse l'esecuzione del programma.
    Eppure te lo hanno chiesto TUTTI quelli che ti hanno risposto...
  • Re: PROBLEMA CON QUESTO PROGRAMMA.

    oregon ha scritto:


    Magari puoi anche usare i tag CODE per il codice ...
    Hai ragione, come puoi notare è da poco che rispondo su questo forum, non per giustificarmi sia chiaro, ma errare è umano, sulle risposte successive a questa, ho incominciato ad usarli, chiedo scusa ma non avevo ancora letto il regolamento.
Devi accedere o registrarti per scrivere nel forum
10 risposte