| Autor |
Beitrag |
kulka1
      
Beiträge: 81
|
Verfasst: Mi 02.09.09 19:56
hallo leute,
ich muss eine hausaufgabe erledigen und bräuchte eure hilfe.
die aufgabenstellung lautet so:
1. beginne mit einer natürlichen zahl n
2. ist n gerade,so nimm für n als nächstes n/2,sonst 3n+1
3. falls n>1 gehe zu schritt 2
also ich muss ja irgendwie herausfinden ob die zahl gerade bzw ungerade ist.
und das alles, also die ganzen zahlen sollen in einem Memo dargestellt sein.
die zahl soll in einem edit feld eingegeben werden und der button darf natürlich nicht fehlen.
ich hoffe ihr könnt mir weiterhelfen, für euch müsste das ja ein kinderspiel sein^^... oder?
mfg kulka
p.s.: mein lehrer hat dazu collatz verfahren gesagt^^
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mi 02.09.09 20:03
Und, wo ist das Problem?
Konkrete Fragen beantworten wir gerne... wenn sie denn gestellt werden und Eigeninitiative erkennbar ist.
Ansonsten ist das die falsche Sparte, Jobs sind nebenan.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
kulka1 
      
Beiträge: 81
|
Verfasst: Mi 02.09.09 20:06
ich hoffe das ich hier im richtigen bereich ist, ist ja eigtl auch ne normale frage:
wie kriege ich heraus das die eingegebene zahl gerade oder ungerade ist,
ja und wenn die dann halt gerade ist soll die immer durch 2 geteilt werden, und diese zahlen sollen dann in der MEMO angezeigt werden,
in der memo soll angezeigt werden: z.B.: 16 -> 16,8,4,2,1
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 02.09.09 20:12
mit mod bekommst du den rest einer ganzzahlendivision  und gerade heißt das es durch 2 ohne rest teilbar ist.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
kulka1 
      
Beiträge: 81
|
Verfasst: Mi 02.09.09 20:13
mhm, und wie krieg ich das dann in einer "if" klausel rein, also wie man das genau schreibt?
und wenn ich das dann habe, wie bekomme ich die ergebnisse in das MEMO dingen ...
sorry für diese dummen fragen^^
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 02.09.09 20:31
formulieren wir es gemeinsam:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| WÄHREND Zahl > 1 MACHE WENN Rest von Zahl dividiert 2 gleich 0 DANN Zahl soll die Zahl durch 2 sein; ANDERNFALLS Zahl soll (zahl mal 3) plus 1 sein; Gib Zahl aus; fertig mit Während; |
na, jetzt sollte es aber gehen oder? Du musst dir es einfach immer so überlegen, wie du es beschreiben würdest
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
kulka1 
      
Beiträge: 81
|
Verfasst: Mi 02.09.09 21:16
hab da jetzt was geschrieben, aber das stimmt irgendwie vorne und hinten nicht^^, könnt ihr mal bitte drüber gucken? =)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,ergebnis : Integer; begin a := StrToInt(Edit1.Text);
while a = 4 do begin b := a div 2; if b = 0 then ergebnis := a div 2 else
begin ergebnis := (a*3)+1; end; Memo1.Text := IntToStr(ergebnis); end; end; |
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 02.09.09 21:43
Du weist a innerhalb der Schleife niemals einen neuen Wert zu - wie soll die Schleife dann jemals beendet werden?
Wie kommst du eigentlich auf die Bedingung a = 4 ??? Das heißt doch, dass die Schleife nur ausgeführt wird, wenn man in das Edit Feld eine 4 eintippt. Die Collatz Vermutung besagt doch, dass man immer bei 1 rauskommt, egal mit welcher Zahl man anfängt.
de.wikipedia.org/wiki/Collatz-Problem
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
kulka1 
      
Beiträge: 81
|
Verfasst: Mi 02.09.09 21:48
ups, das mit der 4 war ein versehen xD ...
ich hatte vorher was anderes da stehen, aber das ist jetzt egal, ich hab es hingekriegt
trotzdem danke =)
|
|
kulka1 
      
Beiträge: 81
|
Verfasst: Mi 16.09.09 21:12
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button1Click(Sender: TObject); var a,i : Integer; s : string; begin Memo1.Clear; a := strtoint(edit1.text);
Memo1.Lines.Add(inttostr(a));
while (a<>1) and (a<>5) and (a<>17) do begin
if a mod 2 = 0 then a := a div 2 else a := a*3-1;
Memo1.Lines.Add(inttostr(a)); end;
end; |
wenn ich zb ins edit feld eine 16 eingebe, dann erscheinen 5 zahlen, bei 17 nur 1 ...
ich habe das programm mal beigelegt, wie kann ich neben
16
8
4
2
1
jeweils die nr anzeigen lassen, also so:
5 - 16
4 - 8
3 - 4
2 - 2
1 - 1
wäre nett wenn ihr mir das sagen könntet^^
Einloggen, um Attachments anzusehen!
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 16.09.09 21:53
kulka1 hat folgendes geschrieben : | jeweils die nr anzeigen lassen, also so:
5 - 16
4 - 8
3 - 4
2 - 2
1 - 1 |
Dafür müsstest du im voraus wissen, wie viele Schritte es gibt -> geht nicht.
Du kannst jedoch aufwärts zählen.
Dafür brauchst du ne Zählvariable, die du in der Schleife erhöhst, und fügst dann im Memo IntToStr(i) + ' - ' + IntToStr(a) ein.
Außerdem: die reine exe nützt uns nichts. Um den Fehler zu finden, wäre es wesentlich leichter, wenn du das Projekt hochlädst.
Da dies aber ein leichter Fehler ist, frage ich dich einfach mal: Wie zum Teufel komsmt du auf die Abbruchbedingung while (a<>1) and (a<>5) and (a<>17) do
Da ist doch klar, dass der bei 17 nur einen Schritt macht - weil der die schleife gar nich durchläuft.
Ich verweise nochmal auf meinen vorherigen Post.. Lies dir durch, wie der Algorithmus funktioniert!
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
kulka1 
      
Beiträge: 81
|
Verfasst: Mi 16.09.09 22:01
Xentar hat folgendes geschrieben : | Da dies aber ein leichter Fehler ist, frage ich dich einfach mal: Wie zum Teufel komsmt du auf die Abbruchbedingung while (a<>1) and (a<>5) and (a<>17) do
Da ist doch klar, dass der bei 17 nur einen Schritt macht - weil der die schleife gar nich durchläuft.
Ich verweise nochmal auf meinen vorherigen Post.. Lies dir durch, wie der Algorithmus funktioniert! |
versteh das bitte jetzt nicht falsch^^
unser lehrer will das  , weil würde man and (a<>5) and (a<>17) nicht hinzufügen, dann würde das programm wegen dem 3*a-1 abschmieren
hatte die exe hinzugefügt, damit ihr sehen könnt wie viele zahlen das sind, aber wurscht^^, ich probiere es mal mit der laufvariable
Moderiert von Narses: Zitat kenntlich gemacht.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 16.09.09 22:04
kulka1 hat folgendes geschrieben : | unser lehrer will das , weil würde man and (a<>5) and (a<>17) nicht hinzufügen, dann würde das programm wegen dem 3*a-1 abschmieren  |
Hä? Wieso sollte das abschmieren? Ich denke mal, damit meinst du, dass das Programm in eine Endlosschleife gerät, und nicht mehr reagiert.
Aber genau DAS sagt doch die Collatz Vermutung: Dass am Ende IMMMER 1 rauskommt (ist auch bewiesen bis kA wieviel Millionen).
Ich schau mir das grad mal kurz an.
Edit:
Delphi-Quelltext
Da ist der Fehler - finden darfst du ihn selber.
Dann klappt es auch mit der "echten" Abbruchbedingung.
_________________ PROGRAMMER: A device for converting coffee into software.
Zuletzt bearbeitet von Xentar am Mi 16.09.09 22:07, insgesamt 1-mal bearbeitet
|
|
kulka1 
      
Beiträge: 81
|
Verfasst: Mi 16.09.09 22:07
ja genau wegen der endlosschleife, aber dann lässt sich ncihts mehr machen, ausser das programm zurückzusetzen, jedenfalls war es bei mir immer der fall^^
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 16.09.09 22:07
Ach du warst zu schnell
Siehe mein Edit oben.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
kulka1 
      
Beiträge: 81
|
Verfasst: Mi 16.09.09 22:12
a := a*3-1;
ich habe es einmal in
b := a*3-1; gemacht, das ergebnis ist, wenn ich 17 eingebe kommen lauter 50
a := (a*3)-1;, das programm schmiert nicht ab, aber es läuft immer weiter,
oder was meinst du genau?
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 16.09.09 22:17
Ne ne, hat nix mit den Variablen zu tun.
Vergleich das mal mit der Originalformel, aus deinem ersten Post.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|