Autor Beitrag
Darksight
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 28.05.05 13:25 
Hallo
liebe Delphifreunde,
ich habe ein kleines Problem ich soll bis Monatg ein Projekt abgeben das folgendes können soll:
1. Zahlen zufällig erzeugen
2. Diese Zahlen dann mit Selection oder Insertion sortieren
3. Diese sortierten Zahlen dann in form von Balken darstellen
(wobei der 3. Punkt ein zusatz pkt ist damit man 15 pkt in dem Fach informatik bekommt.)
Ich habe auch schon was geschrieben, wobei der punkt 3. leider noch nicht enthalten ist aber trotzdem will das Programm nicht so recht funktionieren, und da dachte ich ich frage mal hier die Profis nach rat ;) also dann zeigt mal was ihr könnt.

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:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
unit Projekt;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Zahlen: integer;
  Form1: TForm1;
  Zahlenfeld: Array [1..1000of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var lauf:integer;


begin
  Zahlen:= edit1.text;
  for lauf :=1 to Zahlen do
    begin
      Zahlenfeld[lauf]:= Random(1000);
      memo1.Lines.Add(intToStr(Zahlenfeld[lauf]));
    end;
  end;

procedure TForm1.Button2Click(Sender: TObject);
var lauf2, lauf3, lauf4 : Integer;
 Begin
   For lauf2:= 1 to Zahlen-1 Do
     Begin
        lauf4:= lauf2;

         For lauf3:= lauf2+1 To zahlen Do
           If (Zahlenfeld[lauf3] < Zahlenfeld[lauf4]) Then lauf4:= lauf3;

         end;

        for lauf3:=1 to Zahlen do
          begin
            memo2.Lines.Add(intToStr(Zahlenfeld[lauf2]));
        end;
     End;
procedure TForm1.Button3Click(Sender: TObject);
var lauf2, lauf3, lauf4 : Integer;
 begin
    For lauf2:= 2 To Zahlen Do
    begin
      Lauf4:= Zahlenfeld[lauf2];
      lauf3:= lauf2;
      While (lauf3 > 1and (Zahlenfeld[lauf3-1] > lauf4) Do
      begin
        Zahlenfeld[lauf3]:= Zahlenfeld[lauf3-1];
        dec( lauf3 );
      End;
      Zahlenfeld[lauf3]:= lauf4;
    end;
     for lauf3:=1 to zahlen do
          begin
            memo2.Lines.Add(intToStr(Zahlenfeld[lauf2]));
        end;
  end;
end.


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 29.05.05 09:37 
Sollst Du Balken mit TChart oder mit TCanvas zeichnen?
Dein Insertion Sort wirst Du doch wohl noch hinbekommen, das ist doch einfach. Hattet ihr schon 'Recherche bei Google' in der Schule?
Darksight Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 29.05.05 18:10 
Er ,
hat uns nicht gesagt mit was wir die balken machen sollen.
den Insertion und Selection Sort, hab ich ja schon bei google gesucht , und nach den vorlagen so gemacht wie oben nur aus irgendeinem grund will der nicht so recht klappen.
wisst ihr nicht was da falsch sein könnte ?
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 29.05.05 21:59 
Was an deinem Code falsch ist? Er ist unkommentiert.
Check doch mal hier:
www.sortieralgorithm...implesort/index.html
Darksight Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 29.05.05 22:17 
Kann mir nicht jemand meinen Code umformen, sodass er funktioniert :cry:

Bitte helft mir doch :cry: Ich will keine schlechte Note in Informatik :cry:
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 29.05.05 22:20 
Du bekommst nur dann schlechte Noten, wenn Du es nicht versuchst. Dein Code sieht nicht schlecht aus, aber er ist unkommentiert. Du sollst verstehen, wie so ein Algorithmus abläuft. Deshalb lies dir meinen Link durch (www.sortieralgorithmen.de). Dort stehen die Algorithmen auch noch fast in Delphi. Was willst du mehr? Soll ich mir deinen Schülerausweis nehmen und für Dich in die Schule gehen?

Sei nicht so faul und streng dein Hirn an. Oder geh Putzen.
Darksight Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 29.05.05 22:24 
Ich verstehe es nicht, sonst hätte ich nicht um Hilfe gefragt, ich sitze seit knapp 6 stunden vorm Rechner und pauke in Delphi. Ich hab doch nur um Hilfe gefragt :cry:
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 29.05.05 22:48 
Ich glaube dir nicht, das du es nicht verstanden hast. Aber wenn Du es nicht verstehst, wieso willst Du dann eine gute Note?
Ehrlich, es mag Dir oberlehrerhaft vorkommen, aber wenn Du dir heute eine gute Note erschleichst, dann wirst Du es einfach nu nix bringen. Programmieren bedeutet, das man das Zeugs auch kapiert. JEDER, ich wiederhole, JEDER Programmierer hat sich an Sortieralgorithmen (oder noch schlimmer: Rekursiven Algorithmen) die ersten grauen Haare geholt. Ich eingeschlossen. Du MUSST da durch. Ausser, Du hast kein Bock drauf. Dann: Geh Putzen oder schraub an Autos rum (nix gegen Mechaniker).

Insertion Sort geht so:
Ich gehe die Liste von vorne (1) nach hinten (N) durch und füge das i.te Element in die (per definitionem sortierte) Teilliste 1..i-1 an der entsprechenden Stelle ein.

Ungefähr so (fast 1:1 kopiert aus dem Link, den du angeblich nicht verstehst):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Procedure InsertionSort (A : TArray; N : Integer);
Var
  i,j : Integer;

Begin
  For i:=1 to N-1 do
    For j := i downto l do 
      if (A[j] > A[j+1]) then 
        exchange (A[j], A[j+1]);
End;

Natürlich musst Du noch 'exchange' auskodieren. Es geht darum, die Elemente a[j] und a[j+1] zu vertauschen. Wie man ein Feld A mit Zufallszahlen füllt und das Ergebnis hinterher ausgibt, das schaffst Du.

Was machst Du eigentlich, wenn dein Lehrer dich auffordert, deinen Code zu erklären?
Darksight Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 30.05.05 01:25 
kann mir dann noch jmd sagen wie ich die zahlen dann in balken in ner TPaintBox anzeigen lassen kann.???
nachdem ich jetzt hier 7 std am stück dran hocke und immer noch fast nix läuft.Und muss das heute gegen 10 Uhr früh fertig haben.
Und ich mein den größtenteil kann ich ja auch erklären nur der fehler steckt im detail und den finde ich nit, deshalb frage ich ja auch um rat. ob von euch einer den fehler findet. ich habe es mit hilfe davon probiert www.delphipraxis.net...algorithmen+iii.html.

und auf jeder hilfe seite die man findet steht es anderst !! das ist zum kotzen !!

wäre euch allen jetzt sehr verbunden wenn mir einer den fehler sagen kann, bei dem überarbeiteten text:
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:
begin
  Zahlen := strtoint(edit1.text);
  for lauf :=1 to Zahlen do
    begin
      Zahlenfeld[lauf]:= Random(1000);
      memo1.Lines.Add(intToStr(Zahlenfeld[lauf]));
    end;
  end;

procedure TIch_find_den_Fehler_nit_Teil1.Button2Click(Sender: TObject);
var lauf2, nachfolger, aktuell : Integer;
 Begin
   For lauf2:= 1 to Zahlen Do
     Begin
        aktuell:= lauf2;

         For nachfolger:= lauf2+1 To zahlen Do
           If (Zahlenfeld[nachfolger] < Zahlenfeld[aktuell]) Then
           Zahlenfeld[aktuell]:= nachfolger;
           Zahlenfeld[nachfolger]:= aktuell;
           memo2.Lines.Add(intToStr(Zahlenfeld[lauf2]));

         end;

     End;
procedure TIch_find_den_Fehler_nit_Teil1.Button3Click(Sender: TObject);
var lauf2, lauf3, lauf4 : Integer;
 begin
    For lauf2:= 2 To Zahlen Do
    begin
      Lauf4:= Zahlenfeld[lauf2];
      lauf3:= lauf2;
      While (lauf3 > 1and (Zahlenfeld[lauf3-1] > lauf4) Do
      begin
        Zahlenfeld[lauf3]:= Zahlenfeld[lauf3-1];
        dec( lauf3 );
      End;
      Zahlenfeld[lauf3]:= lauf4;
    end;
     for lauf3:=1 to zahlen do
          begin
            memo2.Lines.Add(intToStr(Zahlenfeld[lauf2]));

        end;
  end;
end.


schon mal vielen dank im vorraus.

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Darksight Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 30.05.05 10:43 
CLOSED