Jeg har en listbox med 10 vilkårlge tal. Jeg vil med en gennemløbning af listboxen kunne finde det største tal og skrive det til et tekstfelt. Hvordan gør jeg det nemmes
type Max: Integer // Eller hvad type der er nødvendig Loop: Integer; begin Max := StrToInt(ListBox1.Items[0]); // Max er lig med det første tal for Loop := 1 to ListBox1.Items.Count -1 do begin if StrToInt(ListBox1.Items[Loop]) > Max then Max := StrToInt(ListBox1.Items[Loop]); end; Label1.Caption := IntToStr(Max); end;
aka: Nu er opgaven rigtignok en liste med 10 tal og så virker din kode. Ellers havde det været mere sikkert at starte med 0 i din for-next så en tom liste ikke fejlede:
function GetMax(aItems : TStrings) : integer; var i : integer; begin result := -2147483648; // Mindste mulige heltal for i := 0 to aItems.Count - 1 do if result < aItems[i] then result := aItems[i]; end;
Korrekt. En exception havde nok været på sin plads:
function GetMax(aItems : TStrings) : integer; var i : integer; begin if aItems.Count = 0 then raise EEmptyListException.Create('Listen er dælmedunsme tom'); result := -2147483648; // Mindste mulige heltal (ingen MinInt konstant) for i := 0 to aItems.Count - 1 do if result < aItems[i] then result := aItems[i]; end;
Fandt denne her i "math"-unitten:
function MaxIntValue(const Data: array of Integer): Integer; var I: Integer; begin Result := Data[Low(Data)]; for I := Low(Data) + 1 to High(Data) do if Result < Data[I] then Result := Data[I]; end;
function Aux(m, i: Integer) : Integer; begin if i >= aList.Count then Result := m else Result := Aux(Max(m, StrToInt(aList[i])), Succ(i)); end;
begin if aList.Count <= 0 then raise Exception.Create('Listen er tom') else if aList.Count = 1 then Result := StrToInt(aList[0]) else Result := Aux(StrToInt(aList[0]), 1); end;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.