AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi aus einem Array die kleinste Zahl herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

aus einem Array die kleinste Zahl herausfinden

Ein Thema von gangs-taas · begonnen am 4. Sep 2009 · letzter Beitrag vom 9. Jul 2013
Antwort Antwort
Seite 4 von 6   « Erste     234 56      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#31

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 12:43
Dazu hatte ich doch schon eine komplette Lösung gepostet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Foxi1896

Registriert seit: 5. Jun 2013
54 Beiträge
 
FreePascal / Lazarus
 
#32

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 12:58
Hatte es ja auch ... nur mein Betreuer möchte es mit den Edits haben.



Das hier ist schon fast so wie ich es haben möchte nur die Werte wo es wieder von vorne anfängt sind Falsch.

Habe es mit 5 , 8 , 14 , 3 , 8 , 10 , 16 , 20 getestet.
Raus kommt: 3 , 8 , 10 , 16 , 20 , 8,50548.. , 3,531622 , 1,370997...
Was macht er mit den Werten?


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var zahl : array[1..8] of real;
  i,merker : Integer;
  min : Real;

begin
  zahl[1] := StrToFloat(Edit1.Text);
  zahl[2] := StrToFloat(Edit2.Text);
  zahl[3] := StrToFloat(Edit3.Text);
  zahl[4] := StrToFloat(Edit4.Text);
  zahl[5] := StrToFloat(Edit5.Text);
  zahl[6] := StrToFloat(Edit6.Text);
  zahl[7] := StrToFloat(Edit7.Text);
  zahl[8] := StrToFloat(Edit8.Text);

  min:=1000;
  for i:= 1 to 8 do
  begin
    if zahl[i] < min then
    begin
      min:=zahl[i];
      merker:=i;
    end;
  end;
  label1.caption:=FloatToStr(min);
  label2.caption:=IntToStr(merker);

  Edit1.Text := FloatToStr(zahl[merker+0]);
  Edit2.Text := FloatToStr(zahl[merker+1]);
  Edit3.Text := FloatToStr(zahl[merker+2]);
  Edit4.Text := FloatToStr(zahl[merker+3]);
  Edit5.Text := FloatToStr(zahl[merker+4]);
  Edit6.Text := FloatToStr(zahl[merker+5]);
  Edit7.Text := FloatToStr(zahl[merker+6]);
  Edit8.Text := FloatToStr(zahl[merker+7]);


end;


EDIT: Hab den Fehler nur keine Lösung: ich zähle ja immer weiter mit +5 +6 +7 ... aber wie mach ich es das es wieder von vorne anfängt?

Geändert von Foxi1896 ( 8. Jul 2013 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#33

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13:01
Schalt doch mal die Bereichsprüfung ein, dann siehst Du, dass Du locker hinter dem Array weiterliest. Und was das Ganze mit Edits zu tun haben soll, will mir nicht in den Kopf, dem Array ist es doch völlig wurscht, wo die Daten herkommen, ob aus Edits, einer ComboBox oder aus einer Datei ausgelesen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Foxi1896

Registriert seit: 5. Jun 2013
54 Beiträge
 
FreePascal / Lazarus
 
#34

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13:05
Wie schalte ich die Bereichsprüfung ein?
Ok, das mit dem Edits und so ist auch egal ... hab ich eingesehen.. ich benutze hier ja auch gerade Array.
Aber mir fehlt das know how für gewisse Befehle wie Bereichsprüfung. Verstehen tu ich schon halbwegs was hier steht nur die Ausführung.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#35

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13:07
Das ist jetzt zwar keine schöne Programmierung, aber so verstehst du es sicher am Besten:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
   var zahl : array[1..8] of real;
   i,merker : Integer;
   min : Real;

begin
   zahl[1] := StrToFloat(Edit1.Text);
   zahl[2] := StrToFloat(Edit2.Text);
   zahl[3] := StrToFloat(Edit3.Text);
   zahl[4] := StrToFloat(Edit4.Text);
   zahl[5] := StrToFloat(Edit5.Text);
   zahl[6] := StrToFloat(Edit6.Text);
   zahl[7] := StrToFloat(Edit7.Text);
   zahl[8] := StrToFloat(Edit8.Text);

   min:=1000;
   for i:= 1 to 8 do
   begin
     if zahl[i] < min then
     begin
       min:=zahl[i];
       merker:=i;
     end;
   end;
   label1.caption:=FloatToStr(min);
   label2.caption:=IntToStr(merker);

   i := merker;
   Edit1.Text := FloatToStr(zahl[i]);

   i := i + 1;
   If i > 8 then i := 1; // dann vorne im Array anfangen
   Edit2.Text := FloatToStr(zahl[i]);

   i := i + 1;
   If i > 8 then i := 1; // dann vorne im Array anfangen
   Edit3.Text := FloatToStr(zahl[i]);

   i := i + 1;
   If i > 8 then i := 1; // dann vorne im Array anfangen
   Edit4.Text := FloatToStr(zahl[i]);

   i := i + 1;
   If i > 8 then i := 1; // dann vorne im Array anfangen
   Edit5.Text := FloatToStr(zahl[i]);

   i := i + 1;
   If i > 8 then i := 1; // dann vorne im Array anfangen
   Edit6.Text := FloatToStr(zahl[i]);

   i := i + 1;
   If i > 8 then i := 1; // dann vorne im Array anfangen
   Edit7.Text := FloatToStr(zahl[i]);

   i := i + 1;
   If i > 8 then i := 1; // dann vorne im Array anfangen
   Edit8.Text := FloatToStr(zahl[i]);


end;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#36

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13:09
In den Projektoptionen unter "Compilieren" lässt sich u.A. die Bereichsprüfung einschalten. Und hier dann noch meine angepasste Routine für Fließkommazahlen und dynamische Arrays:
Delphi-Quellcode:
type
  TDoubleArray = array of double;

procedure MinimumFirst(const Src: TDoubleArray; out Dest: TDoubleArray);
var
  (* Variable für die kleinste Zahl im Array *)
  Minimum: double;
  (* Variable für den Index der kleinsten Zahl innerhalb des Array *)
  IndexOfMinimum: integer;
  (* Laufvariable für die Schleife *)
  i: integer;
  (* aktueller Index im Zielarray *)
  DestIndex: integer;
begin
  Assert(Length(Src) > 0, 'Ein leeres Array hat keinen Minimalwert');
  (* Ausgabe auf gleiche Länge wie Eingabe setzen *)
  SetLength(Dest, Length(Src));
  (* Initial setzen wir Minimum sowie dessen Index auf das erste Element im Array *)
  Minimum := Src[Low(Src)];
  IndexOfMinimum := Low(Src);
  (* Nun den Rest des Array durchgehen, vergleichen und Variablen ggf. anpassen *)
  for i := Low(Src) + 1 to High(Src) do
    if Src[i] < Minimum then
      begin
        Minimum := Src[i];
        IndexOfMinimum := i;
      end;
  DestIndex := Low(Dest);
  (* Nun in das Ausgabe-Array schreiben *)
  (* Zuerst ab der kleinsten Zahl bis zum Ende *)
  for i := IndexOfMinimum to High(Src) do
    begin
      Dest[DestIndex] := Src[i];
      inc(DestIndex);
    end;
  (* Nun noch die ggf. verbliebenen *)
  for i := Low(Src) to IndexOfMinimum - 1 do
    begin
      Dest[DestIndex] := Src[i];
      inc(DestIndex);
    end;
end;

(* Testaufruf *)
procedure TFormTest.ButtonTestClick(Sender: TObject);
var
  zahl, Dest: TDoubleArray;
  d: double;
begin
  SetLength(zahl, 8);
  try
    zahl[0] := StrToFloat(Edit1.Text);
    zahl[1] := StrToFloat(Edit2.Text);
    zahl[2] := StrToFloat(Edit3.Text);
    zahl[3] := StrToFloat(Edit4.Text);
    zahl[4] := StrToFloat(Edit5.Text);
    zahl[5] := StrToFloat(Edit6.Text);
    zahl[6] := StrToFloat(Edit7.Text);
    zahl[7] := StrToFloat(Edit8.Text);
  
    MinimumFirst(zahl, Dest);
  
    Edit1.Text := FloatToStr(Dest[0]);
    Edit2.Text := FloatToStr(Dest[1]);
    Edit3.Text := FloatToStr(Dest[2]);
    Edit4.Text := FloatToStr(Dest[3]);
    Edit5.Text := FloatToStr(Dest[4]);
    Edit6.Text := FloatToStr(Dest[5]);
    Edit7.Text := FloatToStr(Dest[6]);
    Edit8.Text := FloatToStr(Dest[7]);
  finally
    zahl := nil;
    Dest := nil;
  end;
end;
[edit] Seid Ihr sicher, dass es sinnvoll ist, min mit einem fixen Wert vorzubelegen? Wenn alle Zahlen im Array > 1000 sind, gibt es keinen Minimalwert, das ist aber nicht schön. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 8. Jul 2013 um 13:38 Uhr) Grund: Assertion und Ressourcenschutzblock eingefügt
  Mit Zitat antworten Zitat
Foxi1896

Registriert seit: 5. Jun 2013
54 Beiträge
 
FreePascal / Lazarus
 
#37

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13:26
@baumina: Danke, stimmt so verstehte ich es =)
Was könnte man den machen um es profensioneller aussehen zu lassen (auch wenn es mir eigentlich egal ist wie es aussieht.

@DeddyH: Geht das auch bei Lazarus? Hab gerade mal in den Einstellungen geschaut und finde nichts was dem entspricht.

Wenn es eine leichte Methode gibt. Nicht Abhängig vom Fixen Wert zu sein wäre es super. Wenn nicht auch egal bau ich halt eine zweiten/dritten Button ein (Meine Werte könnten 8 , 12 , 16 werden.)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#38

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13:29
Professioneller ist sicherlich DeddyH's Lösung. An der ist meines Erachtens nichts auszusetzen.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Foxi1896

Registriert seit: 5. Jun 2013
54 Beiträge
 
FreePascal / Lazarus
 
#39

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13:39
DANK EUCH!!!
Jetzt versteh ich glaube auch die andere Variante.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#40

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13:39
Danke für die Blumen, ich habe den Code trotzdem noch leicht modifiziert. Leider konnte ich nicht herausfinden, wie man bei Lazarus die Breichsprüfung aktiviert bzw. deaktiviert, vermutlich geht es über Compilerschalter.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 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