Array Code (Wer kann Programm Code modifizieren?)



  • Hallo

    Wir haben eine Hausaufgabe auf. Leider haben wir das Array noch nicht so komplex Behandelt. Es soll benotet werden

    Deshalb wende ich mich an Spezialisten der C-Programmierung.

    Hoffe ihr könnt helfen...

    Wir haben folgenden Programm Code bekommen:

    #include <stdio.h>

    main()

    {
    int i;
    int note[50]; //Array von 50 Variablen

    for (i=0;i<50;i++)

    {
    printf("Bitte geben Sie die Note ein:");
    scanf("%d", &note[i]);

    }//Ende der Schleife

    }//Ende Main

    Aufgabenstellung:

    1. Es soll die beste Note von allen angezeigt werden.
    2. Es soll die schlechteste Note von allen angezeigt werden.
    3. Es soll der Durchschnitt aller Noten angezeigt werden.
    4. Es soll die Anzahl der Noten angezeigt werden, welche eingegeben wurden.
      --> Das Array soll modifiziert werden (z.B. wenn nur 30 Noten eingegeben wurden)

    Danke für jede Hilfe



  • wo genau liegt den die Schwierigkeit?



  • Das sagt unser Lehrer auch immer, aber wenn man es nicht spo bei gebracht bekommt, dass man es versthet ergibt sich das Problem.

    Wende mich deshalb auch an Spezialisten, weil ich den Ansatz nie selbst finde. So wie auch die ganze Klasse.



  • #include <stdlib.h>
    #include <stdbool.h>
    #include <stdio.h>
    
    size_t read_grades( unsigned char ** );
    void flush_stdin( void );
    
    int main( void )
    {
    	unsigned char *grades = 0;
    	size_t size = read_grades( &grades );
    	unsigned char min = 0, max = 0;
    	unsigned long sum = 0;
    	size_t i = 0;
    
    	if( !grades ) {
    
    		fputs( "Es ist nicht genuegend freier Speicher verfuegbar oder es wurden keine Noten eingegeben!\n", stderr );
    		return EXIT_FAILURE;
    	}
    
    	min = max = grades[ 0 ];
    
    	for( ; i < size; ++i ) {
    
    		min = grades[ i ] < min ? grades[ i ] : min;
    		max = grades[ i ] > max ? grades[ i ] : max;
    		sum += grades[ i ];
    	}
    
    	printf( "Beste Note:        %u\n", ( unsigned ) min );
    	printf( "Schlechteste Note: %u\n", ( unsigned ) max );
    	printf( "Durchschnitt:      %0.2f\n", sum / ( float ) size );
    
        free( grades );
    }
    
    void flush_stdin( void ) {
    
    	int ch;
    	while( ( ( ch = getc( stdin ) ) != EOF ) && ( ch != '\n' ) );
    }
    
    size_t read_grades( unsigned char **grades ) {
    
    	size_t size = 0;
    	unsigned char *tmp = 0;
    	int input = 0;
    
    	if( !grades ) {
    
    		return 0;
    	}
    
    	puts( "Bitte geben Sie die vergebenen Noten ein:\n(Ihre Eingabe beenden Sie mit 0.)\n" );
    
    	while( true ) {
    
    		while( printf( "%02u: ", size + 1 ), ( !scanf( "%i", &input ) || ( input > 5 ) ) ) {
    
    			flush_stdin( );
    			puts( "Ihre Eingabe ist Fehlerhaft. Bitte wiederholen:\n" );
    		}
    
    		if( !input ) {
    
    			puts( "Eingabe beendet.\n" );
    			return size;
    		}
    
    		tmp = realloc( *grades, ++size );
    
    		if( !tmp ) {
    
    			free( *grades );
    			return 0;
    		}
    
    		( *grades ) = tmp;
    		( *grades )[ size - 1 ] = input;
    	}
    
    	return size;
    }
    

    ...und das gibst du jetzt so ab, oder wie? Was machst du, wenn du deine Vorgehensweise erläutern sollst bzw. dein Lehrer Fragen stellt!?

    greetz, Swordfish



  • Danke.

    Abgeben werde ich das nicht. Da sind viel zu viele Befehle drin, welche ich wir nicht hatten. Jede 3. Zeile beinhaltet etwas was ich nicht interpretieren kann.
    Für uns wäre dieser Code viel zu komplex.

    Aber trotzdem Danke für die Mühe.



  • Fang doch erstmal mit dem ersten Punkt an:

    1. Es soll die beste Note von allen angezeigt werden. 👍

    Wie findet man die größte Zahl aus einer gegebenen Menge von Zahlen ?



  • In dem man die Zahlen vergleicht. Wie kann man am besten diesen vergeich auf stellen? Würde 1=i>2?



  • Worauf ich hinaus will ist, dass es dir genau nix™ bringt, einen Thread zu starten der mit "Hausaufgabe" beginnt und mit "Aufgabenstellung" endet. Versuche, es! Selbstständig. Wenn du probiert hast, gescheitert bist, probiert hast, nachgelesen hast, gegoogelt hast, probiert hast [...] und du irgendwo hängst, dann komm zurück und sag' uns

    a) was Du mit dem Teil des Codes, der Dir Probleme bereitet, erreichen willst,
    b) was das gewünschte/erhoffte Ergebnis ist,
    c) was wirklich geschieht (Variablezustände ausgeben, Bedingungseintritt prüfen, Debugger anwerfen),
    d) warum es - Deiner Meinung nach - nicht funktioniert.

    Dazu solltest Du noch erwähnen, wie deine Entwicklungsumgebung aussieht (Compiler, IDE, Betriebssystem) und evtl. wie Du Dein Programm übersetzt.

    Ausfühlich gibt's das ganze unter Smart Questions.

    greetz, Swordfish



  • Seppe schrieb:

    In dem man die Zahlen vergleicht. Wie kann man am besten diesen vergeich auf stellen? Würde 1=i>2?

    Hattet ihr schon Vergleichsoperatoren?
    http://de.wikipedia.org/wiki/Vergleichsoperator



  • kenn nur 2 davon. Danke



  • Seppe schrieb:

    kenn nur 2 davon. Danke

    das ist immerhin schon ein ganzes drittel.
    🙂



  • Kenn das auch mit dem schlechten Programmierlehrern. Unser Lehrer konnte einen das auch nicht richtig bei bringen.
    Schade, weil C eine schöne Programmiersprache ist.


Anmelden zum Antworten