From 4c4507811c37fba7c1ea30ee5a22545f0e2e23cf Mon Sep 17 00:00:00 2001 From: "g.mandl" Date: Wed, 22 Oct 2025 23:14:52 +0200 Subject: [PATCH] =?UTF-8?q?Dateien=20nach=20=E2=80=9EBSP=5F1=5FC=E2=80=9C?= =?UTF-8?q?=20hochladen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BSP_1_C/bsp_1_c.cbp | 42 +++++++++++++++++++++++++++++++++++ BSP_1_C/bsp_1_c.cpp | 48 ++++++++++++++++++++++++++++++++++++++++ BSP_1_C/bsp_1_c.h | 26 ++++++++++++++++++++++ BSP_1_C/main.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 169 insertions(+) create mode 100644 BSP_1_C/bsp_1_c.cbp create mode 100644 BSP_1_C/bsp_1_c.cpp create mode 100644 BSP_1_C/bsp_1_c.h create mode 100644 BSP_1_C/main.cpp diff --git a/BSP_1_C/bsp_1_c.cbp b/BSP_1_C/bsp_1_c.cbp new file mode 100644 index 0000000..df39357 --- /dev/null +++ b/BSP_1_C/bsp_1_c.cbp @@ -0,0 +1,42 @@ + + + + + + diff --git a/BSP_1_C/bsp_1_c.cpp b/BSP_1_C/bsp_1_c.cpp new file mode 100644 index 0000000..befd932 --- /dev/null +++ b/BSP_1_C/bsp_1_c.cpp @@ -0,0 +1,48 @@ +#include "bsp_1_c.h" + +long long int fkt1(const long long int n) +{ + long long int sum1, sum2, sum3, sum; + + sum1 = 0; + for (long long int k = 3; k<= n; k = k+3) // Summation der Vielfachen von 3, die kleinergleich n sind + { + sum1 = sum1 + k; + } + + sum2 = 0; + for (long long int k = 5; k<= n; k = k+5) // Summation der Vielfachen von 5, die kleinergleich n sind + { + sum2 = sum2 + k; + } + + sum3 = 0; + for (long long int k = 15; k<= n; k = k + 3*5) // Summation der Vielfachen von 15, die kleinergleich n sind + { + sum3 = sum3 + k; + } + + // addieren die Vielfachen von 3 und 5, müssen die Vielfachen von 15 aber abziehen, da diese + // sowohl bei sum1 als auch sum2 mitgezählt wurden (doppelt gezählt) + sum = sum1 + sum2 - sum3; + + return sum; +} + + +// berechnet die gesuchte Summe ausschließlich nach einer Formel / ohne loops +long long int fkt2(const long long int n) +{ + // Berechnung via Formel + // schreibt Summe der durch 3 teilbaren Zahlen an, hebt 3 heraus und braucht dann nur mehr + // die Summe von 1 bis n/3 abgerundet zu addieren; hierfür verwende die Gauß´sche Summenformel + // und integer Division; analog für 5 und 15 + long long int sum1, sum2, sum3, sum; + sum1 = 3*(n/3)*(n/3+1)/2; + sum2 = 5*(n/5)*(n/5+1)/2; + sum3 = 15*(n/15)*(n/15+1)/2; + + sum = sum1 + sum2 - sum3; + + return sum; +} diff --git a/BSP_1_C/bsp_1_c.h b/BSP_1_C/bsp_1_c.h new file mode 100644 index 0000000..1fbe5a7 --- /dev/null +++ b/BSP_1_C/bsp_1_c.h @@ -0,0 +1,26 @@ +#ifndef BSP_1_C_H_INCLUDED +#define BSP_1_C_H_INCLUDED + +// +/** \brief Funktion zur Berechnung der Summe aller Vielfachen von 3 und 5, kleiner als n via for loops + * + * \param[in] n obere Schranke für die Zahlen, welche aufsummiert werden sollen + * \return Summe der Vielfachen (<=n) von 3 und 5 + * + */ +long long int fkt1(const long long int n); + + +// +/** \brief berechnet die gesuchte Summe ausschließlich nach einer Formel / ohne loops. Berechnung via Formel; + // schreibt Summe der durch 3 teilbaren Zahlen an, hebt 3 heraus und braucht dann nur mehr + // die Summe von 1 bis n/3 abgerundet zu addieren; hierfür verwende die Gauß´sche Summenformel + // und integer Division; analog für 5 und 15 + * + * \param[in] n obere Schranke für die Zahlen, welche aufsummiert werden sollen + * \return Summe der Vielfachen (<=n) von 3 und 5 + * + */ +long long int fkt2(const long long int n); + +#endif // BSP_1_C_H_INCLUDED diff --git a/BSP_1_C/main.cpp b/BSP_1_C/main.cpp new file mode 100644 index 0000000..bea154f --- /dev/null +++ b/BSP_1_C/main.cpp @@ -0,0 +1,53 @@ +#include "bsp_1_c.h" +#include +#include +// BSP 1_C +using namespace std; + +int main() +{ + long long int n1 = 15; + long long int n2 = 1001; + long long int n3 = 1432987; + + cout << "n = " << n1 << endl; + cout << "Funktion 1 / loops" << endl; + cout << fkt1(n1) << endl; + cout << "Funktion 2 / Formel" << endl; + cout << fkt2(n1) << endl << endl; + + cout << "n = " << n2 << endl; + cout << "Funktion 1 / loops" << endl; + cout << fkt1(n2) << endl; + cout << "Funktion 2 / Formel" << endl; + cout << fkt2(n2) << endl << endl; + + cout << "n = " << n3 << endl; + cout << "Funktion 1 / loops" << endl; + cout << fkt1(n3) << endl; + cout << "Funktion 2 / Formel" << endl; + cout << fkt2(n3) << endl << endl; + + + // ad Zeitmessung beider Funktionen + auto time1start = std::chrono::system_clock::now(); + for (int k = 1; k <= 10000; ++k) + { + fkt1(n3); + } + auto time1end = std::chrono::system_clock::now(); + auto time1 = std::chrono::duration_cast(time1end - time1start); + cout << "benoetigte Zeit fuer Funktion 1 (10000 maliger Aufruf; n=1432987): " << time1.count() << "ms" << endl; + + auto time2start = std::chrono::system_clock::now(); + for (int k = 1; k <= 10000; ++k) + { + fkt2(n3); + } + auto time2end = std::chrono::system_clock::now(); + auto time2 = std::chrono::duration_cast(time2end - time2start); + cout << "benoetigte Zeit fuer Funktion 2 (10000 maliger Aufruf; n=1432987): " << time2.count() << "ms" << endl; + + + return 0; +}