Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Selection und Insertion
Darksight - Sa 28.05.05 12:25
Titel: Selection und Insertion
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.
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 public end;
var Zahlen: integer; Form1: TForm1; Zahlenfeld: Array [1..1000] of 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 > 1) and (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
raziel: Code- durch Delphi-Tags ersetzt.
alzaimar - So 29.05.05 08: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 - So 29.05.05 17: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 ?
Darksight - So 29.05.05 21: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 - So 29.05.05 21: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 (
http://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 - So 29.05.05 21: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 - So 29.05.05 21: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):
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 - Mo 30.05.05 00: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
http://www.delphipraxis.net/topic344_tutorial+sortieralgorithmen+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:
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 > 1) and (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
raziel: Code- durch Delphi-Tags ersetzt.
Darksight - Mo 30.05.05 09:43
CLOSED
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!