Dateien nach „BSP_1_C“ hochladen

This commit is contained in:
Georg Thomas Mandl 2025-10-22 23:14:52 +02:00
commit 4c4507811c
4 changed files with 169 additions and 0 deletions

42
BSP_1_C/bsp_1_c.cbp Normal file
View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="bsp_1_c" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/bsp_1_c" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/bsp_1_c" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler>
<Unit filename="bsp_1_c.cpp" />
<Unit filename="bsp_1_c.h" />
<Unit filename="main.cpp" />
<Extensions>
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>

48
BSP_1_C/bsp_1_c.cpp Normal file
View file

@ -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;
}

26
BSP_1_C/bsp_1_c.h Normal file
View file

@ -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

53
BSP_1_C/main.cpp Normal file
View file

@ -0,0 +1,53 @@
#include "bsp_1_c.h"
#include <iostream>
#include <chrono>
// 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<std::chrono::milliseconds>(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<std::chrono::milliseconds>(time2end - time2start);
cout << "benoetigte Zeit fuer Funktion 2 (10000 maliger Aufruf; n=1432987): " << time2.count() << "ms" << endl;
return 0;
}