Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Shellsort-projekt


delphischueler - Sa 03.11.07 12:43
Titel: Shellsort-projekt
hi @ all....
ich habe da ein kleines informatisches problem....
ich habe in der schule ein projekt über shellsort aufbekommen, habe da aber irgendwie den überblick verloren....
ich habe schon angefangen mit der arbeit, komme nun aber nicht weiter..
es handelt sich um folgendes....

1.Erstellen Sie in Delphi ei Programm, dass 6 aus 60 zufälligen Zhalen erzeugt. Diese Zahlen sollen mit Hilfe von Shellsort sortiert werden.
2.Erstellen Sie ein zweites Programm, bei dem aus 1000 Zahlen 100 zufällig erzeugt werden. Dabei soll keine Zahl doppelt auftreten. Anschließend werden die Zahlen sortiert. Die Ausgabe der sortierten und der unsortierten Felder erfolgen in einer Tabelle.

zu allem übel habe ich noch nie mit tabellen gearbeitet.....über ansätze oder auch komplette programme( :wink: ) wäre ich sehr dankbar....
liebe grüße,delphischueler


Moderiert von user profile iconNarses: Topic aus Sonstiges (C# / .NET) verschoben am Sa 03.11.2007 um 16:42


Tilo - Sa 03.11.07 19:18

Zu Tabellen: das sind Arrays. zb. Feld[10].

Zu erzeugen der Zufallszahlen: Schreibe die Quellzahlen in eine Liste. Mit hilfe von random holst Du an eine Zahl aus der Liste, gibst diese Zahl weiter und löscht sie aus der Liste. Als Liste Nehme Tstringlist und speicher die Zahlen(vermutlich Integer?) als string. Ist zwar nicht sehr elegant. Hat aber den Vorteil das Tstringlist als Nachfahre von Tlist die Funktion des Löschens bereitstellt und Du nicht Tlist für Integer ableiten mußt.

Felder bearbeitet man üblicherweise mit Schleifen.
z.B.


Delphi-Quelltext
1:
2:
for a:=0 to 20 do
 Feld[a]:=a*a;


Hoffe das war jetzt hilfreich.


delphischueler - So 04.11.07 14:52

hm nein, leider nicht.......ich hab jetzt soviel darüber gelesen, dass ich nun komplett verwirrt bin....gibts das auch als fertiges programm????????


delphischueler - So 04.11.07 14:57

oder machen wir es anders.....ich schreib hier einfach mal meinen quelltext rein, vllt findet ja jm raus, was mir hier fehlt...
das ist jetzt die prozedur für die sortierung....


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:
procedure TForm1.Button2Click(Sender: TObject);
var abstand,i,j,merke:integer;
    done:boolean;
begin
abstand:=n;
while(abstand>1do
 begin
  abstand:=abstand div 2;
  repeat
   done:=true;
   for j:=1 to n-abstand do
    begin
    i:=j+abstand;
    if (zahl[j]>zahl[i]) then
     begin
      merke:=zahl[j];
      zahl[j]:=zahl[i];
      zahl[i]:=merke;
      done:=false;
     end;
    end;
   until done;
 end;
end;


Moderiert von user profile iconTino: Delphi-Tags hinzugefügt


ub60 - So 04.11.07 20:39

Hallo delphischueler,

in dem Buch, aus dem Du die Prozedur abgeschrieben hast, stehen auch noch:
-auf Seite 156: Informationen über Arrays
-auf Seite 157: Informatoinen über Zufallszahlen
-von Seite 165-167: Informationen über Shellsort.
-ab Seite 132: Informationen über die Arbeit mit ListBoxen

Lies doch bitte dort mal nach.
Brauchst Du noch weitere Hilfe? Frage wieder hier, aber bitte etwas konkreter.

ub60


delphischueler - Mo 05.11.07 07:42

ich habe es aus keinem buch abgeschrieben, war eine kopie meiner lehrerin......


ub60 - Mo 05.11.07 10:31

Oh, SORRY! :( :(
Dann schreibe doch bitte trotzdem Dein Problem konkreter.
Die kompletten Hausaufgaben wird Dir hier im Forum keiner Lösen. Hilfen gibt es immer gern.

Und zum Quelltext:
n ist die Anzahl der Elemente, Zahl ist ein array[1..n] of Integer. zahl[1] ist das erste Element des Arrays usw.

ub60


delphischueler - Mo 05.11.07 19:07

nein ich wollte ja auch gar nicht, dass hier jemand die kompletten aufgaben macht. war gar nicht meine absicht....
mein problem ist nur, dass ich nicht wirklich weiß, wie ich dem programm sage, dass er die zahlen (die ich vorher schon erzeugt habe) aus den edit-feldern sortiert... wie ich zufallszahlen erzeuge ist mir klar.


ub60 - Mo 05.11.07 20:13

Wenn Du die Zahlen in Edit-Feldern hast (warum keine Listbox oder ein StringGrid) musst Du sie noch in das Array bringen, also z. B. so:


Delphi-Quelltext
1:
2:
3:
Zahl[1]:=StrToInt(Zahl1Edit.Text);
Zahl[2]:=StrToInt(Zahl2Edit.Text);
...

Dann die Prozedur aufrufen und die Zahlen wieder auslesen und anzeigen.

ub60