![]() |
Listbox
Hallo liebe Delphi-Freunde!
Ich möchte ein Programm erstellen, bei dem ich einen wert n eingebe und in einer listbox die ersten n ungeraden zahlen herausbekomme. ich weiß nich, wie ich die listbox programmieren soll, bitte helft mir! lg |
Re: Listbox
Hallo,
mittels
Delphi-Quellcode:
fügt man Einträge in die ListBox ein und mittels
ListBox.Items.Add('Wert');
![]() Grüße |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Object-Pascal / Delphi-Language" nach "VCL / WinForms / Controls" verschoben.
TListBox -> VCL |
Re: Listbox
Und für das n erhöhst Du Wert in einer Schleife immer um 2.
|
Re: Listbox
Aber nur bei sortierter Liste
|
Re: Listbox
:oops: nicht richtig gelesen, die ListBox soll ja bereits befüllt sein.
[edit] Rechtschreibfehler [/edit] |
Re: Listbox
Zitat:
Was hältst du von dieser Version ? Objekte Eine Editbox (Edit1), OnChange=Edit1Change setzen Eine Listbox (Listbox1), Style=lbVirtual setzen, OnData=Listbox1Data setzen
Delphi-Quellcode:
Bei nicht virtuellen Listboxen wirst du bei großen Zahlen schnell ein OutOfMemory kriegen.
procedure TMain.Edit1Change(Sender: TObject);
var n,vc:integer; begin val(Edit1.Text,n,vc); if (vc<>0) or (n<1) then n:=0; ListBox1.Count:=n; end; procedure TMain.ListBox1Data(Control: TWinControl; Index: Integer; var Data: string); begin Data:=IntToStr(Cardinal(index) shl 1+1); end; |
Re: Listbox
Mit dem "professionellen" Ansatz von Klaus kann man einen schulischen Informatik-Lehrer in tiefe Depressionen stürzen - oder der bringt einen in gewaltige Erklärungsnot - also: Be careful with that axe, Maja!
Freundliche Grüße vom marabu |
Re: Listbox
Zitat:
Aber ich finde den Lösungsweg, die ungeraden Zahlen im OnData zu erzeugen ganz witzig. Vor allem ist er extrem performant und extrem fehlerunanfällig. |
Re: Listbox
Mal ein (hoffentlich nachvollziehbarer) Ansatz in PseudoCode:
Delphi-Quellcode:
laufvariable = 0
zaehlvariable = 0 solange (laufvariable < Anzahl der ListBoxItems) und (zaehlvariable < Anzahl der gewünschten Treffer) Anfang Block 1 gehe zum ListBoxItem mit Index laufvariable wenn Eintrag ungerade Anfang Block 2 Eintrag zum Ergebnis hinzufügen zaehlvariable um 1 erhöhen Ende Block 2 laufvariable um 1 erhöhen Ende Block 1 |
Re: Listbox
Ich möchte am Rande erwähnen, dass sich auch hier ein TSpinEdit evtl. besser macht, als ein TEdit ... sowohl für Benutzer, als auch für Programmierer ... :wink:
PS @ Amateurprofi: Schöne Lösung x) |
Re: Listbox
wie währe es hiermit:
Delphi-Quellcode:
Ich habe die Frage so verstanden der Erste Eintrag der einen ungeraden Wert Enthält das davon der Index gebraucht wird.
procedure FillListbox(lb:TListbox);
var i:Integer; begin for i:=0 to 400 do lb.items.add(intTostr(i)); end; // Gibt den ersten Gefunden Eintrag, der Ungerade ist // Vor sollte FillListbox aufgerufen werden. // Gibt es keine Ungerade Zahlen wird -1 zurück geben. // ich meine odd gibt True zurück wenn die Zahl ungerade ist // und False wenn sie Gerade ist function findOdd(lb:TListbox):Integer; var i,k,z:Integer; begin z:=-1; for i:=0 to 400 do begin k:=StrToint(lb.items[i]); if odd(k) then begin z:=i; break; end; result:=z; end; |
Re: Listbox
Zitat:
Zitat:
Außerdem hast du ein begin geschrieben, aber kein end dazu :P Mal etwas optimiert:
Delphi-Quellcode:
Allerdings, will man wirklich die ersten n Ungraden aus der Liste, müsste man entweder einen Startwert übergeben und die Funktion in einer Schleife aufrufen, oder die Funktion komplett umschreiben ... je nach gewünschter Verwendung ^^
function FindFirstOdd(AList: TListBox): Integer;
begin For Result := 0 to AList.Items.Count - 1 do If Odd(StrToIntDef(AList.Items[Result], 0)) then Exit; Result := -1; end; |
Re: Listbox
Zitat:
Ja kann sein, das der Code Fehler enthält das mit dem Count hatte ich wohl vergessen.... es war ja auch nur als Vorschlag gedacht gewesen. Zitat:
k und z habe ich genommen, weil es so übersichtlicher ist.... und ich das so immer bei solchen Funktionen mache..... naja z habe ich bei den Meisten auf jeden Fall... |
Re: Listbox
Zitat:
Zitat:
Natürlich kann man das dann so machen ... je nachdem wie man es braucht :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz