Maximum berechnen

kartoffelfre

Grünschnabel
Hallo zusammen

Ich sollte in einem Pascal-i aus einem Array:

Code:
ARRAY[1..i]

das Maximum berechnen. Weiss jemand, wie das geht?

Gruss kartoffelfre
 
Zuletzt bearbeitet:
Versuchs mal mit:

Code:
High(Arrayname); //diese Funktion liefert dir die Anzahl der Elemente im Array  zurück

Gruß
Rudolf Grauberger
 
Hi,

in Delphi ginge das in einem Integer-Array mit MaxIntValue(MeinArray); aus der Unit "Math":

Code:
function MaxIntValue(const Data: array of Integer): Integer;

Dadurch erhältst Du bei
Code:
Ergebnis := MaxIntValue(MeinArray);
in "Ergebnis" den höchsten Wert, der im Array vorhanden ist.

Edit: Die Länge des Arrays ist bei MaxIntValue egal. Für vorzeichenbehaftete Zahlen nimmt man "MaxValue".
 
Zuletzt bearbeitet:
Ich danke euch schonmal für die Antworten, doch wie ich gerade selbst bemerkte, habe ich mich etwas unklar ausgedrückt...:)

Also...
Ich habe ein Array mit 20 zahlen definiert (zahl[1..20]). Diese habe ich dann in einem nächsten Schritt mit Zufallswerten füllen lassen.
Nun gibt man ein, wie viele Zahlen man "benötigt."
(der Reihe nach: also die ersten i Zahlen.)

Sprich: die zahlen: zahl[1..i]
Nun soll ich aus diesen Zufallswerten den höchsten Wert in einer Variablen speichern lassen.
Ich hoffe, nun ist es verständlich...

Gruss
 
Meinst du sowas? (Achtung, ist ungetestet)

Code:
function Hausaufgabe(maxIndex:Integer; const data: array of Integer): Integer;
var
  i: Integer;
begin;
  Result := 0;
  for i := 0 to maxIndex do
    if data[i] > Result then Result := data[i];
end;
 
Hi,

also, ich habe das jetzt so verstanden: Du hast nach dem Füllen mit Zufallszahlen ein Array, das beispielsweise so aussieht (ich habe jetzt mal nur 6 Zahlen verwendet):

MeinArray[17, 25, 3, 109, 11, 5]

Im nächsten Schritt wird festgelegt, wieviele Zahlen aus dem Array weiterverwendet werden sollen, also z.B. 4 Stück. Im Beispiel wären das also die Zahlen 17, 25, 3 und 109, die noch zu betrachten wären. Nun sollst Du noch bestimmen, welche der 4 Zahlen die höchste ist. Ist das so richtig?

Wenn ja, dann halte Dich an CSANecromancers Code-Beispiel.

Wenn es lediglich darum geht, die höchste Ziffer aus dem kompletten Array herauszufinden, geht das kürzer mit der MaxIntValue-Funktion.

Result := MaxIntValue(MeinArray); würde dann die 109 liefern.
 
Hi,

also, ich habe das jetzt so verstanden: Du hast nach dem Füllen mit Zufallszahlen ein Array, das beispielsweise so aussieht (ich habe jetzt mal nur 6 Zahlen verwendet):

MeinArray[17, 25, 3, 109, 11, 5]

Im nächsten Schritt wird festgelegt, wieviele Zahlen aus dem Array weiterverwendet werden sollen, also z.B. 4 Stück. Im Beispiel wären das also die Zahlen 17, 25, 3 und 109, die noch zu betrachten wären. Nun sollst Du noch bestimmen, welche der 4 Zahlen die höchste ist. Ist das so richtig?

Wenn ja, dann halte Dich an CSANecromancers Code-Beispiel.

danke euch... Das ist genau das, was ich suche... Doch leider verstehe ich die Syntax in dem Code nicht ganz... (Habe mit Pascal erst am Mittwoch begonnen - ein Projekt für die Schule...)
Ich denke, am besten ist es, wenn ich euch das Problem und meinen bisherigen Quelltext einfach mal poste... Dann habt ihr einen Überblick über das ganze...

Gruss
 
Hier ist das Problem:
Ein Jäger soll Tauben schiessen. Er weiss wie viele Tauben an ihm vorbeifliegen werden und er weiss das Gewicht der vorbeigeflogenen Tauben. Nun soll er eine bestimmte Anzahl s Tauben durchfliegen lassen. Das grösste Gewicht merkt er sich und vergleicht mit den nächsten Tauben. Ist eine Taube grösser, nimmt er sie. Sonst vergleicht er mit der nächsten. Ist keine Taube grösser oder gleich gross, so nimmt er die letzte Taube.

Das soll ich nun in einem Pascal-Programm simulieren lassen, für variables s und Anzahl Tauben :=20.


