Problema c++

di il
60 risposte

Problema c++

Ho questo esercizio che ho programmato ma dà risultati sbagliati. Ecco il testo:

Scrivere un programma che chiede all'utente di inserire una sequenza di
interi. Il programma continua a chiedere all'utente di inserire valori fintantochè i valori inseriti soddisfano
almeno una delle seguenti condizioni:

è negativo e divisibile per 2;

è positivo e divisibile per 3;

Al termine il programma stampa la somma di tutti i valori inseriti escluso quello ha violato le condizioni.
Risolvere questo esercizio senza usare array.

Ecco la mia soluzione:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    int n=0;
    int somma=0;
    cout<<"Inserisci una sequenza di numeri\n";

    do
    {
        cin>> n;
        if((n<0 && n%2==0)||(n>=0 && n%3==0))
        somma +=n;
    }while((n<0 && n%2==0)||(n>0 && n%3==0));

    cout<<somma;

    system("pause");
    return 0;
}
L'errore che mi dà: io inserisco valori e lui non mi ferma mai, quando premo invio per fermare stampa zero. Dove ho sbagliato? Potete aiutarmi per favore? Grazie in anticipo.

60 Risposte

  • Re: Problema c++

    Se inserisci una serie di numeri senza dare invio è ovvio che non ti ferma, perché per lui è come se stessi inserendo un numero con degli spazi e quindi ti esce automaticamente dal ciclo perché non riconosce il valore inserito!
    E poi la condizione del while deve essere esattamente il contrario di quello che vuoi, non ti scrivo la soluzione ma ti faccio ragionare: il ciclo while si ripete finché NON viene inserito un numero che rispetti quelle condizioni, perché tu devi fermarti SE esce un numero che rispetti quelle condizioni...
  • Re: Problema c++

    Grazie mille per il suggerimento quindi così dovrebbe essere giusto così:
    while(!(n<0 && n%2==0)||!(n>0 && n%3==0));
    Ora andando a capo con invio non si chiude il programma però se metto un numero che rende vera quell'espressione non succede nulla quando invece dovrebbe stampare la somma dei numeri precedenti escluso l'ultimo che fà collassare il ciclo
  • Re: Problema c++

    Non || ma &&
  • Re: Problema c++

    Ma il testo dice se almeno una delle due condizioni deve essere soddisfatta
  • Re: Problema c++

    Esatto ... dato che le due condizioni sono state negate (!), per uno dei teoremi di De Morgan, devi sostituire || con &&

    Hai provato?
  • Re: Problema c++

    Io non sapevo nulla delle leggi di De Morgan comunque se inserisco 4 e poi 9 mi stampa 9 questo è un errore. Da cosa può dipendere?
  • Re: Problema c++

    No, visualizza 4

    Come hai modificato il codice adesso?

    P.S. Non conoscevi De Morgan ma la teoria è importante, come te lo devo dire?
  • Re: Problema c++

    No niente ho risolto mi ero dimenticato di mettere i not e gli && nell'if. Grazie mille per l'aiuto.
  • Re: Problema c++

    L'avevo immaginato ... ma non c'è bisogno di quella if ... pensa a una soluzione più semplice.
  • Re: Problema c++

    Se ti posso essere di aiuto: pensa che quella condizione dell'if già la poni praticamente col while, quindi...
  • Re: Problema c++

    Ma l'if serve per bloccare il numero che fà uscire dal ciclo per non sommarlo a quelli che lo precedono come voleva l'esercizio.
  • Re: Problema c++

    Lo so ... ma ti ho detto che non è necessario, quindi pensa a come modificare il codice eliminandolo, non serve ricordare a cosa serve l'if ...
  • Re: Problema c++

    Ok se tolgo l'if mi somma anche l'ultimo numero, quindi mi stai dicendo di mettere qualcos'altro al posto dell'if per ottimizzare il codice?
  • Re: Problema c++

    Ti hanno già ricordato che la while fa lo stesso controllo della if.

    Non usare la do ma solo la while... pensaci
Devi accedere o registrarti per scrivere nel forum
60 risposte