Ciclo while e for: non capisco

di il
3 risposte

Ciclo while e for: non capisco

Salve a tutti, sono nuovo del forum e sono qui per chiedervi aiuto. L'esercizio è abbastanza basilare ed è il seguente:

"Si scriva un programma in grado di decidere se un numero dato dall’utente è primo. Si ricorda che un numero è primo se non è divisibile per nessuno dei valori compresi tra il numero stesso e 1".

La risoluzione sarebbe:
----------------------------------------------------------

int main(void) {
int n, i;
int primo; // flag che utilizzo per determinare se numero è primo

do {
printf("Inserire un valore intero positivo:\n");
scanf("%d", &n);
} while (n < 1);

i = 2; // il primo confronto
primo = 1; // se alla fine dell'iterazione primo avrà ancora valore 1, allora il numero è primo

while (primo && i <= n / 2) { // mi basta arrivare fino a n/2
primo = n % i; // se la divisione intera non dà resto -> primo = 0 -> esco dal ciclo e concludo che il numero non è primo
}

/*
VERSIONE COMPATTA EQUIVALENTE
for(i = 2, primo = 1; primo && i <= n / 2; i++) {
primo = n % i;
}
*/

if(!primo) {
printf("Il numero NON è primo\n");
} else {
printf("Il numero è primo\n");
}

return 0;
}
---------------------------------------------------

Non riesco a capire come possa uscire dal ciclo while se il resto risulta 0. La versione compatta con il for ho capito come si usa, ma non riesco a capire perché dovrebbe uscire dal ciclo se primo = 0.

3 Risposte

  • Re: Ciclo while e for: non capisco

    Esce perché non è soddisfatta questa parte

    primo &&

    della condizione
  • Re: Ciclo while e for: non capisco

    Ciao oregon, grazie per la risposta. Ma quindi se io inserisco semplicemente nelle condizioni di while "primo" il ciclo finisce non appena mi restituisce un valore diverso da 1 che gli è stato assegnato in precedenza? Perché se così fosse, allora, quando si trova a stabilire se 13 è primo, all'operazione 13%5 il resto è 3 che è diverso da 1 il ciclo dovrebbe arrestarsi no?
  • Re: Ciclo while e for: non capisco

    Si arresta quando primo è zero non quando è 3
Devi accedere o registrarti per scrivere nel forum
3 risposte