Schulaufgabe
-
seldon schrieb:
Das reicht ja in diesem speziellen Fall auch aus - 759 / 33 = 23.
Stilistisch ist das nicht sonderlich hübsch, aber direkt falsch ist an dem Programm nur, dass main void zurückgibt - per Standard muss es "int main" heißen, und bei Erfolg sollte 0 zurückgegeben werden - und dass <stdio.h> nicht eingebunden ist, so dass printf unbekannt sein könnte. Allerdings ist mir <t89c51ac2.h> nicht bekannt. Geht es dabei um einen Mikrocontroller? Für die gelten mitunter ganz andere Regeln.
Ich bekomme immer null raus, was mach ich falsch????
#include <stdio.h> #include <stdlib.h> int main(void) { float summe; summe=0; float lv; for( lv=7;lv<=39;lv++){ summe=summe+lv; } summe=summe/33; printf ("\n %i ",summe); return 0; }
-
Du versuchst, einen float als int auszugeben. %i ist nicht der richtige Format-Spezifikator.
-
seldon schrieb:
Du versuchst, einen float als int auszugeben. %i ist nicht der richtige Format-Spezifikator.
Und Prompt sind wir bei den I/O-Streams von C++ angelangt.
-
Hacker schrieb:
seldon schrieb:
Du versuchst, einen float als int auszugeben. %i ist nicht der richtige Format-Spezifikator.
Und Prompt sind wir bei den I/O-Streams von C++ angelangt.
vielen dank
-
Ah, das ist hier ja das C++-Forum. Da hat der Code, so wie er da steht, eigentlich nichts zu suchen; das passt besser ins C-Forum. In diesem speziellen Fall beschränkt sich der Unterschied allerdings auf die Ausgabe.
Ansonsten scheint mir das mit der Schleife recht umständlich. Ein kleines bisschen Mathematik bringt das auf O(1) runter:
#include <iostream> int summe_bis(int n) { return n * (n + 1) / 2; } double durchschnitt_zwischen(int unten, int oben) { return (summe_bis(oben) - summe_bis(unten - 1)) / (oben - unten + 1.0); } int main() { std::cout << durchschnitt_zwischen(7, 39) << '\n'; }
-
seldon schrieb:
return n * (n + 1) / 2;Der ist gut, den kannte ich noch nicht

-
Das sollte man eigentlich in der Schule gelernt haben: Gaußsche Summenformel
-
Th69 schrieb:
Das sollte man eigentlich in der Schule gelernt haben: Gaußsche Summenformel
Hatten wir nie. Aber die Anekdote kenn ich

-
seldon schrieb:
Ansonsten scheint mir das mit der Schleife recht umständlich. Ein kleines bisschen Mathematik bringt das auf O(1) runter
Was in der Aufgabe aber nicht erwünscht ist.
-
hmpff schrieb:
seldon schrieb:
Ansonsten scheint mir das mit der Schleife recht umständlich. Ein kleines bisschen Mathematik bringt das auf O(1) runter
Was in der Aufgabe aber nicht erwünscht ist.
Was er nicht behauptet hat. Die Version mit der Schleife hab ich vorgemacht.
-
seldon schrieb:
Ah, das ist hier ja das C++-Forum. Da hat der Code, so wie er da steht, eigentlich nichts zu suchen; das passt besser ins C-Forum. In diesem speziellen Fall beschränkt sich der Unterschied allerdings auf die Ausgabe.
Ansonsten scheint mir das mit der Schleife recht umständlich. Ein kleines bisschen Mathematik bringt das auf O(1) runter:
#include <iostream> int summe_bis(int n) { return n * (n + 1) / 2; } double durchschnitt_zwischen(int unten, int oben) { return (summe_bis(oben) - summe_bis(unten - 1)) / (oben - unten + 1.0); } int main() { std::cout << durchschnitt_zwischen(7, 39) << '\n'; }Das ist aber ziemlich umständlich.

double durchschnitt_zwischen(int unten, int oben) { return (oben+unten)/2.0; } int main() { std::cout << durchschnitt_zwischen(7, 39) << '\n'; }summe_bis(oben) - summe_bis(unten - 1)) / (oben - unten + 1.0) =
(oben*(oben+1)/2 - (unten-1)unten /2 )/(oben-unten+1) =
(oben²+oben - unten² + unten)/2(oben-unten+1) =
((oben-unten)(oben+unten) + oben + unten)/2(oben-unten+1) =
(oben+unten)(oben-unten+1)/2(oben-unten+1) =
(oben+unten)/2
-
Ha! Das hatte ich nicht gesehen.
