Problema con esercizo sui numeri primi

di il
12 risposte

Problema con esercizo sui numeri primi

Salve a tutti, sono agli inizi e mi sono abbattuto in un esercizio che chiede di creare una funzione che preso un intero restituisca true se il numero è primo e false se non lo è. Il problema e che la funzione mi restituisce sempre false. Qui sotto vi allego il codice

#include<iostream>
bool funzione (int x){    
    for(int i=2;i<x-1;i++){
        if (x%i==0)
            return false;
    } 

              return true;
    
}

int main () 
{
    int x;
std::cin>>x;
std::cout<<funzione(x);
return 0;
}

Ringrazio in anticipo tutti e buona giornata

12 Risposte

  • Re: Problema con esercizo sui numeri primi

    Ti sei "abbattuto"?

    Quale metodo stai utilizzando per controllare se un numero è primo?

    E cosa fa quello che hai scritto tu passo-passo ? Ad esempio proviamo con il numero 17 ... se lo passi alla funzione questa cosa fa?

    Perché dici che non funziona?
  • Re: Problema con esercizo sui numeri primi

    oregon ha scritto:


    Ti sei "abbattuto"?

    Quale metodo stai utilizzando per controllare se un numero è primo?

    E cosa fa quello che hai scritto tu passo-passo ? Ad esempio proviamo con il numero 17 ... se lo passi alla funzione questa cosa fa?

    Perché dici che non funziona?
    Ciao oregon, sinceramente non ho cercato un metodo specifico per i numeri primi ma ho provato ad implementarlo da solo, secondo il mio ragionamento se prendessimo il numero 17, calcoleremmo il modulo di 17 per i numeri che vanno da 2 a 16, e nel caso ci fosse un numero in quel intervallo dove il suo modulo faccia 0, ovvero è divisibile per quel valore, ritorno false poichè non si tratta di un numero primo. Dico che non funziona perchè mi stampa sempre "1", sia se metto in input un numero primo che non.
  • Re: Problema con esercizo sui numeri primi

    Cioè se dai in input 8 hai come risultato 1 ?
  • Re: Problema con esercizo sui numeri primi

    oregon ha scritto:


    Cioè se dai in input 8 hai come risultato 1 ?
    Esattamente
  • Re: Problema con esercizo sui numeri primi

    Ma sei sicuro? Io l'ho provato e mi restituisce 0.

    Tu l'hai provato?
  • Re: Problema con esercizo sui numeri primi

    oregon ha scritto:


    Ma sei sicuro? Io l'ho provato e mi restituisce 0.

    Tu l'hai provato?
    Si l'ho appena provato, se ti può essere utile l'ho scritto su visual studio, compilato con g++, e mostrato l'output con ./a.out, ma con il numero 8 mi restituisce 1, come con tutti gli altri numeri. Sto impazzendo
  • Re: Problema con esercizo sui numeri primi

    Visual studio su linux?
  • Re: Problema con esercizo sui numeri primi

    oregon ha scritto:


    Visual studio su linux?
    Si
  • Re: Problema con esercizo sui numeri primi

    Intendi Visual Studio Code?

    Comunque hai qualche problema con il compilatore perché con 8 il risultato è 0
  • Re: Problema con esercizo sui numeri primi

    oregon ha scritto:


    Intendi Visual Studio Code?

    Comunque hai qualche problema con il compilatore perché con 8 il risultato è 0
    Si visual studio code distro Ubuntu, penso che il problema sia g++ perché ho provato a scrivere il codice in un file txt, salvarlo cpp ed eseguirlo da terminale ma continua a tornarmi 1. Ho provato adesso a compilarlo su un compilatore online ed effettivamente mi torna 0, adesso mi sta crollando un mondo addosso poiché utilizzo g++ perché è quello consigliato dal libro sul quale sto studiando. Sai quale può essere il problema? Mi consigli di cambiare compilatore?
  • Re: Problema con esercizo sui numeri primi

    @sputafuoco, NON FARE ""pasticci"" (volevo usare un'altra parola ma suppongo che sia abbastanza sveglio da capire quale sia )

    E' ALTAMENTE IMPROBABILE che sia il compilatore (mai dire mai, ovviamente).
    Invece e' ALTAMENTE PROBABILE che stai facendo pasticci TU!!!

    Quindi, come si risolve?

    NON PENSARE che un esperto non si trovi nella tua stessa situazione. Certo, non per esercizietti cosi' semplici, ma essendo esperto realizza applicazioni piu' complesse, e anche queste, a volte (il 90%) non funzionano come dovrebbero

    Quindi, SI RICOMINCIA DALLE BASE!!

    1) elimina visual studio code e usa gedit. Per 10 righe di codice non ti serve la sitassi colorata, il foldig e le altre n-mila meraviglie che VSC mette a disposizione. Utili per roba grossa, NON per un sorgente unico
    2) compila A MANO, cosi' sei sicuro che stai compilando esattamente il file che stai modificando.
    3) ELIMINA l'input da tastiera! Mettici UN NUMERO. L'input da tastiera TI DISTRAE e NON SERVE A NIENTE. Per cambiare inuput, cambbi il numero DIRETTAMENTE NEL CODICE. L'input da tastiera lo rimetterai solo alla fine, quando tutto il resto funzionera'.

    A questo punto

    1) provi con dei numeri che sai per CERTO essere NON PRIMI, tutti i multipli di 2, di 10 o di 5 (RICORDA, 2 E' PRIMO!!!!, 1 e 0 NON VANNO CONSIDERATI )
    2) provi con dei numeri che sai per CERTO essere PRIMI: li trovi facilmente su internet: elenchi STERMINATI di numeri primi. Ma puoi anche iniziare con 3,5,7,11,13,17,19,23,...

    In questo modo hai il PIENO CONTROLLO di quello che fa il programma e SE NON FUNZIONA inizia ad inserire dei "printf" per stampare i risultati intermedi.

    L'uso delle print/stampa su schermo e' il PRIMO metodi di debugging/ricerca degli errori di un programma, nato quando tu e molti di noi non erano ancora nati, ma SEMPRE valido!
  • Re: Problema con esercizo sui numeri primi

    Ciao migliorabile! Grazie per i tuoi consigli, ma penso che il problema sia il compilatore perché come ho già detto a oregon in un compilatore online il programma funziona, apparte per il numero 2 che me ne ero dimenticato e che ho appena risolto aggiungendo nella condizione && x! =2. Visual studio non lo posso cancellare perché sto lavorando per un altro progetto che non ha nulla a che vedere con c++. Comunque ho già fatto la prova scrivendo il codice sul file di testo gedit ma non cambia nulla (se per compilare a mano intendi tramite terminale con g++, altrimenti non so come si faccia) quindi penso che il problema sia proprio g++. Grazie comunque per i tuoi consigli che certamente seguirò
Devi accedere o registrarti per scrivere nel forum
12 risposte