PROBLEMA Aiuto per programma semplice in C++

Pubblicità

StepX

Utente Attivo
Messaggi
368
Reazioni
11
Punteggio
39
Ciao ragazzi, mi sto cimentando in questo piccolo programma che dovrebbe calcolare quali dei numeri inseriti abbiano almeno due divisori tra 2, 3, 5, 7, 11... Il problema è che non riesco a capire come mai non va...
Se ad esempio inserisco 6 dice che non ha almeno due divisori, se inserisco 30 dice che ne ha almeno due... :cav: Mi date una mano? :help:

Codice:
#include <cstdlib>
#include <iostream>


using namespace std;


int main(int argc, char *argv[])
{
    int vet[5]={2,3,5,7,11}, num, n=1, c=0;
    
    cout<<"Il programma calcola quale dai numeri inseriti ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;
    
    do
    {
        n=1; c=0;
              
        cout<<"Inserisci un numero: ";
        cin>>num;
        
        while (n<=5)
        {
              if (num%vet[n]==0)
                 c++;
              n++;
              };
          
        if (c>=2)
           cout<<"Il numero inserito ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;
        else
           cout<<"Il numero inserito non ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;
        }while (num!=0);
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
Versione corretta e funzionante:
Codice:
#include <cstdlib>
#include <iostream>




using namespace std;




int main(int argc, char *argv[])
{
    int vet[5]={2,3,5,7,11}, num, n=1, c=0;


    cout<<"Il programma calcola quale dai numeri inseriti ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;


    do
    {
        n=0; c=0;


        cout<<"Inserisci un numero: ";
        cin>>num;


        while (n < 5)
        {
              if (( num % vet[n] )==0)
                 c++;
            n++;
        }


        if (c>=2)
           cout<<"Il numero inserito ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;
        else
           cout<<"Il numero inserito non ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;
        }while (num!=0);


    system("PAUSE");
    return EXIT_SUCCESS;
}
Allora gli errori sono:
A) Utilizzi n come indice, ma lo inizializzi ad 1 sebbene gli array inizino da 0.
B)Nel while la condizione è errata, perché n arriverà a 5 ma corrisponde ad un valore fuori dal range dell'array (0 - 4).
C)Non ci vuole il punto e virgola alla }
 
Versione corretta e funzionante:
Codice:
#include <cstdlib>
#include <iostream>




using namespace std;




int main(int argc, char *argv[])
{
    int vet[5]={2,3,5,7,11}, num, n=1, c=0;


    cout<<"Il programma calcola quale dai numeri inseriti ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;


    do
    {
        n=0; c=0;


        cout<<"Inserisci un numero: ";
        cin>>num;


        while (n < 5)
        {
              if (( num % vet[n] )==0)
                 c++;
            n++;
        }


        if (c>=2)
           cout<<"Il numero inserito ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;
        else
           cout<<"Il numero inserito non ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;
        }while (num!=0);


    system("PAUSE");
    return EXIT_SUCCESS;
}
per quanto riguarda if else prima della fine del ciclo (credo) si potrebbe scrivere anche così:
Codice:
 (c>=2) ? [COLOR=#333333]cout<<"Il numero inserito ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl : [/COLOR][COLOR=#333333] cout<<"Il numero inserito non ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;[/COLOR][COLOR=#333333]
[/COLOR]
So che è una tamarrata ma in teoria funziona no?
 
Grazie mille signore del tempo sei stato gentilissimo!! :)
Per la tamarrata (:asd:) ne terrò conto...
 
per quanto riguarda if else prima della fine del ciclo (credo) si potrebbe scrivere anche così:
Codice:
 (c>=2) ? [COLOR=#333333]cout<<"Il numero inserito ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl : [/COLOR][COLOR=#333333] cout<<"Il numero inserito non ha almeno 2 divisori tra 2, 3, 5, 7, 11."<<endl;[/COLOR][COLOR=#333333]
[/COLOR]
So che è una tamarrata ma in teoria funziona no?
Si con il ternario è più elegante.
Ma lo sarebbe così:
Codice:
cout << ( c >= 2  ? "Il numero ha almeno due divisori (...)" : "Il numero non ha almeno due divisori (...)" )
        << endl;
NB: le parentesi sono necessarie.
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top