Delphi-PRAXiS
Seite 5 von 17   « Erste     345 6715     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)

p80286 20. Okt 2011 10:07

AW: Programm Hilfe
 
Ich geb zu das es nicht schön ist, aber es tut's:
Delphi-Quellcode:
var
  i : integer;
  liste: tstringlist;
  zahl1,zahl2,tmpzahl : string;
  zahlgros,
  zahlklein,
  differenz,
  altdifferenz : integer;
  cnt : integer;
begin
  liste:=tstringlist.Create;
  tmpzahl:=edit1.Text;
  differenz:=0;
  cnt:=0;
  repeat
    altdifferenz:=differenz;
    (*                            ** )
    liste.clear;
    ( * ************* *)
    for i:=1 to length(tmpzahl) do
      dummy1.add(tmpzahl[i]);
    dummy1.Sort;
    zahl1:='';
    zahl2:='';
    for i:=0 to liste.Count-1 do begin
      zahl1:=zahl1+dummy1[i];
      zahl2:=dummy1[i]+zahl2;
    end;
    zahlgros:=strtoint(zahl2);
    zahlklein:=strtoint(zahl1);
    differenz:=zahlgros-zahlklein;
    memo1.Lines.Add(tmpzahl+' / '+zahl2+'-'+zahl1+' = '+inttostr(differenz));
    tmpzahl:=inttostr(differenz);
    inc(cnt);
  until (altdifferenz=differenz) or (cnt >20);
  liste.Free;
end;
Das geht ganz gut ohne mod und div und kann ach mit 2,3,4,5,... stelligen Zahlen umgehen.

Gruß
K-H

Amateurprofi 20. Okt 2011 12:30

AW: Programm Hilfe
 
@p80286:
Zitat:

Das geht ganz gut ohne mod und div und kann ach mit 2,3,4,5,... stelligen Zahlen umgehen.
Hast du das denn wirklich mal probiert.
So, wie der Code in deinem Beitrag steht, wird er nicht funktionieren.
Warum?: Weil du auf eine StringList "dummy1" zugreifst, die nicht deklariert ist.

Ich hab das ganze auch mal durchgespielt und bemerkt, daß bei allen 4-stelligen Zahlen 6174 als sich wiederholende Differenz herauskommt.
Also hab ich mal Tante Google bemüht und bin auf diesen Link gestoßen.
http://en.wikipedia.org/wiki/6174_(number)

So sieht mein Code aus:
(das in meinem Code angesprochene "meResult" ist ein TMemo)

Delphi-Quellcode:
PROCEDURE TForm1.Work(ss:string);
var r,s,t:string; len,i,j,res,old:integer; h:char;
begin
   res:=-1;
   len:=Length(ss);
   SetLength(t,len);
   repeat
      old:=res;
      s:=ss;
      // s sortieren
      for i:=1 to len-1 do
         for j:=i+1 to len do
            if s[i]>s[j] then begin
               h:=s[i];
               s[i]:=s[j];
               s[j]:=h;
            end;
      // s reverse in t stellen
      for i:=1 to len do t[len+1-i]:=s[i];
      res:=StrToInt(t)-StrToInt(s);
      // res als String mit führenden Nullen in r
      Str(res:len,r);
      for i:=1 to len do if r[i]=' ' then r[i]:='0' else break;
      meResult.Lines.Add(ss+' : '+t+' - '+s+' = '+r);
      ss:=r;
   until (res=old) or (meResult.lines.count>30);
end;

p80286 20. Okt 2011 13:02

AW: Programm Hilfe
 
Jo da hast Du recht,
mit copy und paste bekommst Du den nicht zum laufen.
Aber jeder der ein wenig mit Pascal umgehen kann findet den Fehler sofort.

Gruß
K-H

Edith:
interessant, der Link, wenn man's mit 5stelligen Zahlen macht hast Du eine Endlosschleife die sich um drei Werte bewegt.

boxer123 20. Okt 2011 13:56

AW: Programm Hilfe
 
Closed

DeddyH 20. Okt 2011 14:00

AW: Programm Hilfe
 
Mach doch mal einen Schreibtischtest.

[edit] Kleiner Tipp: man kann ja auch von hinten nach vorn kopieren, wenn man schon unbedingt Strings verwenden will. [/edit]

boxer123 23. Okt 2011 11:00

AW: Programm Hilfe
 
Was ergibt hier kein sinn?

Delphi-Quellcode:
var
  Form1: TForm1;
  i,j,zahl1,zahl2,differenz:integer;
  park,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;
// aufsteigend sortieren
for j:=1 to 4 do
if a[i]>=a[j] then begin
park:=a[i];a[i]:=a[j];a[j]:=park;
zahltexteins:=zahltext;// was in zahltext steht in zahltexteins speichern
end;
// absteigend sortieren
if b[i]<=b[j] then begin
park:=b[i];b[i]:=b[j];b[j]:=park;
zahltextzwei:=zahltext; // was in zahltext steht in zahltextzwei speichern
end;
differenz:=Strtoint(zahltexteins)-Strtoint(zahltextzwei);// differenz der beiden zahlen
edit2.text:=inttostr(differenz);// ausgabe
end;


end.

himitsu 23. Okt 2011 11:09

AW: Programm Hilfe
 
Was ist für dich der Sinn?

Bzw., wo ist das Problem?




Schonmal etwas von Codeformatierung/Codeausrichtung gehört?

Dabei würde dir auffallen, daß dir absteigende sortierung nicht sortieren kann, da sie sich nicht innerhalb der Schleife befindet.

Und wozu
Delphi-Quellcode:
zahltexteins:=zahltext
und das Andere innerhalb der Schleife?
Es verändert sich darin doch garnicht.



Was machst du mit den Werten in a und b? (nach der Sortierung)



Und warum die globalen Variablen, wo sie doch nur lokal (innerhalb der Prozedur) gnutzt werden

boxer123 23. Okt 2011 11:11

AW: Programm Hilfe
 
Ich denke es gibt kein problem in dem quelltext, aber wenn ich starte und eine 4stellige zahl im edit fenster eingebe, dann kommt project1 fehler oder so.

ich habe es mir so vorgestellt, wenn er was in zahltext drin ist geordnet hat,das soll er in zahltexteins speichern.

DeddyH 23. Okt 2011 11:16

AW: Programm Hilfe
 
Hast Du Dir einmal angeschaut, welchen Wert i nach der ersten Schleife hat?

boxer123 23. Okt 2011 11:19

AW: Programm Hilfe
 
ah ja ihn wurde noch kein wert zugewiesen


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Seite 5 von 17   « Erste     345 6715     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