Entwickler-Ecke

Sonstiges (Delphi) - Problem bei Delphi


boxer123 - Di 18.10.11 16:22
Titel: Problem bei Delphi
Guten Tag erstmal.
Ich soll ein Programm schreiben, also das Programm soll so ausehen. Wenn man das Programm startet und dann eine 4 stellige Zahl eintippt. Und dann auf start button drückt soll er folgenden Algorhytmus durchführen.

6957 /9675-5679=3996
3996 /9963-6399=3564
3564 /6543-3456=3087
3087 /8730-0378=8352
8352 /8532-2358=6174
6174 /7641-1467=6174
der schrägstrich soll kein division sein

Also wie man sieht tippt man die zahl 6957 ein und er soll am ende sagen bis es nicht mehr geht und dann die letzte zahl ausgeben im edit Fenster


Martok - Di 18.10.11 16:27

Hallo und :welcome: in der Entwickler-Ecke!

Ich muss dich gleich mal ermahnen: Ein Problem mit Delphi haben hier fast alle - bitte ändere den Titel des Topics, damit er ein wenig über das eigentliche Thema verrät. Hier der entsprechende Absatz aus den Richtlinien [http://www.entwickler-ecke.de/richtlinien.html]:
1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist. [...]
Einfach unten in deinem ersten Beitrag auf user defined image klicken und den Titel ändern.


Was hast du denn schon, wo gehts nicht weiter? So ganz ohne Informationen können wir dir nicht sinnvoll helfen...

Viele Grüße,
Martok


Horschdware - Di 18.10.11 16:29

Hu... erst einmal sortieren und verstehen was los ist.

Der Benutzer gibt eine vierstellige Zahl ein.
Dann wird sechs mal gerechnet

a/b-c=d


Dabei gilt:
b enthält alle Ziffern von a, der Größe nach absteigend sortiert
c ist b rückwärts
a erhält bei jeder neuen Iteration den Wert von d aus der jeweils vorherigen.

Um das umzusetzen brauchst du:
- Ein Eingabefeld
- Eine Iterationsschleife
- Umwandlung einer Zahl in einen String
- Sortierung von Zeichen innerhalb eines Strings
- Umwandlung eines Strings in eine Zahl

Sollte sich hier alles im Forum finden lassen :-)

Dann nur noch im Baukastenverfahren zusammensetzen


boxer123 - Di 18.10.11 16:33


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var
Form1: TForm1;
zahl:array[1..6of integer;
zahl1:integer;
doppelt:Boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
zahl1:=Strtoint(edit1.text);
cop:=zahl1
repeat
zahl1:=max-min;
until doppelt;
edit1.text:=inttostr(edit1.text);
end;

end.


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


boxer123 - Di 18.10.11 16:35

user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
Hu... erst einmal sortieren und verstehen was los ist.

Der Benutzer gibt eine vierstellige Zahl ein.
Dann wird sechs mal gerechnet

a/b-c=d


Dabei gilt:
b enthält alle Ziffern von a, der Größe nach absteigend sortiert
c ist b rückwärts
a erhält bei jeder neuen Iteration den Wert von d aus der jeweils vorherigen.

Um das umzusetzen brauchst du:
- Ein Eingabefeld
- Eine Iterationsschleife
- Umwandlung einer Zahl in einen String
- Sortierung von Zeichen innerhalb eines Strings
- Umwandlung eines Strings in eine Zahl

Sollte sich hier alles im Forum finden lassen :-)

Dann nur noch im Baukastenverfahren zusammensetzen
er soll nicht unbedingt 6 mal rechnen solange bis es immer die gleiche zahl kommt es ist unterscheidlich


Horschdware - Di 18.10.11 16:40

Ah, ok. Dein Eingangsbeitrag war da ein wenig schwammig.

Es soll also gerechnet werden

>
a = Zn absteigende Ziffern
b = Zn aufsteigende Ziffern
Zn+1 = a - b
< bis Zn = Zn+1


Oh interessant. Das kann man ja so direkt in Code umsetzen ;-p


PS: Ohne das jetzt tiefer analysiert zu haben: Ist denn überhaupt sichergestellt, dass irgedwann immer die gleiche Zahl rauskommt? Wenn nein, sollte man da vielleicht noch einen Zähler mitlaufen lassen, der das Ganze irgendwann einmal abbricht.


boxer123 - Di 18.10.11 16:49

Code; Da kommt Fehler.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var
  Form1: TForm1;
  zahl:array[1..6of integer;
  a,b:integer;
  doppelt:Boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
cop:=zahl1
repeat
Zn+1 = a - b
until Zn = Zn+1
edit1.text:=inttostr(edit1.text);
end;


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Gammatester - Di 18.10.11 16:56

Ein Algorithmus ist normalerweise eine eindeutige Vorschrift. Raten hilft nicht viel:

In 9675 sind die Ziffern nicht sortiert, 9963 und 6399 ist nicht zu einander revers. Das sind keine Tippfehler, da die Differenzen stimmen.

Außerdem wäre zu prüfen, ob das Ganze immer bei einer Fixzahl ankommt.


Horschdware - Di 18.10.11 16:58

Zunächst einmal kann man hier im Forum Code in Delphi Tags

[ delphi ] und [/ delphi] (ohne Leerzeichen) klammern. Das sieht gleich lesbarer aus.

Zum anderen hilft es, wenn man das Problem mit ein paar mehr Worten umschreibt als "Code, Fehler".
Ganze Sätze helfen da ungemein.

Zum Dritten:

user profile iconboxer123 hat folgendes geschrieben Zum zitierten Posting springen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var
  Form1: TForm1;
  zahl:array[1..6of integer;
  a,b:integer;
  doppelt:Boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  a:=strtofloat(edit1.text);
  b:=strtofloat(edit2.text);
  cop:=zahl1        // Was ist cop?
  repeat
    Zn+1 = a - b      
    until Zn = Zn+1


  edit1.text:=inttostr(edit1.text);
end;



"Man kann dieses Verfahren direkt umsetzen" heisst nicht "Kopiere diesen Text und verwende ihn so, denn es ist gültiger Delphi-Quellcode."
So gibt es bei dir beispielsweise keine Variable "Z", auch kein "Zn" oder ähnliches, obwohl du versuchst mit einer solchen zu arbeiten.

edit: Ich sehe gerade den Beitrag von Gammatester. Stimmt! Das mit den gedrehten Zahlen stimmt nicht.
Dann wäre der aller erste Punkt (bevor überhaupt eine Zeile Code geschrieben wird) der, dass klargestellt wird, wie dieser Algorithmus läuft!


boxer123 - Di 18.10.11 17:03

wie heißt der befehl der eine 4stelleige zahl zerhackt


Hobby-Programmierer - Di 18.10.11 17:04

... schau mal in der Hilfe unter 'POS'
- mit Copy kopieren.


Horschdware - Di 18.10.11 17:05

So?
function hackebeil(hack : integer) : integer;
;-)

Spaß beiseite: Es gibt unzählige Möglichkeiten, wie du eine vierstellige Zahl verändern kannst.
Welche der unendlich vielen Möglichkeiten darfs denn nun sein?


boxer123 - Di 18.10.11 17:07

ich dachte der befehl ist cop. Er muss ja die 4stellige zahl zerhacken und dann mit bubblesort ordnen oder. Aber wie heißt der befehl


Hobby-Programmierer - Di 18.10.11 17:10

Was verstehst du unter zerhacken?
Wenn du zerlegen meinst geht das mit Copy. Siehe Delphi-Hilfe


boxer123 - Di 18.10.11 17:11

wo ist die delphi-hilfe


Horschdware - Di 18.10.11 17:13

Ich glaube hier ist eher gemeint, wie man auf die einzelnen Ziffern zugreifen und diese dann sortieren kann.

An sich musst du nur die Zahl in einen String konvertieren und diesen dann zeichenbasiert sortieren. Wie das geht findest du wieder im Forum. Ich glaube aber nicht, dass dir das weiterhelfen wird, da ja bereits dein Beispiel zeigt, dass die Zahlen nicht sortiert sind.

Ach ja: Delphi Hilfe - F1 drücken


Hobby-Programmierer - Di 18.10.11 17:14

Das einfachste ist wenn du in der IDE 'copy' eingibst und F1 drückst.
Oder in der Delphipraxis, die kennst du ja, gibt es die Delphi Referenz.
http://docwiki.embarcadero.com/VCL/de/System.Copy

@Horst
Sorry, habe die anderen Beiträge nicht gelesen und ich dachte soweit wart ihr schon.

@Boxer
-Natürlich erst Zahl konvertieren - Stichwort 'IntToStr'


boxer123 - Di 18.10.11 17:15

Ich verstehe nur Bahnhof. Kann mir keiner den Anfang schreiben.


Horschdware - Di 18.10.11 17:17

user profile iconboxer123 hat folgendes geschrieben Zum zitierten Posting springen:
Kann mir keiner den Anfang schreiben.

Solange du nicht erklärst, wie die Zahlen zustande kommen: Nein!


Btw: http://www.delphipraxis.net/163840-programm-hilfe.html



edit: Ich muss mal wieder Erbsenzähler spielen...
Boxer, kannst du bitte ein kleines Bisschen auf Rechtschreibung, Satzbau und Zeichensetzung achten?
Fragen beendet man mit einem "?". Sätze, bzw. Teilsätze trennt man mit "." und ",". So etwas macht Beiträge gleich lesbarer und unter Umständen lesenswerter ;-)


boxer123 - Di 18.10.11 17:20

So nochmal auf dem Formblatt sind 2x Edits und 1x Button .

Man Startet das Programm und schreibt im linken Edit Fenster eine 4Stelligezahl und wenn man dann auf den Button klickt kommt beim anderen Edit die Zahl


Hobby-Programmierer - Di 18.10.11 17:23

Hallo Boxer,
du solltest erstmal eine allgemein verständliche Einführung geben.
1. Woher kommen die Zahlen?
2. Welche Delphi Version wird genutzt?

Dann solltest du die einen Zettel und eine Stift nehmen und aufschreiben wie du das 'händisch' lösen würdest.
Dann und nur dann kannst du da rangehen um eine logik zu entwickeln die auch ein Computer versteht. Und dann können wir auch helfen ....


Horschdware - Di 18.10.11 17:24

Das beschreibt lediglich die Ausgabe.
Aber es ist noch immer nicht klar, WAS gerechnet werden soll.

Dein Beispiel am Anfang zeigt nur ein paar Zahlen ohne erkennbares Muster, nach dem gerechnet wird.
Solange du hier den Algorithmus nicht beschreibst wird das nichts.

Überleg doch mal, wie du auf diese Beispielzahlen gekommen bist. Du musst das ja irgendwie händisch gelöst haben. Versuche dann diese Schritte in klare Worte zu fassen.


Hobby-Programmierer - Di 18.10.11 17:52

Die Aufgabe lautet wahrscheinlich:
Bilde aus der dargestellten Zahl [Zahlenkolonne] die grösste und die kleinste mögliche Zahl. Dann subtrahiere die kleinere von der grösseren.


boxer123 - Di 18.10.11 18:35

Bitte ich kriege eine Note kann mir das jemand über Teamviewer machen


Dude566 - Di 18.10.11 18:43

Hat schon vielen geholfen: http://www.christian-stelzmann.de/artikel/crashkurs.htm ;)


guinnes - Di 18.10.11 18:46

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Hat schon vielen geholfen: http://www.christian-stelzmann.de/artikel/crashkurs.htm ;)

Aber da steht nicht die Lösung drin. Danach muß man immer noch selber denken !


boxer123 - Di 18.10.11 18:47

So


Dude566 - Di 18.10.11 18:49

Die kriegt er dann selbst hin, wenn er die Grundlagen kann, oder sollte das sarkastisch gemeint sein?


guinnes - Di 18.10.11 18:50

user profile iconboxer123 hat folgendes geschrieben Zum zitierten Posting springen:
bitte ich bezahle auch der jetzt mit tv kommt bitte man

Ich glaube nicht, daß du soviel Geld hast. Ich stelle mir grade vor, ich kriege einen Kollegen wie dich. Dann lieber keinen


Horschdware - Di 18.10.11 18:50

Wir sollen dir für Entgeld deine Hausaufgaben machen?
Sicherlich nicht.

Leute mit "bitte mann...." anreden: Möp. Zonk.

Ich klinke mich hier aus, da du offensichtlich kein weiteres Interesse mehr an einer Lösung hast. Ciao


guinnes - Di 18.10.11 18:50

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Die kriegt er dann selbst hin, wenn er die Grundlagen kann, oder sollte das sarkastisch gemeint sein?

Klar, in 2 Jahren


boxer123 - Di 18.10.11 18:51

Was fehlt da


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
begin
zahl[1..4]:=0;
zahl[1] := Wert mod 10000 div 1000;
zahl[2] := Wert mod 1000 div 100;
zahl[3] := Wert mod 100 div 10;
zahl[4] := Wert mod 10;
for i:= 1 to 3 do
for j:=i+1 to 4 do
if zahl[i]>=zahl[j]:=zahl[j]];zahl[j]:=park;
zahl[1] := Wert mod 10000 * 1000;
zahl[2] := Wert mod 1000 * 100;
zahl[3] := Wert mod 100 * 10;
zahl[4] := Wert mod 10;
end;
edit2.text:=inttostr(zahl[1..4]);


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Martok - Di 18.10.11 18:52

Hallo,

wir helfen gerne (auch) bei Hausaufgaben, aber da muss der Fragesteller (also du :P) schon etwas mehr initiative zeigen. Bzw. überhaupt welche, dazu würde ja schon gehören mal die Fragestellung richtig zu beschreiben.

Wenn du das wirklich so möchtest, kannst du gerne einen Thread in der Job-Börse erstellen. Dann kannst du aber von "begrenzter" Resonanz ausgehen.

Grüße,
Martok

PS:

Bitte verwende für Quellcode die entsprechenden [delphi]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAGeaa3f728dd1e8b132a085600ba023c4c}</span></span>                    

Wird:

Delphi-Quelltext
1:
var Test: integer;                    


boxer123 - Di 18.10.11 18:58

OK, also das Programm soll so aussehen.

Nehmen wir mal eine 4 stellige Zahl : 5456

Das Programm soll diese Ziffern nach der Größe sortieren : 6554
Und nach der kleinsten Zahl: 4556

So und jetzt soll das Programm von diesen beiden Zahlen die Differenz bilden das wäre : 1998

Und diesen Alghorithmus soll er solange machen bis er erkennt das immer wieder die gleiche Zahl kommt. Und diese Zahl die immer gleich kommt soll er im edit 2 fenster ausgeben.


Horschdware - Di 18.10.11 19:01

Dann stimmt aber dein Beispiel im Eingangspost nicht.


boxer123 - Di 18.10.11 19:03

Wieso ? Denn ich habe die Zahl : 6957 . Nach der Größe geordnet und nach der kleinsten die Differenz gebildet und es kam: 3996 und jetzt macht das Programm das gleiche mit 3996 und so weiter

6957 /9675-5679=3996
3996 /9963-6399=3564
3564 /6543-3456=3087
3087 /8730-0378=8352
8352 /8532-2358=6174
6174 /7641-1467=6174


guinnes - Di 18.10.11 19:03

Und ? Das hatten wir schon vermutet. Was ändert das ? Wir sollen dir eine gute Note besorgen. Und warum ?


boxer123 - Di 18.10.11 19:06

Ich Frage nur. Ich versuche es auch selber, aber ich schaffe es nicht und deshalb brauche ich Hilfe
user profile iconguinnes hat folgendes geschrieben Zum zitierten Posting springen:
Und ? Das hatten wir schon vermutet. Was ändert das ? Wir sollen dir eine gute Note besorgen. Und warum ?


guinnes - Di 18.10.11 19:06

Zitat:
3996 /9963-6399=3564

Wie passen die Zahlen in dein Schema ?
3699 wäre richtig


Christian S. - Di 18.10.11 19:11

user profile iconboxer123 hat folgendes geschrieben Zum zitierten Posting springen:
Ich Frage nur. Ich versuche es auch selber, aber ich schaffe es nicht und deshalb brauche ich Hilfe
Es ist gut, dass Du es selber versuchst. :zustimm:

Wichtig ist aber, dass Du ein paar Spielregeln beachtest, wenn Du möchtest, dass wir Dir helfen. Zum einen solltest Du Deine Beiträge verständlich formulieren und z.B. auf Formalien wie die Delphi-Tags achten. Zum anderen ist es sehr wichtig, bei einem Quelltext, der nicht funktinoiert, dazu zu schreiben, was den nicht geht. Das kann eine Fehlermeldung sein, die Delphi Dir ausspuckt, es kann aber auch sein, dass Du schreibst, was der Quelltext eigentlich machen soll und was er stattdessen tut.

Wenn Du diese Regeln beherzigst, läuft das hier wahrscheinlich schon mal glatter. Und ganz wichtig: Eigeninitiative zeigen, dann helfen wir gerne!


boxer123 - Di 18.10.11 19:25

Wie zerlegt man mit Copy eine 4 Stellige Zahl ?


Christian S. - Di 18.10.11 19:39

Wie hast Du es bisher versucht und wo kommst Du nicht weiter?


boxer123 - Di 18.10.11 19:42

wie macht man nochmal delphi code damit ich es mache im forum


guinnes - Di 18.10.11 19:43

user profile iconboxer123 hat folgendes geschrieben Zum zitierten Posting springen:
Wie zerlegt mit Copy eine 4 Stellige Zahl.

Kann man das auch als ganzen Satz fragen ?


Christian S. - Di 18.10.11 19:46

user profile iconboxer123 hat folgendes geschrieben Zum zitierten Posting springen:
wie macht man nochmal delphi code damit ich es mache im forum

Das ist hier erklärt: http://www.delphi-forum.de/help_schreiben_bbcodes_source.html&sub=,19,27,32


@guinnes: Ein bisschen freundlicher wäre schon nett ;-)


boxer123 - Di 18.10.11 19:47

Wie schreibe ich jetzt das Programm?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
type
  TZiffern = array [1 .. 4of Byte;
  TDirection = (drAsc (*aufsteigend*), drDesc (*absteigend*));

function Zerlege(Wert: integer): TZiffern;
begin
  Result[1] := Wert mod 10000 div 1000;
  Result[2] := Wert mod 1000 div 100;
  Result[3] := Wert mod 100 div 10;
  Result[4] := Wert mod 10;
end;

procedure Sort(var Ziffern: TZiffern; Direction: TDirection);
begin
 
end;

function ZiffernToZahl(Ziffern: TZiffern): integer;
begin
  Result := Ziffern[1] * 1000 + Ziffern[2] * 100 + Ziffern[3] * 10 + Ziffern[4];
end;

function MaxWert(Ziffern: TZiffern): integer;
begin
  Sort(Ziffern, drDesc);
  Result := ZiffernToZahl(Ziffern);
end;

function MinWert(Ziffern: TZiffern): integer;
begin
  Sort(Ziffern, drAsc);
  Result := ZiffernToZahl(Ziffern);
end;


Christian S. - Di 18.10.11 19:51

Du hast jetzt Quelltext gepostet. Du hast aber nicht dazu geschrieben, was nicht funnktioniert. Also: Was soll der Quelltext machen, was tut er stattdessen? Was sind Deine Gedanken dazu, wie man es ausbessern kann?


boxer123 - Di 18.10.11 19:51

Nein das meine ich nicht wie soll ich es Verwenden den Quelltext
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Du hast jetzt Quelltext gepostet. Du hast aber nicht dazu geschrieben, was nicht funnktioniert. Also: Was soll der Quelltext machen, was tut er stattdessen? Was sind Deine Gedanken dazu, wie man es ausbessern kann?


Christian S. - Di 18.10.11 19:55

Die Funktionsnamen sind doch eigentlich ziemlich sprechend, wo ist denn da das Problem? :gruebel:


boxer123 - Di 18.10.11 19:56

Ich meine diese Funktionen muss ich jetzt Umsetzten aber wie ?


boxer123 - Di 18.10.11 20:14

Erzielt diesr Aufbau mein Ziel ? Da kommen Fehler [Pascal Error] Unit1.pas(1): Unable to invoke Code Parameters due to errors in source code
[Fatal Error] Project1.dpr(5): Could not compile used unit '..\Neuer Ordner (4)\Unit1.pas'
[Warning] Unit1.pas(44): Text after final 'END.' - ignored by compiler
[Error] Unit1.pas(41): '.' expected but ';' found
[Error] Unit1.pas(37): Declaration expected but 'FOR' found
[Error] Unit1.pas(32): Undeclared identifier: 'Wert'
[Error] Unit1.pas(32): Undeclared identifier: 'Result'
[Error] Unit1.pas(24): ',' or ':' expected but '=' found
[Error] Unit1.pas(23): ',' or ':' expected but '=' found [Error] Unit1.pas(40): ']' expected but '..' found




Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
var
  Form1: TForm1;
  TZiffern=array[1..4of byte //hier fehler;
  TDirection = (drAsc (*aufsteigend*), drDesc (*absteigend*)// hier fehler;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Result[1] := Wert mod 10000 div 1000// hier 2 fehler
  Result[2] := Wert mod 1000 div 100;
  Result[3] := Wert mod 100 div 10;
  Result[4] := Wert mod 10;
  end;
  for i:= 1 to 3 do // hier fehler
  for j:=i+1 to 4 do
  if result[1..4]>=zahl[j] then begin
  park:=result[1..4];zahl[i]:=zahl[j];zahl[j]:=park; // hier fehler
  end// hier fehler
  Result := Ziffern[1] * 1000 + Ziffern[2] * 100 + Ziffern[3] * 10 + Ziffern[4];
  end;// hier fehler
  Sort(Ziffern, drDesc);
  Result := ZiffernToZahl(Ziffern);
  end;
  Sort(Ziffern, drAsc);
  Result := ZiffernToZahl(Ziffern);
  end;
  edit2.text:=inttostr(result[1..4]);
end;

end.




Moderiert von user profile iconChristian S.: Beiträge zusammengefasst

Edit/ kann mir nicht einer über Teamviewer helfen wäre viel einfacher


Christian S. - Di 18.10.11 20:17

Am Besten rückst Du den Quelltext erst einmal richtig ein, dann siehst Du schon einen großen Teil der Fehler.


user profile iconboxer123 hat folgendes geschrieben Zum zitierten Posting springen:
kann mir nicht einer über Teamviewer helfen wäre viel einfacher
Nein.


boxer123 - Di 18.10.11 20:22

Was haben ich denn falsch gemacht


Christian S. - Di 18.10.11 20:30

Nochmal:
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Am Besten rückst Du den Quelltext erst einmal richtig ein, dann siehst Du schon einen großen Teil der Fehler.


boxer123 - Di 18.10.11 20:31

Ich weiß nicht ach egal es hat kein sinn ich schon 5 stunden versucht nicht geschafft


glotzer - Di 18.10.11 20:45

würdest du an stadt hier rumzujammern machen was dir empfohlen worden ist, wärst du seit 4h fertig


Horschdware - Di 18.10.11 20:57

Stells in die Job Sparte. Ich habe so das Gefühl, dass ich heute einen sozialen Tag habe und dir mit meinen Preisvorstellungen antworten werde.


Hobby-Programmierer - Di 18.10.11 21:02

Ich hoffe er muss den Code und den Programmablauf auch erklären können. :eyecrazy:

@Boxer: Seit wann hast du die Hausi schon auf?


boxer123 - Mi 19.10.11 21:25

Sollen wir eins klar stellen ich mache delphi seit einer woche.


Hobby-Programmierer - Mi 19.10.11 22:26

Sorry, aber das kann ich kaum glauben! Niemand erstellt nach ein paar Stunden Ausbildung/Einführung in eine Programmiersprache strukturierte Programmabläufe.
Aber seis drum! Willst du denn hier weiter machen und zumindest versuchen, selbständig mit unserer Hilfe, das Programm fertig zu stellen?
Außerdem wäre es für dich hilfreicher wenn du dich auf ein Forum beschränkst.

LG Mario


Horschdware - Mi 19.10.11 22:36

Zur Kenntnis genommen. Jedoch ist es (fast) egal, wie lange du dich bereits mit Delphi beschäftigst.

Das grundlegende Problem das ich hier sehe ist nicht, dass du keine Erfahrung mit Delphi hast, sondern die Art und Weise, wie du versuchst das Problem zu lösen.

In deinem Eingangspost zeigst du ein paar Zahlen und willst eine Lösung haben, ohne zu sagen, was das zu lösende Problem ist und ohne zu erklären, wie die Zahlen zustande kommen. Erst nach einigem Herumgerätsele der Leute hier kommt irgendwann heraus, dass die jeweils größten und kleinsten Kombinationen der gegebenen Ziffern miteinander zu verrechnen sind.
Das steht dann aber im Widerspruch zu deinem Beispiel am Anfang.

Dann schaffst du es nicht, klar auszudrücken, wo genau du Probleme hast, sondern postest Quelltexte mit dem Kommentar "geht nicht".

Und weil das noch nicht genug ist, machst du in einem anderen Forum einen Thread wegen dem gleichen Problem auf und erklärst dort (aber nicht hier. Warum eigentlich?), dass du gar keine Delphi Entwicklungsumgebung hast, d.h. du schreibst alles in Notepad o.ä. und hoffst, dass irgendwann ein brauchbarer Code herauskommt, den du aber nie testen kannst.

Ich weiss nicht wie du dir das vorstellst, aber für mein Verständnis ist dein Problem so nicht lösbar.
Nicht weil es dir an Delphi-Wissen mangelt, sondern weil deine Vorgehensweise sich irgendwo zwischen konfus und unlogisch einordnen lässt.

In der Delphi-Praxis wurde dir (wie auch hier) ein Leitfaden gezeigt, wie du vorgehen könntest.
Ich sehe aber nicht, dass du hier zielführend konkrete Fragen dazu gestellt hast, wie du die einzelnen Punkte abarbeiten kannst - wobei das noch nicht einmal nötig ist, schliesslich finden sich Beispiele für derartige Basics in jedem guten Einsteigerhandbuch oder in der Forensuche.

Dem guten Willen wegen nochmal: Der wohl einfachste Weg das alles umzusetzen:



Pseudocode
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
 

Lese Eingabe in String s
Integer z = s
Integer a, b, z_alt

wiederhole >
  z_alt = z
  s = z
  Sortiere s
  a = s
  Invertiere s
  b = s
  z = a - b
< solange z <> z_alt


Der (Um-)Weg über einen String hat meine Meinung nach den Vorteil, dass hier das Invertieren bereits in den StrUtils definiert ist und die Umwandlung in einen Integer einfacher ist, als aus einem array of int heraus. Aber es geht ja hier nicht um "schick und toll" machen, sondern nur um die generelle Machbarkeit...


PS: Du hast einige Fragen noch nicht beantwortet. Z.B. seit wann diese Aufgabe überhaupt steht...

Noch ein PS: Wenn es dir an einer Delphi-Entwicklungsumgebung mangelt, möchte ich dich an http://www.amazon.de verweisen. Dort gibt es Bücher (z.B: http://www.amazon.de/Delphi-f%C3%BCr-Kids-mitp/dp/3826686624/ref=sr_1_1?ie=UTF8&qid=1319056707&sr=8-1), denen eine Delphi Vollversion beiliegt. Darüber hinaus enthalten diese Bücher viel Wissen in gedruckter Form, das sich bei der Programmierung als sehr hilfreich herausstellen mag.


Hobby-Programmierer - Mi 19.10.11 22:54

Hallo Peter, ohne jetzt der Antwort von Boxer vor zugreifen, denke ich das du zu hohe Ansprüche an das logische Denken eines schätzungsweise 12- 14 jährigen stellst. Mein Sohn (13) würde das genauso schreiben, dessen bin ich mir sicher. Aber natürlich sind viele Sachen unglücklich gelaufen. Hätte er anfangs erwähnt das er keine IDE zur Verfügung hat, hätte man sicher auch einiges anders beurteilt.

@Boxer
Solltest du Interesse an einer kostenlosen Delphi-IDE haben, solltest du mal nach Turbodelphi hier oder in der Delphi-Praxis suchen. Reg-Schlüssel solltest du bei höflicher Nachfrage und mit Hinweis auf den schulischen Gebrauch bei Embarcadero bekommen. Wenn du noch Fragen hast melde mich mal per PN.

LG Mario


Horschdware - Mi 19.10.11 23:16

Mal kurz ein Bisschen Off-Topic:
Hobby-Programmierer, hat das irgendeinen Hintergrund, dass du mich (ich gehe zumindest davon aus, dass ich gemeint bin) mal mit "Horst" und mal mit "Peter" ansprichst? :lol:

Zu Turbo-Delphi: Das wurde meines Wissens nach eingestellt und ist nicht mehr erhältlich.

Zu Formulierungssachen: Da gebe ich dir zunächst einmal recht. Es sind hier einfach einige Sachen unglücklich gelaufen und in jungen Jahren drückt man sich unpräzise aus. Wenn man es aber nicht schafft, die eigentliche Aufgabenstellung rüber zu bringen und ein falsches Beispiel postet, welches man dann noch nicht einmal zu korrigieren weiss, dann ist das für die Bearbeitung der Aufgabe extremst hinderlich.


smt - Do 20.10.11 10:42

@boxer123:

Einen String in einzelne Stücke zu teilen kannst Du entweder mit Copy machen oder direkt mit [n]
also beispielsweise:

st:='Hallo';

st[1] ist dann = 'H'
st[2] ist dann das 'a'

usw.

Mit Length bekommst Du die Länge des Strings raus. Mit IntToStr kannst Du eine Zahl in einen String umwandeln.

Das Problem ist aber eher das sortieren. Hier gibt es natürlich verschiedene Lösungsansätze. Du kannst also die einzelnen Werte in ein Array packen (var werte : Array of integer - aber nicht vergessen, das ganze mit SetLength zu initialisieren). Und dann schreibst Du dafür einen einfachen Sortieralgorhytmus.
Oder Du nimmst eine TStringList - die kann nämlich selbst schon sortieren. Dann sparst Du Dir diesen Weg. Ist natürlich so ein wenig mit Kanonen auf Spatzen geschossen, aber wie gesagt, funktionieren sollte es auch.

Wenn Du dann deine drei Zahlen hast (Eingabe von Dir, Zahl sortier aufsteigend, Zahl sortiert absteigend) kannst Die einfach wieder ein einen Int konvertieren, ne Division machen und das Ergebnis wieder zurück in Deine Funktion schicken. Hier muss dann natürlich noch eine Abbruchbedingung rein (also wenn die Zahl nicht mehr teilbar ist oder wenn der Wert rauskommt, den Du Dir vorstellst). Ohne diese Abbruchbedindung hast Du sonst nämlich ne Endlosschleife.

VG Sascha

Moderiert von user profile iconChristian S.: Beiträge zusammengefasst

@boxer:

Ach und wenn Du keine IDE hast: Lade Dir Lazarus herunter. Das ist im Grunde wie Delphi 7. Ist kostenlos und für diese Zwecke vollkommen ausreichend.

VG Sascha


Horschdware - Do 20.10.11 11:34

Das Thema hat sich wohl erledigt, da
a) der TE in der Delphi-Praxis erklärt hat, dass dieses Programm wegen Benotung heute benötigt wird/wurde. (Zeit vorbei)
b) dort jemand den fertigen Programmcode gepostet hat


Delete - Do 20.10.11 14:31

Es scheint übrigens um das hier zu gehen: http://en.wikipedia.org/wiki/6174_%28number%29