PROBLEMA Aiuto per programma semplice in C++

StepX

Utente Attivo
368
11
CPU
AMD Ryzen 7 3700X @4300Mhz 1.28V
Dissipatore
Noctua NH-D14
Scheda Madre
Asus Crosshair VIII Hero Wi-Fi
HDD
Sabrent Rocket PCI-E 4.0 1TB
RAM
G.Skill TridentZ B-Die @3800Mhz 16-17-16-32-48-288-1T 1.425V
GPU
Asus ROG Strix RTX 2060 O6G
Audio
Integrata
Monitor
Dell Alienware AW2521HF
PSU
Corsair RM750x
Case
Cooler Master HAF 922
Periferiche
Razer Huntsman TE, Razer Mamba Elite
OS
Windows 10 Home
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;
}
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
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 }
 
  • Mi piace
Reazioni: StepX

Tinwor

Utente Attivo
932
143
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?
 
  • Mi piace
Reazioni: StepX

StepX

Utente Attivo
368
11
CPU
AMD Ryzen 7 3700X @4300Mhz 1.28V
Dissipatore
Noctua NH-D14
Scheda Madre
Asus Crosshair VIII Hero Wi-Fi
HDD
Sabrent Rocket PCI-E 4.0 1TB
RAM
G.Skill TridentZ B-Die @3800Mhz 16-17-16-32-48-288-1T 1.425V
GPU
Asus ROG Strix RTX 2060 O6G
Audio
Integrata
Monitor
Dell Alienware AW2521HF
PSU
Corsair RM750x
Case
Cooler Master HAF 922
Periferiche
Razer Huntsman TE, Razer Mamba Elite
OS
Windows 10 Home
Grazie mille signore del tempo sei stato gentilissimo!! :)
Per la tamarrata (:asd:) ne terrò conto...
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
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:
  • Mi piace
Reazioni: Tinwor

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

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili