kontrolle..



  • Swordfish schrieb:

    Du entwickelst eine Funktion, der ein Datum übergeben werden kann. Die Funktion führt eine Gültigkeitsprüfung durch und gibt gegebenenfalls einen Fehlercode oder "alles OK" zurück.

    cheers, Swordfish

    Könntest du mir bei der erstellung der funktion behilflich sein . ich versteh nicht die while Schleife kontrolliert doch ob das Datum ausgeben werden darf und falls es nicht eine Fehlermeldung angezeigt wird.

    gruß hasso



  • Deine Programmlogik ist noch fehlerhaft. Dein Programm behauptet zB, der 29.02.2100 wäre ein gültiges Datum. Wo hast Du denn Probleme dabei, eine Funktion zu schreiben?

    cheers, Swordfish



  • Swordfish schrieb:

    Deine Programmlogik ist noch fehlerhaft. Dein Programm behauptet zB, der 29.02.2100 wäre ein gültiges Datum. Wo hast Du denn Probleme dabei, eine Funktion zu schreiben?

    cheers, Swordfish

    Warum ist das Datum denn nicht gültig? 2100 ist ein Sage in schaltjahr und hat 29 tage in Februar.

    Problem 1)
    Sowas noch nicht gemacht.
    Problem 2)
    Was die funktion beinhalten soll bin ich mir nicht bewusst.

    lg hasso 🙂



  • wenn du so lieb bist könntest du mir die funktion aufschreiben damit ich diesen stress endlich los bin...

    das wär nett.

    lg hasso



  • hasso schrieb:

    Warum ist das Datum denn nicht gültig? 2100 ist ein Sage in schaltjahr und hat 29 tage in Februar.

    Alle Jahre, die durch 4 ohne Rest teilbar sind, sind Schaltjahre.
    Alle Jahre, die durch 100 ohne Rest teilbar sind, sind keine Schaltjahre.
    Alle Jahre, die durch 400 ohne Rest teilbar sind, sind wiederum Schaltjahre.

    2100 ist also kein Schaltjahr.

    hasso schrieb:

    wenn du so lieb bist könntest du mir die funktion aufschreiben damit ich diesen stress endlich los bin...

    Können: ja. Tun: nein. Du sollst etwas lernen.

    Wenn Du natürlich ein akzeptables Angebot machst, bekommst Du das gesamte Programm (113 Zeilen 100% BugFree ™ Standard C) natürlich gerne. 😉

    cheers, Swordfish



  • Swordfish schrieb:

    hasso schrieb:

    Warum ist das Datum denn nicht gültig? 2100 ist ein Sage in schaltjahr und hat 29 tage in Februar.

    Alle Jahre, die durch 4 ohne Rest teilbar sind, sind Schaltjahre.
    Alle Jahre, die durch 100 ohne Rest teilbar sind, sind keine Schaltjahre.
    Alle Jahre, die durch 400 ohne Rest teilbar sind, sind wiederum Schaltjahre.

    2100 ist also kein Schaltjahr.

    hasso schrieb:

    wenn du so lieb bist könntest du mir die funktion aufschreiben damit ich diesen stress endlich los bin...

    Können: ja. Tun: nein. Du sollst etwas lernen.

    Wenn Du natürlich ein akzeptables Angebot machst, bekommst Du das gesamte Programm (113 Zeilen 100% BugFree ™ Standard C) natürlich gerne. 😉

    cheers, Swordfish

    so mein freund. ich habs

    schaltjahr =(((jahr%100)%4)&&(jahr%100) || (jahr%100));

    jetzt klappts aucher zeigt schaltjahr 0 an!

    sonst noch fehler?

    ps. ich mach dir ein angebot das du nicht ablehnen kannst 😃 (der pate)

    was bekomm ich dafür ?

    gruß hasso



  • klappt dochnicht ..



  • Prüf mal das:

    #include <stdio.h>
    #include <stdlib.h>
    
    int Schaltjahr(int j)
    {
    	return j%4==0&&j%100||j%400==0;
    }
    
    int korrektesDatum(int t, int m, int j)
    {
    	int tmp[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 
    	tmp[1] = Schaltjahr(j) ? 29 : 28;
    	return  m>=1&&m<=12&&j>=1583&&j<=2399/*oder meht*/&&t>=1&&t<=tmp[m-1];
    }
    
    int main() 
    {
        int tag, monat, jahr;
    
        while (1)
        {
    		printf("Bitte gib ein Datum ein!\n");
            printf("Tag : ");
            scanf("%d", &tag);
            printf("Monat : ");
            scanf("%d", &monat);
            printf("Jahr (jjjj) : ");
            scanf("%d", &jahr);
    		if (korrektesDatum(tag, monat, jahr))
    		{
    			printf ("Datum ok!");
    			break;
    		}
    		else
    		   printf ("Ungültiges Datum\n\n");
       }
       return EXIT_SUCCESS;
    } ;)
    


  • Du bist sooo fiies. Dann muss ich auch...

    #include <stdbool.h>
    #include <ctype.h>
    #include <stdio.h>
    
    void flush_stdin( void );
    
    static char *fehlertext[ ] = {
    
    	"Das angegebene Datum ist gueltig.",
    	"Das Jahr ist ungueltig, da es vor der Einführung des Gregorianischen Kalenders liegt.",
    	"Das angegebene Monat ist entweder 0 oder groesser als 12.",
    	"Es wurde der 29. Februar eines Jahres angegeben, das kein Schaltjahr ist.",
    	"Der angegebene Tag ist entweder 0 oder groesser als das angegebene Monat Tage hat."
    };
    
    typedef enum tag_fehlercode {
    
    	ERRDAT_GUELTIG, ERRDAT_UNGJAHR, ERRDAT_MFEHLER, ERRDAT_KSJAHR, ERRDAT_TFEHLER,
    
    } fehlercode_t;
    
    void flush_stdin( void ) {
    
    	setvbuf( stdin, 0, _IONBF, 0 );
    	setvbuf( stdin, 0, _IOFBF, BUFSIZ );
    }
    
    fehlercode_t pruefung( unsigned int tag, unsigned int monat, unsigned int jahr ) {
    
    	static unsigned char monatstage[ ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    
    	monatstage[ 1 ] = ( !( jahr % 4 ) && ( ( jahr % 100 ) || !( jahr % 400 ) ) ) ? 29 : 28;
    	return ( jahr < 1582 ) ? ERRDAT_UNGJAHR : ( ( ( monat < 1 ) || ( 12 < monat ) ) ? ERRDAT_MFEHLER : ( ( tag < 1 ) || ( monatstage[ monat - 1 ] < tag ) ? ( tag == 29 ? ERRDAT_KSJAHR : ERRDAT_TFEHLER ) : ERRDAT_GUELTIG ) );
    }
    
    int main( void ) {
    
    	char puffer[ 12 ] = { 0 };
    	char eingabe = 0;
    	unsigned int tag = 0, monat = 0, jahr = 0;
    
    	do {
    		printf( "Bitte geben Sie ein Datum der Form TT.MM.JJJJ ein: " );
    
    		do {
    			flush_stdin( );
    			fgets( puffer, 11, stdin );
    
    			if( sscanf( puffer, "%u.%u.%u", &tag, &monat, &jahr ) == 3 ) {
    
    				break;
    			}
    
    			printf( "Ihre Eingabe entspricht nicht dem verlangen Format!\n\nBitte wiederholen Sie die Eingabe: " );
    
    		} while( true );
    
    		printf( "%s\n\n", fehlertext[ pruefung( tag, monat, jahr ) ] );
    
    		do {
    			printf( "Soll das Programm wiederholt werden (j/n)?" );
    
    			flush_stdin( );
    			eingabe = tolower( getchar( ) );
    
    		} while( ( eingabe != 'j' ) && ( eingabe != 'n' ) );
    
    		putchar( '\n' );
    
    	} while( eingabe == 'j' );
    }
    

    cheers, Swordfish



  • ich komm mir so vor als wenn ich 2 diamanten habe mit denen ich nichts anfangen kann..

    die schreibweise geht über meinen bisherigen wissenstand hinaus.

    wenn das schon für euch kein problem ist dann könntet ihr meins auch etwas besser machen prüfmodul bzw das alles im hauptprogramm steht.

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>

    int main ()
    
    { // Beginn des Hauptprogramms!
    
    int tag,monat,jahr;
    
    char weiter ='j';
    int schaltjahr; 
    
    //cls
    
    printf("\n \t \t * ~ * W I L K O M M E N * ~ *\n");
    printf("\n\tUm ins Hauptprogramm zu gelangen, druecken Sie eine Beliebige Taste!\n");
    getch();
    //cls
    while(weiter == 'j')  
    {
    
    do
    { 
    
    printf("\n Bitte geben Sie das Datum in der Form TT.MM.JJJJ ein  " );
    
    scanf( "%2u.%2u.%4u", &tag, &monat, &jahr );
    fflush (stdin);
    
    schaltjahr =((jahr%400==0) || (jahr%4==0 && jahr % 100 !=0));
    
    if( (monat ==01 && tag <=31)||   // Solange Bedingungen war wird das Datum ausgegeben!
    (monat ==02 && tag <=28) ||
    (monat ==03 && tag <=31) || 
    (monat ==04 && tag <=30) ||
    (monat ==05 && tag <=31) ||
    (monat ==06 && tag <=30) ||
    (monat ==07 && tag <=31) ||
    (monat ==8 && tag <=31)  ||
    (monat ==9 && tag <=30)  ||
    (monat ==10 && tag <=31) ||
    (monat ==11 && tag <=30) ||							//(monat ==02 && (!(schaltjahr)))||
    (monat ==12 && tag <=31) ||
    ((monat ==02) && (tag ==29)&& (schaltjahr)))
    
    {
    switch(monat)
    { // beginn switch anweisung
    case 01:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. januar.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 02:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Februar.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 03:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. März.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 04:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. April.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 05:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Mai.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 06:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Juni.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 07:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Juli.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 8:
    	printf(" %i. August.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 9:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. September.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 10:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Oktober.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 11:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. November.%iund verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 12:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Dezember.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    } // ende switch anweisung!
    
    }
    
    else
    
    {
    	printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr);// Ausgabe Prüfmodul
    
    }
    
    } while( (monat ==01 && tag >31)||   // Prüfmodul! Solange Bedingung wahr, wird der Vorgang wiederholt!
    	(monat ==02 && tag >29) || 
    	(monat ==02 && tag==29 && (!(schaltjahr)))||
    	(monat ==03 && tag >31) || 
    	(monat ==04 && tag >30) ||
    	(monat ==05 && tag >31) ||
    	(monat ==06 && tag >30) ||
    	(monat ==07 && tag >31) ||
    	(monat ==8 && tag >31)  ||
    	(monat ==9 && tag >30)  ||
    	(monat ==10 && tag >31) ||
    	(monat ==11 && tag >30) ||
    	(monat ==12 && tag >31) ||
    	(monat > 12));    
    
        printf("\n\nWollen Sie den den Prozess wiederholen \nDann taetigen Sie fuer Ja die Taste j und fuer Nein die Taste \n\n");
    	weiter=getch();
    
    	}
    
    return EXIT_SUCCESS; 
    
    } // Ende des Hauptprogrammas!
    


  • #include <stdbool.h> /* für bool */
    #include <stdio.h>
    
    /* #include <stdlib.h> wofür */
    /* #include <math.h> wofür? */
    
    int main( void )
    {
    	/* int tag, monat, jahr; Du sagst unten scanf, dass es unsigned ints einlesen soll, also: */
    	unsigned int tag = 0, monat = 0, jahr = 0;
    	char weiter = 0; /* = 'j'; siehe unten (do...while) */
    	/* int schaltjahr; wenn schon, dann: */
    	bool schaltjahr = false;
    
    	/* und dann noch: */
    	int eingelesen = 0; /* für das Ergebnis von scanf */
    	unsigned int februartage = 0; /* damit's einfacher wird ;) */
    
    	printf("\n \t * ~ * W I L K O M M E N * ~ *\n");
    
    	/* getch(); Unnötiges, nicht Standardkonformes gimmik... */
    
    	/* while( weiter == 'j' || 'J' || 'y' || 'Y' || 1 )  // wird die taste j gedrückt wird der Prozess neugestartet!
    
    		Die Bedingung ist Quatsch mit Soße. Daraus machen wir eine do...while Schleife und sparen uns
    		die künstliche Initialisierung von 'weiter' mit 'j'.
    	*/
    	do {
    
    	/* do
    	   {
    
    		Wofür noch eine Schleife!?
    	*/
    		printf( "\nBitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n" );
    
    		/*
    		scanf( "%2u.%2u.%4u", &tag, &monat, &jahr );
    		fflush( stdin );
    
    		scanf( "%u.%u.%u", &tag, &monat, &jahr );
    
    		scanf ist Deine Angabe für die Breite der Eingabefelder (%_2_) wurscht.
    		Warum den Eingabestrom _nach_ der Eingabe leeren?
    		stdin fflusht man nicht. Ist undefiniert!
    
    		Eingabestrom leeren: */
    		setvbuf( stdin, 0, _IONBF, 0 );
    		setvbuf( stdin, 0, _IOFBF, BUFSIZ );
    
    		/* einlesen: */
    		eingelesen = scanf( "%u.%u.%u", &tag, &monat, &jahr ); /* scanf gibt die anzahl der erfolgreich gelesenen Werte zurück. */
    
    		/* prüfen: */
    		if( eingelesen == 3 ) { /* Nur wenn Tag, Monat und Jahr erfolgreich gelesen wurden...
    
    			/*
    			schaltjahr = (!(jahr%4 && jahr %100 && jahr%400));
    			schaltjahr =(!(jahr%4));
    
    			Darüber, dass beides Quatsch ist, stimmen wir endlich überein, oder?
    			Also, gaaaanz langsam:
    			*/
    			if( ( jahr % 4 ) == 0 ) { /* Alle Jahre, die durch 4 ohne Rest teilbar sind, sind Schaltjahre */
    
    				schaltjahr = true;
    
    				if( ( jahr % 100 ) == 0 ) { /* Alle Jahre, die durch 100 ohne Rest teilbar sind, sind keine Schaltjahre. */
    
    					schaltjahr = false;
    
    					if( ( jahr % 400 ) == 0 ) { /* Alle Jahre, die durch 400 ohne Rest teilbar sind, sind wiederum Schaltjahre. */
    
    						schaltjahr = true;
    					}
    				}
    			}
    
    			if( schaltjahr ) {
    
    				februartage = 29;
    
    			} else {
    
    				februartage = 28;
    			}
    
    			/*
    			if( ( monat == 01 && tag <= 31 ) ||   // Solange Bedingungen war wird das Datum ausgegeben!
    				( monat == 02 && tag <= 28 ) ||
    				( monat == 03 && tag <= 31 ) ||
    				( monat == 04 && tag <= 30 ) ||
    				( monat == 05 && tag <= 31 ) ||
    				( monat == 06 && tag <= 30 ) ||
    				( monat == 07 && tag <= 31 ) ||
    				( monat == 8 && tag <= 31 ) ||
    				( monat == 9 && tag <= 30 ) ||
    				( monat == 10 && tag <= 31 ) ||
    				( monat == 11 && tag <= 30 ) ||
    				( monat == 12 && tag <= 31 ) ||
    				( ( monat == 02 ) && ( tag == 29 ) && ( schaltjahr ) ) )
    			{
    
    				Was heißt, _solange_ die Bedingung wahr ist? Der Block wird _genau dann_ ausgeführt,
    				wenn die Bedingung war ist. Einmal. Was, wenn 'tag' 0 ist?
    			*/
    
    			if( ( 0 < tag ) &&
    					(
    						( ( monat ==  1 ) && ( tag < 31 ) ) ||
    						( ( monat ==  2 ) && ( tag < februartage ) ) ||
    						( ( monat ==  3 ) && ( tag < 31 ) ) ||
    						( ( monat ==  4 ) && ( tag < 30 ) ) ||
    						( ( monat ==  5 ) && ( tag < 31 ) ) ||
    						( ( monat ==  6 ) && ( tag < 30 ) ) ||
    						( ( monat ==  7 ) && ( tag < 31 ) ) ||
    						( ( monat ==  8 ) && ( tag < 31 ) ) ||
    						( ( monat ==  9 ) && ( tag < 30 ) ) ||
    						( ( monat == 10 ) && ( tag < 31 ) ) ||
    						( ( monat == 11 ) && ( tag < 30 ) ) ||
    						( ( monat == 12 ) && ( tag < 31 ) )
    					)
    				)
    			{
    				/*
    
    					Wenn dieses Mörderding nur dafür da ist, den Monatsnamen auszugeben, dann lass es lieber.
    					Dafür nimmt man ein Array von Zeichenketten und gibt sinngemäß monatsname[ monat ] aus.
    
    					Was soll eigentlich eine Ausgabe wie "x Schaltjahr/e" bedeuten!?
    
    				switch( monat )
    				{
    				case 01:
    					printf( "\nDatum ist Plausibel!\n" );
    					printf( " %i. januar.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr );
    					break;
    
    					...
    				}
    				*/
    
    				printf( "Das Datum %02u.%02u.%04u ist plausibel.\n", tag, monat, jahr );
    
    			}
    			else
    			{
    				printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %02u Tage in Monat %02u, Jahr %04u\n", tag, monat, jahr);
    			}
    
    			/*	wie schon gesagt, wofür diese 2. Schleife!?
    
    			} while( (monat ==01 && tag >31)||
    				(monat ==02 && tag >29) ||
    				(monat ==02 && tag==29 && (!(schaltjahr)))||
    				(monat ==03 && tag >31) ||
    				(monat ==04 && tag >30) ||
    				(monat ==05 && tag >31) ||
    				(monat ==06 && tag >30) ||
    				(monat ==07 && tag >31) ||
    				(monat ==8 && tag >31) ||
    				(monat ==9 && tag >30) ||
    				(monat ==10 && tag >31) ||
    				(monat ==11 && tag >30) ||
    				(monat ==12 && tag >31) ||
    				(monat > 12));
    			*/
    
    		} /* if( eingelesen == 3 ) */
    		else
    		{
    			/* Es konnten nicht alle 3 Werte gelesen werden: */
    
    			printf( "Ihre Eingabe entspricht nicht dem Format TT.MM.JJJJ!" );
    		}
    
    		printf( "\n\nWollen Sie den den Prozess wiederholen \nDann taetigen Sie fuer Ja die Taste j und fuer Nein die Taste \n\n" );
    
    		/*	weiter = getch(); 
    			Nicht Standard!
    
    			Eingabepuffer leeren und ein Zeichen lesen:
    		*/
    		setvbuf( stdin, 0, _IONBF, 0 );
    		setvbuf( stdin, 0, _IOFBF, BUFSIZ );
    		weiter = getchar( );
    
    	} while( ( weiter == 'j' ) || ( weiter == 'J' ) );
    
    	/* system("pause"); Funktioniert nur unter DOS und Windows... */
    	getchar( );
    }
    

    Aber schön ist das nicht...

    Was mich die ganze Zeit schon interessiert: Wie lernst Du eigentlich?

    cheers, Swordfish



  • hab das Buch c von anfang an. das ist aber nur für die grundlagen. welches kannst du mir empfehlen um mal so wie du zu programmieren zu können. bzw wie sollt ich vorgehen?

    ps. der compiler gibt ne fehlermeldung :

    kann nicht geöffnet werden: "stdbool.h": No such file or directory

    gruß hasso



  • Hey Hasso,

    ich glaub wir sind im selben Kurs. 😉
    Gib mal deine ICQ oder MSN-Addy, dann kann ich dir wenn du willst dabei helfen. Hab das Programm fertig geschrieben mit den Mitteln die wir bisher hatten.
    Die hier vorgeschlagenen Prgoramme sind zwar alle bestimmt richtig und so, nur viele Dinge davon hatten wir noch nicht...



  • hasso schrieb:

    der compiler gibt ne fehlermeldung :
    kann nicht geöffnet werden: "stdbool.h": No such file or directory

    Dann nimm <stdbool.h> raus und ersetzte alle bool durch int .

    Hast Du das Programm nun verstanden? Was verstehst Du nicht? Mann, ich will Dir helfen, aber sei bitte etwas gesprächiger. 🙄

    Welche Themen habt ihr denn bis jetzt behandelt? Wie geht's dir mit den einzelnen? Hast Du das gefühl alles verstanden zu haben, das ihr bis jetzt durchgenommen habt?

    cheers, Swordfish



  • Swordfish schrieb:

    Thou shall not fflush stdin!
    Thou shall not cast void pointers! And therefore
    Thou shall not cast the result of malloc!

    thou shalt not mix archaic withal new words.
    🙂



  • hey Swordfish

    hast du vielleicht msn?? da könnte man gut mit einander reden.. gegebenfalls downloade ich mir icq.

    hab nur noch bis montag zeit..

    Die Aufgabe heisst:

    Ein in der Form: TT.MM.JJJJ einzugebendes Datum soll auf Plausibilität geprüft werden.

    Diese Prüfung soll solange für neu einzugebende Daten wiederholt werden, bis das zuletzt eingegebene Datum plausibel ist.
    Schaltjahre müssen in die Überprüfung mit einbezogen werden.

    Die eigentliche Prüfung übernimmt ein Modul: pruefung.

    Im Ergebnis der Prüfung soll dieses prüfmodul informieren, welches Problem es gab. bsp Monat zu groß. keine 31 im April!

    Die Textausgabe: " Datum ist Plausibel" soll allerdings im Hauptgrogramm erfolgen.

    Das Gesamtprogramm soll auf Wunsch wiederholt werden können.

    im gegben struktogramm steht auch:

    Aufruf: pruefung mit Übergabe: tag,monat,jahr und
    Wertrückgabe auf richtig [richtig= pruefung (tag,monat,jahr)]

    die while schleife soll dann so lange laufen wenn richtig identisch 0 ist.

    Dieses Beispiel haben wir gemacht, und sollte so ähnlich sein was die funktion betrifft in der die ifabfrage stehen sollten:

    // Berechnung von Mittelwert und Standardabweichung aus den 6 Umsätzen der Woche 
    // geschrieben in  C
    
    #include<stdio.h>				// Einbinden von Header-Dateien
    #include<conio.h>
    #include<math.h>
    #include<eigene.h>				// für die eigenen Funktionen: clrscr und gotoxy
    
    float mw (float p_x ()[], int p_n); // Deklaration
    
    // Datei mit der Funktion: mw
    
    /*
    float mw (float p_x[], int p_n)
    {	float xquer = 0;
    
    	for (int i=0 ; i<p_n ; i++) 
            xquer += p_x[i];			// Berechnung Summe 	
    
       	 	xquer /=  p_n;			// Berechnung Mittelwert
    	return xquer;				//Wertrückgabe
    */
    
    void main(void)          			// Beginn Hauptprogramm main
    { int const n = 6;
      float x[n], xquer, s;				// Variablenvereinbarung 
      int i;
      int check;
      char weiter = 'j','J','y','Y';
    
      clrscr();					// Löschen des Bildschirmes
      printf("Einfache statistische Berechnung");
      getch();					// Eingabe eines (beliebigen) Zeichens 
      while (weiter == 'j'|| weiter =='J' || weiter =='y'|| weiter =='Y' || weiter == '1')				// Beginn der äußeren Schleife
         {  
        	clrscr();
        	i = 0 ; xquer = 0; s = 0;		// Anfangswerte setzen
        	do                          		// Beginn Eingabeschleife
       	 {
       	   printf("\nBitte den Umsatz des %i - ten Tages eingeben: ",i+1);
       	   check = scanf("%f",&x[i]);			// Tastatureingabe eines reellen Wertes
    	   fflush (stdin);
       	   if (check != 0)i++;
      	  } while (i < n || check == 0);
    
    // Aufruf der Funktion
    	 xquer = mw(x,n);
    
      	 for (i=0 ; i<n ; i++) 
                             s += (float) pow(x[i]-xquer,2);		// Berechnung Summe
    
                             s = (float) sqrt(s / (n-1));		// Berechnung Standardabweichung
    
       	printf("\n\nDer Mittelwert betraegt: %.2f Euro",xquer);	// Ergebnisausgabe
      	printf("\n\nDie Standardabweichung  betraegt: %.2f Euro",s);
    
        	getch();
        	clrscr();
        	printf("Nochmal (j/J/y/Y");
        	weiter = getch();			// Einlesen der Entscheidungsvariable
         }						// Ende äußere Schleife
    }						// Ende Hauptprogramm main
    
    Hier die funktion:
    
    float mw (float p_x[], int p_n)
    {	float xquer = 0;
    
    	for (int i=0 ; i<p_n ; i++) 
            xquer += p_x[i];			// Berechnung Summe 	
    
       	 	xquer /=  p_n;			// Berechnung Mittelwert
    	return xquer;				//Wertrückgabe
    
    }
    

    Hier mein Programm:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main ()
    
    { // Beginn des Hauptprogramms!
    
    int tag,monat,jahr;
    
    char weiter ='j';
    int schaltjahr;
    int check;
    
    printf("\n \t\t * ~ * W I L K O M M E N * ~ *\n");
    printf("\nBitte druecken Sie eine beliebige Taste, um fortzufahren!!!\n");
    getch();
    
    while(weiter == 'j')  // wird die taste j gedrückt wird der Prozess neugestartet!
    {
    
    do
    { 
    
    printf("\nBitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n");
    
    printf("Eingabe:"); check =  scanf("%2u.%2u.%4u", &tag, &monat, &jahr );
    
    schaltjahr =((jahr%400==0) || (jahr%4==0 && jahr % 100 !=0)); // Bedingung = Schaltjahr!
    
    } while( (monat ==01 && tag >31)||   //Solange Bedingung wahr, wird der Vorgang wiederholt!
    (monat ==02 && tag >29) || 
    (monat ==02 && tag==29 && (!(schaltjahr)))||
    (monat ==03 && tag >31) || 
    (monat ==04 && tag >30) ||
    (monat ==05 && tag >31) ||
    (monat ==06 && tag >30) ||
    (monat ==07 && tag >31) ||
    (monat ==8 && tag >31) ||
    (monat ==9 && tag >30) ||
    (monat ==10 && tag >31) ||
    (monat ==11 && tag >30) ||
    (monat ==12 && tag >31) ||
    (monat > 12) || ((check != 0))||
    (jahr<1583));						// Beginn des gregorianischen Kalender!
    
    // hier aufruf der funktion!
    
    if( (monat ==01 && tag <=31)||   // Solange Bedingungen war wird das Datum ausgegeben!
    (monat ==02 && tag <=28) ||
    (monat ==03 && tag <=31) || 
    (monat ==04 && tag <=30) ||
    (monat ==05 && tag <=31) ||
    (monat ==06 && tag <=30) ||
    (monat ==07 && tag <=31) ||
    (monat ==8 && tag <=31) ||
    (monat ==9 && tag <=30) ||
    (monat ==10 && tag <=31) ||
    (monat ==11 && tag <=30) ||							//(monat ==02 && (!(schaltjahr)))||
    (monat ==12 && tag <=31) ||
    ((monat ==02) && (tag ==29)&& (schaltjahr))||
    (jahr>1583))
    
    {
    switch(monat)
    { // beginn switch anweisung
    case 01:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. januar.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 02:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Februar.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 03:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. März.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 04:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. April.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 05:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Mai.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 06:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Juni.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 07:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Juli.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 8:
    	printf(" %i. August.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 9:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. September.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 10:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Oktober.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 11:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. November.%iund verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 12:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Dezember.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    } // ende switch anweisung!
    
    }
    
    else
    
    {
    	printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); 
    
    }
    
        printf("\n \n \tSoll das Programm wiederholt werden (j/n)?\n \n");
    	weiter=getch();
    
    }
    	return EXIT_SUCCESS; 
    
    } // Ende des Hauptprogrammas!
    


  • hasso schrieb:

    Die Aufgabe heisst:

    [...]

    Das wissen wir schon seit 3 (in Worten: Drei) Seiten!

    Ließt Du meine Posts überhaupt? Scheint nicht der Fall zu sein. Ich habe Dir schon einige male Fragen gestellt und nie Antworten (auf meine Fragen) erhalten. Zur Erinnerung:

    Swordfish schrieb:

    Hast Du das Programm nun verstanden? Was verstehst Du nicht? [...]

    Welche Themen habt ihr denn bis jetzt behandelt? Wie geht's dir mit den einzelnen? Hast Du das gefühl alles verstanden zu haben, das ihr bis jetzt durchgenommen habt?

    cheers, Swordfish

    PS: Im übrigen hast du bereits 3 komplette Lösungen erhalten...



  • [quote="Swordfish"]

    hasso schrieb:

    Die Aufgabe heisst:

    [...]

    Das wissen wir schon seit 3 (in Worten: Drei) Seiten!

    Ließt Du meine Posts überhaupt? Scheint nicht der Fall zu sein. Ich habe Dir schon einige male Fragen gestellt und nie Antworten (auf meine Fragen) erhalten. Zur Erinnerung:

    Swordfish schrieb:

    Hast Du das Programm nun verstanden? Was verstehst Du nicht? [...]

    PS: Im übrigen hast du bereits 3 komplette Lösungen erhalten...

    Ich hab das letzte Programm soweit verstanden nur das Problem ist das die lösungen nicht so sind wie es in der aufgabenStellung gegeben ist.

    weil:

    1. gibt man beiwpielsweise ein falschen Datum ein Muss das Datum bei der eingabe so oft wiederholt werden bis es richtig eingeben ist wobei die die eigentliche PRÜFUNG ein Modul üernimmt. es ist kein modul da.

    jetzt das endscheidene :
    Im hauptprogramm muss man eine funktion so aufrufen:
    richtig = pruefung (tag, mon, jahr); // die muss man selbst schreiben

    in richtig wird abgespeichert, ob die funktion erfüllt ist, also eine 1 zurückgibt oder nicht erfüllt ist, dann gibt sie eine 0 zurück

    die if anweisungen müssen in int pruefung (...)

    und die do while Schleife muss so aussehen wie das beispiel das ich eben gepostet habe mit der statistik.

    bei einer falschen einabe darf man nicht gefragt werden möchten Sie das Programm wiederholen, sondern das muss mit der do while Schleife Automatisch geschehen . Deswegen hatte ich auch eine Do while Schleife drin.


Anmelden zum Antworten