Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C] programma che calcola la somma di N numeri primi

    Ragazzi ho scritto un codice che dovrebbe calcolare la somma dei primi N numeri primi, tuttavia dopo svariate modifiche continua a non dare il risultato richiesto. Posto il codice (non so come scriverlo come sezione separata dal testo con colori, indentature ecc :S) sperando che qualcuno di voi possa indicarmi l'errore...
    #include <stdlib.h>
    #include <stdio.h>

    void spiegazione();
    int prendiN (int min);
    int prendintero(int numero);

    int main(){
    void spiegazione();
    int N=prendiN(0);
    int somma=0;
    int m=0, n=0, i=0;
    do{
    m++;
    for (i=0; i<N; i++){
    int primo=prendintero(i);
    if(i==1);
    n++;
    somma+=i;
    }
    } while (n<N);
    printf("La somma dei primi %d numeri primi è %d\n", N, somma);
    }


    void spiegazione(){
    printf("Questo programma fa cose\n");
    }

    int prendiN(int min){
    int N;
    do{
    printf("Inserisci numero maggiore di %d\n", min);
    scanf("%d", &N);
    if (N<min) printf("Errore!\n");
    } while(N<min);
    return N;
    }

    int prendintero(int numero){
    double ris;
    int i=0;
    for (i=2; i<numero; i++){
    ris=numero%i;
    if (ris!=0){
    ris=1;
    } else if (ris=0){
    ris=0;
    }
    }
    return ris;
    }

    ps. La funzione prendi intero l'ho scritta con l'intenzione che il valore ritornato "ris" sia 1 se il numero è primo e 0 se il numero è non primo..mi è sorto il dubbio che non funzioni come vorrei e che il problema sia proprio li... grazie in anticipo ^^

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    43
    ciao,in queta linea la if assegna ad ris 0 devi mettere (ris==0)
    } else if (ris=0){

  3. #3
    Ho corretto l'errore, grazie mille ) però il programma continua a non funzionare

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da Kintsugi95 Visualizza il messaggio
    Ho corretto l'errore, grazie mille ) però il programma continua a non funzionare

    A parte che quest'ultima if non serve, quale problema hai? Cosa "non funziona"? Spiegati con un esempio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Non funziona nel senso che non ritorna come dovrebbe la somma corretta degli N numeri primi (N inserito da tastiera, ma numeri apparentemente causali (so che non possono esserlo davvero) per esempio se immetto 4, mi da come somma 6, se immetto 5, mi da come somma 10...

  6. #6
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    Non funziona perché la funzione che dovrebbe verificare se un numero è primo o no, in realtà non lo fa correttamente.
    Un numero è primo se divisibile soltanto per uno o per se stesso, se il resto della divisone è zero è divisibile anche per altri numeri, di conseguenza in questo caso devi restituire 0 e uscire dal ciclo tramite break.
    Nel for() dovresti mettere


    codice:
    for(...........){
    
        ris=numero%i;
        if (ris==0){
            return 0; //se il resto è zero non è un numero primo
        }
    
    
    }
    
    
    return 1;// se la funzione non termina nel for() il numero è primo
    Tecnologia

  7. #7
    Ti ringrazio moltissimo... ammetto che non sapevo neanche che si potessero mettere 2 return nella stessa funzione..con il c sto davvero alle prime armi
    se hai la pazienza di seguirmi ancora un attimo ho scritto come hai detto tu ma il programma continua a non calcolare in maniera corretta la somma dei primi N numeri primi... mi è stato detto che forse il problema sta nel fatto che il numero passato come argomento a prendiintero è maggiore o uguale a zero, ma la funzione restituisce un valore potenzialmente casuale quando numero è minore di tre (dato che il for inizia da i=2). Avrebbe senso ma non so come aggiustare la cosa... il for parte da i=2 perchè il modulo con 0 e 1 ovviamente non ha senso... inoltre bisogna controllare se il numero passato è divisibile per un qualunque numero compreso tra 2 e numero-1... aiutatemi vi prego non so più dove

  8. #8
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Ci sono diversi errori di logica anche nel main, diciamo che il programma che hai postato ha molti bug. Vorrei scusarmi con chi leggera per la mancanza di indentazione, ma ho fatto un copia e incolla e non voglio mica perder tempo su codice di altri.

    Correzioni del codice, con qualche commento, confrontandolo col tuo codice dovresti capire gli errori logici.


    codice:
    void spiegazione();
    int prendiN (int min);
    int prendintero(int numero);
    
    
    int main(){
    void spiegazione();
    int N=prendiN(0);
    int somma=0;
    int  i=0;
    
    
    
    
    for (i=1; i<N; i++){ // qui c'era un while che non serviva a niente
    int primo=prendintero(i);
    if(primo==1){// il confronto lo devi fare con la variabile primo, avevi messo anche un ; 
    somma+=i;}// la somma deve appartenere alla condizione, deve essere eseguita solo se condizione vera
    }
    
    
    printf("La somma dei primi %d numeri primi è %d\n", N, somma);
    getchar();
    getchar();
    }
    
    
    
    
    void spiegazione(){
    printf("Questo programma fa cose\n");
    }
    
    
    int prendiN(int min){
    int N;
    do{
    printf("Inserisci numero maggiore di %d\n", min);
    scanf("%d", &N);
    if (N<min) printf("Errore!\n");
    } while(N<min);
    return N;
    }
    
    
    int prendintero(int numero){
    double ris;
    int i=0;
    for (i=2; i<numero ; i++){
    ris=numero%i;
    if (ris==0){
      return 0;
    } 
    }
    return 1;
    }
    Ultima modifica di torn24; 23-01-2016 a 07:41
    Tecnologia

  9. #9
    Grazie mille! Finalmente ho capito l'errore dov'era!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.