Einzelnen Beitrag anzeigen

Kn1bbl

Registriert seit: 23. Nov 2003
9 Beiträge
 
Delphi 7 Enterprise
 
#1

Globale Variable wird geändert einfach so

  Alt 12. Dez 2004, 18:01
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Edit1: TEdit;
    ListBox1: TListBox;
    Button1: TButton;
    ListBox2: TListBox;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    RadioGroup1: TRadioGroup;
    Button4: TButton;
    GroupBox3: TGroupBox;
    Edit2: TEdit;
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure einlesen();
    procedure ausgabe();
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type feldtype = array[1..100] of integer;



var
  Form1: TForm1;
  anzahl: integer;
  werte: feldtype;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
        close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
        edit1.clear;
        listbox1.Clear;
        listbox2.Clear;
        radiogroup1.ItemIndex := -1;
end;

procedure TForm1.einlesen();
var i: integer;
begin
        {Leeren der Listboxkomponente vor dem ersten/erneuten Eintragen}
        listbox1.Clear;
        anzahl := 0;

        {Beginn der Eingabeüberprüfung}
        if edit1.Text = 'then
        begin
                anzahl := strtoint(inputbox('Keine Anzahl eingegeben!', 'Anzahl bitte eingeben:', '23'));
                edit1.Text := inttostr(anzahl);
        end
        else if strtoint(edit1.Text) > 100 then
        begin
                anzahl := strtoint(inputbox('Anzahl ist zu klein!', 'Anzahl bitte eingeben:', '23'));
                edit1.Text := inttostr(anzahl);
        end
        else if strtoint(edit1.Text) < 1 then
        begin
                anzahl := strtoint(inputbox('Anzahl ist größer als 100!', 'Anzahl bitte eingeben:', '23'));
                edit1.Text := inttostr(anzahl);
        end
        else
        begin
                anzahl := strtoint(edit1.Text);
                edit1.Text := inttostr(anzahl);
        end;
        {Ende der Eingabeüberprüfung}


        {Beginn Zuweisung}
        for i := 1 to anzahl do
        begin
                {Eintragen der Werte in das Feld}
                werte[i] := random(100) + 1;
                {Eintragen der Werte in die Listboxkomponente}
                listbox1.Items.Add(inttostr(werte[i]));
        end;
        {Ende Zuweisung}
end;

procedure TForm1.ausgabe();
var i: integer;
begin
        for i := 1 to anzahl do
        begin
                ListBox2.Items.Add(inttostr(werte[i]));
        end;
end;

procedure bubblesort();
var i, j, tmp: integer;
begin
        for i := 1 to (anzahl - 1) do
                for j := anzahl downto 1 do
                        if werte[j - 1] < werte[j] then
                        begin
                                tmp := werte[j - 1];
                                werte[j - 1] := werte[j];
                                werte[j] := tmp;
                        end;
end;

procedure shellsort();
var k,i:integer;
begin
        k := werte[1];
        for i := 1 to anzahl do
        begin
                if werte[i] < k then
                        k := werte[i];
        end;

        showmessage(inttostr(k));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
        einlesen();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
        randomize;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
        ListBox2.Clear;

        case RadioGroup1.ItemIndex of
                -1: showmessage('Bitte wählen sie das Verfahren aus!');
                0: bubblesort();
                1: shellsort();
                2: showmessage('Bitte wählen sie das Verfahren aus!');
        end;

        ausgabe();
end;

end.
Hallo,

das ist der Code der mir Kopfverbrechen bringt. Es geht um ein Schulprojekt, ganz einfach eigenltich, Sortieralgorithmen.

Dort haben wir eine Eingabe welche ein Array voll haut mit n Elementen (n wird eingegeben und heisst im Program anzahl: integer). Und obwohl ich keinen Befehl sehen kann, wo anzahl geändert wird, ändert sich anzahl in der procedure bubblesort.
Die Eingabe Funktion scheint zu funktionierne.
Wenn ich jedoch anzahl gleich am Anfang von bubblesort()ausgeben lasse, hat es noch den richtigen wert, jedoch ist dies nicht mehr der Fall nachdem die Schleifen durchlaufen wurden. Dabei wird es aber nie direkt geändert.

Bitte helft mir!
  Mit Zitat antworten Zitat