Autor Beitrag
Leon91200
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 19.04.18 14:25 
Hallo ich habe für die Schule ein Programm geschrieben, indem man Zufallszahlen mit 2 verschiedenen Methoden letztlich sortieren muss. Diese beiden Methoden sollen wir jeweils in eine Unit auslagern. Uns wurde jedoch nicht erklärt wie das geht. Im Internet hab ich mich natürlich auch erkundigt und dort stand, dass man in seiner Hauptunit in dem "Uses" Abschnitt den Namen seiner 2. Unit hinzufügen muss, um auf diese zuzugreifen. Jetzt habe ich dies natürlich gemacht, aber in meiner 2. Unit hab ich jetzt nur die Procedure, um meine Zahlen zu sortieren. Jetzt weiß ich jedoch nicht, wie ich auf die Variablen aus meiner Main Unit und auch auf die Form zugreifen kann. Wäre nett wenn mir das jemand erklären könnte.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 19.04.18 15:44 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Leon91200 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 19.04.18 16:02 
Hm irgendwie versteh ich das nicht so wirklich. Meine Unit 2 sieht unverändert so aus:
ausblenden volle Höhe Delphi-Quelltext
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:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;
implementation

procedure BubblesortClick(Sender: TObject);
var Merke:Integer;
Anfang, Ende:Real;
begin

Anfang:=Time   ;

ListBox_sortiert.Items.Clear;

 for i:=n downto 1  do
for j:=1 to i do
if Zahl[j]>Zahl[j+1then
begin
  Merke:=Zahl[j];
  Zahl[j]:=Zahl[j+1];
  Zahl[j+1]:=Merke;
end;
 for i:=1 to n do
  begin
  ListBox_sortiert.Items.Add(IntToStr(Zahl[i]));
  end;
Ende:=Time;
Edit_Dauer.Text:=FloatToStrF((Ende-Anfang)*24*3600,ffFixed, 104);
end;
end.

Jetzt kommen aber immer Fehler, dass zb das Objekt "ListBox_sortiert" nicht gefunden wurde. Wie kann ich denn einfach machen, dass der Quellcode, wie er hier steht, genauso in der 2. Unit, wie auch in der ersten Unit funktioniert. Habe auch schon probiert den Uses teil usw aus der Unit 1 vollständig zu kopieren, aber auch dann geht es nicht

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 19.04.18 16:15 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Leon91200
Leon91200 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 19.04.18 16:38 
Ich habe es soweit jetzt erstmal so geändert, wie ich sollte. Wie genau greife ich jetzt auf meine Sortierprocedure zu? Eigentlich einfach "BubbleSortClick(?);"
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 19.04.18 16:49 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Leon91200 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 19.04.18 17:33 
Bei mir sieht es jetzt so aus, also in der 2. Unit:
ausblenden volle Höhe Delphi-Quelltext
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:
unit Unit2;

{$mode objfpc}{$H+}

interface
uses
  Classes, SysUtils;

procedure BubblesortClick(Liste: TStringList; var Dauer: string);


implementation

const n=100;
      Bereich=1000;

var Zahl : Array[1..n] of Word;
var i,j, Merke: Integer;

procedure BubblesortClick(Liste: TStringList; var Dauer: string);
var Anfang, Ende:Real;
begin

Anfang:=Time   ;

//ListBox_sortiert.Items.Clear;

 for i:=n downto 1  do
for j:=1 to i do
if Zahl[j]>Zahl[j+1then
begin
  Merke:=Zahl[j];
  Zahl[j]:=Zahl[j+1];
  Zahl[j+1]:=Merke;
  Liste.Add(IntToStr(Zahl[i]));
end;

 Ende:=Time;
 Dauer := FloatToStrF((Ende-Anfang)*24*3600,ffFixed, 104);

end;

Das ist die Prozedur aus Unit 1:
procedure TForm1.BubblesortClick(Sender: TObject);
begin
ListBox_sortiert.Items.Clear;

  BubblesortClick(ListBox_sortiert.Items, Dauer);

    Edit_Dauer.Text := dauer;
  end;

Aber irgendwie steht jetzt die ganze Zeit dar, dass er den Identifier Dauer nicht finden kann.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 19.04.18 18:13 
- Nachträglich durch die Entwickler-Ecke gelöscht -
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Do 19.04.18 20:24 
Hallo,

ich weiss ja nicht, wie die Vorgabe von Deinem Lehrer ist, aber wenn er wirklich nicht erklärt hat wie ihr vorgehen sollt, finde ich das pädagogisch nicht sehr sinnvoll.

Ich finde es sinnvoller, direkt das Feld an die Procedure oder Function zu übergeben und nicht den Umweg über eine TStringlist zu machen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Procedure BubSort(Var feld: Array of Integer);
Var i:Integer;
Begin
 For i:=High(feld) downto Low(feld) do
//Achtung Low entspricht i=0 und High entspricht i=n-1
End;


Dein Programm dürfte allerdings gar nicht funktionieren, da Du außerhalb des Wertebereichs kommst. Schau zuerst einmal, dass Dein Programm ohne Unit läuft, lagere alles in Proceduren oder Functionen aus und erstelle besser erst dann eine Unit, in die Du die entsprechenden Proceduren und Functionen einfügst.