#include int karkausvuosi_if(int vuosi) { int karkausvuosi=0; if (vuosi % 4 == 0) { if (vuosi % 100 != 0) karkausvuosi=1; else if (vuosi % 400 == 0) karkausvuosi=1; } return karkausvuosi; } int karkausvuosi_sw1(int vuosi) { int karkausvuosi=0; switch (vuosi%4) { case 0: switch (vuosi%100) { case 0: switch (vuosi%400) { case 0: karkausvuosi=1; } break; default: karkausvuosi=1; break; } default: break; } return karkausvuosi; } int karkausvuosi_sw2(int vuosi) { int karkausvuosi; switch ((vuosi%4==0) + (vuosi%100!=0)*2 + (vuosi%400==0)*4) { case 3: // vuosi%4==0, vuosi%100!=0 case 5: karkausvuosi=1; break; // vuosi%4==0, vuosi%100==0, vuosi%400==0 default: karkausvuosi=0; break; } return karkausvuosi; } int karkausvuosi_eop(int vuosi) { return vuosi%4 ? 0 : (vuosi%100 ? 1 : (vuosi%400 ? 0 : 1)); } int karkausvuosi_while(int vuosi) { int karkausvuosi=0; while (vuosi%4==0 && (vuosi%100!=0 || vuosi%400==0)) { karkausvuosi=1; break; } return karkausvuosi; } int karkausvuosi_andor(int vuosi) { return (vuosi%4==0 && (vuosi%100!=0 || vuosi%400==0)); } int karkausvuosi_kertop(int vuosi) { return (vuosi%4==0) * ((vuosi%100!=0) + (vuosi%400==0)) > 0; } int main(int argc, char **argv) { int vuosi, alku=1800, loppu=2200, askel=50; argc>1 && sscanf(argv[1], "%d", &alku); argc>2 && sscanf(argv[2], "%d", &loppu); argc>3 && sscanf(argv[3], "%d", &askel); printf("vuosi if sw1 sw2 eop while andor kertop\n"); for (vuosi=alku; vuosi<=loppu; vuosi += askel) { printf("%4d ",vuosi); printf("%5d ",karkausvuosi_if(vuosi)); printf("%5d ",karkausvuosi_sw1(vuosi)); printf("%5d ",karkausvuosi_sw2(vuosi)); printf("%5d ",karkausvuosi_eop(vuosi)); printf("%5d ",karkausvuosi_while(vuosi)); printf("%5d ",karkausvuosi_andor(vuosi)); printf("%5d ",karkausvuosi_kertop(vuosi)); printf("\n"); } return 0; }