Max-Funktion für beliebige Anzahl von Zahlen
-
Hallo.
Ich hoffe, dass ich im richtigen Forum meinen Beitrag geschrieben habe, wenn nicht bitte ich um Entschuldigung, bin noch neu.
Es geht um folgendes: ich möchte aus einer beliebig vielen Anzahl von Zahlen den Maximalwert ausgeben. Dabei lasse ich die Anzahl und Werte der Zahlen durch den Programmnutzer bestimmen. Wie kann ich also so eine Funktion ohne dynamischen Array realisieren?
Hier mal der Code (es ist nur die Main-Datei aus einer modularen Programmierung)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "header.h"int main (void)
{
int lv;
int anzahl, max= 0;
char name [10];
float mw;
double mittelwert;
double summe = 0;struct messdaten * ptr;
struct messdaten * ptr_2;printf ("\nWieviele Elemente wollen Sie eingeben? ");
scanf ("%d", &anzahl);for (lv = 1; lv <= anzahl; lv++)
{
printf ("\nGeben Sie den Namen des Datentelegramms %d ein: ", lv);
scanf ("%s", name);
printf ("Geben Sie den Messwert ein: ");
scanf ("%f", &mw);
summe += mw;if(element_hinzufuegen (name, mw) != 0)
{
printf ("\nFehler beim Hinzufuegen eines Elements");
return 1;
}}
if(anzahl > 1)
{
mittelwert = summe/anzahl;
printf ("Mittelwert ist %f\n", mittelwert);
}/* Ausgabe der kompletten Liste */
elemente_ausgeben ();
printf ("\n\nWelchen Eintrag wollen Sie suchen? ");
scanf ("%s", name);if ((ptr = element_suchen (name)) == NULL)
printf ("\nElement mit Namen %s nicht vorhanden", name);
else
printf ("\nDas Datentelegramm %s hat den Messwert %f", ptr->DTname, ptr->messwert);printf ("\n\nWelchen Eintrag wollen Sie loeschen? ");
scanf ("%s", name);if (element_loeschen (name) != 0)
{
printf ("\nFehler beim Loeschen eines Listenelements");
return 1;
}
/* Ausgabe der kompletten Liste */
elemente_ausgeben ();/* Restliche Elemente loeschen */
ptr = ptr_2;
while (ptr != NULL)
{
ptr_2 = ptr->next;
free (ptr);
ptr = ptr_2;
}
return 0;
}Danke für eure Hilfe im voraus
.
-
Wenn du das Maximum von einer Reihe Zahlen suchst, musst du dazu dann alle Zahlen gleichzeitig kennen oder reicht es nicht vielleicht (*WinkmitdemZaunpfahl*) auch, die Zahlen nacheinander zu betrachten?
-
Hm, also so:
...
int max = 0;
for (lv = 1; lv <= anzahl; lv++)
{if (mw < mw++)
continue;
if (mw > mw++)
mw = mw++;
mw = max;
}Ich befürchte, der Wink mit dem Zaunpfeil hat bei mir nicht viel geholfen.
Entschuldigung, wie gesagt, ich stehe auf den Schlauch... was ich aus deinem Tip herausinterpretiere ist, dass ich den gegebenen Wert mit dem Vorgänger und Nachfolger vergleichen muss bis zum letzten eingegebenen Wert... bis jetzt habe ich die max-Funktion nur mit statischen Array realisiert (also die Anzahl der Felder selbst bestimmt) und irgendwie werde ich einen Denkfehler nicht los
. Bitte um Hilfe.
-
Hier mal wie man das ganze fuer ein Array implementieren kann:
#include <limits.h> #include <stdio.h> #define ARR_SIZE 5 int main() { int max, i; int a[ARR_SIZE] = { 5, -2, 12, 100, 3 }; max = INT_MIN; for ( i = 0; i < ARR_SIZE; ++i ) if ( a[i] > max ) max = a[i]; printf("%d\n", max); }
Und fuer einen Benutzer, der 10 Zahlen eingiebt koennte das etwa so aussehen:
#include <stdio.h> #include <limits.h> #include <stdio.h> int main() { int max, input, i; max = INT_MIN; for ( i = 0; i < 10; ++i ) // Input von 10 Zahlen { scanf("%d", &input); if ( input > max ) max = input; } printf("%d\n", max); }
-
Ich glaube, SeppJ meint sowas:
// Sei n eine beliebige zahl int values[n]; // werte zuweisen int max = values[0]; for(int i=1;i<n;i++) if(values[i]<max)max=values[i]; printf("Groesste zahl: %d",max);
Du hast max zuvor mit 0 initialisiert.
Was aber, wenn nur negative Werte in dem Array stehen?// Eventuell nützliche Funktion für 2 Zahlen: int max(int a,int b) { return a>b?a:b; }
Edit: Oh, da war wohl jemand schneller
MfG Jochen