AGB  ·  Datenschutz  ·  Impressum  







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

Sortieren mit direktem Auswahlort

Offene Frage von "Sir Rufo"
Ein Thema von rebellxsky · begonnen am 6. Dez 2014 · letzter Beitrag vom 7. Dez 2014
Antwort Antwort
Seite 1 von 2  1 2      
Dejan Vu
(Gast)

n/a Beiträge
 
#1

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 09:33
Aber dafür muss ja mit jedem betätigen des Buttons das Array um eins vergrößert und dann noch die zahl hinzugefügt werden.
Und an dieser Stelle komme ich nicht weiter.

Und dann sollen die zahlen noch sortiert werden...
...das...Trifft es vielleicht noch eher...
Delphi-Quellcode:
procedure austauschsort (var a: array of Word);
...
Also irgendwie... Glaub nich (Antwort passt nicht so richtig zur Frage). Bezüglich der o.g. Frage wäre eher folgender Schnippsel hilfreicher:
Delphi-Quellcode:
var
  myList : TList<integer>;
  myArray : Array of Integer;

begin
  myList := TList<integer>.Create;
  setLength(myArray,0);

// Anfügen eines Wertes
// 1. An eine TList<int>
myList.Add(Value);

// 2. An ein Array
  SetLength(myArray, Length(myArray) + 1);
  myArray [Length(myArray)] := Value;
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#2

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 11:38
Morgens!

Zitat:
Also irgendwie... Glaub nich (Antwort passt nicht so richtig zur Frage).
Lieber Dejan Vu

Die Aufgabenstellung umfasst doch die Frage nach einem bestimmten Algorithmus: Sortieren mit direktem Auswahlort sprich: Sortierung durch direkte Auswahl...
Meine Programmbeispiele beantworten die Frage nach dem gesuchten Algorithmus definitiv... Ein anderes Programmbeispiel mit umfassender Beschreibung findet man (sogar in Delphi geschrieben) unter Wikipedia.
Dazu muss man dann noch EINE seiner Fragen berücksichtigen:
Zitat:
Aber wie sucht man denn die kleinste Zahl im unsortierten Feld heraus???
Hmmm... Da passt meine Antwort doch auch oder?

Naja, ich gebe zu, nicht all seine Fragen werden von mir beantwortet...
Aber ich glaube darum sollte es hier auch gar nicht gehen.

Ich denke, an dieser Stelle müsste der junge Padawan noch mal zum Zuge kommen und vielleicht erklären, was genau die Aufgabenstellung an IHN ist.

Mir stellt sich nämlich die Frage, ob es eine genaue Definition zur Lösung einer gestellten Aufgabe gibt, oder ob er vielleicht nur das gesucht Sortierverfahren, bzw. den Algorithmus, in Delphi umzusetzen hat und es ihm dabei frei gestellt ist, wie er ein veranschaulichendes Programm schreibt; nämlich mit dem benannten Button (auf den bisher noch keiner von uns genauer eingegangen ist) und einem dynamischen Array.
Es stellt sich nämlich hieraus unweigerlich die Frage, wird von einer statischen Werte-Menge wie z.B. Lottozahlen ausgegangen oder eine variable Werte-Menge wie z.B. aus sich veränderten Messergebnissen...?

Also: Ein Appell an den Verfasser dieses Themas: Schreib doch mal wieder.
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 11:44
Hmmm... Da passt meine Antwort doch auch oder?
Stimmt ja, nur so unmittelbar nach der Frage, wie man Zahlen in ein Array stopft, fand ich deine Antwort halt lustig.

Stell Dir vor, jemand will von Hamburg nach Berlin mit dem Auto, und zwar in die Skeuderitzer Str. 28. Er fragt, wo der Rückwärtsgang ist, weil er ausparken muss und Du gibst im Tipps, wie man in die Skeuderizter Str. einbiegt (weil da ne Baustelle ist). Klar, ohne deinen Tipp kommt er nicht an, aber er muss doch erst mal losfahren

Komm schon, die Sonne scheint (jedenfalls hier)

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#4

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 12:19
Naja, wenn der Autofahrer nicht mal weiß, wo der Rückwärtsgang ist, sollte er sich vielleicht mit einem öffentlichen Verkehrsmittel anfreunden. Vielleicht hat er ja noch gar keinen Führerschein. Mit Bus oder Bahn käme er aber wahrscheinlich schon mal ans Ziel.

*grins*

Ich habe so das Gefühl, als wenn der junge Verfasser dieses Themas auch noch keine Plan hat, wo er die Gänge findet.

Aber wir können ihm ja Stück für Stück weiter helfen.

Dabei ist es dann auch sehr schön, wenn jemand noch was zu schmunzeln hat.
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.
  Mit Zitat antworten Zitat
rebellxsky

Registriert seit: 6. Dez 2014
6 Beiträge
 
#5

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 13:15
Erstmal möchte ich mich für die Antworten bedanken.
Trotzdem habe ich noch ein paar Fragen:
1. Um die Zahlen in das Array (sort) einzufügen habe ich das so gemacht:
Delphi-Quellcode:
zahl:= strtoint(edteingabe.caption);
 for a:= min + 1 to bis do
       begin
            sort[a]:= zahl;
       end;
Delphi-Quellcode:
bis := High(sort);
 min := low (sort);
Frage: Funktioniert das so?

2. Um die Zahlen zu sortieren:
Delphi-Quellcode:
For i:= 1 to N-1 Do
   Begin
     min:= i;
     For j:= i+1 To N Do
       If (sort[j] < sort[min]) Then
       min:= j;
bis dahin bin ich gekommen(vgl.http://www.delphipraxis.net/281-tuto...hmen-i-ii.html)
Dort steht nun aber die Werte i und min müssen getauscht werden (Dreieckstausch?). Aber wieso und wie sieht das dann aus?
Und wie kann man dann das sortierte Array auf ein Label ausgeben???

Ich bedanke mich schonmal für alle Antworten.
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#6

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 13:35
Also:
Zitat:
1. Um die Zahlen in das Array (sort) einzufügen habe ich das so gemacht:



Delphi-Quellcode:

zahl:= strtoint(edteingabe.caption);
for a:= min + 1 to bis do
begin
sort[a]:= zahl;
end;
Leider ist nicht genau zu erkennen, wie die chronologische Abfolge deines Quellcodes ist.
Sei mal so nett und poste ihn mal vollständiger...
Im ersten Moment sieht es nämlich so aus, als würde dein Array nach dem Buttonclick immer mit dem jeweiligen Caption Wert gefüllt werden können: d.H. die Felder des Arrays hätten dann alle den selben Wert, wie er nach dem letzten Buttonclick übergeben würde...

Zitat:
Dort steht nun aber die Werte i und min müssen getauscht werden (Dreieckstausch?). Aber wieso und wie sieht das dann aus?
Keine Ahnung... wie du das meinst?

Zitat:
Und wie kann man dann das sortierte Array auf ein Label ausgeben???
Du könntest dein Array mit einer For-Schleife durchlaufen und den jeweiligen Wert nach Umwandlung in ein String (IntToStr(STRING)) + einem Trenner wie einer Leerstelle, Bindestrich oder was weiß ich deinem Label anfügen:

Delphi-Quellcode:
Label1.Caption := '';
For I := 0 To Length(Array)-1 do
  begin
    Label1.Caption := Label1.Caption + IntToStr(Array[i]) + ' ';
  end;
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.

Geändert von humbuck ( 7. Dez 2014 um 13:37 Uhr) Grund: fehler
  Mit Zitat antworten Zitat
rebellxsky

Registriert seit: 6. Dez 2014
6 Beiträge
 
#7

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 13:49
Also das mit dem sortieren klappt erstmal soweit. Denke ich. Siehe hier:
Delphi-Quellcode:
procedure TForm1.btnsortClick(Sender: TObject);
begin
   For i:= 1 to 10-1 Do
   Begin
     min:= i;
     For j:= i+1 To 10 Do
       If (sort[j] < sort[min]) Then
       begin
         h :=sort[j] ;
         sort[j] :=sort[min];
         sort[min]:=h ;
       end;
   end;
lblsort.caption := '';
   For i := 0 To Length(sort) do
     begin
       lblsort.caption := lblsort.caption + IntToStr(sort[i]) + ' ';
     end;
end;
Aber das Einfügen geht wirklich nicht.
Hier mal alles von Implementation an:

Delphi-Quellcode:
implementation

{$R *.lfm}

{ TForm1 }
var sort : array[1..10]of integer;
    zahl, bis, i, a, j, h, min : integer ;
procedure TForm1.FormCreate(Sender: TObject);
begin
 bis := High(sort);
 min := low (sort);
end;

procedure TForm1.btnhinzuClick(Sender: TObject);
begin
 zahl:= strtoint(edteingabe.caption);
 for a:= min + 1 to bis do
       begin
            sort[a]:= zahl;
       end;
 lblunsort.caption := inttostr(sort[1]) + ' hinzugefügt';


end;
Zitat:
Im ersten Moment sieht es nämlich so aus, als würde dein Array nach dem Buttonclick immer mit dem jeweiligen Caption Wert gefüllt werden können: d.H. die Felder des Arrays hätten dann alle den selben Wert, wie er nach dem letzten Buttonclick übergeben würde...
also das array hat nach dem sortieren die ersten beiden Werte = 0; Und die letzten (8) = so groß wie der zuletzt eingegebene Wert.

Ich weiß, das kann eigentlich nicht so schwer sein. Aber ich kenne mich damit nicht aus...
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#8

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 14:16
Zitat:
var sort : array[1..10]of integer;
Das sagt mir ja schon mal, es handelt sich bei dir um statisches Array mit 10 Werten... (Ein Array fängt übrigens bei 0 : Array[0..9])

Auf jeden Fall macht es das schon insgesamt einfacher.

Du musst jetzt nur systematisch vorgehen:

1) Der erste Wert soll nach dem Button-Click an deine Array übergeben werden, natürlich dann auch gleich einsortiert werden.
Das Problem ist, dass, wenn du z.B. drei Mal per Button-Click jeweils unterschiedliche Werte an deine Array übergibst, bekommst du folgendes Ergebnis (Allerdings nicht mit deiner Routine...):

0 0 0 0 0 0 0 14 47 81

Liegt da dran, dass du ja immer noch 7 unbelegte Werte im Array hast.

2) Voraussetzung dafür, dass du überhaupt einen Wert per Button-Click an dein Array gesichert übergeben kannst ist:
a) verhindern, dass du über 10 Werte hinausschießt
b) dass du mithilfe eines für a) notwendigen Zählers ERST alle Werte mit jedem Button-Click an dein Array übergibst und danach oder zwischendurch per zweiten Schalter dein Array sortierst und dann zur Ausgabe an ein Label übergibst.
Sollten dich dann möglicherweise die '0'-Werte bei der Ausgabe stören, kannst du diese ja herausfiltern (alles außer 0 darf dem Label angefügt werden)...
3) Vielleicht solltest du bei der Eingabemöglichkeit für einzelne Werte noch verhindern, dass im TEdit was anderes, außer Ganzahlen eingegeben werden kann, da dein Array ja OF INTEGER ist...
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#9

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 14:24
Noch ein Nachtrag:

Wenn du z.B. drei Werte übergeben hast, dann mal 'kurz' sortierst fehlt dir plötzlich die Position, wo du weitere in dein Array füllen kannst, da dann deine Zählerposition hinfällig ist.

Daher wäre es das Einfachste, erst alle Werte zu übergeben und danach zu sortieren.

Alles Andere macht dein Projekt deutlich komplexer... außer du arbeitest tatsächlich mit einem ZWEITEN Array, dass dann nur ein sortiertes Ergebnis enthält...
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.

Geändert von humbuck ( 7. Dez 2014 um 14:27 Uhr) Grund: fehler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 14:25
Ein dynamisches Array var Foo : array of integer; fängt bei 0 an.
Ein statisches Array var Foo : array[42..45] of integer fängt bei der angegebenen unteren Grenze an (hier 42)!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz