AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi for-Schleife - Aktion IMMER 5 mal ausführen
Thema durchsuchen
Ansicht
Themen-Optionen

for-Schleife - Aktion IMMER 5 mal ausführen

Ein Thema von Yheeky · begonnen am 30. Jul 2005 · letzter Beitrag vom 30. Jul 2005
Antwort Antwort
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 16:52
Hallo,

ich habe ein Spielfeld von einer Größe von 10x10. Man nehme nun mal an, das Spielfeld würde nur aus 1en und 2en bestehen. Ich möchte per Knopfdruck nun 5 Felder des Spielfeldes verändern, aber NUR wenn es keine 1 hat.
Mein Problem ist nun folgendes: Wenn ich eine einfache for Schleife benutze um das Verändern von nur 5 Feldern zu verwirklichen (for i := 1 to 5 do) kann ich ja mit einer einfachen if-Abfrage prüfen, ob das Feld eine 1 oder 2 hat. Wenn das Feld aber eine 1 hat, wird die if-Abfrage ignoriert und das "i" in der for-Schleife läuft weiter. Nun werden nur noch 4 Felder getauscht, obwohl ja 5 getauscht werden sollen. Ich habe versucht das mit einer repeat Schleife zu lösen, aber das habe ich nicht hinbekommen. Vielleicht kann mir ja einer einen entscheidenden Tipp geben. Danke.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 16:54
du musst in die for-schleife eine while schleife hineinbauen, die erst aufhört, wenn tatsächlich ein feld gewechselt wurde.

aber was machst du, wenn es gar keien 5 felder mehr mit einer 2 gibt?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#3

Re: for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 16:57
Okay, was spricht gegen eine repeat...while Schleife?

Das kommt mit 100%iger Sicherheit nicht vor
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#4

Re: for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 16:57
Hi,

meinst du so etwas?
Delphi-Quellcode:
GeaenderteFelder:=0;
for c:=0 to 10 do
  for c2:=0 to 10 do
    if (Spielfeld[c,c2] = 2) and (GeaenderteFelder < 5) then begin
      Spielfeld[c,c2]:=1;
      Inc(GeanderteFelder);
    end;
Alle Variablen außer den Spielfeld sind vom Typ integer.

cu
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#5

Re: for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 17:02
Nein, in deinem Fall wären es ja immer die Felder 0,0 + 1,0 + 2,0 + 3,0 + 4,0 wenn sie keine 1 haben. Es sollen ja zufällige Felder ausgewählt werden. Mit einer while...do Anweisung funktionierts nun, aber mich würde interessieren, warum repeat...until nicht funktioniert. Wahrscheinlich hab ich es nur falsch angewendet aber ich wundere mich trotzdem...Danke jedenfalls für den Tipp mit while...do
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 17:07
dann würde ich einfach fünf einzigartige zufallskoordinaten erstellen....
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#7

Re: for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 17:11
Was heisst einzigartige? So habe ich es ja gemacht, aber wenn an einer Stelle X,Y eine 1 war, wurde die Bedingung ja nicht erfüllt.
  Mit Zitat antworten Zitat
arnold mueller

Registriert seit: 27. Jul 2005
129 Beiträge
 
#8

Re: for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 18:04
Hallo Yheeky!

Ist es für Dich egal an welcher Stelle im Spielfeld die Suche beginnt?

Wenn die Suche immer oben links beginnen darf, dann würde ich es so machen:

Delphi-Quellcode:
var Field: array[1..10,1..10] of byte;
    Changed: byte;

(...)

Changed := 5;

for x := 1 to 10 do
begin
  for y := 1 to 10 do
  begin
    if Field[x,y] <> 1 then
    begin
      Field[x,y] := 2;
      dec(Changed);
      if Changed = 0 then Break;
    end;
  end;
end;

Andernfalls zufällige Werte für x und y wählen:

Changed := 5;

x := random(9);
y := random(9);

Repeat
    if Field[x+1,y+1] <> 1 then
    begin
      Field[x,y] := 2;
      dec(Changed);
    end;
until Changed = 0;

Oder Startpunkt zufällig wählen, und von dort nach rechts oder nach links suchen.


Oder vielleicht doch ganz anders ...

Bye,
Arno

[edit=alcaeus]delphi-Tags gesetzt. In Zukunft bitte selbst machen. Danke Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat
arnold mueller

Registriert seit: 27. Jul 2005
129 Beiträge
 
#9

Re: for-Schleife - Aktion IMMER 5 mal ausführen

  Alt 30. Jul 2005, 18:09
Zitat von arnold mueller:
Hallo Yheeky!

if Field[x,y] <> 1 then

Field[x,y] := 2;

Arno
Das ist natürlich Quatsch, aber es geht doch um das Prinzip ...

Bye,
Arno
  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 10:00 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