quelltext ok?



  • Hallo, ich hab mein Prog, fertig geschrieben.
    An der Grundstruktur wollt ich nichts mehr ändern.
    Gibts etwas was geändert werde müsste beispielsweise das mit den Jahren. das man nur einmal das Jahr überprüft und nicht jedes mal schreiben muss && > 1582

    #include <stdio.h>
    
    int pruefung();												// Dekleration der Funktion pruefung
    int warning(int tag, int monat, int jahr, int schaltjahr);	// Dekleratin der Funktion warning
    
    void main (void) {
    
    char antwort ='j';
    
    while(antwort == 'j')												// Programm wiederholt sich solange
    		{															//weiter identisch 'j'
    
    			printf("\n\t**********************************"
    				   "\n\t*****Gregorianischer Kalender*****"								  								  
    				   "\n\t**********************************\n");
    
    			if ( pruefung() )
    					{
    						printf("\nDatum ist Plausibel!\n");			//Datum Plausibel Ausgabe im H.P.
    
    					}
    
    						printf("\nProgramm Wiederholen(j/n)?\n");
    						antwort=getch();
    
    						cls();
    
    			if (antwort != 'j')
    					{
    					printf("\t...Wir hoffen das Programm hat ihnen gefallen...\a\n");
    					break;
    					}
    
    }
    	getchar();
    	return;
    
    }
    
    int pruefung(){												//Definition Funktion pruefung
    
    int tag = 0, monat = 0, jahr = 0, schaltjahr = 0;			// Definiere Variablen
    int hilfe;
    
    while(1)
    	{
    
    		printf("\nBitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n");
    
    			printf("Eingabe:");scanf( "%2u.%2u.%4u", &tag, &monat, &jahr );
    
    			schaltjahr = (( jahr % 4 == 0 ) && ( jahr % 100 != 0)  || ( jahr % 400 == 0 ));
    
    if( ( monat == 01) &&(tag <= 31 && tag >= 1) && ( jahr > 1582 ) ||		// prüfmodul -> Überprüft Datum auf Plausibilität  
     ( monat == 02 ) && ( tag <= 28 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat == 03 ) && ( tag <= 31 && tag >= 1) && ( jahr > 1582 )  || 
     ( monat == 04 ) && ( tag <= 30 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat == 05 ) && ( tag <= 31 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat == 06 ) && ( tag <= 30 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat == 07 ) && ( tag <= 31 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat ==  8 ) && ( tag <= 31 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat ==  9 ) && ( tag <= 30 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat == 10 ) && ( tag <= 31 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat == 11 ) && ( tag <= 30 && tag >= 1) && ( jahr > 1582 )  ||						
     ( monat == 12 ) && ( tag <= 31 && tag >= 1) && ( jahr > 1582 )  ||
     ( monat ==02  ) && ( tag == 29 && tag >= 1) && ( schaltjahr ) && ( jahr > 1582 )   )
    
    			{
    				printf("\n\t--------------------------------------");
    				printf("\n\tTag:%i Monat:%i Jahr:%i Schaltjahr:%i",tag, monat, jahr, schaltjahr); // Wenn das Datum Plausibel ist,
    				printf("\n\t--------------------------------------");							  // wird das Datum ausgeben	
    				return (1);																		  // Rückgabewert 1 
    			}
    
    else
    
    			{
    
    				printf("\n\tBitte ueberpruefen Sie ihre Eingabe\n");
    				printf("\tU N G U E L T I G E S - D A T U M!\n");
    
    				printf("\n\t\t*************************\n");
    				printf("\t\t\t%i.%i.%i\a\n",tag,monat,jahr); 
    				printf("\t\t*************************\n");
    
    				printf("\nHilfe Anzeigen(1/0)?\n");
    				scanf("%i",&hilfe);
    				if (hilfe == 1) warning(tag, monat, jahr, schaltjahr);							//gibt den Fehler an
    			}																					//der zustande kam
    				printf("\n\t\tPlease push <ENTER>\n");getch();cls();
    
    	}
    
    }
    
    int warning(int tag, int monat, int jahr, int schaltjahr)										//Definition Funktion warning
    {
    if ( ( monat == 01 ) || ( monat == 02 ) || ( monat == 03 ) || ( monat == 04 ) ||				
    	 ( monat == 05 ) || ( monat == 06 ) || ( monat == 7  ) || ( monat == 8  ) || 
    	 ( monat == 9  ) || ( monat == 10 ) || ( monat == 11 ) || ( monat == 12 ) && (tag < 1 ) )
    
    	 {
    		printf("\n\tKein Monat verfuegt >>%i<< TAGE!\n",tag);
    	 }
    
    else if ( ( monat == 01 ) || ( monat == 3 ) || ( monat == 5 ) || 
    		  ( monat == 7  ) || ( monat == 8 ) || ( monat == 10) || 
    		  ( monat == 12 ) && (tag > 31 ) )
    
    	 {
    		printf("\n\t[Monat %i verfuegt max.31 TAGE!]\n",monat);
    	 }
    
    else if( ( monat == 04 ) || ( monat == 06 ) || 
    		 ( monat == 9  ) || ( monat == 11 ) && (tag > 30) )
    			{
    				printf("\n[tMonat %i verfuegt max.30 TAGE!]\n",monat);
    			} 
    
    else if( ( monat == 02 ) && (!(schaltjahr)) && ( tag > 28 ) )
    
    			{
    				printf("\n\t[Monat%i Jahr%i enthaelt %i Schaltjahr/e Somit max.28 Tage]\n",monat,jahr,schaltjahr);
    			}
    
    else if ( ( monat == 02 ) && ( schaltjahr)  && ( tag > 29) )
    
    			{
    				printf("\n\t[Monat%i Jahr%i verfuegt max.29 TAGE!]\n",monat,jahr);
    			}
    
    else if ( ( monat > 12 ) ||( monat < 1 ))
    
    			{
    				printf("\n\tMonat%i Ungueltig!\n",monat);
    				printf("\n\tHinweis:[Monate 1 - 12 Akzeptabel]\n");
    			}
    
    else if (jahr < 1582)
    
    			{
    				printf("\n\t[Jahr vor beginn der Gregoranischen Kalender!]\n");
    				printf("\n\tHinweis: Jahre >= 1582 sind Akzeptabel!\n");
    			}
    
    	return;
    
    }
    

    Lg hasso



  • Bei deiner Hauptschleife:

    if (antwort != 'j')
    {
         printf("\t...Wir hoffen das Programm hat ihnen gefallen...\a\n");
    }
    

    Das 'break' ist nicht notwendig. Da die Schleife ohnehin beendet wird.

    Die Abfrage nach der 'Plausibilität' des Datums könntest du vereinfachen:

    static const int daysPerMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int maxDays = daysPerMonth[ monat-1 ];
    
    if ( schaltjahr && monat == 2 )
    	++maxDays;
    
    if ( tag >= 1 && tag <= maxDays && jahr > 1582 )
    {
    	// ...
    }
    

    Außerdem könntest du den Inhalt der Funktion 'warnung' etwas vereinfachen:

    static const int daysPerMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    
    if ( monat > 12 || monat < 1 )
    {
    	printf( "Monat ungueltig" );
    }
    else
    {
    	if ( tag < 1 )
    	{
    		printf( "Kein Monat hat %d tage\n", tag );
    	}
    	else
    	{
    		int days = daysPerMonth[ monat-1 ];
    
    		if ( schaltjahr && monat == 2 )
    			++days;
    
    		if ( tag > days )
    		{
    			printf( "Monat %d hat maximal %d Tage", monat, days );
    		}
    	}
    }
    
    if ( jahr < 1582 )
    	printf( "Jahr zu klein" );
    


  • Ja, gibt genug Sachen, die geändert werden sollten/müssten. Dazu verweise ich einfach auf die 20 anderen Threads, die du zu dem gleichen Programm gestellt hast und wo du die Antworten von den Leuten ignoriert hast. Mit anderen Worten: Mach nen Abgang du Troll 🙄


Log in to reply