![]() |
(evtl. rekursive) schleife
Hallo Jungs,
Erstmal zur Schilderung meines Vorhabens : also, ich habe ein StringGrid und möchte die Summe der Zahlenwerte einer Reihe ausrechnen
Delphi-Quellcode:
Soweit kein Problem, jedoch möchte ich dem Anwender jetzt die Möglichkeit geben die x größten Werte NICHT in die Berechnung einzubeziehen (Falls jemand von euch Segler ist, es soll ein RegattaProgramm werden das dem User die Möglichkeit bietet sogenannte Streicher anzugeben, d.h. das jeweils die schlechtesten x Wettfahrten gestrichen werden)
for j:=0 to StringGrid1.ColCount do
summe:=summe+strtoint(StringGrid1.Cells[j,i]); Am liebsten hätte ich das ganze dynamisch, sprich das der Anwender sich aussuchen kann wieviele Streicher es gibt, jedoch komm ich ab mehr als einem Streicher leider nicht mehr richtig klar :( Könntet ihr mir eventuell ein paar Denkanstöße geben wie ich das - notfalls auch rekursiv, obwohl mir eine itterative Variante lieber wäre - realisieren kann ? Es grüßt und hofft eroe :) |
Re: (evtl. rekursive) schleife
so könnte es gehen
Delphi-Quellcode:
var
j, summe, anz, minwert: Integer begin summe := 0; minwert := 1000000; for j := 0 to StringGrid1.ColCount do if anz > 0 then begin dec(anz); minwert := min(minwert, StrToInt(StringGrid1.Cells[j,i]); end else if minwert < strtoint(StringGrid1.Cells[j,i]) then begin summe := summe + minwert; minwert := strtoint(StringGrid1.Cells[j,i]); end else summe:=summe+strtoint(StringGrid1.Cells[j,i]); end; |
Re: (evtl. rekursive) schleife
Hmm .. Würde es dir was ausmachen deinen Code noch zu kommentieren ? Leider sehe ich das Prinzip nicht ganz, und ich würde von der Algorithmik her schon gerne verstehen was ich programmiere ;)
Und was ist dies hier :
Delphi-Quellcode:
für eine Funktion ? Ist mir leider gänzlich unbekannt :(
min(minwert, StrToInt(StringGrid1.Cells[j,i]);
|
Re: (evtl. rekursive) schleife
Zitat:
|
Re: (evtl. rekursive) schleife
Zitat:
Ich hoffe Euer Hochwürden können mir verzeihen, es tut mir schrecklich leid! :roll: |
Re: (evtl. rekursive) schleife
vergiß den code von oben, er funktioniert doch nicht.
dann mußt du wohl mit einem array arbeiten. |
Re: (evtl. rekursive) schleife
Also, ich hab es jetz mittels 2 Arrays probiert, jedoch reagiert er, unabhängig davon wie oft er durchlaufen _soll_, generell so, als solle er nur das schlechteste streichen, sprich die Eingabe des Anwenders scheint ihn schlicht nicht zu interessieren :(
Da ich mit relativ vielen Zählergesteuerten Schleifen arbeite, habe ich den Text mal kommentiert ..
Delphi-Quellcode:
ich hoffe ihr könnt mir helfen, oder mir zumindest den einen oder anderen Denkanstoß geben :)begin if StringGrid1.Cells[0,i]='' then //Sicherheitsabfrage exit else begin setlength(gesamt,wettfahrten); //Anlegen der Arrays setlength(hilfe,wettfahrten); for n:=2 to StringGrid1.ColCount-3 do gesamt[n-2]:=strtoint(StringGrid1.Cells[n,i]); //Füllen des Arrays gesamt NUR für den ersten Durchlauf for o:=0 to streicher do //Streicher = Anzahl x --> Die x schlechtesten Werte streichern begin groesstes:=gesamt[0]; summe:=0; for j:=low(gesamt) to high(gesamt) do begin if gesamt[j]>groesstes then groesstes:=gesamt[j]; //Der größte Wert wird rausgsucht end; for k:=low(gesamt) to high(gesamt) do begin if gesamt[k]<> groesstes then hilfe[k]:=gesamt[k]; //Alle Werte außer dem Größten werden in den Array 'hilfe' geschrieben end; for l:=low(hilfe) to high(hilfe) do summe:=summe+hilfe[l]; //Die Summe der Zahlen im Array 'hilfe' wird berechnet for m:=low(gesamt) to high(gesamt) do gesamt[m]:=hilfe[m]; //Der Array 'gesamt' bekommt die Werte des Arrays 'hilfe', um beim nächsten Durchlauf den schlechtesten Wert schon aussortiert zu haben end; StringGrid1.Cells[StringGrid1.ColCount-2,i]:=inttostr(summe); end; end; Es grüßt und hofft, eroe |
Re: (evtl. rekursive) schleife
Hmm .. hat denn niemand ne Idee ?? :(
|
Re: (evtl. rekursive) schleife
Ich weiß ja nicht wie groß dein Stringgrid wird aber so wie ich das sehe würde ich einfach mit Bubblesort ( siehe DP-Hilfe ) alle Werte sortieren und dann die unteren x abschneiden..
|
Re: (evtl. rekursive) schleife
Zitat:
Eigentlich is das ne sehr gute Idee, danke ! Man wie ich sowas hasse, tagelang rumzusitzen und die Fehler bei so nem Algorithmus zu suchen und dann zu erfahren, dass es viel einfacher geht ;) Wie gesagt, danke nochmal, ich werds mal probieren! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 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