![]() |
AW: aus einem Array die kleinste Zahl herausfinden
Dazu hatte ich doch schon eine komplette Lösung gepostet.
|
AW: aus einem Array die kleinste Zahl herausfinden
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? |
AW: aus einem Array die kleinste Zahl herausfinden
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.
|
AW: aus einem Array die kleinste Zahl herausfinden
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. |
AW: aus einem Array die kleinste Zahl herausfinden
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; |
AW: aus einem Array die kleinste Zahl herausfinden
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:
[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]
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; |
AW: aus einem Array die kleinste Zahl herausfinden
@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.) |
AW: aus einem Array die kleinste Zahl herausfinden
Professioneller ist sicherlich DeddyH's Lösung. An der ist meines Erachtens nichts auszusetzen.
|
AW: aus einem Array die kleinste Zahl herausfinden
DANK EUCH!!!
Jetzt versteh ich glaube auch die andere Variante. |
AW: aus einem Array die kleinste Zahl herausfinden
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 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