Autor |
Beitrag |
newbie333
      
Beiträge: 43
|
Verfasst: 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:
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 
      
Beiträge: 43
|
Verfasst: 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
|
Verfasst: So 21.06.09 16:20
du solltest dein programm hier mal hochladen ( auch das fehlerhafte programm)
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 21.06.09 16:22
newbie333 hat folgendes geschrieben : | 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? 
|
|
michaaaaa
Hält's aus hier
Beiträge: 9
|
Verfasst: 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 
      
Beiträge: 43
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 21.06.09 16:28
|
|
bole
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: So 21.06.09 16:31
Du nimmst wieder die MOD funktion wie in deinem letzten Programm (teiler)
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 
      
Beiträge: 43
|
Verfasst: So 21.06.09 16:31
geht das nicht auch so irgendwie?
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 
      
Beiträge: 43
|
Verfasst: So 21.06.09 16:33
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 21.06.09 16:47
Es gibt auch einen Editier-Button.
Zu deinem Code: Du überprüfst nur einmal zu Beginn auf gerade/ungerade. Überdenk noch einmal dein Konzept. 
|
|
newbie333 
      
Beiträge: 43
|
Verfasst: 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! 
|
|
bole
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: 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 
      
Beiträge: 43
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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
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 
      
Beiträge: 43
|
Verfasst: 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 
Zuletzt bearbeitet von newbie333 am So 21.06.09 17:13, insgesamt 1-mal bearbeitet
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 21.06.09 17:12
|
|
bole
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: 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!
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 
      
Beiträge: 43
|
Verfasst: So 21.06.09 17:14
Das hatte ich eben doch, oder?
und wie siehts damit aus?
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
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: 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!
|
|