Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   For Schleife beginnt mit falscher Zahl? (https://www.delphipraxis.net/193972-schleife-beginnt-mit-falscher-zahl.html)

Gurkenmann 30. Sep 2017 14:25

For Schleife beginnt mit falscher Zahl?
 
Hallo, ich hab seit einiger Zeit ein kleines Problem mit meinem Programm.
Ich sollte für die Schule ein Programm erstellen, welches mit verschiedenen Sortier Algorithmen Zahlen sortieren kann.
Nun war ich sehr engagierte und habe mir meinen eigenen Sortier Algorithmus ausgedacht,
welcher auch einwandfrei auf dem Papier funktioniert.

Nun benötige ich für den Algorithmus eine Schleife in einer Schleife. (Glaube ich zumindest).
Jedenfalls lautet meine Schleife wie folgt:
Delphi-Quellcode:
 for ü := 9 downto 0 do
    for ä := 0 to 9 do
nun habe ich aber das Problem, dass warum auch immer von -10 angefangen wird loszuzählen.
wenn dann für die Zehn nochmal von 0 bis 9 hochgezählt wurde springt es aber nicht auf -9 wie man es vermuten könnte, sondern das Programm stürzt ab.

Ich hoffe die Informationen reichen um mir weiter zu helfen, ansonsten kann ich ja auch nochmal meinen Ansatz meines Algorithmus posten.

-Gurkenmann

mkinzler 30. Sep 2017 14:31

AW: For Schleife beginnt mit falscher Zahl?
 
Am wenigen Code, den du gepostet hast, kann ich keinen Fehler erkennen.

Allerdings kann ich die -10 nicht nachvollziehen, diese scheinen ja irgendwie berechnet zu werden.

Code:
 ansonsten kann ich ja auch nochmal meinen Ansatz meines Algorithmus posten.
Wäre sinnvoll.

Gurkenmann 30. Sep 2017 14:37

AW: For Schleife beginnt mit falscher Zahl?
 
Delphi-Quellcode:
procedure TForm1.Button9Click(Sender: TObject);
var ü,ö,ä,Merke,Merke2 : INteger;
begin
  ü:=0;
  for ü := 9 downto 0 do
    for ä := 0 to 9 do
      begin
        if Zahlz[ü] < Zahlz[ä] then
          begin
            Merke := Zahlz[ü];
            Zahlz[ü] := Zahlz[ä];
            Zahlz[ä]:= Merke;
          end;
        if Zahlz[ä] < Zahlz[ä+1] then
          begin
            Merke2 := Zahlz[ä];
            Zahlz[ä] := Zahlz[ä+1];
            Zahlz[ä+1] := Merke;
          end;
      end;
for ö  := 0 to 9 do
  Stringgrid7.Cells[1,ö] := inttostr(Zahlz[ö]);

So das ist mein ganzer Code... Ich hoffe es reicht, da es sehr schwer ist den Algorithmus zu erklären :/

mkinzler 30. Sep 2017 14:46

AW: For Schleife beginnt mit falscher Zahl?
 
Me.E. müsste es

Delphi-Quellcode:
            Zahlz[ä+1] := Merke2;
Ohne den Code im Detail nachvollzogen zu haben

Gurkenmann 30. Sep 2017 14:54

AW: For Schleife beginnt mit falscher Zahl?
 
Stimmt, das habe ich übersehen, aber dadran lag es nicht. Es muss an der Schleife liegen oder am ersten if Befehl.
Ich habe ja sogar ü davor 0 gesetzt, aber es geht einfach nicht :/

mkinzler 30. Sep 2017 15:02

AW: For Schleife beginnt mit falscher Zahl?
 
Das ist nicht notwendig.
Welche Variable hat -10?

ü beginnt bei 9.

Mach mal den Blatttest und vergleiche anschliessend im Debugger.

Edit: Ich vermute es liegt in der 2. Abfrage: a+1 : 9 + 1 = 10 -> Höchster Index 9

Gurkenmann 30. Sep 2017 15:22

AW: For Schleife beginnt mit falscher Zahl?
 
Oh, wow! Es hat echt geklappt!
Mein Algorithmus funktioniert :-D
Vielen vielen Dank!
Du kannst dir gar nicht vorstellen wie glücklich ich grade bin xD
Es lag an dem zweiten if! An dem +1 und der 9.
Ich habe jetzt die zweite Schelfe von 0-8 laufen lassen :)

