AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortieren von zahlen-aber wie?

Offene Frage von "Maja"
Ein Thema von Maja · begonnen am 5. Okt 2007 · letzter Beitrag vom 9. Okt 2007
Antwort Antwort
Seite 2 von 3     12 3      
Maja

Registriert seit: 5. Okt 2007
5 Beiträge
 
#11

Re: Sortieren von zahlen-aber wie?

  Alt 5. Okt 2007, 21:34
und wie kann ich den fehler beheben?
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Sortieren von zahlen-aber wie?

  Alt 5. Okt 2007, 21:37
Gehirn einschalten, ausprobieren, in Zukunft Hausaufgaben rechtzeitig beginnen
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Sortieren von zahlen-aber wie?

  Alt 5. Okt 2007, 21:47
Hallo inherited,

wenn du nicht helfen willst, ist das ok, aber solche Beiträge sind nicht zielführend. Beachte bitte, dass hier ein neues Mitglied eine Frage stellt und gibt diesem eine Chance.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#14

Re: Sortieren von zahlen-aber wie?

  Alt 5. Okt 2007, 22:02
Mal eine Problemanalyse:

Ausgangssituation
Du hast 3 Eingabefelder, in die Zahlen eingetragen werden sollen. Diese Zahlen sollen verglichen, sortiert und wieder ausgegeben werden (EVA-Prinzip).

1. Teilproblem: die eingegebenen Zahlen sind gar keine Zahlen, sondern Strings. Also brauchst Du 3 Zahlenvariablen (integer), in die die Eingaben erst umgewandelt werden müssen (StrToInt).

2. Teilproblem: diese (nun echten) Zahlen müssen miteinander verglichen und ggf. ausgetauscht werden.
- Teilproblem zum Teilproblem: wenn Du Zahl1 Zahl2 zuweist und anschließend andersherum, haben beide denselben Wert. Du brauchst also eine Puffervariable. Das sähe dann so aus (Tausche a mit b): Puffer = a; a = b; b = Puffer;
- Kernproblem des Teilproblems:
- wenn 1. Zahl größer als 2. Zahl, dann tauschen
- wenn 2. Zahl (evtl. vormals 1. Zahl) anschließend größer als 3. Zahl, dann tauschen
- nun zur Kontrolle noch mal die aktuelle 1. Zahl mit der aktuellen 2. Zahl vergleichen und gff. tauschen
Da es nur 3 Zahlen gibt, bist Du hier mit dem Vergleich schon am Ende.

3. Teilproblem: Ausgabe der sortierten Zahlen in den Eingabefeldern. Dies geschieht analog zum 1. Teilproblem andersherum mittels IntToStr.

Wenn Du das nun noch in Quellcode umsetzt, ist die Hausaufgabe gelöst
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Sortieren von zahlen-aber wie?

  Alt 6. Okt 2007, 00:07
Das was DeddyH schreibt ist schon mal die Lösung für dein Problem!

Wenn du später mal eine Reihe von Zahlen, unbekannter Anzahl, oder generell irgendwelche Sachen Sortieren möchtest, dann kann man diesen oben genannten Lösungsansatz noch vertiefen!

Dazu gibt es 2 Punkte die man im Hinterkopf haben sollte:
  • Sortiert wird durch einfaches Tauschen von Positionen
  • Sachen die Sortiert werden können unterschiedlich viel Speicher verbrauchen, wo durch ein tauschen der Werte große Rechenbelastung bedeuten kann!
Durch diese Punkte kommt man schnell zu dem Ergebnis, dass das Tauschen der Werte nicht immer die güstigste Lösung ist, daher ist es Ratsam die Position zwar zu tauschen, aber nicht die Werte! Sowas erreicht man z.B. indem man nur die Adressen (Pointer) zu den Werten (4 Byte) in einer Liste sortiert und nicht die Werte selbst, welche mit unter auch mal unterschiedlich groß sein können und auch mal ungeante Größen haben könenn (z.B. 100MB).
Damit hätte man schon sehr viel Speichermanagement weniger! Und ein weiterer Vorteil, es ist universel nutzbar!

