Autor Beitrag
newbie333
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 16:16 
Und gleich das nächste Anfängerproblem!
Wir sollen ein Programm schreiben, welches die Summe der ersten n ungeraden Zahlen berechnen kann.
Also zum Beispiel:
man gibt 5 ins Editfeld ein, dann soll berechnet werden: 5+5+5+5+5 also 5x5.
=> wenn man n eingibt, soll n*n berechnet werden, oder?
deshalb hab ich mir folgendes gedacht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
  n, summe, Ergebnis: integer;
begin
 n:=strtoint(edit1.text);
 while n <> 0 do
  begin
  summe:=n*n;
  n:=n-1;
  end;
 label1.caption:=inttostr(ergebnis);
end;
end.


funktioniert aber nicht.. :(
Wäre nett, wenn mir jemand helfen könnte.
newbie333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 16:18 
ups, ergebnis brauch ich in dem Fall als Variable gar nicht.. und am Ende dann in die Klammer (summe)..
funktioniert aber auch nicht.
michaaaaa
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 21.06.09 16:20 
du solltest dein programm hier mal hochladen ( auch das fehlerhafte programm)
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 21.06.09 16:22 
user profile iconnewbie333 hat folgendes geschrieben Zum zitierten Posting springen:
Wir sollen ein Programm schreiben, welches die Summe der ersten n ungeraden Zahlen berechnen kann.

Für mich klingt das mehr nach: (5) --> 3 + 5 + 7 + 9 + 11 = ...
Bist du dir sicher, dass dein Beispiel passt? :nixweiss:
michaaaaa
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 21.06.09 16:25 
das debk ich auch fast...
außerdem steht in der aufgabe was von Summe...
und das ergebnis der multiplikation ist keine Summe...
newbie333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 16:25 
Oh.. ja, stimmt. @ Marc.

Also brauch ich noch ne if-Anweisung? Und wie mach ich das dann, dass Delphi zwischen geraden und ungeraden Zahlen unterscheidet?
Einloggen, um Attachments anzusehen!
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 21.06.09 16:28 
user profile iconnewbie333 hat folgendes geschrieben Zum zitierten Posting springen:
Und wie mach ich das dann, dass Delphi zwischen geraden und ungeraden Zahlen unterscheidet?

mod gibt dir den Rest einer Division zurück. Damit solltest du weiterkommen. ;)
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: So 21.06.09 16:31 
Du nimmst wieder die MOD funktion wie in deinem letzten Programm (teiler)

ausblenden Delphi-Quelltext
1:
if Zahl mod 2 <> 0 then					


So trifft die Bedingung nur zu wenn die Zahl ungerade ist

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
newbie333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 16:31 
geht das nicht auch so irgendwie?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var
  n, summe, Ergebnis: integer;
begin
 n:=strtoint(edit1.text);
 summe := 1;
 while n <> 0 do
  begin
  ergebnis:=summe+n;
  summe:=summe+2;
  n:= n-1;
  end;
 label1.caption:=inttostr(ergebnis);

end;
end.


bzw. was ist daran falsch?
newbie333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 16:33 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
var
  n, summe, Ergebnis: integer;
begin
 n:=strtoint(edit1.text);
 summe := 1;
 if n mod 2 <> 0 then
 begin
 while n <> 0 do
  begin
  ergebnis:=summe+n;
  summe:=summe+2;
  n:= n-1;
  end;
  end;
 label1.caption:=inttostr(ergebnis);

end;
end.


das ändert auch nichts am Ergebnis :(
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 21.06.09 16:47 
Es gibt auch einen Editier-Button. :D
Zu deinem Code: Du überprüfst nur einmal zu Beginn auf gerade/ungerade. Überdenk noch einmal dein Konzept. ;)
newbie333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 16:53 
Dann muss ich doch normal noch programmieren,
was es tun soll, wenn die Zahl gerade ist, oder?
Ich bin verwirrt! :nixweiss:
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: So 21.06.09 16:57 
Hoi Newbie

Ich denke bevor Du etwas Codierst solltest Du dein Programmfluss mal in einem Diagram aufzeichnen... Ich denke da würde Dir einiges klar!

Als ich programmieren lernte mussten wir für jedes Programm zuerst ein Nassi Schneiderman Diagram zeichnen. de.wikipedia.org/wik...Shneiderman-Diagramm

Das war zwar mühsam, aber schlussendlich ist man so schneller als deine Try and Error Variante.... und Gelernt hat man auch noch was!

Gruss
Bole

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
newbie333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 17:02 
Ja, sowas ähnliches haben wir auch schon gemacht :)
Aber irgendwie hab ich dieses mal keine Ahnung wie ich das machen sollte, bzw. was für Variablen ich brauch etc..

DaS Programm soll, wenn der mögliche summand ungerade ist, diesen mit dem nächsten addieren, aber wie programmier ich das?
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 21.06.09 17:07 
Du willst jede zweite beziehungsweise, in diesem Fall, ungerade Zahl zur Gesamtsumme addieren.
Also lautet es schon einmal wie folgt: if Zahl mod 2 <> 0 then {Addiere Zahl zur Summe}
Da nur die ersten n ungeraden Zahlen addiert werden sollen, musst du diesen Schritt solange wiederholen bis Zahl = n * 2 + 1. ;)
I.e. bei 5 wäre die höchste ungerade Zahl die 11, bei 6 13 usw...

Das gilt es jetzt umzusetzen. :)
newbie333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 17:10 
muss es nicht if Zahl mod 2 <> 0 then heißen?
Ich versuchs mal, danke :)

ich versteh jetzt irgendwie nicht mehr genau was n, zahl, summe usw. ist :nixweiss:


Zuletzt bearbeitet von newbie333 am So 21.06.09 17:13, insgesamt 1-mal bearbeitet
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 21.06.09 17:12 
user profile iconnewbie333 hat folgendes geschrieben Zum zitierten Posting springen:
muss es nicht if Zahl mod 2 <> 0 then heißen?
Ich versuchs mal, danke :)

Korrekt, hab es bereits berichtigt. Na dann, viel Erfolg. ;)

Edit: Die If-Abfrage kannst dir im Grunde auch komplett sparen, es reicht ja, die Zahl in jedem Schritt, um 2 zu erhöhen. :zwinker: :roll:
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: So 21.06.09 17:14 
Wenn Du in deinem alten Programm (Teiler) die If Bedingung durch folgende ersetzt schreibt das Programm in das memo all ungeraden Zahlen... Das Summieren sollte nicht wirklich ein Problem darstellen!

ausblenden Delphi-Quelltext
1:
if teiler mod 2 <> 0 then					


Bitte nicht zuerst rausschreiben und am Schluss die zahlen im memo summieren! Sofort in der Schleife beim schreiben ins memo gleich aufsummieren!

Gruss
Bole

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
newbie333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 21.06.09 17:14 
Das hatte ich eben doch, oder? :shock:

und wie siehts damit aus?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
n, summe, Ergebnis: integer;
begin
 n:=strtoint(edit1.text);
 summe:=1;
  while summe <> n*2+1 do
  ergebnis:=summe+n;
  summe:=summe+2;
  end;
  label1.caption:=inttostr(ergebnis);

end.


Edit: Achja, ich weiß, dass da immer die Quadratzahl der eingegeben Zahl rauskommen soll.
und das wäre ja bei n*2+1 nicht der Fall..
also wenn man 5 eingibt, soll 1+3+5+7+9=25 berechnet werden!
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: So 21.06.09 17:48 
Das ist ja wieder was anderes....

Ich denke Du solltest Dir erst im klaren sein was Du von deinem Programm erwartest!

Nur wenn man das Problem verstanden hat kann man es auch programmieren...

_________________
ein programm macht nicht das was du willst sondern was du schreibst!