Minimum aus Array bestimmen

Hi.

1. Bitte verwende für deinen Code die entsprechenden Tags: [c]..[/c] für C - [code=cpp]...[/code] für C++ usw..

2. Wozu definierst du die ARRAY_SIZE Variable wenn du sie gar nicht benutzt? :confused:

kurze Frage noch.......
wie weise ich die vom User eingegebenen Werte dem Array zu? Will nicht jede einzelne Komponente einzeln zuweisen.

scanf("%d %d %d %d", &ar[0],&ar[1],&ar[2],&ar[3]);

das muss doch eleganter gehen. Wenn mein array aus 100 Komponenten bestehen würde wär das doch ein Unding...
Das Zauberwort heißt hier Schleife.


C:
	int ar[4];
	int min, i=0;
	
	printf("Bitte 4 Zahlen eingeben:\n");
	scanf("%d %d %d %d",&ar[0],&ar[1],&ar[2],&ar[3]);

	min=ar[0];
	for(;i<sizeof(ar)/sizeof(int);i++)
	{
		if(ar[i]<min)
			min = ar[i];
	}
	printf("Der Kleinste Wert des Arrays ist '%d' und befindet sich in %d.\n",min,ar[i]);
Du solltest dir mal ganz in Ruhe überlegen was bei der Ausführung des Programmes passiert und welchen Wert die Variablen haben. Mach dir am besten eine Tabelle wo du mitschreibst wie sich der Wert der Variablen ändert.

Du meinst ja offensichtlich, dass die Variable i nach der Schleife den Index des Minimums enthält. Der Wert der Variablen i ist aber nicht mehr kleiner als "sizeof(ar)/sizeof(int)", denn sonst wäre die Schleife ja nicht beendet worden.

Wenn dein Array die Größe 4 hat; also 4 Elemente darin gespeichert werden können, welchen Wert hat i dann nach der Schleife? Und ist es in Ordnung dann auf das i-te Element des Arrays mit
C:
ar[i]
zuzugreifen?

Gruß
 
Bin gerade dabei da nochmal durchzusteigen.

Aber könntest du mit diese Zeile nochmal für dummies erklären.... bitte:
C:
i<sizeof(ar)/sizeof(int)
 
Zuletzt bearbeitet:
Bin gerade dabei da nochmal durchzusteigen.

Aber könntest du mit diese Zeile nochmal für dummies erklären.... bitte:

i<sizeof(ar)/sizeof(int)

sizeof ist ein Operator der die Größe in Bytes der übergebenen Variable oder Typs bestimmt.

Nehmen wir an, ar ist ein Array von int und ist folgendermaßen definiert:
C:
int ar[8];
D.h. ar ist ein Array von 8 Elementen und es können also 8 int's darin gespeichert werden.

Um einen int zu Speichern braucht man üblicherweise 4 Byte. Wenn man nun 8 Stück davon speichern will, braucht man....... 32 Byte.

Mit sizeof kann man jetzt den Speicherbedarf von ar bestimmen und auch den Speicherbedarf eines int.

D.h. sizeof(ar) gibt die Gesamtgröße des Arrays zurück und sizeof(int) den Bedarf eines Elementes des Arrays.

Wenn man weiß wie groß das gesamte Array ist, und man auch weiß wie groß ein einzelnes Element ist (alle Elemente sind gleich groß), kann man einfach durch Division die Anzahl der Elemente ermitteln.

Das heißt für das Array ar ergibt sich "sizeof(ar)/sizeof(int)" = 8. Es kommt also immer der Wert heraus, der bei der Definition in den eckigen Klammern angegeben wurde.

Man könnte auch den Wert immer manuell in der Schleife anpassen wenn man die Größe des Arrays bei der Definition ändert, aber das ist ziemlich fehleranfällig weil man es irgendwann doch vergisst.

Ach, und der Vergleich
C:
 i < szieof(ar) / sizeof(int)
ist der übliche kleiner als Vergleich.


Gruß
 
Zuletzt bearbeitet:
Okay super danke, hab ich verstanden....

dann könnte ich auch schreiben:

C:
for(;i<4;i++)

und warum wird hier der Startwert nicht gebraucht?

in der Art von:

C:
for(i=0;i<4;i++)
 
Okay super danke, hab ich verstanden....

dann könnte ich auch schreiben:

C:
for(;i<4;i++)
Ja, da ar als "int ar[4];" in deinem Programm definiert ist.

und warum wird hier der Startwert nicht gebraucht?
Die Variable i wurde doch bereits bei der Definition initialisiert und hat bereits den Wert 0. (Tabelle machen! :))

Ich ziehe es eigentlich immer vor, die Zählvariable auch in der for-Schleife zu initialisieren. Da hat man einen besseren Überblick.

Gruß
 
D.h. ich könnte am Anfang einfach nur:
C:
int ar[4];
int min, i;
schreiben und dann später in der for-Schleife den Startwert setzen right?
 
Okay, soweit habe ich das i verstanden.

ich hänge jetzt noch an 2 Stellen.

1. Wie kann ich die Array-Komponente ausgeben lassen?
Mir ist jetzt klar das es nicht ar[ i ] ist da ja eventuell dieser Wert schon durch einen anderen ersetzt wurde. Es ist die Komponente die als letztes min geworden ist. Aber die kann ich ja nicht über ar[ min ] ausgeben lassen.:confused:

2. Ich weiss immer noch nicht wie ich die eingegebenen Werte an die Komponenten zuweisen kann ohne sie manuell zuzuweisen....
 
Okay, soweit habe ich das i verstanden.
Gut. Dann hat i nach der Schleife also welchen Wert?

Und darf man dann nach der Schleife auf ar[i] zugreifen?
1. Wie kann ich die Array-Komponente ausgeben lassen?
Mir ist jetzt klar das es nicht ar[i] ist da ja eventuell dieser Wert schon durch einen anderen ersetzt wurde. Es ist die Komponente die als letztes min geworden ist. Aber die kann ich ja nicht über ar[min] ausgeben lassen.:confused:
Richtig. Da müßte man sich vielleicht jeweils bei Änderung von i merken (bzw. speichern) welchen Wert i da hatte. ;) Sprich: du brauchst eine weitere Variable, die du vor der Schleife geeignet initialisierst und immer bei einem neuen Minimum entsprechend ändern mußt.

2. Ich weiss immer noch nicht wie ich die eingegebenen Werte an die Komponenten zuweisen kann ohne sie manuell zuzuweisen....
Na, eine Schleife ist doch nur eine Abkürzung für sehr viel Schreibarbeit. Deine Anweisung könntest du ja auch so schreiben

C:
scanf("%d", &a[0]);
scanf("%d", &a[1]);
scanf("%d", &a[2]);
scanf("%d", &a[3]);
/* ... usw. */
Da fällt sofort auf, das sich jede Zeile nur an einer einzigen Stelle von den anderen unterscheidet. Das ist doch eine tolle Gelegenheit dafür eine Schleife zu schreiben.

Gruß
 

Neue Beiträge

Zurück