AGB  ·  Datenschutz  ·  Impressum  







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

Schleifen

Ein Thema von netscanner · begonnen am 2. Dez 2005 · letzter Beitrag vom 3. Dez 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von netscanner
netscanner

Registriert seit: 2. Dez 2005
Ort: Dieburg
280 Beiträge
 
Delphi 6 Enterprise
 
#11

Re: Schleifen

  Alt 3. Dez 2005, 12:28
äh wrong coe :
Delphi-Quellcode:
var a,i,c :integer ;
begin
a := -1; //richtung
i := 0; //zähler
//c Ausgabe
for i := 1 to 80 do
if i mod 10 = 0 then a := -1
else a := 1;
c := c * a ;
memo1.seltext := (inttostr (c));

end;

end.
Martin
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#12

Re: Schleifen

  Alt 3. Dez 2005, 12:43
Hallo,

Dein Code hat ein paar Fehler:
Delphi-Quellcode:
var a,i,c :integer ;
begin
a := -1; //richtung
i := 0; //zähler
//c Ausgabe // 1)
for i := 1 to 80 do // 2)
if i mod 10 = 0 then a := -1 // 3)
else a := 1;
c := c * a ; // 4)
memo1.seltext := (inttostr (c));

end;
Ich hab mal die wichtigsten markiert.
1) c ist nicht initialisiert.
2) Du zählst zwar hoch, aber nur die if-Abfrage. Deine Schleife muss in einen begin..end-Block.
3) Dein Vorzeichen ist immer Positiv, außer die Zahl ist durch Zehn teilbar. Das Vorzeichen muss dann aber wechseln und bis zur nächsten Zehnerzahl so bleiben.
4) c wird nur einmal mit -1 malgenommen und das Ergebnis ausgegeben. Da c nicht initialisiert ist kommt irgendetwas raus.

so stimmts:
Delphi-Quellcode:
var
  a, i, c : Integer;
begin
  a := 1; //richtung
  i := 0; //zähler
  c := 0; //c Ausgabe
  for i := 1 to 40 do // Zwei mal hoch und runter
  begin
    c := c + a; // Zahl um Eins erhöhen/vermindern

    memo1.seltext := IntToStr(c); // Zahl ausgeben

    if i mod 10 = 0 then // wir müssen umdrehen
    begin
      c := c + a; // noch eins weitergehen, damit die nächste Zahl stimmt
      a := a * -1; // Vorzeichen wechseln
    end;
  end;
end;
Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von netscanner
netscanner

Registriert seit: 2. Dez 2005
Ort: Dieburg
280 Beiträge
 
Delphi 6 Enterprise
 
#13

Re: Schleifen

  Alt 3. Dez 2005, 14:13
erstmal danke...aber wenn ich den code compiliere zählt er mir auch nur ein mal hoch und runter
Martin
  Mit Zitat antworten Zitat
monta

Registriert seit: 18. Okt 2004
Ort: Dresden
141 Beiträge
 
#14

Re: Schleifen

  Alt 3. Dez 2005, 15:15
das versteh ich nicht, hast du denn code von xaromz?

bei mir funtkioniert es einwandfrei

für die Übersichtlichkeit könnte man ja das memo.seltext auch durch:

memo1.Lines.Add(IntToStr(c)); ersetzen, ist ja aber eigentlich egal.
Johannes M.
  Mit Zitat antworten Zitat
Benutzerbild von netscanner
netscanner

Registriert seit: 2. Dez 2005
Ort: Dieburg
280 Beiträge
 
Delphi 6 Enterprise
 
#15

Re: Schleifen

  Alt 3. Dez 2005, 15:28
jo hab ich aber bei mir zeigt er nur 1234567891010987654321 an
un d nicht 12345678910109876543211234567891010987654321
Martin
  Mit Zitat antworten Zitat
Benutzerbild von netscanner
netscanner

Registriert seit: 2. Dez 2005
Ort: Dieburg
280 Beiträge
 
Delphi 6 Enterprise
 
#16

Re: Schleifen

  Alt 3. Dez 2005, 15:31
hat sich erledigt - es geht
Martin
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#17

Re: Schleifen

  Alt 3. Dez 2005, 15:57
Zitat von netscanner:
danke erstmal für deinen beitrag aber wie soll ich das mit dem +1 bzw. -1 mit einer for-schleife machen?
dazu benötigt man doch eine repeat schleife oder?
sorry für die blöde frage aber schleifen sind echt nicht mein ding...
Hi,
ich wollte noch was zu deinem eigentlichen Problem loswerden, Schleifen. Die sind nämlich extrem wichtig, sie werden dir also sehr häufig begegnen (Dann ist vielleicht auch das mit +1 oder -1 klar)

Schleifen gehören zu den sogenannten Kontrollstrukturen. Die Idee von einem if ist dir sicherlich klar, du prüfst etwas (nennen wir es X) und wenn X wahr ist, machst du etwas sonst nicht. Jetzt gibt es aber viele Dinge die du gerne mehr als einmal machen möchtest. Da kommen dann Schleifen ins Spiel.

In Delphi gibt es verschiedene Möglichkeiten, du hast eine while ... do, eine repeat ... until und eine for .. to .. do.

