Dateien nach „BSP_1_C“ hochladen
This commit is contained in:
parent
9800c3596d
commit
4c4507811c
4 changed files with 169 additions and 0 deletions
42
BSP_1_C/bsp_1_c.cbp
Normal file
42
BSP_1_C/bsp_1_c.cbp
Normal 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
48
BSP_1_C/bsp_1_c.cpp
Normal 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
26
BSP_1_C/bsp_1_c.h
Normal 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
53
BSP_1_C/main.cpp
Normal 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;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue