AW: Programm Hilfe
Das bedeutet also, dass Dein Vergleich falsch ist.
|
AW: Programm Hilfe
Mit "oder so" können wir nichts anfangen. :warn:
Eine ordentliche Fehlermeldung wäre schon angebracht. Zitat:
Und mit einer ordentlichen Codeausrichtung sagt es eigentlich auch schon alles. |
AW: Programm Hilfe
Ich empfehle folgende Lektüre: http://de.wikipedia.org/wiki/Bubblesort. Da ist sogar eine kleine Animation zum Nachvollziehen dabei. Alternativ gibt es auch in der DP entsprechende Codes/Tutorials zum Thema Sortieren.
|
AW: Programm Hilfe
Hab‘s mal durchgespielt. Das wird so nicht funktionieren, da du die Differenz in einer repeat until Schleife immer neu berechnen und sortieren mußt und diese auch mal nur eine dreistellige Zahl sein kann. Die mod div Variante war da eleganter (speichert z.B. 483 als 0483) oder du überprüfst die Länge von Differenz selbst und füllst entsprechend mit Nullen auf.
|
AW: Programm Hilfe
ich versteh eins nicht wir wissen ja das ist eine 4stellige zahl ist. Wieso also repeat machen wir das doch mit der for schleife
|
AW: Programm Hilfe
Hast du doch in #1 geschrieben, so oft wiederholen bis das Ergebnis der vorletzten Iteration dem Ergebnis der letzten Iteration entsprich (also 6174).
Delphi-Quellcode:
function GetFirstKaprekarsConstant(const Value: int64): int64;
var T, MinValue, MaxValue, PrevResult: int64; Number: array [1..10] of int64; I, J, N, Count: integer; begin Result:= 0; N:= Length(IntToStr(Value)); if (N in [3, 4, 6, 8, 9, 10]) and (Value > 0) then begin Result:= Value; Count:= 0; repeat PrevResult:= Result; for I:= 1 to N do begin *** Number[I] berechnen; end; *** Number sortieren *** MinValue und MaxValue berechnen Result:= MaxValue-MinValue; until (Result = PrevResult) or (Count > 1000); if Count > 1000 then Result:= 0; // Kein Ergebnis gefunden end; end; procedure TForm1.Button3Click(Sender: TObject); var Value: int64; begin Edit2.Text:= ''; if TryStrToInt64(Trim(Edit1.Text), Value) then Edit2.Text:= IntToStr(GetFirstKaprekarsConstant(Value)); end; |
AW: Programm Hilfe
Nein, nicht bis zum letzten, sondern nur einmal also. Delphi
Also ich muss ein Programm schreiben. Das Programm soll, 2 Edit Fenster 1 Button Also wenn man eine 4 stellige Zahl im edit fenster eingegeben hat und dann auf den Button klickt soll er folgendes machen, also er soll z.b 4123 einmal nach der größe und einmal nach der kleinsten ordnen Größte: 4321 Kleinste: 1234 Und von den beiden die Differenz bilden. 4321-1234=3087 Und diese Zahl soll er im 2.Edit Fenster ausgeben. edit: sorry |
AW: Programm Hilfe
Das hättest Du aber auch sagen können, dass die Aufgabenstellung mittlerweile vereinfacht wurde.
[edit] Trotzdem bleibe ich dabei: Das mit String-Operationen lösen zu wollen ist in meinen Augen suboptimal. [/edit] [edit2] Fassen wir das noch einmal zusammen: - 4-stellige Zahl wird eingegeben (als String, klar) - dieser String/diese Zahl muss nun in 4 Einzelteile gesplittet werden - nun werden die Teile sortiert (aufsteigend für Minimum, absteigend für Maximum) - anschließend wird das Minimum vom Maximum subtrahiert und dieses Ergebnis ausgegeben Das sollte sich doch mit den geposteten Hilfestellungen bewerkstelligen lassen. P.S.: Wenn man das Maximum oder Minimum bereits ermittelt hat, kann man das ja auch "umdrehen", um das Gegenteil zu ermitteln, ohne neu sortieren zu müssen. [/edit2] |
AW: Programm Hilfe
ER zerlegt die zahl.
Also wie soll ich fortsetzen, das mit dem ordnen. Bubblesort. Ich weiß das es eine 4Stellige zahl ist. Also d.h. for i:= 1 to 4 do
Delphi-Quellcode:
edit so?
var
Form1: TForm1; i,j,zahl1,zahl2,differenz:integer; park,spielplatz,zahltext,zahltexteins,zahltextzwei:string; doppelt:boolean; a,b:array[1..4] of string; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin zahltext:=edit1.text; for i:=1 to 4 do begin //zerlegung a[i]:=copy(zahltext,i,1); b[i]:=copy(zahltext,i,1); end; repeat for i:=1 to 4-1 do for j:=i+1 to 4 do if a[i] > a[i+1] then begin park:=a[i];a[i]:=a[i+1];a[i+1]:=park; until park=i>1 end; |
AW: Programm Hilfe
Nein, da Du bei einem Wert von i = 4 hinter dem Array liest. Außerdem brauchst Du mehrere Durchläufe, einer allein setzt ja nur den größten Wert ans Ende. Schau Dir doch den Wikipedia-Artikel noch einmal an.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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