Autor Beitrag
kulka1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: 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? :P

mfg kulka

p.s.: mein lehrer hat dazu collatz verfahren gesagt^^
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 02.09.09 20:31 
formulieren wir es gemeinsam:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: 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? =)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Mi 16.09.09 21:12 
ausblenden 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<>1and (a<>5and (a<>17do
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 16.09.09 21:53 
user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:
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<>1and (a<>5and (a<>17do
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Mi 16.09.09 22:01 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Da dies aber ein leichter Fehler ist, frage ich dich einfach mal: Wie zum Teufel komsmt du auf die Abbruchbedingung while (a<>1and (a<>5and (a<>17do
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 :D, weil würde man and (a<>5and (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 user profile iconNarses: Zitat kenntlich gemacht.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 16.09.09 22:04 
user profile iconkulka1 hat folgendes geschrieben Zum zitierten Posting springen:
unser lehrer will das :D, weil würde man and (a<>5and (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:
ausblenden Delphi-Quelltext
1:
      a := a*3-1;					

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 16.09.09 22:07 
Ach du warst zu schnell ;)
Siehe mein Edit oben.

_________________
PROGRAMMER: A device for converting coffee into software.
kulka1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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.