C Aufgabe Schaltjahr



  • Die Augabenstellung sieht wie folgt aus:

    - Ein Jahr dessen Jahreszahl durch 4 teilbar ist, ist ein Schaltjahr
    - ... außer wenn die Jahreszahl durch 100 teilbar ist.
    - Ist die Jahreszahl durch 400 teilbar, dann ist das entsprechende Jahr aber trotzdem ein Schaltjahr.
    - Das Jahr 0 war kein Schaltjahr.

    Programmier erst seit einer Woche .. daher bin ich noch etwas unbeholfen ...



  • Dann vertausch mal die ganzen 0 und 1 miteinander (oder du sagst "1 steht für 'kein Schaltjahr'" und drehst die if(istSchaltjahr) Abfrage entsprechend um.

    der Teil hinter if() wird ausgeführt, wenn die Bedingung erfüllt ist, der Teil hinter else, wenn die Bedingung des zugehörigen if() nicht erfüllt war.



  • müsste eigentlich so reichen:

    if (jahr%400 == 0 || (jahr%4 == 0 && jahr%100 !=0))
      // februar hat 29 tage
    else
     // februar hat 28 tage
    

    🙂



  • maxwell schrieb:

    - Das Jahr 0 war kein Schaltjahr.

    ein jahr 0 gab es nie.



  • CStoll schrieb:

    Dann vertausch mal die ganzen 0 und 1 miteinander (oder du sagst "1 steht für 'kein Schaltjahr'" und drehst die if(istSchaltjahr) Abfrage entsprechend um.

    der Teil hinter if() wird ausgeführt, wenn die Bedingung erfüllt ist, der Teil hinter else, wenn die Bedingung des zugehörigen if() nicht erfüllt war.

    All das hatte ich schon versucht ..
    leider erfolglos ..



  • Echt?

    if (jahr % 4 == 0)
      if (jahr % 100 == 0)
        if (jahr % 400 == 0)
          if (jahr == 0)
            istSchaltjahr = 0;
          else
            istSchaltjahr = 1;
        else
          istSchaltjahr = 0;
      else
        istSchaltjahr = 1;
    else
      istSchaltjahr = 0;
    

    So sollte es eigentlich das richtige Ergebnis liefern.



  • CStoll schrieb:

    Echt?

    if (jahr % 4 == 0)
      if (jahr % 100 == 0)
        if (jahr % 400 == 0)
          if (jahr == 0)
            istSchaltjahr = 0;
          else
            istSchaltjahr = 1;
        else
          istSchaltjahr = 0;
      else
        istSchaltjahr = 1;
    else
      istSchaltjahr = 0;
    

    So sollte es eigentlich das richtige Ergebnis liefern.

    Jetzt hats tatsächlich geklappt.
    Danke Dir vielmals für deine Hilfe ..



  • doppelpost, sorry.



  • hier.. der code funktioniert..
    falls du ihn noch brauchst.. 🙂

    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
    	int Jahr,Antw=1;
    	do
    	{
    		do
    		{
    			system("cls");
    			printf("\n\t********Schaltjahrberechnung********\n\n");
    			printf("\n\tJahr >=1600 : ");scanf("%i",&Jahr);
    		}
    		while(!(Jahr>=1600));	
    
    			if(Jahr%400==0)	
    				printf("\n\n\tJahr ist ein Schaltjahr\n\n");
    			else
    				if(Jahr%100==0)
    					printf("\n\n\tJahr ist kein Schaltjahr\n\n");
    				else
    					if(Jahr%4==0)
    						printf("\n\n\tJahr ist ein Schaltjahr\n\n");
    					else
    						printf("\n\n\tJahr ist kein Schaltjahr\n\n");
    		do
    		{
    			printf("\t---------------------------------------");
    			printf("\n\n\tNochmal(0/1)< >\b\b",Antw);scanf("%i",&Antw);
    		}
    		while(Antw!=0&&Antw!=1);
    		printf("\n\n\n\n");
    	}	
    	while(Antw);
    


  • ...programmiert ihr immer so'n umständliches zeug?

    #define IstSchaltjahr(x) ((!((x)%4)&&(x)%100)||!((x)%400))
    

    ^^sieht zwar doof aus, ist aber einfach in der anwendung.
    🙂


Anmelden zum Antworten