![]() |
Kleinere Zahlen hinzuzählen
Hallo DP,
ich wollte mal fragen wie folgendes in Delphi zu realisieren ist... ich hab zum Beispiel die Zahl 7 und möchte nun alle Zahlen die kleiner sind als 7 also von 1 (einschließlich 1 :D ) hinzuzählen daraus ergibt sich : 1+2+3+4+5+6+7 LG GericasS :?: |
Re: Kleinere Zahlen hinzuzählen
Zwei ansätze: Iterativ:
Delphi-Quellcode:
Rekursiv:
function Summ(a: integer): Integer;
var i: integer; begin result:=0; for i := 1 to a do result:=result+i; end;
Delphi-Quellcode:
Ungetestet
function Summ(a: Integer): Integer;
begin if a <=1 then begin result:=a; exit; end; result:=Summ(a-1)+a; end; |
Re: Kleinere Zahlen hinzuzählen
Habt ihr in der Schule grad Einführung in Rekursionen?
|
Re: Kleinere Zahlen hinzuzählen
Zitat:
Zitat:
|
Re: Kleinere Zahlen hinzuzählen
Und wo bleibt der Resourcenschonende Ansatz? (Green IT und so...)
Delphi-Quellcode:
function Summ(n: integer): Integer;
begin result = n*(n+1)/2.0; end; |
Re: Kleinere Zahlen hinzuzählen
so ist das Rechenergebnis eine Fließkommazahl und kein Integer:
also müßte man es noch umwandeln [add]ohhh und Vergleich statt Zuweisung ... kein ":" :shock: [/add]
Delphi-Quellcode:
oder besser glich bei Integer bleiben:
function Summ(n: integer): Integer;
begin result := Round(n * (n + 1) / 2.0); end;
Delphi-Quellcode:
aber ich hab noch'n paar Löungen mit Schleifchen :angel:
function Summ(n: integer): Integer;
begin result = n * (n + 1) div 2; end;
Delphi-Quellcode:
// Result=0 wenn n negativ
function Summ(n: integer): Integer; begin Result := 0; while n >= 1 do begin Inc(Result, n); //Result := Result + n; Dec(n); end; end;
Delphi-Quellcode:
// Result=n wenn n negativ
function Summ(n: integer): Integer; begin Result := 0; repeat Inc(Result, n); //Result := Result + n; Dec(n); until n < 1; end; |
Re: Kleinere Zahlen hinzuzählen
Zitat:
|
Re: Kleinere Zahlen hinzuzählen
Zitat:
Python ist so eine schöne Sprache und da sinds eben die ==-Vergleiche. |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Re: Kleinere Zahlen hinzuzählen
Zitat:
|
Re: Kleinere Zahlen hinzuzählen
Das ist doch offensichtlich :roll:
Nein. Das ist so ziemlich die Standardaufgabe, um die Beweistechnik der Vollständigen Induktion einzuführen. 'Festlegen' kann man da nichts :lol: Entweder es ist so, oder nicht. Die Idee ist eigentlich recht einfach: Zahlen von 1 bis 10:
Code:
1+2+3+...+10=
1 + 2 +3 +4 +5+ 10+ 9 +8 +7 +6 = _________________ 11+11+11+11+11 = (10+1)*(5)=(n+1)(n/2) |
Re: Kleinere Zahlen hinzuzählen
Zitat:
![]() |
Re: Kleinere Zahlen hinzuzählen
Und ein wunderbares Beispiel für Vollständige Induktion ;)
(Hab jetzt keine Zeit, können wir heut abend mal beweisen) |
Re: Kleinere Zahlen hinzuzählen
quod erat demonstrandum - huhuhu, verdammt lange her :mrgreen:
|
Re: Kleinere Zahlen hinzuzählen
Zitat:
w.z.b.w. darunter |
Re: Kleinere Zahlen hinzuzählen
@sirius : danke für den Link habs verstanden ! :thumb: :stupid:
|
Re: Kleinere Zahlen hinzuzählen
Zu beweisen: 1+2+3+...+n = n(n+1)/2
Induktionsanfang für n=1: 1 = 1(1+1)/2 = 1 (r.) n=2: 1+2 = 2(2+1)/2 = 3 (r.) Induktionsannahme: Unter der Vorraussetzung dass für alle n >= 1 gilt 1+2+3+...+n = n(n+1)/2 Induktionsschluss 1+2+3+..+n+ (n+1) = (n(n+1)/2) +(n+1) = (n(n+1)/2) +2(n+1)/2 = (n(n+1)+2(n+1))/2 = ((n+1)(n+2))/2 qed (Im letzten Schritt n+1 ausgeklammert) (Daniel will uns ja keine LaTeX-tags geben :( ) |
Re: Kleinere Zahlen hinzuzählen
Ich glaube, du hast die Beweisidee noch nicht ganz verstanden.
Zitat:
Dein Satz lautet: Unter der Vorraussetzung, dass der Satz richtig ist, folgt, dass der Satz richtig ist. Du müsstest so argumentieren: Zitat:
|
Re: Kleinere Zahlen hinzuzählen
Dann ist dieser Schritt in dem Buch aus dem ich das habe falsch.
(Mathematik für Informatiker, von wem das war hab ich vergessen) Worum es bei dem beweis geht habe ich verstanden, fand den Schritt bisher aber immer unnötig ._. |
Re: Kleinere Zahlen hinzuzählen
Das steht so in einem Buch? Also mit 'für alle' und nicht 'für ein'?
Welchen Schritt fandest du unnötig? |
Re: Kleinere Zahlen hinzuzählen
Korrekt lautet der Beweis so:
Behauptung: n Sigma i = n(n+1)/2 i=1 Induktionsanfang: 1 Sigma i = 1 = 1(1+1)/2 i=1 Induktionsvoraussetzung: Die Behauptung gilt für alle n in N mit n<=k: Induktionsschluss: n+1 Sigma i = i=1 n =Sigma + n+1 = n(n+1)/2 + n+1 = (n(n+1)+2n+2)/2 = (n²+3n+2)/2 = i=1 =(n+1)(n+2)/2 Es folgt: Gilt die Behauptung für alle n in N mit n<=k, dann gilt die Behauptung auch für alle n in N mit n<=k+1. Es folgt die Gültigkeit der Behauptung für N. q.e.d. |
Re: Kleinere Zahlen hinzuzählen
Du hast in so ziemlich allen Summen deine Laufvariable vergessen...
n sigma = 0 i=1 Warum forderst du denn, dass die Aussage für alle k <=n gilt und was ist eigentlich dieses n? Später benutzt du nur, dass die Aussage für n gilt. Es reicht zu fordern, dass es für ein (einziges) n in N gilt, wenn man zeigt, dass man daraus auch die Gültigkeit für n+1 zeigen kann und zusätzlich noch explizit zeigt, dass die Aussage für die 1 gilt. (oder die Null, die Formel gilt immer) |
Re: Kleinere Zahlen hinzuzählen
Ich hab das ganze jetzt nochmal leicht korrigiert.
Also, was ich mache ist das: Ich beweise erst einmal, dass meine Behauptung für n=1 gilt. (Also für alle n in N mit n<=1). Anschließend beweise ich (unter der Vorraussetzung, dass die Behauptung für alle n in N mit n<=k gilt), dass die Behauptung auch für alle n in N mit n<=k+1 gilt. |
Re: Kleinere Zahlen hinzuzählen
3_of_8: Toll, wie schön dass du das auch kannst. zufrieden?
Nikolas: Ja, und ich fand/finde die Induktionsannahme unwichtig, wobei man das so und so sehen kann. |
Re: Kleinere Zahlen hinzuzählen
Zitat:
b) Wer ist eigentlich dieses k? BTW: Du zeigst nicht, dass die Behauptung für alle n<=k+1 gilt. Du zeigst ausschließlich, dass sie für n+1 (k+1?) gilt. @ GrünFisch: Ohne diese Annahme kommst du aber nicht ans Ziel. Und wenn du etwas unter einer unbewiesenen Annahme berechnen willst, musst du die schon angeben. |
Re: Kleinere Zahlen hinzuzählen
@Nikolas:
Da kommt ja die Induktion ins Spiel. k ist sozusagen die obere Schranke, für die das ganze gilt. Beim Induktionsanfang ist k=1. Dann beweise ich, dass es, wenn es für k gilt, auch für k+1 gilt. Also wenn für k=1, dann auch für k=2, dann auch für k=3 usw. Wenn man das bis unendlich fortdenkt, ist es für {1; 2; 3;...}, also ganz N, bewiesen. @Inherited: Dann hast du das Verfahren wohl noch nicht so ganz verstanden. Ohne Induktionsannahme funktioniert da nämlich gar nix. Und darum hab ich es auch nochmal korrekt formuliert. ;) |
Re: Kleinere Zahlen hinzuzählen
3_of_8: Der Beweis mag ohne nicht komplett sein, aber die Aussage "ohne funktioniert da garnicht" ist schlichtweg falsch.
|
Re: Kleinere Zahlen hinzuzählen
Zitat:
Zitat:
Was du hier schreibst, ist aber nicht das, was du in deinem Beweis geschrieben hast. Der Satz 'Dann beweise ich, dass es, wenn es für k gilt, auch für k+1 gilt.' ist die Kernaussage. Du betrachtest keine Menge von Zahlen, für die die Aussage gilt, sondern nur eine einzige und zeigt, dass es auch für die nächste Zahl gilt. Deine Vorraussetzung ist zu stark und kann dir bei anderen Beweisen Ärger bringen. Bei einem Satz (ich glaube etwas über Bäume), kann man die Aussage erst für alle zweierPotenzen zeigen und dann die Induktion von n nach n-1 machen und so rückwärts induzieren. Bei sowas hättest du dann Probleme mit deiner Vorraussetzung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz