PROBLEMA Numeri Primi in C

Pubblicità

Paakiv

Utente Attivo
Messaggi
580
Reazioni
13
Punteggio
55
Buonasera a tutti.
Ho scritto questo programma, ma non funziona, e non capisco perchè. Inoltre non si avvia il debugger su CodeBlocks che mi dice:
ERROR: You need to specify a debugger program in the debuggers's settings.
(For MinGW compilers, it's 'gdb.exe' (without the quotes))
(For MSVC compilers, it's 'cdb.exe' (without the quotes))
C:
#include<stdio.h>
#include<stdbool.h>

int main(void){
    int i, j, num_primi[5];
    int arr_dim = sizeof(num_primi)/sizeof(num_primi[0]);
    bool flag = true, cand = true;

    for(i = 0; i < arr_dim; i++){
        num_primi[i] = 1;
    }

    for(j = 0; flag == true; j++){
        for(i = 0; i < arr_dim; i++){
            if(j % num_primi[i] == 0){
                cand == false;
            }
        }
        if(cand == true){
            for(i = 1; i < arr_dim; i++){
                if(num_primi[i] == 1){
                    num_primi[i] == j;
                    break;
                }
            }
        }
        cand = true;
        if((arr_dim - 1) != 1){
            flag = false;
        }
    }
    for(i = 0; i < arr_dim; i++){
        printf("%d ", num_primi[i]);
    }
}
Mi vengono mostrati questi warning:
In function 'main':
16|warning: statement with no effect [-Wunused-value]|
22|warning: statement with no effect [-Wunused-value]|
Qualcuno sa aiutarmi? Grazie!
 
Hai scritto cand == false; e num_primi == j;. Stai confrontando e non assegnando.
Per il debugger, basta tradurre letteralmente l'errore che ti da..
 
Hai scritto cand == false; e num_primi == j;. Stai confrontando e non assegnando.
Hai ragione sono un pirla!
Comunque anche corretto non mi funziona...
Per il debugger, basta tradurre letteralmente l'errore che ti da.
Eh si, il fatto è che non me lo ha mai fatto e nonostante abbia seguito qualche video su Google continua a non funzionare!
 
Non ti funziona perchè if((arr_dim - 1) != 1) ti uscirà sempre al primo ciclo. Poi ci sono altri errori proprio nell'algoritmo.

P.S: int arr_dim = sizeof(num_primi)/sizeof(num_primi[0]) non ne capisco il motivo. Sai già la dimensione dell'array, usala e via
 
Si ma prima ancora di pensare al codice mi sembra ti mostri un errore riguardo al compilatore che non hai attivato.
 
Non ti funziona perchè if((arr_dim - 1) != 1) ti uscirà sempre al primo ciclo. Poi ci sono altri errori proprio nell'algoritmo.
Volevo scrivere num_primi[arr_dim -1] != 1, in breve volevo accedere all'ultima posizione.
P.S: int arr_dim = sizeof(num_primi)/sizeof(num_primi[0]) non ne capisco il motivo. Sai già la dimensione dell'array, usala e via
Ho fatto così nel caso la dimensione fosse cambiata, senza dover andare a modificare ogni ciclo.
Si ma prima ancora di pensare al codice mi sembra ti mostri un errore riguardo al compilatore che non hai attivato.
Purtroppo si, ed è la prima volta che me lo fa, e non capisco perchè dato che ha sempre funzionato. Non riesco proprio a risolvere.
Tutto questo solo quando apro un progetto/faccio un debug, l'esecuzione invece va tranquillamente (tranne che non fa quello che vorrei), anche con altri singoli fogli di codice.
--- i due messaggi sono stati uniti ---
C:
#include<stdio.h>
#include<stdbool.h>

int main(){
    int i, j, num_primi[10];
    int arr_dim = sizeof(num_primi)/sizeof(num_primi[0]);
    bool flag = true, cand = true;

    for(i = 0; i < arr_dim; i++){
        num_primi[i] = 1;
    }

    for(j = 0; flag == true; j++){
        for(i = 0; i < arr_dim; i++){
            if(j % num_primi[i] == 0){
                cand = false;
            }
        }
        if(cand == true){
            for(i = 0; i < arr_dim; i++){
                if(num_primi[i] == 1){
                    num_primi[i] = j;
                    break;
                }
            }
        }
        cand = true;
        if((num_primi[arr_dim - 1]) != 1){
            flag = false;
        }
    }

    for(i = 0; i < arr_dim; i++){
        printf("%d ", num_primi[i]);
    }

    return 0;
}
 
Pubblicità
Pubblicità
Indietro
Top