Ich werde dich in meiner Danksagung erwähnen, wenn ich das vor meiner Klasse präsentiere ;)
Vielen Dank!

Ich wünsche dir noch ein schönes Wochenende!

mkinzler 30. Sep 2017 16:05

AW: For Schleife beginnt mit falscher Zahl?
 
Gerne Geschehen.

Zitat:

Ich wünsche dir noch ein schönes Wochenende!
Dir auch!

Luckie 30. Sep 2017 17:36

AW: For Schleife beginnt mit falscher Zahl?
 
Hat es einen tieferen Grund warum du Umlaute als Zählvariablen nimmst?:shock:

Benedikt Magnus 1. Okt 2017 08:08

AW: For Schleife beginnt mit falscher Zahl?
 
Zitat:

Zitat von Luckie (Beitrag 1382359)
Hat es einen tieferen Grund warum du Umlaute als Zählvariablen nimmst?:shock:

Buchstaben mit nur einem Punkt sind doch langweilig. :lol:

p80286 1. Okt 2017 08:17

AW: For Schleife beginnt mit falscher Zahl?
 
Weil die so weit rechts auf der Tastatur sind.
Nein das ist kein Scherz! Das wurde allen Ernstes mal so vorgeschlagen.
(klappte allerdings nicht mit Turbo-Pascal)

Gruß
K-H

Luckie 1. Okt 2017 12:14

AW: For Schleife beginnt mit falscher Zahl?
 
Zitat:

Zitat von p80286 (Beitrag 1382382)
Weil die so weit rechts auf der Tastatur sind.

Und alle nebeneinander liegen? :wall:

Glados 1. Okt 2017 12:20

AW: For Schleife beginnt mit falscher Zahl?
 
Was ist denn, wenn ich schon ä, ö und ü schon genutzt habe? Kommt dann ää, öö, üü?

Delphi-Quellcode:
for ä := 0 to ListeÄ.Count - 1 do
 begin
  for ää := 0 to Listeää.Count - 1 do
   begin
    if ListeÄ[ä] = ListeÄÄ[ää] then ...
   end;
 end;

Delphi-Laie 1. Okt 2017 17:12

AW: For Schleife beginnt mit falscher Zahl?
 
Zitat:

Zitat von Gurkenmann (Beitrag 1382334)
So das ist mein ganzer Code...Ich hoffe es reicht,

Ja, tut es.

Zitat:

Zitat von Gurkenmann (Beitrag 1382334)
da es sehr schwer ist den Algorithmus zu erklären :/

Jedenfalls ist Dein Code - auch ohne Deine oder irgendeine Erklärung - ziemlich leicht als elementarer Sortieralgorithmus mit quadratischem Laufzeitverhalten (das sind nahezu Synonyme) zu erkennen. Das bedeutet, daß bei wachsender Anzahl zu sortierender Elemente dieser Dein Algorithmus sehr langsam wird. Für den Anfang aber ein gutes Ergebnis. Außerdem dürfte er nicht stabil sein, was bedeutet, daß gleiche Elemente ihre Reiheinfolge bzw. Anordnung zueinander im Verlaufe der Sortierung ändern können.

Falls es Dich interessiert, was sich im Bereich der Sortieralgorithmen im Verlaufe der letzten Jahrzehnte "so tat", dann verweise ich auf meine Signatur. Ich hoffe, damit einen guten Überblick und Abriß zu diesem Thema geben zu können.

Du benötigst übrigens keine 2 Merke-Variablen, eine tut es auch. Und statt "ö" kannst Du auch "ä" oder "ü" für die Ausgabeschleife verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 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