Seite 1 von 1

Kleinsten Wert in Array finden

Verfasst: Do Apr 15, 2021 1:00 am
von Robocop1
Könnte mir jemand sagen, wozu man hier die integer "pos" benötigt?
Der Code sagt, vergleiche erste Stelle im Array a[0] mit zweiter Stelle a[1], wenn erste Stelle größer ist => nimm als "small" den Wert der kleineren (zweite) Stelle an. Das macht man sooft bis 5 Stellen (N = 5) durchlaufen hat und damit den kleinsten Wert bekommen.

Wofür dann die Codezeilen: "pos = 1" und "pos = i +1;" ??

Danke sehr im Voraus!

Code: Alles auswählen

#include <stdio.h>		
#include <stdlib.h>		
#define N 5		
		
int main()		
{		
    int a[N], i, small, pos;		
		
    printf("Enter %d integer numbers\n", N);		
    for (i = 0; i < N; i++)		
        scanf("%d", &a[i]);		
		
    small = a[0];		
    pos = 1;		
		
    for(i = 1; i < N; i++)		
    {		
        if(small > a[i])		
        {		
            small = a[i];		
            pos = i + 1;		
        }		
    }		
		
    printf("Smallest Number: %d, at position %d\n", small, pos);		
    return 0;		
}		

Re: Kleinsten Wert in Array finden

Verfasst: Do Apr 15, 2021 8:43 am
von Xin
Unten im printf wird nicht nur die kleinste Nummer, sondern auch die Position im angezeigt. Dafür muss man sich die Position der kleinsten Nummer auch speichern, um sie später auszugeben.

Wenn das Feld nur 1 groß ist, wird nicht gesucht. Dann ist small mit a[0] initialisiert und es ist die erste Position.
Dann wird gesucht. Da man in den Klammern [] immer das Offset angibt - also wie viele Objekte man überspringt - fängt man bei 0 an zu zählen. Um jetzt die Position anzugeben, muss man nicht das Offset i angeben, sondern das Offset i + 1.

Re: Kleinsten Wert in Array finden

Verfasst: Fr Apr 16, 2021 1:18 am
von Robocop1
Verstanden, danke!!

Wenn small den (kleineren) Wert der nächsten Position einnimmt, muss "at position" natürlich auch auf die nächste Indexposition wechseln.

Habe letzten printf nicht genau angeschaut :cry: :roll:

Re: Kleinsten Wert in Array finden

Verfasst: Fr Apr 16, 2021 2:55 am
von Robocop1
Gewöhnungsbedürftig ist, dass

pos = 1 , der Indexposition 0 , also der ersten Position im array entspricht.

Während dieselbe Position bei small --> "small = a[0]" geschrieben wird.

Re: Kleinsten Wert in Array finden

Verfasst: Fr Apr 16, 2021 7:12 am
von nufan
Es hängt natürlich auch davon ab, was sich der Benutzer deines Programms erwartet. Ein Nicht-Programmierer wäre über eine Ausgabe von Position 0 vielleicht etwas verwundert.

Re: Kleinsten Wert in Array finden

Verfasst: Fr Apr 16, 2021 8:20 am
von Xin
Wie ich schon schrieb: das eine ist die Position, sowas wie die Hausnummer. Wenn man an der "array"-Straße steht, steht man automatisch am ersten Haus. In Klammern gibt man nun an, wieviele Häuser man weiter zieht. Um zum ersten Haus zu kommen, muss man 0 Häuser weiterziehen. Das eine ist also die Position, das andere das Offset.
Im Regelfall arbeiten die Leute mit Positionen. Offsets haben wir bei Etagen (im deutschsprachigen Raum) oder gerne auch bei Zeiten. Es ist 0 Uhr (in Europa, in Amerika ist es es dann 12 Uhr). Oder wir leben 2021 (Offset), also im 21. Jahrhundert (Position). Jemand ist im ersten Lebensjahr (Position), es sind also noch 0 Jahre seit der Geburt vergangen.

So gewöhnungsbedürftig ist das eigentlich nicht. Für den Computer ist es lediglich einfacher (=schneller) mit dem Offset zu arbeiten, als die Position umzurechnen.

Re: Kleinsten Wert in Array finden

Verfasst: Fr Apr 16, 2021 9:15 pm
von Robocop1
Ah jetzt ists mir einleuchtend ! :idea: :idea: :idea: :)

Thx!