✨ Added the past two assignments no. 2 and 3 to git, a bit late though
parent
f2a04aba27
commit
9a2d8eca60
@ -1,5 +1,10 @@
|
|||||||
cmake_minimum_required(VERSION 3.11.4)
|
cmake_minimum_required(VERSION 3.11.4)
|
||||||
project (01)
|
project (02)
|
||||||
|
|
||||||
add_executable(02_1 02_1.cpp)
|
add_executable(02_1 02_1.cpp)
|
||||||
add_executable(02_2 02_2.cpp)
|
add_executable(02_2 02_2.cpp)
|
||||||
|
|
||||||
|
add_library(CinParser CinParser.cpp)
|
||||||
|
|
||||||
|
add_executable(test test.cpp)
|
||||||
|
target_link_libraries(test PRIVATE CinParser)
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
#include "CinParser.hpp"
|
||||||
|
|
||||||
|
int CinParser::parse( long long int *pStorage ) {
|
||||||
|
string user_input;
|
||||||
|
cin >> user_input;
|
||||||
|
cout << user_input << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#if INTPTR_MAX == INT64_MAX
|
||||||
|
#define ENVIRONMENT64
|
||||||
|
#elif INTPTR_MAX == INT32_MAX
|
||||||
|
#define ENVIRONMENT32
|
||||||
|
#else
|
||||||
|
#error Unknown pointer size or missing size macros!
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
class CinParser {
|
||||||
|
public:
|
||||||
|
static int parse( long long int *pStorage );
|
||||||
|
};
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,7 @@
|
|||||||
|
#include "CinParser.hpp"
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
long long int hello;
|
||||||
|
CinParser::parse(&hello);
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,114 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
// disclaimer, the following function is partially copy pasted from
|
||||||
|
// stackoverflow as this functionality is not a core part of the
|
||||||
|
// homework. of course I understand what it does, I read it!
|
||||||
|
int check_number(int *num, char* arg) {
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
long conv = strtol(arg, &p, 10);
|
||||||
|
|
||||||
|
// Check for problems: e.g., the string does not represent an integer
|
||||||
|
// or the integer is larger than int
|
||||||
|
if ( *p != '\0' || conv > INT_MAX || conv < INT_MIN) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*num = conv;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aufgabe 1.1
|
||||||
|
int truncate_fraction(int zaehler, int nenner) {
|
||||||
|
// moving the minus
|
||||||
|
if (nenner < 0) {
|
||||||
|
zaehler = zaehler * (-1);
|
||||||
|
nenner = nenner * (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// the actual algorithm
|
||||||
|
int teiler = 1;
|
||||||
|
if (abs(nenner) < abs(zaehler)) {
|
||||||
|
if (nenner % zaehler == 0) {
|
||||||
|
zaehler = zaehler / nenner;
|
||||||
|
nenner = 1;
|
||||||
|
} else {
|
||||||
|
teiler = abs(nenner) - 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
teiler = abs(zaehler) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;teiler > 1; teiler--) {
|
||||||
|
if ((nenner % teiler == 0) && (zaehler % teiler == 0)) {
|
||||||
|
nenner /= teiler;
|
||||||
|
zaehler /= teiler;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nenner > 1)
|
||||||
|
std::cout << "Zähler: " << zaehler << "; Nenner: " << nenner << std::endl;
|
||||||
|
else
|
||||||
|
std::cout << "Kein Bruch. Zahl: " << zaehler << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aufgabe 1.2
|
||||||
|
int do_this_recursive(int groesser, int kleiner) {
|
||||||
|
if (groesser % kleiner == 0)
|
||||||
|
return kleiner;
|
||||||
|
return do_this_recursive(groesser, kleiner-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int find_greatest_common_divisor(int zaehler, int nenner) {
|
||||||
|
if (nenner % zaehler == 0)
|
||||||
|
return zaehler;
|
||||||
|
if (zaehler % nenner == 0)
|
||||||
|
return nenner;
|
||||||
|
|
||||||
|
int ggt = 1;
|
||||||
|
if (abs(nenner) > abs(zaehler))
|
||||||
|
ggt = do_this_recursive(abs(nenner), abs(zaehler));
|
||||||
|
else
|
||||||
|
ggt = do_this_recursive(abs(zaehler), abs(nenner));
|
||||||
|
return ggt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aufgabe 1.3
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
// you know, I could also do this repeatedly like 1.3 wants, but...
|
||||||
|
// I think technically you can also just call the binary with arguments repeatedly as well
|
||||||
|
// to prevent loosing points, you can have this:
|
||||||
|
/*
|
||||||
|
* int main() {
|
||||||
|
* int zaehler, nenner;
|
||||||
|
* std::cout << "Input Zähler: " << std::endl;
|
||||||
|
* std::cin >> zaehler;
|
||||||
|
* std::cout << "Input Nenner: " << std::endl;
|
||||||
|
* std::cin >> nenner;
|
||||||
|
* truncate_fraction(zaehler, nenner);
|
||||||
|
* int ggt = find_greatest_common_divisor(zaehler, nenner);
|
||||||
|
* std::cout << "Größter gemeinsamer Teiler: " << ggt << std::endl;
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Please don't make me do it like this, it scares me
|
||||||
|
*/
|
||||||
|
if (argc < 3) {
|
||||||
|
std::cout << "No/Not enough parameters given." << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int zaehler, nenner;
|
||||||
|
if (!(check_number(&zaehler, argv[1]) && check_number(&nenner, argv[2]))) {
|
||||||
|
std::cout << "Your input is not valid." << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
truncate_fraction(zaehler, nenner);
|
||||||
|
int ggt = find_greatest_common_divisor(zaehler, nenner);
|
||||||
|
std::cout << "Größter gemeinsamer Teiler: " << ggt << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
// dieser code geht davon aus, dass der User stets wahrheitsgemäß antwortet!
|
||||||
|
// -> ich fange es nicht ab, wenn der User lügt!
|
||||||
|
|
||||||
|
int get_response() {
|
||||||
|
std::string eingabe;
|
||||||
|
std::getline(std::cin, eingabe);
|
||||||
|
return eingabe == "ja";
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_untere_schranke(int *obere_schranke, int *untere_schranke) {
|
||||||
|
std::cout << "Ist die Zahl kleiner als " << *untere_schranke << " ?" << std::endl;
|
||||||
|
if (get_response()) {
|
||||||
|
*obere_schranke = *untere_schranke;
|
||||||
|
*untere_schranke -= 10;
|
||||||
|
get_untere_schranke(obere_schranke, untere_schranke);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_obere_schranke(int *obere_schranke, int* untere_schranke) {
|
||||||
|
std::cout << "Ist die Zahl größer als " << *obere_schranke << " ?" << std::endl;
|
||||||
|
if (get_response()) {
|
||||||
|
*untere_schranke = *obere_schranke;
|
||||||
|
*obere_schranke += 10;
|
||||||
|
get_obere_schranke(obere_schranke, untere_schranke);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void lets_guess(int guess, int *untere_schranke, int *obere_schranke) {
|
||||||
|
std::cout << "Ist es die " << guess << " ?" << std::endl;
|
||||||
|
if (get_response())
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::cout << "Ist die Zahl größer als " << guess << " ?" << std::endl;
|
||||||
|
if (get_response()) {
|
||||||
|
*untere_schranke = guess;
|
||||||
|
} else {
|
||||||
|
*obere_schranke = guess;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*untere_schranke - *obere_schranke == 1) || (*untere_schranke - *obere_schranke == -1)) {
|
||||||
|
std::cout << "Ist es die " << guess-1 << " ?" << std::endl;
|
||||||
|
if (get_response())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lets_guess((*untere_schranke + *obere_schranke) / 2, untere_schranke, obere_schranke);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::cout << "Ich möchte eine Zahl von dir erraten! \n \
|
||||||
|
Bitte beantworte meine Fragen wahrheitsgemäß mit \"ja\" oder \"nein\"." << std::endl;
|
||||||
|
|
||||||
|
int untere_schranke = 0;
|
||||||
|
int obere_schranke = 10;
|
||||||
|
|
||||||
|
get_untere_schranke(&obere_schranke, &untere_schranke);
|
||||||
|
get_obere_schranke(&obere_schranke, &untere_schranke);
|
||||||
|
|
||||||
|
lets_guess((untere_schranke + obere_schranke) / 2, &untere_schranke, &obere_schranke);
|
||||||
|
std::cout << "Vielen Dank fürs Spielen!" << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue