AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Feste Positionen in Stringlisten

Ein Thema von c.Stetter · begonnen am 31. Okt 2008 · letzter Beitrag vom 6. Nov 2008
Antwort Antwort
c.Stetter

Registriert seit: 7. Nov 2007
20 Beiträge
 
#1

Feste Positionen in Stringlisten

  Alt 31. Okt 2008, 09:01
Guten Morgen zusammen.

ich stehe vor einem Problem, vielleicht könnt ihr mir ja weiter helfen.

Ich habe ein Stringliste, die ich mit z.B. 16 Teilnehmer füll, sind aber nur 13 Teilnehmer vorhanden,
so brauche ich sogenannte "Freilose", die aber an festen positionen stehen müssen. ich habe das jetzt so gemacht :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a : TStringList;
  i, j : integer;
begin
  a := tStringList.Create;
  case StrToInt(edit1.Text) of
    1 : begin
           for i := 0 to 15 do
             a.Add('Tester ' + IntToStr(i));
             a.Add('Freilos');
             a.Exchange(16, 1);
         end;
    4 : begin
           for i := 0 to 11 do
             a.Add('Tester ' + IntToStr(i));
           for j := 1 to 4 do
             a.Insert(11 + j, 'Freilos');

           a.Exchange(15, 1);
           a.Exchange(14, 9);
           a.Exchange(13, 5);
           a.Exchange(12, 13);
         end;
  end;
  memo1.Lines := a;
end;
Gibt es noch einen andere möglichkeit, dies zu bewerkstelligen ??

Grüße Christian
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#2

Re: Feste Positionen in Stringlisten

  Alt 31. Okt 2008, 09:27
a.Insert() ?
  Mit Zitat antworten Zitat
c.Stetter

Registriert seit: 7. Nov 2007
20 Beiträge
 
#3

Re: Feste Positionen in Stringlisten

  Alt 31. Okt 2008, 09:54
Mein Problem ist folgendes. Es sind maximal 16 Teilnehmer, sind weniger Teilnehmer vorhanden müssen Freilose gesetzt werden, die aber an bestimmten Postionen stehen müssen.
Das Programm wird zu einem späteren Zeitpunkt erweitert, d.h. das dann z.b. 64 Teilnehmer vorhanden sind.

Beispiel :

Teilnehmer 38 (benötigtes System 64er)
Freilose 26 (es sind bis zu 29 Freilose möglich)

Das heißt :

Delphi-Quellcode:
  case aFreilose of
   0 : begin
         for i := 1 to aTeilnehmer do
           aStringListe.Add('Teilnehmer ' + IntToStr(i));
       end;
   1 : begin
         for i := 1 to aTeilnehmer do
           aStringListe.Add('Teilnehmer ' + IntToStr(i));
         aStringListe.Add('Freilos');
         aStringListe.ExChange(Letzte Position, 1)
       end;
   2 : begin
       end;
   ..
   ..
   26 : begin
         for i := 1 to aTeilnehmer do
           aStringListe.Add('Teilnehmer ' + IntToStr(i));
         for j := 1 to 26 do
           aStringListe.Insert(Letzte Position + j, 'Freilos');

         aStringListe.ExChange(Letzte Position, 1);
         aStringListe.ExChange(Letzte Position - 1 , 10);

         usw. bis alles Freilose positioniert sind

       end;
   ..
   ..
   29 : begin
        end;
  end;
Es würde dann einen ziemlich langen quellcode geben.

Ich hoffe, daß dieses Beispiel besser ist, welches mein Problem dastellt.

Danke für deine Antwort.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: Feste Positionen in Stringlisten

  Alt 31. Okt 2008, 10:15
Hallo,

ich verstehe Deine Aufgabenstellung nicht ganz:

13 Teilnehmer, 16 Plätze, Freilose = 16 - 13 = 3.
38 Teilnehmer, 64 Plätze, Freilose = 64 - 38 = 26.
53 Teilnehmer, 64 Plätze, Freilose = 64 - 53 = 11.

Und Du benötigst jetzt eine Regel, mit der Du die variable Anzahl von Freilosen mit wenig Programmieraufwand verteilen kannst.
Wie ist genau die Regel der Freilosverteilung?
Delphi-Quellcode:
aStringListe.ExChange(Letzte Position, 1);
aStringListe.ExChange(Letzte Position - 1 , 10);
usw. bis alles Freilose positioniert sind
Könntest Du das bitte etwas allgemeiner beschreiben?
Müssen die Freilose in bestimmten Abständen eingefügt werden oder immer an Position 1, 10, 20, 30, ichweißnichwas?
Im ersten Beispiel von Dir sind vier Freilose an den Positionen 1, 5, 9 und 13, d. h. 1 ist immer Freilos (sofern es Freilose gibt) und dann jeweils von dort aus
Code:
Position := (Plätze DIV Freilos)
wird ein Freilos?
Das müsste sich per Schleife und Insert allgemeingültig realisieren lassen.
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#5

Re: Feste Positionen in Stringlisten

  Alt 31. Okt 2008, 10:41
Mal als Anregung:

Delphi-Quellcode:
const
  CMax = 10; //Gesamtanzahl der Plätze
  CUser = 6; //Anzahl der derzeitigen Teilnehmer
  CFixed = [1,3,5,7]; //Hier stehen die festen Positionen

var
  i: Integer;
begin
  //Regulären Teilnehmer einfügen
  for i := 1 to CUser do lb.Items.Add('Teilnehmer: ' + IntToStr(i));
  //Feste Positionen einfügen
    for i := 1 to CMax do
      if (lb.Count < CMax) and (i in CFixed) then lb.Items.Insert(i - 1,'Freilos');
end;
Das muss sicher noch etwas ausgefeilt werden, aber sollte gehen.
  Mit Zitat antworten Zitat
c.Stetter

Registriert seit: 7. Nov 2007
20 Beiträge
 
#6

Re: Feste Positionen in Stringlisten

  Alt 31. Okt 2008, 11:59
Danke für deine Anregung. Werde es am Wochenende mal Testen, und ausbauen.

Vielen Dank und ein schönes Wochenende
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#7

Re: Feste Positionen in Stringlisten

  Alt 31. Okt 2008, 13:01
Eine etwas abgewandelte Version, die die gesamte Liste in einem Durchlauf füllt:

Delphi-Quellcode:
var
  i, FixedReq: Integer;
begin
  FixedReq := CMax - CUser; //Anzahl der benötigten Festplätze

  for i := 1 to CMax do
  begin
    if (FixedReq > 0) and (i in CFixed) then
    begin
      lb.Items.Add('Freilos'); //Festplatz einfügen
      Dec(FixedReq); //Ein Festplatz weniger wird benötigt
    end else
    begin
      lb.Items.Add('Teilnehmer'); //Teilnehmer einfügen
    end;
  end;
end;
  Mit Zitat antworten Zitat
c.Stetter

Registriert seit: 7. Nov 2007
20 Beiträge
 
#8

Re: Feste Positionen in Stringlisten

  Alt 6. Nov 2008, 09:23
Danke, Ihr wart mir eine große Hilfe.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:33 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