Eine Schleife besteht immer aus zwei Teilen, einer Überprüfung und einem Schleifenkörper. Der Unterschied zwischen den drei Schleifen liegt hier in der Überprüfung (Zeitpunkt und Art).
Was welche Schleife macht muss du dir nicht kompliziert merken, dass geht recht gut aus den Namen hervor.

Die while-Schleife prüft direkt eine Bedingung. Ist diese erfüllt, wird der gesamte Schleifenkörper durchlaufen. Nach jedem duchlauf springt dein Programm wieder zu dieser Überprüfung und verfährt auf gleiche Art und Weise. Ist die Bedingung nicht erfüllt, so wird der gesamte Schleifenkörper übersprungen und in der nächsten Zeile fortgefahren.
Der Schleifenkörper sollte durch ein begin ... end umschlossen werden. Folgt dem do kein begin, besteht der Schleifenkörper nur aus der nächsten Zeile. Zu gutem Programmierstil gehört es jedoch auch für den einzeiligen Schleifenkörper ein begin und end zu verwenden (macht es leichter lesbar und weniger Fehleranfällig)
Ist also die Bedingung nie erfüllt, wird die Schleife nie durchlaufen.

Die repeat-Schleife gleicht der while Schleife fast komplett. Der wichtige Unterschied liegt darin, dass diese Schleife erst nach dem Durchlauf die Bedingung prüft. Zudem steht der Schleifenkörper zwischen dem repeat und dem until. Die Schleife wird also einmal durchlaufen, dann wird geguckt ob die Schleifenbedingung erfüllt ist und ggf. die Schleife erneut durchlaufen.
Ist die Bedingung nie erfüllt, so wird die Schleife trotzdem einmal durchlaufen.

Die for-Schleife ist eine besondere Schleife. Während while und repeat eine allgemeine boolsche Bedingung überprüft handelt es sich bei der for-Schleife um eine Zählschleife. Wie der Name schon sagt, zählt diese Schleife. Genau genommen kannst du hier die Anzahl der Durchläufe festlegen.
Sie besteht aus einer Variable, die mit einem bestimmten Wert initialisiert wird, einem Zielwert und der Richtung (rauf- oder runterzählen). Dabei wird die Variable automatisch in jedem Schritt um 1 erhöht (abgesenkt)
Diese Schleife lässt sich wohl einfacher an einem Beispiel erklären:

Delphi-Quellcode:
var i : Integer;
begin
  // initialisiert i mit dem Wert 0
  // tut irgendwas bis i den Wert 10 hat
  for i := 0 to 10 do
    begin
      // tue irgendwas
    end;

   // initialisier i mit dem Wert 10
   // tut irgendwas bis i den Wert 0 hat
   for i := 10 downto 0 do
     begin
       // tue irgendwas
     end;
end;
Eine solche Schleife kann auch mit einer while (oder repeat) realisiert werden

Delphi-Quellcode:
var i : Integer;
begin
  // i initialisieren
  i := 0;
  while i <= 10 do
    begin
      // tue irgendwas
      inc(i); // zähle i um eins hoch
    end;
end;
Was du in den Schleifenkörper schreibst, ist deine Sache und hängt nicht von der Schleife ab. Zählschleifen eignen sich natürlich immer dann, wenn du wirklich mit einer Variable zählst (z.B. alle Elemente in einem Array). Es ist einfach schöner nicht selbst die Variable zu verändern.
Bei der repeat-Schleife solltest du immer berücksichtigen, dass die Schleife immer mindestens einmal durchlaufen wird. Analog solltest du bei der while berücksichtigen, dass diese Schleife überhaupt nur durchlaufen wird, wenn die Bedingung irgendwann war wird.

Ist eine Bedingung immer wahr, so hast du dir eine Endlosschleife gebaut. In einigen Situationen wirst du so etwas sicherlich mal unabsichtlich machen (dann musst du das Programm über die IDE zurücksetzen). Du kannst es aber auch absichtlich verwenden und eine Schleife (zu jedem Zeitpunkt) mit einem break verlassen.

Delphi-Quellcode:
begin
  // immer wahr -> Endlosschleife
  while True do
    begin
      break; // verlässt die Schleife sofort
´ end;
end;
Mit Endlosschleifen, die mit break verlassen werden sollte man möglichst wenig arbeiten (besser gar nicht), es ist nicht so wirklich übersichtlich. Aber break kann auch wichtig sein, wenn du z.B. in einem Array einen bestimmten Wert suchst. Sobald du ihn gefunden hast, brauchst du ja den Rest des Feldes nicht mehr beachten.

Delphi-Quellcode:
var i : Integer;
    ints : Array of Integer;
    containsZero : Boolean;
begin
  // erstelle ints und schreib Werte rein
  setLength(ints, 10);
  ints[0] := ...;
  ...
  
  // schau nach ob ints den Wert 0 enthält
  containsZero := False;
  for i := 0 to length(ints) - 1 do
    begin
      if ints[i] = 0 then
        begin
          containsZero := True;
          break;
        end;
    end;
end;
Wenn du dises Schleife durchläufst und ints[4] die erste Null in ints ist, dann würde die for Schleife nie für i = 5..9 durchlaufen werden. Ist deine Schleife nur groß genug lohnt sich das. Allerdings hast du keine Garantie, dass es nicht gar keine 0 gibt oder die erste bei i = 9 steht.

Ja, hoffe es hilft dir ein wenig

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:02 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