![]() |
AW: funktion erstellen... weiß nicht weiter
was ich gerade nicht verstehe ist, dass mein ShellSort nicht funktioniert obwohl ich es genau nach beispiel erstellt habe....
Delphi-Quellcode:
also er öfnnet es zwar, ich kann auch was in das memo reinschreiben aber er sortiert einfach nicht.
procedure TForm1.ShellSort(var A: array of String);
var i, j, k, B: Integer; lBuffer: String; begin B := high(A); i := Length(A) div 2; While i > 0 do begin for k := 0 to B -i do begin j := k; while (j >= 0) and (A[j] > A[j +i]) do begin lBuffer := A[j]; A[j] := A[j +i]; A[j +i] := lBuffer; end; begin if j > i then begin Dec(j, i) end else j := 0; end; end; begin i := i div 2; Break; end; end; end; und er muss sich ja das zu sortierende noch aus dem Memo holen.... aber ich weiß nicht wie ichs einbauen soll |
AW: funktion erstellen... weiß nicht weiter
will mir hier keiner helfen?:(
|
AW: funktion erstellen... weiß nicht weiter
Wieso Array of string? Nimm TStrings stattdessen, dann kannst Du Memo1.Lines direkt übergeben.
|
AW: funktion erstellen... weiß nicht weiter
Zitat:
|
AW: funktion erstellen... weiß nicht weiter
Dann musst Du eben ein Array of string deklarieren, die Zeilen des Memos da reinkopieren, sortieren und anschließend zurückkopieren.
|
AW: funktion erstellen... weiß nicht weiter
:shock: oha.. na dann.... mach ich mich mal an die abeit wenn ich das hinbekomme
|
AW: funktion erstellen... weiß nicht weiter
Vielleicht solltest Du lieber vorher noch einmal nachfragen ;)
|
AW: funktion erstellen... weiß nicht weiter
Immer noch am sortieren, Kumpel?
Vielleicht bringt es dich weiter, wenn du siehst, was du programmiert hast:
Delphi-Quellcode:
var
i, j, k, B: Integer; lBuffer: String; begin B := high(A); i := Length(A) div 2; While i > 0 do // Begin i begin for k := 0 to B -i do // Begin K begin j := k; while (j >= 0) and (A[j] > A[j +i]) do // Begin J begin lBuffer := A[j]; A[j] := A[j +i]; A[j +i] := lBuffer; end; // Ende J begin // Begin von Nix if j > i then begin Dec(j, i) end else j := 0; end; // Ende von Nix end; // Ende von K begin // Begin von Nix i := i div 2; Break; // Abbruch von I end; // Ende von Nix end; // Ende i end; |
AW: funktion erstellen... weiß nicht weiter
Titel des Threads:
Zitat:
|
AW: funktion erstellen... weiß nicht weiter
So langsam sollte man eh entweder den Thread-Titel ändern (es geht ja um Sortier-Algorithmen) oder einen neuen aufmachen.
|
AW: funktion erstellen... weiß nicht weiter
ihr habt recht he he... immerhin ist das thema funktionen vorbei.....
Zitat:
wie änder ich hier denn den namen? oder geht das gar nicht |
AW: funktion erstellen... weiß nicht weiter
Das geht nur innerhalb von 24 Stunden. Aber wenn Du einen Mod lieb darum bittest ("Report"-Button), übernimmt er das bestimmt gerne für Dich ;)
|
AW: funktion erstellen... weiß nicht weiter
ich tu mein bestes^^
|
AW: Sortieralgorithmen
Auch wenn es hier nun keine direkte Hilfe ist. Ich finde die Aufgabenstellung bzw die Anforderungen sind didaktisch mindestens fragwürdig.
Als Programmierer geht man (ich) in der Regel vereinfacht so vor: 1. Problemerfassung (Was wird verlangt?) 2. Welche Eingaben benötige ich/sind vorgegeben (Hier TStrings bzw Memo.lines) 3. Wie soll das Resultat präsentiert werden? (Hier TStrings, bzw Memo.lines) 4. Wie gelange ich von der Eingabe zum Resultat (Algo -> Hier Shellsort) Nun wenn ich hier diese obigen Schritte durchgehe, wird ein (durchschnittlicher) Programmierer wohl den kürzesten und effizientesten Weg wählen. Input und Output sind vom Typ TStrings, weshalb sollte ich da einen Umweg über Array of String nehmen? Für das Erreichen des Zieles (Schreiben eines Sortieralgorithmus) ist das absolut unerheblich und lenkt nur von der eigentlichen Aufgabe ab. |
AW: Sortieralgorithmen
Zitat:
ich bin ja erst seit zwei wochen in der ausbildung und muss mich erst einmal an das ganze gewöhnen... außerdem sind das alles vorgaben von meinem ausbilder um mir das ganze etwas einfacher zu machen... sprich unnötige funktionen erstellen und so weiter für den reinen lerneffekt |
AW: Sortieralgorithmen
Mein Beitrag war auch keineswegs als Vorwurf an Dich gemeint, sondern richtete sich nur an Deinen Ausbildner.
|
AW: Sortieralgorithmen
Didaktik scheint aber den meisten (nicht-akademischen) IT-Wissensvermittlern abzugehen. Im Hochschulumfeld fehlt dann aber wiederum gerne mal die Praxisrelevanz :mrgreen:
|
AW: Sortieralgorithmen
@bernerbear
hab ich auch nicht als eine aufgefasst.... naja selber ausprobieren find ich persönlich besser. man sieht seine fehler und lernt daraus. |
AW: Sortieralgorithmen
habe jetzt in meinem button eingefügt, dass wenn ein leerstring vorhanden ist, die zeile gelöscht wird. aber irgendwie funktioniert das nicht ganz.... wenn er es sortiert hat fehlt ein wort und die obere zeile ist leer....
ich habe mir jetzt gedacht, dass ich die zeile um einen verschiebe, wenn eine zeile gelöscht wurde. also entweder lasse ich ihn das ganze noch einmal prüfen ab der gelöschten zeile oder mache es so wie ich es probiert habe....
Delphi-Quellcode:
naja es klappt aber irgendwie nicht.
procedure TForm1.Button1Click(Sender: TObject);
var lArray: array of String; i, j : Integer; A, B : String; begin SetLength(lArray, Memo1.Lines.Count); for i := 0 to Memo1.Lines.Count -1 do begin //sicherstellen, dass der String min. ein Zeichen hat. if Memo1.Lines.Strings[i] = '' then begin Memo1.Lines.Delete(i); dec(j); //klappt trotzdem nicht end else begin lArray[i] := Memo1.Lines.Strings[i][1]; end; end; //Array sortieren. ShellSort(lArray); //TODO: Array zurück ins Memo kopieren. Memo1.Lines.Clear; Memo1.Lines.Add(''); for i := 0 to Length(lArray) - 1 do begin Memo1.Lines.Add(lArray[i]); end; end; |
AW: Sortieralgorithmen
Das mußt du mit einer while Schleife machen, da sich Memo1.Lines.Count ändert, wenn eine Zeile gelöscht wurde.
|
AW: Sortieralgorithmen
ganz genau das hab ich gesucht... danke schöööön :thumb: ich probiere es gleich ma aus....
ist nur noch die frage wie und wo ich sie einsetze aber das versuch ich alleine herauszufinden.... das kann ja nicht all zu schwer sein |
AW: Sortieralgorithmen
werde nicht ganz schlau daraus.... vielleicht ein kleiner hinweis wo ich den ungefähr hinsetzen muss?
|
AW: Sortieralgorithmen
Pseudocode
Delphi-Quellcode:
I:= 0;
while I <= Count-1 do begin if Soll Zeile I Löschen then begin Lösche Zeile I Dec(I); end; Inc(I); end; array [0..count-1] = Memo.Lines[0..count-1] sort array Memo.Lines.BeginUpdate Memo.Lines[0..count-1] = array [0..count-1] Memo.Lines.EndUpdate |
AW: Sortieralgorithmen
Mit einer absteigenden For-Schleife löscht man etwas einfacher.
Delphi-Quellcode:
for i := Memo1.Lines.Count - 1 downto 0 do
if Memo1.Lines[i] = '' then Memo1.Lines.Delete(i); |
AW: Sortieralgorithmen
Deddyh.... das war schon das richtige nur jetzt lässt er in den ersten beiden zeilen einen leerstring... die sollen ja auch noch weg. zu mindest bleiben jetzt alle werte da
|
AW: Sortieralgorithmen
Länge des Array aktualisiern nicht vergessen.
SetLength (Array, Memo.Lines.count); |
AW: Sortieralgorithmen
wenn ich das mache sind alle werte weg
|
AW: Sortieralgorithmen
wenn ich SetLength(lArray, Memo1.Lines.Count) mit eingebe dann löscht er werte und behält die leerzeile.... er soll das doch umgekehrt machen!
och manno.... alles doof heute:roll: |
AW: Sortieralgorithmen
Zitat:
- "klappt trotzdem nicht" ist keine Fehlerbeschreibung! - und wegen der Schleife, rate ich dir dringend mal die Indexprüfung zu aktivieren, in deinen Projektoptionen. |
AW: Sortieralgorithmen
Dann tust du es an der falschen stelle..
Delphi-Quellcode:
I:= 0;
while I <= Count-1 do begin if Soll Zeile I Löschen then begin Lösche Zeile I Dec(I); end; Inc(I); end; -> SetLength (Array, Memo.Lines.count); array [0..count-1] = Memo.Lines[0..count-1] sort array Memo.Lines.BeginUpdate Memo.Lines[0..count-1] = array [0..count-1] Memo.Lines.EndUpdate |
AW: Sortieralgorithmen
Ja, ja das kommt davon, wenn man keine sauberen Funktionen schreibt!
Hier kommt mal eine ausgereifte Funktion:
Delphi-Quellcode:
Und der Aufruf wäre dann
{**************************************************************************
* NAME: RemoveEmptyStrings * DESC: lösche leere Zeilen aus TStrings Objekt * PARAMS: [-] * RESULT: Anzahl der Löschungen *************************************************************************} function RemoveEmptyStrings(list : TStrings):Integer; var i : Integer; begin Assert(Assigned(list)); Result := 0; for i := list.Count-1 downto 0 do begin if list[i] = '' then begin list.Delete(i); Inc(Result); end; end; end;
Delphi-Quellcode:
RemoveEmptyStrings(Memo1.Lines);
|
AW: Sortieralgorithmen
unsauber mag vielleicht ja sein.... entschuldigung dass ich nicht als programmiererin geboren bin sondern jetzt meine zweite woche in der ausbildung verbringe
soo und jetzt an die lieben hier^^ bin jetzt so weit gekommen.... es funktioniert so weit auch gut nur muss ich das array rückwärts befüllen damit auch die letzte leerzeile die entsteht verschwindet.... hat dazu jemand einen kleinen tipp?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var lArray: array of String; i : Integer; A : String; begin SetLength(lArray, Memo1.Lines.Count); for i := Memo1.Lines.Count -1 downto 0 do begin //sicherstellen, dass der String min. ein Zeichen hat. if Memo1.Lines.Strings[i] = '' then begin Memo1.Lines.Delete(i); SetLength(lArray, Length(lArray) -1); end else begin lArray[i] := Memo1.Lines.Strings[i][1]; //Array rückwärts befüllen end; end; //Array sortieren. ShellSort(lArray); //TODO: Array zurück ins Memo kopieren. Memo1.Lines.Clear; for i := 0 to Length(lArray) - 1 do begin Memo1.Lines.Add(lArray[i]); end; end; |
AW: Sortieralgorithmen
Meinst Du nicht, dass es sinnvoller wäre, zuerst die Leerzeilen aus dem Memo zu löschen und dann erst das Array entsprechend zu dimensionieren?
|
AW: Sortieralgorithmen
Zitat:
Trotzdem kann du die Funktion so nehmen wie sie ist (natürlich nicht wenn deine Programmierleistung von einem Lehrer benotet wird). |
AW: Sortieralgorithmen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 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