Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Höchsten Wert von 5 Integer-Variablen bestimmen (https://www.delphipraxis.net/165871-hoechsten-wert-von-5-integer-variablen-bestimmen.html)

devidespe 19. Jan 2012 12:57

Höchsten Wert von 5 Integer-Variablen bestimmen
 
Hallo,

ich habe 5 unterschiedliche Integer-Variablen mit unterschiedlichen Inhalten, und muss herausfinden, welche Variable den höchsten Wert beinhaltet.

Ohne jetzt 5 verschachtelte If-Abfragen zu schreiben: gibt es hier eine praktikablere Lösung?

Beispiel:

Delphi-Quellcode:
var Var1, Var2, Var3, Var4, Var5 : Integer;
    HighestValue : Integer;
begin
  Randomize;
  Var1:=Random(99);
  Var2:=Random(99);
  Var3:=Random(99);
  Var4:=Random(99);
  Var5:=Random(99);

  HighestValue:=Var1;
  if Var2 > HighestValue then HighestValue:=Var2;
  if Var3 > HighestValue then HighestValue:=Var3;
  if Var4 > HighestValue then HighestValue:=Var4;
  if Var5 > HighestValue then HighestValue:=Var5;

  ShowMessage('Die höchste Variable hat den Wert '+IntToStr(HighestValue));
end;

DeddyH 19. Jan 2012 13:00

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Delphi-Referenz durchsuchenMath.MaxIntValue

[edit] Achso, Du willst ja nicht den Wert, sondern die Variable, welche diesen Wert enthält, richtig? [/edit]
[edit2] Nö, laut Code wohl doch nicht. Ich bin verwirrt :gruebel: [/edit2]

himitsu 19. Jan 2012 13:10

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Wenn du keine einzelnen Variablen, sondern ein Array hättest, dann würde ein IF ausreichen.

Und wenn du wirklich die Wariable und nicht nur den Wert wissen willst, führt kein Weg darum. (FOR+IF oder merhere IFs)

gammatester 19. Jan 2012 13:15

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Wie soll der Fall behandelt werden, wenn zwei (oder mehr) Variablen den höchsten Wert enthalten? Dann gibt es nicht die Variable, welche ...

DeddyH 19. Jan 2012 13:17

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Warten wir erst einmal ab, ob der TE sich noch einmal meldet. Mir ist (wie man oben merkt) noch nicht ganz klar, was genau denn ermittelt werden soll.

Sir Rufo 19. Jan 2012 15:06

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Er meint auch definitv den Wert und nicht die Variable, schaut mal auf seine Ausgabe ;)

DeddyH 19. Jan 2012 15:07

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Dann schau nochmal auf meine beiden Edits in #2. Beschreibung und Code widersprechen sich ja in der Hinsicht.

devidespe 19. Jan 2012 15:14

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Hi,

danke für die Antworten. Ich meine den Wert und die dazugehörige Variable. Im ShowMessage-Text muss ich die Variable benennen können.

himitsu 19. Jan 2012 17:21

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Alle Variablen nacheinander prüfen (IF), wenn der Wert größer ist, dann den größeren Wert und die Variable merken. (ist natürlich in einer Schleife etwas schöner)

Oder den größten Wert bestimmen und danach die/eine Variable mit diesem Wert raussuchen.

Aphton 19. Jan 2012 17:22

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Delphi-Quellcode:

uses (...), math;

(...)

  ShowMessage(IntToStr(max(var1, max(var2, max(var3, max(var4, var5))))));
somit erhältst du den größten Wert am elegantesten mMn!

devidespe 19. Jan 2012 17:28

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Die Verschachtelung des Max-Befehls in ShowMessage liefert mir den höchsten Wert, aber nicht den Variablennamen.

Ich habe das jetzt mit mehreren If-Schleifen gelöst, die nicht nur den höchsten Wert abfragen, sondern auch in einer temporären Variable den Variablenamen speichern.

Aphton 19. Jan 2012 17:34

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Sofern du die Grundlagen von Delphi beherrscht und nicht gerade am Lernen und Üben (zB hiermit) bist, dann könntest du es mit einem Array ganz bequem machen:
Delphi-Quellcode:
var
  i: Integer;
  Vars: Array[1..5] Integer;
  HighestValue : Integer;
begin
  Randomize;

  for i := 1 to 5 do
    Vars[i] :=Random(99);

  HighestValue:= max(vars[1], max(vars[2], max(vars[3], max(vars[4], vars[5]))));
 
  i := 1;
  while vars[i] <> HighestValue do
    inc(i);

  ShowMessage('Die höchste Variable hat den Wert '+IntToStr(HighestValue) + ' (= var' + IntToStr(i)+')');
end;

Delphi-Laie 19. Jan 2012 18:03

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Zitat:

Zitat von Aphton (Beitrag 1146741)
Delphi-Quellcode:

uses (...), math;

(...)

  ShowMessage(IntToStr(max(var1, max(var2, max(var3, max(var4, var5))))));
somit erhältst du den größten Wert am elegantesten mMn!

Das riecht aber verdammt nach Rekursion, die auch eleganter realisiert (implementiert) werden kann.

Maxima (analog Minima) ermittle ich einfach so:

Delphi-Quellcode:
max:=intervariable[1]
for laufvariable:=2 to 5 do if intervariable[laufvariable]>max then max:=intervariable[laufvariable]

DeddyH 19. Jan 2012 18:30

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
So finde ich es flexibler (ungetestet):
Delphi-Quellcode:
function MaxIntValueIndex(const Values: array of integer; out MaxValue: integer): integer;
var
  i: integer;
begin
  if Length(Values) < 1 then
    raise Exception.Create('Keine Daten übergeben');
  Result := Low(Values);
  MaxValue := Values[Result];
  for i := Low(Values) + 1 to High(Values) do
    if Values[i] > MaxValue then
      begin
        Result := i;
        MaxValue := Values[Result];
      end;
end;
[edit] Wobei der Hinweis von Gammatester natürlich hier auch außer Acht gelassen wird. Wenn man alle Vorkommen ermitteln will, kommt man um ein Result-Array o.ä. wohl kaum herum. [/edit]

himitsu 19. Jan 2012 20:30

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Wobei dein OpenArray nicht unbedingt ein externes Variablen-Array benötigt. :angle:
Delphi-Quellcode:
ValueIndex := MaxIntValueIndex([Var1, Var2, Var3, Var4, Var5], MaxValue);
ShowMessage(Format('Die (erste) größte Variable ist Var%d, mit %d', [ValueIndex + 1, MaxValue]));

Luckie 19. Jan 2012 21:48

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Jungs, bremst euch selber mal. Für mich sieht das eher aus wie eine Schulaufgabe. Man sollte den Wissenstand und das Unterrichtsziel berücksichtigen. Allerdings wozu der Variablenname gebraucht wird, weiß ich auch nicht.

Delphi-Laie 19. Jan 2012 23:18

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Zitat:

Zitat von Luckie (Beitrag 1146786)
Jungs, bremst euch selber mal. Für mich sieht das eher aus wie eine Schulaufgabe. Man sollte den Wissenstand und das Unterrichtsziel berücksichtigen. Allerdings wozu der Variablenname gebraucht wird, weiß ich auch nicht.

Luckie, freu' Dich doch, wenn wir halbwegs zur Hochform auflaufen (ein Moderator ist doch auch immer ein wenig ein Erwachsenenpädagoge).

Der Frager kann ja das extrahieren (bzw. entnehmen), was er versteht, oder eben nachfragen. Erstaunlich ist doch sicher nicht nur für ihn, daß eine solch simple Angelegenheit auf so unterschiedliche Weise gelöst werden kann.

BoolString 19. Jan 2012 23:52

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Ungefragte Stimme aus dem Seitenaus:

Ich bin mir gerad enicht ganz sicher, ob der Frage die Trennung zwischen Code und compiliertem Programm verinnerlicht hat. Er hat 5 verschiedene Variablen, denen er einen Random-Wert zuweist. der Compiler macht daraus aber 5 Speicherstellen, die mit seiner Variablenbenennung überhaupt nichts zu tun hat. Diese existieren nur in seinem Code und sind für die bessere Lesbarkeit in Hochsprachen möglich.

Entweder geht man den Weg über ein Array oder aber man erzeugt sich einen Record, in dem man auch den Namen für jedes Objekt definieren kann.

Jetzt mal ohne Delphi ins blaue geschrieben:
Delphi-Quellcode:
Array[1] := Random (99);
Array[2] := Random (99);
Auch wenn hier eine Schleife mit von
Delphi-Quellcode:
For x= 0 to High (MaxArray) do
besser wäre oder man macht das ganze per Record

Delphi-Quellcode:
type
  TArray = record
    Name: string;
    Vaue: Double;
  end;

Var
  MyArray : Array of tArray;

Begin
  SetLength (MyArray, 2);
  MyArray.Name[1] := 'Gummibaum';
  MyArray.Value[1] := Random (99);

  MyArray.Name[2] := 'Gemüsebeet';
  MyArray.Value[2] := Random (99);
{...}
 
end;
oder so ähnlich...

Jan

BUG 20. Jan 2012 09:07

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Zitat:

Zitat von Luckie (Beitrag 1146786)
Allerdings wozu der Variablenname gebraucht wird, weiß ich auch nicht.

Versteh einer die Lehrer :mrgreen:

Zitat:

Zitat von Delphi-Laie (Beitrag 1146805)
Der Frager kann ja das extrahieren (bzw. entnehmen), was er versteht, oder eben nachfragen.

Zumal der TE schon eine funktionierende Lösung (die für eine Lehrer völlig ausreichen sein sollte) hat und nach einer eleganteren Lösung gefragt hat.
Zitat:

Zitat von devidespe (Beitrag 1146742)
Ich habe das jetzt mit mehreren If-Schleifen gelöst, die nicht nur den höchsten Wert abfragen, sondern auch in einer temporären Variable den Variablenamen speichern.


DeddyH 20. Jan 2012 09:28

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Zitat:

Zitat von devidespe (Beitrag 1146742)
Ich habe das jetzt mit mehreren If-Schleifen gelöst,...

Das glaube ich nicht, Tim :mrgreen:

p80286 20. Jan 2012 12:24

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Irgendwann wird niemand mehr assembler,c + ++ delphi, java ........ kennen aber die IF-Schleife wird es immer noch geben.

Gruß
K-H

devidespe 20. Jan 2012 13:02

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Ich glaube die Diskussion läuft hier etwas aus dem Ruder.

Das Beispiel im ersten Post war selbstverständlich eine vereinfachte Variante des wirklichen Codes. Und wie schon geschrieben, wurde das Problem bereits gelöst. Mit If-Schleifen.

DeddyH 20. Jan 2012 13:04

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
Es gibt keine If-Schleifen :!:

divBy0 20. Jan 2012 13:14

AW: Höchsten Wert von 5 Integer-Variablen bestimmen
 
if-Schleife :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz