PDA

Visualizza la versione completa : [C] Anno bisestile


WithoutSam
04-11-2006, 18:20
Uhm scusate sono nuovo..faccio Ingegneria Fisica e il c mi serve x l'esame di informatica e sono ancora allep rime armi..
se qlk anima pia avesse la pazienza di rispondermi ogni tanto a qlk dubbietto stupido non sarebbe male. uhuh :P
la mia domanda di oggi è una cazzata ma nn capisco ....
programmino x sgamare gli anni bisestili:
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
int x;
while(x>0) {
printf("Inserisci un numero intero positivo: ");
scanf("%d",&x);
if(((x % 4 == 0) && (x % 100!=0)) ||(x % 400 == 0))
printf("Questo numero corrisponde a un anno bisestile mannaggiona!");
else printf("L'anno non e' bisestile");

}
system("PAUSE");
return 0;

}
ora..xche' se metto 0 mi entra lostesso nel ciclo em idice che è bisestile porca miseria?
che diff c'è tra il while e il do while?
grazie in anticipo.tao

oregon
04-11-2006, 18:31
Guarda che il controllo della variabile x viene fatto quando esegue la while e non quando esegue la scanf.

La while viene prima della scanf e in quel momento il valore della x non e' determinato (e questo e' gia' un errore) sebbene essa possa essere diversa da zero ...

Le correzioni che devi apportare dipendono dal "flusso" che tu desideri che il programma abbia ... ma se ho capito potresti scrivere



int x;

while(1)
{
printf("Inserisci un numero intero positivo: ");

scanf("%d", &x);
if(x==0) break;

if(((x % 4 == 0) && (x % 100!=0)) ||(x % 400 == 0))
printf("Questo numero corrisponde a un anno bisestile mannaggiona!");
else
printf("L'anno non e' bisestile");

printf("\n\n");
}

system("PAUSE");

return 0;

alka
06-11-2006, 00:20
Il linguaggio anche nel titolo, come da Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

Correggo io il titolo di questa discussione.

Ciao! :ciauz:

WithoutSam
10-11-2006, 21:27
scusami ma che roba è while(1)???
o insomma potrest essere + chiaro?scusa...ma nn ho capito del tutto

oregon
10-11-2006, 22:53
Con

while(1)

si indica che il ciclo deve essere ripetuto per sempre, dato che il valore di controllo e' costantemente vero.

Dal ciclo si esce con

if(x==0) break;

Ma queste sono le *basi* del C, che ti conviene ripassare per poter superare un qualsiasi esame di informatica basato sul linguaggio C ...

WithoutSam
13-11-2006, 18:19
Avrei bisogno di qlk anima pia che mi spieghi la differenza tra i cicli while e do while con opportuni esempi che ne dimostino la diversita'....e che mi dica in genwerale quando devo usareu no e quando l'altro..
grazie in anticipo ...
ciao

oregon
13-11-2006, 18:26
Da Wikipedia:



Per quanto riguarda il costrutto while, esso specifica soltanto la condizione di iterazione, lasciando le due altre operazioni al codice. Esiste una variante, la do... while. Esaminiamone la sintassi:

while (condizione) {
[istruzioni]
}

while (condizione) istruzione;

do {
[istruzioni]
} while (condizione);

do [istruzione] while (condizione);

La differenza tra i costrutti è tanto semplice quanto sostanziale:

While verifica la condizione: se è vera esegue il ciclo finché la condizione non diventerà falsa

Do... While esegue la prima iterazione, e poi si comporta come il precedente


P.S. Pero' questo non c'entra con l'Anno bisestile ... dovevi aprire un altro thread ...

Alex'87
14-11-2006, 12:11
Originariamente inviato da oregon
Con

while(1)

si indica che il ciclo deve essere ripetuto per sempre, dato che il valore di controllo e' costantemente vero.

Dal ciclo si esce con

if(x==0) break;

questa cosa sarebbe meglio evitarla... per uscire dal ciclo si dovrebbe usare la condizione del while!

oregon
14-11-2006, 18:29
Da un punto di vista strettamente "formale" sì, ma non per altro ...

Loading