Universel nutzbar? Ja! Das ganze hört sich jetzt ev. bischen schwer an, im Grunde ist es aber ganz einfach!
1. Man nehme eine Liste von Werten und indiziere sie.
Delphi-Quellcode:
Var MyValues: Array Of Irgendwas; // Die Werte
    MySortValues: Array Of Pointer; // Indizierung der Werte

// ** Werte Indizieren
SetLength( MySortValues, Length( MyValues ) );
For i := 0 To Length( MyValues ) - 1 Do Begin
  MySortValues[ i ] := @MyValues[ i ];
End;
2. Man benötigt eine Funktion die die Werte untereinander vergleicht, sozusagen eine Relation aufbaut.
Diese Funktion definieren wir uns erstmal gleich als Typ.
Delphi-Quellcode:
Type
  TRelationFunction = Function( Const Value1, Value2: Pointer ): Integer; // <0 = Kleiner, 0 = Gleich, >0 = Größer
eine Funktion um Integer zu vergleichen könnte passend zum definierten Typ so aussehen:
Delphi-Quellcode:
Function IntegerRelation( Const Value1, Value2: Pointer ): Integer;
Begin
  // <0 = Kleiner, 0 = Gleich, >0 = Größer
  Result := Integer( Value1^ ) - Integer( Value2^ );
End;
3. Man benötigt eine allgemeine Funktion zum sortieren, diese könnte so definiert sein:
Delphi-Quellcode:
Type
  TSortFunction = Procedure( Var ToSort: Array Of Pointer; Const RelationFunction: TRelationFunction );
Eine Implementation wäre dann so eine:
Delphi-Quellcode:
Procedure SimpleBubblesort( Var ToSort: Array Of Pointer; Const RelationFunction: TRelationFunction );
Var Len: Integer;
    i: Integer;
    aChange: Boolean;
    Temp: Pointer;
Begin
  Len := Length( ToSort );
  If Len > 1 Then Begin
    Repeat
      aChange := False;
      For i := 0 To Length( ToSort ) - 2 Do Begin
        If RelationFunction( ToSort[ i ], ToSort[ i + 1 ] ) > 0 Then Begin
          Temp := ToSort[ i ];
          ToSort[ i ] := ToSort[ i + 1 ];
          ToSort[ i + 1 ] := Temp;
          aChange := True;
        End;
      End;
    Until Not aChange;
  End;
End;
Nun kann man viele verschiedene Sortierungen programmieren (TSortFunction's) und mithilfe neuer Relationsmodelle (TRelationFunction's) diese dann ohne wilde Programierung auf verschiedene Typen (Integer, Strings oder Eigene Objecte) verwenden lassen.


Natürlich muss man das Rad nicht neu erfinden, Delphi bietet schon verschiedene Sortierungsfunktionen an, es lohnt sich mal die Function Sort von der Klasse TList (Unit Classes) anzuschauen.

Bye Christian

Edit: Habe mal so eine kleine Konsolen-Anwendung als Beispiel dreingepackt... (nicht schimpfen, ich bin kein Konsolen-Programierer, geht sicher schöner, erfüllt aber seinen Zweck...)

So, damit solltest du alles haben um deine Hausaufgaben meisten zu können...
Angehängte Dateien
Dateityp: dpr sortmydigits_152.dpr (4,7 KB, 9x aufgerufen)
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Sortieren von zahlen-aber wie?

  Alt 6. Okt 2007, 00:50
@Christian (Kedariodakon): Ich glaube, du verwirrst Maja eher, wenn du bei einem Anfänger direkt mit konstanten Pointer-Parametern, arrays, etc. anfängst.

@Maja:
Um dir das sortieren mal anhand einen kleinen Beispiels zu zeigen, hier eine Sortierung von 2 Zahlen:

Ziel: die Variable a soll später den kleineren der beiden Werte aus a und b enthalten.

Delphi-Quellcode:
...
var
  a, b, hilfsvar: Integer;
begin
  //...
  // a und b irgendeinen Wert zuweisen
  //...
  if b < a then // Wenn b kleiner ist müssen die Variablen vertauscht werden
  begin
    hilfsvar := a; // Wert aus a in der Hilfsvariablen zwischenspeichern
    a := b; // Den Wert aus b in a schreiben
    b := hilfsvar; // Den zwischengespeicherten Wert, der ursprünglich in a stand in b schreiben
  end;
Das nun auf drei Variablen zu übertragen sollte eigentlich für nich machbar sein.

Gruß Lars

EDIT:
Zitat von Kedariodakon:
Edit: Habe mal so eine kleine Konsolen-Anwendung als Beispiel dreingepackt... (nicht schimpfen, ich bin kein Konsolen-Programierer, geht sicher schöner, erfüllt aber seinen Zweck...)
Meist ist solch eine Anwendung sogar einfacher und leichter verständlich. Und für die Eingabe von drei Zahlen reicht die Konsole bei weitem aus
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#17

Re: Sortieren von zahlen-aber wie?

  Alt 6. Okt 2007, 11:47
@Kedariodakon: Es ist zwar richtig, was Du schreibst, trägt aber vermutlich eher zur Verwirrung bei. Sie sollte ihre Lösung IMHO zunächst so einfach wie möglich (und damit für sich selbst nachvollziehbar) gestalten, sonst haben wir bald einen 2. taktaky, der immer den 3. Schritt vor dem 1. machen will (das ist jetzt noch nicht einmal böse gegenüber taktaky gemeint).

[edit] Wieso habe ich den Beitrag von Hador nicht gesehen? [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Sortieren von zahlen-aber wie?

  Alt 6. Okt 2007, 12:17
Die Lösung stand ja schon in dem Beitrag über mir, daher dachte ich mal, vertiefst die Sache ein wenig...
Sortieren muss man ja sehr oft, und meist möchte man noch eigene Objecte sortieren und damit hat man schon einen guten Einstigspunkt.

Ich schau bei solchen Sachen gern ein wenig in die Zukunft, sprich, kann ich die Lösung des Problems später für andere Lösungen ebenfalls verwenden?

Als "Anfänger" hat man immer das Problem, dass man nicht weiß wie man was umsetzen soll, weil man einfach gleich das Ziel erreichen möchte, ohne ev. einen kleinen Umweg zu nehmen.
Für sowas empfehle ich ein leeres Blatt Papier und ein Bleistift, da kann man sich solche Sachen schon strukturiert aufmalen.


Bye Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Sortieren von zahlen-aber wie?

  Alt 6. Okt 2007, 14:59
Zitat von Kedariodakon:
Für sowas empfehle ich ein leeres Blatt Papier und ein Bleistift, da kann man sich solche Sachen schon strukturiert aufmalen.
Jo das stimmt. Sowas hilft haüfig

Zitat von Kedariodakon:
Ich schau bei solchen Sachen gern ein wenig in die Zukunft, sprich, kann ich die Lösung des Problems später für andere Lösungen ebenfalls verwenden?
Naja, bei ihm/ihr handelte es sich ja nur um eine Hausaufgabe und ehrlich gesagt, hätte dein Ansatz vermutlich maximal zwei ehemalige Klassenkameraden meines Informatikkurses am ende der 13 verstanden. Sprich, in der Schuöe lehrnt man meist nicht allzu viel über Pointer etc. (Bei uns konnte man froh sein, wenn die meisten ne einfache Klassendefinition hinbekommen haben)
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#20

Re: Sortieren von zahlen-aber wie?

  Alt 6. Okt 2007, 15:04
Statt Papier und Bleistift kann man auch StruktEd benutzen (leider immer noch 16 Bit). Für Struktogramme (ich persönlich hab es nicht so mit PAPs) ist das ein super Programm, auch wenn es sehr altbacken aussieht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz