Minimum aus Array bestimmen

sirhC6

Grünschnabel
Hallo erstmal zusammen....
bin neu hier im Forum und wollte mich erstmal vorstellen...

komme aus Stuttgart und studiere im ersten Semester Softwaretechnik und Medieninformatik an der FH Esslingen.

Nun zu meinem Problem...für Euch warscheinlich gar kein Problem.
Und zwar will ich einen Array aus 4 Zahlen anlegen. Die vier Zahlen werden vom User über die Tastatur eingegeben. Nun soll mein Programm die kleinste der Zahlen ermitteln und wieder ausgeben. D.h. Nummer der Komponente und deren Wert....

ich komme nicht weiter an der Stelle an der ich den kleinsten Wert bestimmen lassen soll..
wie geht dass?


Danke schon mal im Vorraus für Hilfe.
 
Hallo,

schau doch mal:
C:
#include <stdio.h>

int main()
{
    int array[] = {12, 132,32,432,-321,321,-32, 1};
    int min, i = 0;

    min = array[0];
    for (; i < sizeof(array) / sizeof(int); i++) {
        if (array[i] < min)
            min = array[i];
    }
    printf("min = %d\n", min);

    return 0;
}

Gruß,
RedWing
 
Willkommen erstmal!

Es ist eigentlich nicht sehr schwer die kleinste (oder auch die grösste) Zahl aus einem Array herauszufinden.

- eine Variable "min" deklarieren
- nimm die erste und die zweite Zahl aus deinem Array
- vergleiche die zwei Zahlen
- speichere die kleinere in "min"
- nimm die nächste Zahl in deinem Array
- vergleiche sie mit "min"
- ist sie kleiner als "min" speichere sie in "min". Andernfalls verwirf sie.
- verfahre so mit jeder anderen Zahl in deinem Array

Pseudocode:
Code:
int nArray[4];
int min;

for (i=0; i<4; i++)
{
    nArray[i] = i;  // das Array mit Werten füllen
}

if (nArray[0] < nArray[1])
   min = nArray[0];
else
   min = nArray[1];

for (int j=2; j<4; j++)
{
    if (nArray[j] < min)
        min = nArray[j];
}
Es gibt wahrscheinlich effizienteren Code für dieses Problem. Aber wenn dein Array nur vier Elemente enthält, spielt das keine grosse Rolle.

Gruss LukeS
 
Hallo,

schau doch mal:
C:
#include <stdio.h>

int main()
{
    int array[] = {12, 132,32,432,-321,321,-32, 1};
    int min, i = 0;

    min = array[0];
    for (; i < sizeof(array) / sizeof(int); i++) {
        if (array[i] < min)
            min = array[i];
    }
    printf("min = %d\n", min);

    return 0;

Ne Frage zu deinem Programm.....
wie kommst du auf die Werte in deinem array[] (12,132,,,,)
Woher weiss ich dass min=array[0] ist?

Sorry bin noch nicht so fit mit pointern und arrays....
 
Zuletzt bearbeitet:
min = array[0] ist nur die initialisierung und wird dann überschrieben, sobald ein kleinerer Wert gefunden wird. Die Zeile ist eigentlich überflüssig, da die for-Schleife sowieso mit i = 0 beginnt.

Die Werte sind von ihm beliebig gewählt worden, damit er dir ein lauffähiges Beispiel bieten kann.

Was ich nicht verstehe ist: sizeof(array) / sizeof(int) - was soll das denn?
 
@fluessig

Der Ausdruck liefert die Größe des Array oder anders gesagt die Anzahl der Arrayelemente.
C:
// für Redwings Beispiel
sizeof(array); // array setzt sich aus Datentyp int * 8(Werte) zusammen
sizeof(int);    // Daten typ int besetzt 4 Bytes
// daraus folgt 4Bytes*8 =32Bytes
sizeof(array) / sizeof(int) // 32:4 = 8 ->Werte somit läuft die Schleife dynamisch egal wieviel Werte

Hoffe ich hab das so richtig verstanden ;-)
 
Hi.
min = array[0] ist nur die initialisierung und wird dann überschrieben, sobald ein kleinerer Wert gefunden wird. Die Zeile ist eigentlich überflüssig, da die for-Schleife sowieso mit i = 0 beginnt.
Nein, die Zeile ist nicht überflüssig, da wenn man sie wegläßt min mit einem zufälligen Wert belegt wird der theoretisch kleiner sein kann als alle anderen Elemente in dem Array. Man könnte höchstens i mit 1 initialisieren.

Was ich nicht verstehe ist: sizeof(array) / sizeof(int) - was soll das denn?
Das hat ja Online-Skater schon erklärt. Noch besser ist allerdings wenn man es unabhängig vom Typ der Arrayelemente macht:
C:
unsigned length = sizeof(array)/sizeof(array[0]);
Dann ist egal, ob da nun int oder float oder irgendwas in dem Array gespeichert wird - es wird immer die Anzahl der Elemente berechnet.

Gruß
 
Hallo,
Noch besser ist allerdings wenn man es unabhängig vom Typ der Arrayelemente macht:
C:
unsigned length = sizeof(array)/sizeof(array[0]);
Dann ist egal, ob da nun int oder float oder irgendwas in dem Array gespeichert wird - es wird immer die Anzahl der Elemente berechnet.

Gruß

ich denke mittlerweile das in dem Fall die Verwendung eines Makros zur Bestimmung der Größe eines Arrays mehr Sinn macht, da
1. sizeof eh nur bei Elementen Sinn macht die in ihrer "statischen" Größe variieren können (also bei Datentypen auf verschiedenen Architekturen)
2. das Konstrukt IMO nur die Leserlichkeit des Codes verschlechtert
Arrays sind sowieso immer gleich in ihrer Größe, von daher ist die Verwendung eines Makros wahrsch. leserlicher ...
C:
#define ARRAY_SIZE 8
...
  int array[ARRAY_SIZE] = {12, 132,32,432,-321,321,-32, 1};
...
  for (; i < ARRAY_SIZE; i++) {
...

Gruß,
RedWing
 
Also vielen Dank erstmal für Eure Mühe....

ich hab mich jetzt mal an RedWings Methode gehalten, da ich die verstehe....
Ihr dürft nicht vergessen das ich erst im ersten Semester bin und noch nicht all zu viel drauf hab....

Vielen Dank nochmal an alle..:)
 
kurze Frage noch.......
wie weise ich die vom User eingegebenen Werte dem Array zu? Will nicht jede einzelne Komponente einzeln zuweisen.
C:
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...


Ach ja ich will auch noch die Array Komponente ausgeben lassen. Wenn ich aber printf(".......%d",ar[i]) ausgeben lasse schreit der mit eine riesen Zahl hin... Ich poste jetzt noch mal meinen ganzen code:

C:
#include <stdio.h>
#define ARRAY_SIZE 4

int main (void)
{
	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]);
	return 0;
}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück