Delphi-PRAXiS
Seite 6 von 17   « Erste     456 7816     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Programm Hilfe (https://www.delphipraxis.net/163840-programm-hilfe.html)

DeddyH 23. Okt 2011 11:21

AW: Programm Hilfe
 
Das bedeutet also, dass Dein Vergleich falsch ist.

himitsu 23. Okt 2011 11:25

AW: Programm Hilfe
 
Mit "oder so" können wir nichts anfangen. :warn:

Eine ordentliche Fehlermeldung wäre schon angebracht.


Zitat:

Das bedeutet also, dass Dein Vergleich falsch ist.
Man könnte ja mal im Debugger das Ganze Schritt für Schritt durchgehen.
Und mit einer ordentlichen Codeausrichtung sagt es eigentlich auch schon alles.

DeddyH 23. Okt 2011 11:29

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.

Bjoerk 23. Okt 2011 11:53

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.

boxer123 23. Okt 2011 11:55

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

Bjoerk 23. Okt 2011 12:15

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;

boxer123 23. Okt 2011 12:19

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

DeddyH 23. Okt 2011 12:21

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]

boxer123 23. Okt 2011 13:31

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:
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;
edit so?

DeddyH 23. Okt 2011 13:37

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.
Seite 6 von 17   « Erste     456 7816     Letzte »    

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