Und hier der Quelltext:
Code:
PROGRAM Tauben;
USES Crt;
VAR tauben: ARRAY [1..20] OF Integer;
    i, anzahl, maximum_vorbei, anzahl_durch, maximum_alle: Integer;
    zaehler: LongInt;
    wahrscheinlichkeit: {Gleitkommazahl}
    wahrscheinlichkeit_prozent: {Gleitkommazahl}

BEGIN
ClrScr;


Write ('Geben Sie die Anzahl Tauben an, die vorbeifliegen sollen: ');
ReadLn (anzahl);

Write ('Geben Sie die Anzahl Durchläufe an: ');
ReadLn (anzahl_durch);

zaehler := 0

FOR-Schleife:

Randomize;

i := 1;
REPEAT
tauben[i] := (Random(100)+1);
Inc (i);
UNTIL i > 20;


Definiere das Maximum der vorbeigeflogenen Tauben als maximum_vorbei.
Definiere das Maximum aller Tauben als maximum_alle


i := maximum_vorbei + 1;
WHILE tauben[i] < maximum_vorbei OR i < 20 DO
    BEGINN
        Inc(i)
    END


If tauben[i] = maximum_alle DO
    Inc(zaehler)

End FOR-Schleife

wahrscheinlichkeit := anzahl / zaehler
wahrscheinlichkeit_prozent := wahrscheinlichkeit * 100

Write ('Die Wahrscheinlichkeit, die grösste Taube zu erwischen beträgt (in %): ')
Write (wahrscheinlichkeit_prozent)


ReadKey;
END.

Den roten Teil Sollte ich noch machen... Und für die For-Schleife hatte ich noch keine Zeit, kommt aber noch...

Ich hoffe ihr könnt mir helfen, respektive den Code anpassen

Gruss kartoffelfre
 
Zuletzt bearbeitet:
Sorry, aber irgendwie komme ich mit deiner Aufgabenstellung nicht so recht klar, bzw. ist mir die zu undeutlich formuliert.
Ok, da sind jetzt insgesamt n Tauben. Von diesen n Tauben sollen s Tauben an einem Jäger vorbei fliegen. Der Jäger weiss von den s vorbei fliegenden Tauben jeweils das Gewicht.
Und welche soll der Jäger jetzt abknallen?
Wenn er schon vorher die Gewichte der Tauben weiss, die an ihm vorbei fliegen werden, dann braucht er doch nur darauf zu warten, dass der dicke Brocken vorbei flattert und drauf halten. Oder verstehe ich das falsch?
Oder was soll der Jäger tatsächlich machen?

Tut mir leid, aber mit Sourcecode kann ich erst dienen, wenn ich verstanden habe, worum es überhaupt geht.
 
Sorry, aber irgendwie komme ich mit deiner Aufgabenstellung nicht so recht klar, bzw. ist mir die zu undeutlich formuliert.
Ok, da sind jetzt insgesamt n Tauben. Von diesen n Tauben sollen s Tauben an einem Jäger vorbei fliegen. Der Jäger weiss von den s vorbei fliegenden Tauben jeweils das Gewicht.
Und welche soll der Jäger jetzt abknallen?

Genau... Von den vorbeigeflogenen weiss er das Gewicht. Jetzt hat er von den vorbeigeflogenen das Maximum. Jetzt kann er die s+1. Taube nehmen und sie mit dem Maximum vergleichen. Wenn diese nun grösser oder gleich dem Maximum ist, dann schiesst er diese. Wenn sie kleiner ist als das Maximum der vorbeigeflogenen, vergleicht er mit der s+2. Taube. Und so weiter bis zur n-1. Taube. Wenn diese nun immer noch kleiner ist, als das Maximum der vorbeigeflogenen Tauben, dann nimmt er die n-te Taube.
Ich weiss, das ganze ist ein wenig kompliziert und nicht sehr realitätsnah, doch ich hoffe du weisst jetzt, was ich meine...:)

Wenn er schon vorher die Gewichte der Tauben weiss, die an ihm vorbei fliegen werden, dann braucht er doch nur darauf zu warten, dass der dicke Brocken vorbei flattert und drauf halten. Oder verstehe ich das falsch?
Oder was soll der Jäger tatsächlich machen?

Tut mir leid, aber mit Sourcecode kann ich erst dienen, wenn ich verstanden habe, worum es überhaupt geht.

Nein, er weiss das Gewicht erst nach dem vorbeifliegen der s Tauben.

Ich danke dir für deine Bemühungen und hoffe, dass es jetzt ein wenig klarer erscheint.

Achja: Das Programm sollte am Schluss als Simulationsprogramm dienen und man sollte dann einen Wert für s kriegen so, dass Man mit der höchsten Wahrscheinlichkeit die grösste aller Tauben erwischt. (Für n=20)


Gruss kartoffelfre
 
Zurück