PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage max min



°Light°
28.05.2010, 10:01
hallo und wieder bins ich ^^ meine frage ist :

Ich soll ein Programm schreiben das eine fesgelegte anzahl von zahlen, vom benutzer einliest und anschließend die gößte und kleinste zahl ausgibt. ich bon so weite gekommen.

ich kann also die zalhne eingeben die werden aufgeslistet aber wie komm ich nun zu der größten und kleinsten zalh ?

# include <stdio.h>
# include <stdlib.h>

main()
{
int anzahl;
int z;
int zahl;
int max;
int min;

printf("Anzahl : ");
scanf("%d", &anzahl);
fflush(stdin);

for(z=1; z<= anzahl; z=z+1)
{
printf("%d. Zahl: ", z);
scanf("%d", &zahl);
fflush(stdin);



}

}

sp1nny
28.05.2010, 10:25
In C++ würde ich es so lösen:


#include <cstdio>

int main(void){

int icount, inmbr, imax, imin;

printf("Anzahl : ");
scanf("%d", &icount);

for(int i = 1; i <= icount; i++){
printf("%d. Zahl: ", i);
scanf("%d", &inmbr);
if(i == 1){
imax = inmbr;
imin = inmbr;
}
if(inmbr > imax) imax = inmbr;
if(inmbr < imin) imin = inmbr;
}

printf("Max: %d\nMin: %d", imax, imin);
return 0;
}

°Light°
28.05.2010, 10:26
mmhmh so ganz versteh ich die Lösung nich wie würde das den in C aussehen ?

sp1nny
28.05.2010, 10:29
Wichtig ist der fett markierte Code. Dort überprüfe ich zuerst ob es der ersten Schleifendurchgang ist. Wenn dies zutrifft belege ich imax und imin erstmal mit der ersten eingegebenen Zahl. Bei jedem weitern Durchgang überprüfe ich ob die nächste eingegebene Zahl kleiner als imin ist bzw. größer als imax ist. Trifft eins von beiden zu, so ersetze ich imax bzw. imin mit der neuen Zahl.

Desweiteren solltest du nicht vergessen, dass die main()-Funktion eine Rückgabe hat und du dementsprechend noch int vor main schreiben musst, bzw noch einen int returnen musst.

°Light°
28.05.2010, 10:42
So danke dir es hat geklappt habe es nun so gelöst :


# include <stdio.h>
# include <stdlib.h>

main()
{
int anzahl;
int z;
int zahl;
int max;
int min;

printf("Anzahl : ");
scanf("%d", &anzahl);
fflush(stdin);

for(z=1; z<= anzahl; z=z+1)
{
printf("%d. Zahl: ", z);
scanf("%d", &zahl);
fflush(stdin);

if(z == 1)
{
max = zahl;
min = zahl;
}
if(zahl > max)
max = zahl;
if(zahl < min)
min = zahl;

}

printf("Max. Zahl: %d\n", max);
printf("Min. Zahl: %d\n", min);

system ("PAUSE");


}

SnakeDoc
28.05.2010, 11:24
Sp1nnys Lösung ist shcon sehr gut.

Eine Alternative, wenn auch nicht so elegant, wäre das Sortieren z.B. mit Bubblesrot und danah einfach das erste und letzte Element zurückgeben.
Wenn du das in 'nem Array hast, mach das so:


int nums[] = {1, 5, 8, 2, 4, 2};

max = min = 0;
for(i = 0;i < 6;i++) {
max = (max < nums[i] ? nums[i] : max);
min = (min > nums[i] ? nums[i] : min);
}

Keksdose
28.05.2010, 13:14
hm wenn du min=0 setzt wird das das geringste bleiben... ich würde vorschlagen min auf den höchst möglichen wert zu setzten ;)

Oder eben einfach den ersten Wert zu nehmen wie sp1nny und so...
max = min = num[0];
for(i = 1; i<6 ...


// edit: Erklärung
wenn du

max = min = num[0]; machst ist num[0] abgedeckt ;) damit das dann nicht grad nochmal verglichen wird kannst doch bei 1 starten...
du kannst es auch bei 0 beginnen lassen...

dann ist der erste schleifendurchlauf praktisch

num[0]<num[0] ...
num[0]>num[0] ...

wegen max = min = num[0];

i<6 wenn es 6 Elemente gibt .. 0,1,2,3,4,5