| Autor |
Beitrag |
Kiwibanana
Hält's aus hier
Beiträge: 6
|
Verfasst: So 10.04.11 12:20
Habe ein Problem beim Kompilieren.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| unit Bubblesort_u;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) bt_eingabe: TButton; li_text: TListBox; li_sort: TListBox; bt_sort: TButton; bt_ende: TButton; procedure bt_endeClick(Sender: TObject); procedure bt_eingabeClick(Sender: TObject); private public end;
var Form1: TForm1; z : string; mal,i : integer; feld : array of string;
implementation
{$R *.dfm}
procedure TForm1.bt_endeClick(Sender: TObject); begin close end;
procedure TForm1.bt_eingabeClick(Sender: TObject); begin z := Inputbox('Sortieren','Wie viele Wörter bzw. Zahlen sollen sortiert werden (Geben Sie bitte die Anzahl der Wiederholungen ein!)',''); mal := strtoint(z); for i := 1 to mal do begin feld[i] := inputbox('Eingabe','Geben Sie ihr ' + inttostr(i) + '. Wort ein',''); li_text.Items.Add(feld[i]); end;
end;
end. |
Das Programm lässt sich zwar kompilieren, aber nach Eingabe des ersten Wortes kommt ein Fehler.
Kann mir wer helfen ?
|
|
haentschman
      
Beiträge: 285
Erhaltene Danke: 33
DX10 Berlin Professional
|
Verfasst: So 10.04.11 12:26
Moin...
| Zitat: | | Kann mir wer helfen ? |
ja. In der Regel der Fehler selbst. Die Fehlermeldung (wirklich) lesen...und debuggen.
Hinweis:
- Du benutzt ein dynamisches Array. Du mußt die Größe selbst festlegen.
- Was passiert wenn in die erste Inputbox ein "A" eingegeben wird ?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 10.04.11 13:57
Außerdem hast du aus Versehen Variablen global deklariert. Da sollte bei i auch eine entsprechende Compilerwarnung kommen. Ist halt keine gute Idee nicht zu lesen was da steht...
Zumindest i muss lokal deklariert werden, innerhalb der Prozedur. Das Array gehört z.B. unter private deklariert.
|
|
gnomecoder
      
Beiträge: 51
Erhaltene Danke: 5
|
Verfasst: So 10.04.11 14:47
jaenicke hat folgendes geschrieben : |
Zumindest i muss lokal deklariert werden, innerhalb der Prozedur. |
warum?
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: So 10.04.11 15:05
gnomecoder hat folgendes geschrieben : | jaenicke hat folgendes geschrieben : |
Zumindest i muss lokal deklariert werden, innerhalb der Prozedur. |
warum? |
Es ist nicht zwingend, das läuft auch so, da du i ja immer den passenden Wert gibst.
Es ist aber trotzdem ein besserer Stil, wenn du die Laufvariablen immer nur innerhalb von den jweiligen Prozeduren deklarierst.
Generell solltest du versuchen so wenig Globale Variablen wie möglich zu verwenden.
Lg
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 10.04.11 15:23
Nicht umsonst gibt es eine entsprechende Compilerwarnung: Quelltext 1:
| [DCC Warnung] Unit1218.pas(28): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein | Da es früher erlaubt war auch globale Variablen als Schleifenvariable zu benutzen, ist dies aus Gründen der Abwärtskompatibilität weiter möglich. Der erzeugte Code kann dann aber signifikant langsamer sein, da eine Optimierung für den Compiler nicht mehr möglich ist...
|
|
gnomecoder
      
Beiträge: 51
Erhaltene Danke: 5
|
Verfasst: So 10.04.11 15:26
danke. wieder was dazu gelernt 
|
|