Array Probelm --> Gelöst



  • _matze schrieb:

    Also da liegt noch einiges im Argen...

    Hier mal ein kleines Beispiel, wie die von Probe-Nutzer vorgeschlagene Lösung aussehen könnte. Da siehst du auch mal, wie man die Makros verwendet und verstehst vielleicht eher, was es damit auf sich hat.
    Vielleicht ist dieser Ansatz für dich auch erstmal leichter, da es mit den Arrays ja noch ein wenig hapert:

    #define max(a,b)            (((a) > (b)) ? (a) : (b))
    #define min(a,b)            (((a) < (b)) ? (a) : (b)) 
    
    #include <stdio.h>
    
    int main()
    {
    	int Anzahl;
    	int Zahl;
    	int AktuellesMinimum=(int)((unsigned int)~0>>1);	//ignoriere diese Zeile erstmal... ;)
    	int AktuellesMaximum=0;
    	printf( "Dieses Programm wurde geschrieben um die groeste und kleinste von Ihnen eingegebene Zahl zu bestimmen.\nBitte gib die Anzahl der Zahlen, die du eingeben willst an!\n\n");
    	scanf( "%d", &Anzahl);
    	if(Anzahl>0) {
    		printf( "\nGib nun bitte die %d Zahlen ein.\n\n", Anzahl);
    
    		for( int Durchgang = 0; Durchgang < Anzahl; Durchgang++ ) {
    			scanf( "%d", &Zahl);
    			AktuellesMinimum=min(Zahl,AktuellesMinimum);
    			AktuellesMaximum=max(Zahl,AktuellesMaximum);
    		}
    
    		printf( "\n\nDie kleinste eingegebene Zahl war %d.\n", AktuellesMinimum);
    		printf( "Die größte eingegebene Zahl war %d.\n", AktuellesMaximum);
    	}else {
    		printf("Sie müssen schon mehr als 0 Zahlen eingeben wollen...");
    	}
    	{
    		char c;
    		while((c=getchar())!='\n');	//den Eingabepuffer leeren...
    	}
    	getchar();	//Schließen der Konsole verhindern
    	return 0;
    }
    

    Ansonsten kannst du für die Array-Variante diesen Thread noch mal ganz genau durchlesen (denn des Rätsels Lösung wurde schon mehrfach erwähnt).

    Und bitte arbeite an deiner Einrückung!
    http://de.wikipedia.org/wiki/Einrückungsstil

    wow, danke
    ich schaus mir mal genauer an



  • ZockerFloh7 schrieb:

    ich wusste garnich dass man z.b. int zahl au mitten rein setzen kann, dachte des geht nur am anfang...

    In C89 geht's auch nicht, C99 kann das (und C++ sowieso). Ist ja auch meist praktischer und übersichtlicher, Variablen erst dann zu deklarieren, wenn man sie braucht.



  • etz versteh ichs, is ja ginial in der schleife gleich des maximum und minimum zu bestimmen

    eine frage hätt ich noch
    was macht die zeile:

    int AktuellesMinimum=(int)((unsigned int)~0>>1);
    


  • ZockerFloh7 schrieb:

    etz versteh ichs, is ja ginial in der schleife gleich des maximum und minimum zu bestimmen

    Das ist nur das, was Probe-Nutzer auf Seite 1 vorgeschlagen hatte.

    ZockerFloh7 schrieb:

    eine frage hätt ich noch
    was macht die zeile:

    int AktuellesMinimum=(int)((unsigned int)~0>>1);
    

    Ey, ich hab doch gesagt: ignorieren! 😃

    Na ja, die Zeile macht nix anderes als die Variable auf den maximalen (vorzeichenbehafteten) Wert zu setzen. Das sorgt dafür, dass der erste Vergleich mit einem eingelesenen Wert garantiert so ausfällt, dass dieser Wert zugewiesen wird. Würdest du diese Variable z.B. auf 0 setzen,würdest du logischerweise als Endergebnis immer 0 als Minimumwert bekommen (sofern kein negativer Wert eingegeben wurde). So sparen wir uns eine Spezialbehandlung der ersten Eingabe.

    Wenn dich interessiert, wie genau das hier funktioniert, google mal nach "Bitshift" oder "Bitoperationen"...



  • _matze schrieb:

    ZockerFloh7 schrieb:

    etz versteh ichs, is ja ginial in der schleife gleich des maximum und minimum zu bestimmen

    Das ist nur das, was Probe-Nutzer auf Seite 1 vorgeschlagen hatte.

    ZockerFloh7 schrieb:

    eine frage hätt ich noch
    was macht die zeile:

    int AktuellesMinimum=(int)((unsigned int)~0>>1);
    

    Ey, ich hab doch gesagt: ignorieren! 😃

    Na ja, die Zeile macht nix anderes als die Variable auf den maximalen (vorzeichenbehafteten) Wert zu setzen. Das sorgt dafür, dass der erste Vergleich mit einem eingelesenen Wert garantiert so ausfällt, dass dieser Wert zugewiesen wird. Würdest du diese Variable z.B. auf 0 setzen,würdest du logischerweise als Endergebnis immer 0 als Minimumwert bekommen (sofern kein negativer Wert eingegeben wurde).

    Wenn dich interessiert, wie genau das hier funktioniert, google mal nach "Bitshift" oder "Bitoperationen"...

    jo, hab grad 0 eingegeben, stimmt 🙂
    Danke


Anmelden zum Antworten