DOMANDA Ho problemi con due programmi in C.

Tokishiro

Nuovo Utente
3
0
Perché questi due programmi non funzionano?
Sono programmati in C; il primo è per controllare se un numero è primo, il secondo per la serie di Fibonacci.
Vi prego in caso di risposta di correggermi passo passo senza straalterare il mio algoritmo :D
grazie per l'attenzione
ciaooo

1)
#include<stdio.h>
int main (){
int x = 0, i = 2;

printf("Inserisci un numero intero per verificare se primo o meno\n");
scanf("%d", &x);
if (x==1){
printf("%d e' primo", x);
getch();
}
if (x==0){
printf("immetti numeri superiori a 1");
getch();
}
else {
while (i<x || x%i==0){
i++;
}
if(x%i==0) {
printf("il numero non e' primo\n");
} else {
printf ("il numero e' primo\n");
}
getch();
}
}


2)

#include<stdio.h>
int main (){
int n;
int a, b;
int i;
printf("quanti numeri della serie di Fibonacci vuoi stampare?\n");
scanf("%d",&n);
a=1;
b=0;
printf("%d %d", b,a);
i=3;
while (i<=n) {
printf(" %d", a + b);
b = a;
a = a + b;
i++;
}//chiudo while
getch();
}//chiudo main
 

matteoc91

Utente Attivo
158
17
Ciao :)
Riguardo al primo ti consiglio di fare molta attenzione a come annidi i costrutti if-else. Il problema cmq sta nella condizione che hai imposto nel while ovvero:
Codice:
[COLOR=#333333][FONT=arial]while ([B]i<x || x%i==0[/B]){[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]    i++;[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]}[/FONT][/COLOR]
i<x va bene ed è giusto, ma l'espressione i<x || x%i non va bene per riconoscere i numeri primi perchè se poi consideri l'if successivo:
Codice:
[COLOR=#333333][FONT=arial]if(x%i==0) {[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]   printf("il numero non e' primo\n");[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]} else {[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]   printf ("il numero e' primo\n");[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]}[/FONT][/COLOR]
Per alcuni numeri quali ad esempio il 5, la condizione x%i==0 è verificata, ma x è primo! Di fatti il ciclo while continua fino ad i=5 e poi esce ed entra nel costrutto if-else.
L'ideale se vuoi mantenere quella struttura è cambiare la condizione del while in i<x && x%i!=0. in questo modo il ciclo continua finchè non trovi un divisore per quel numero o finchè i eguaglia x.
Poi nel costrutto if-else basta che controlli il valore di i, ovvero se i ha raggiunto x allora il numero è primo, altrimenti no.

Per quanto riguarda il secondo, il problema è qua:
Codice:
[COLOR=#333333][FONT=arial]while (i<=n) {[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]    printf(" %d", a + b);[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]   [B] b = a;[/B][/FONT][/COLOR][B]
[COLOR=#333333][FONT=arial]    a = a + b;[/FONT][/COLOR][/B]
[COLOR=#333333][FONT=arial]    i++;[/FONT][/COLOR]
[COLOR=#333333][FONT=arial]}[/FONT][/COLOR]
Quando cambi valore ad a lo fai con il valore aggiornato di b che è diventato uguale al vecchio a, ovvero stai scrivenfo a=a*2! Quello che devi fare è creare una variabile temporanea in cui ti salvi il vecchio valore di b, lo aggiorni con il nuovo valore ed infine aggiorni a utilizzando la variabile temporanea:
Codice:
int temp=b;
b=a;
a=a+temp;
 

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

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili