PROBLEMA Numeri Primi in C

Paakiv

Utente Attivo
575
12
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!
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Hai scritto cand == false; e num_primi == j;. Stai confrontando e non assegnando.
Per il debugger, basta tradurre letteralmente l'errore che ti da..
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
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
 

Eduadie

Utente Attivo
204
24
Si ma prima ancora di pensare al codice mi sembra ti mostri un errore riguardo al compilatore che non hai attivato.
 

Paakiv

Utente Attivo
575
12
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.
Post unito automaticamente:

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;
}
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili