Exercise 5 draft
Added Exercise 5 but incomplete
This commit is contained in:
90
Informatik_I/Exercise_5/Task_1/calendar.cpp
Normal file
90
Informatik_I/Exercise_5/Task_1/calendar.cpp
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
#include "calendar.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
// PRE: a year greater or equal than 1900
|
||||||
|
// POST: returns whether that year was a leap year
|
||||||
|
bool is_leap_year(int year) {
|
||||||
|
if (year >= 1900) {
|
||||||
|
if (year % 4 == 0 && year % 100 != 0)
|
||||||
|
return true;
|
||||||
|
else if (year % 4 == 0 && year % 400 == 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE: a year greater or equal than 1900
|
||||||
|
// POST: returns the number of days in that year
|
||||||
|
int count_days_in_year(int year) {
|
||||||
|
if (year >= 1900) {
|
||||||
|
if (is_leap_year(year) == true)
|
||||||
|
return 366;
|
||||||
|
return 365;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE: a month between 1 and 12 and a year greater or equal than 1900
|
||||||
|
// POST: returns the number of days in the month of that year
|
||||||
|
int count_days_in_month(int month, int year) {
|
||||||
|
if (year >= 1900 && month > 0 && month <= 12) {
|
||||||
|
if (is_leap_year(year) == false) {
|
||||||
|
if (month % 2 != 0 && month != 2 && month <= 7)
|
||||||
|
return 31;
|
||||||
|
else if (month % 2 == 0 && month != 2 && month > 7)
|
||||||
|
return 31;
|
||||||
|
else if (month == 2)
|
||||||
|
return 28;
|
||||||
|
else
|
||||||
|
return 30;
|
||||||
|
} else {
|
||||||
|
if (month % 2 == 0 && month != 2 && month <= 7)
|
||||||
|
return 31;
|
||||||
|
else if (month % 2 == 0 && month != 2 && month > 7)
|
||||||
|
return 31;
|
||||||
|
else if (month == 2)
|
||||||
|
return 29;
|
||||||
|
else
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE: n/a
|
||||||
|
// POST: returns whether the given values represent a valid date
|
||||||
|
bool is_valid_date(int day, int month, int year) {
|
||||||
|
if (day > 0 && day <= count_days_in_month(month, year) && month > 0 &&
|
||||||
|
month <= 12 && year >= 1900)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE: the given values represent a valid date
|
||||||
|
// POST: returns the number of days between January 1, 1900 and this date
|
||||||
|
// (excluding this date)
|
||||||
|
int count_days(int day, int month, int year) {
|
||||||
|
int res_day = 0;
|
||||||
|
if (is_valid_date(day, month, year) == true) {
|
||||||
|
for (int j = 1901; j <= year; ++j) {
|
||||||
|
res_day += count_days_in_year(j);
|
||||||
|
}
|
||||||
|
for (int j = 1; j < month; ++j) {
|
||||||
|
res_day += count_days_in_month(j, year);
|
||||||
|
}
|
||||||
|
res_day += (day - 1);
|
||||||
|
}
|
||||||
|
return res_day;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE: the given values represent a (potentially invalid) date
|
||||||
|
// POST: prints the weekday if the date is valid or "invalid date" otherwise.
|
||||||
|
// Everything must be printed in lowercase.
|
||||||
|
void print_weekday(int day, int month, int year) {
|
||||||
|
if (is_valid_date(day, month, year) == true) {
|
||||||
|
std::string days[7] = {"sunday", "monday", "tuesday", "wednesday",
|
||||||
|
"thursday", "friday", "saturday"};
|
||||||
|
std::cout << days[((count_days(day, month, year) + 1) % 7)];
|
||||||
|
} else
|
||||||
|
std::cout << "invalid date";
|
||||||
|
}
|
38
Informatik_I/Exercise_5/Task_2/functions.cpp
Normal file
38
Informatik_I/Exercise_5/Task_2/functions.cpp
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// PRE: x > 0
|
||||||
|
// POST: returns n^x
|
||||||
|
int f1(int n, int x) {
|
||||||
|
int res = 1;
|
||||||
|
for (; x > 0; x--) {
|
||||||
|
res *= n;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE: n > 0
|
||||||
|
// POST: returns number of devisions by 10 with n
|
||||||
|
int f2(int n) {
|
||||||
|
int i = 0;
|
||||||
|
while (n > 0) {
|
||||||
|
n = n / 10;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE: n > 1
|
||||||
|
// POST: returns a bool to determine if n is prime
|
||||||
|
bool f3(int n) {
|
||||||
|
int i = 2;
|
||||||
|
for (; n % i != 0; ++i);
|
||||||
|
return n == i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRE: n is square number
|
||||||
|
// POST: returns root of n
|
||||||
|
int f4(int n) {
|
||||||
|
int i = 0;
|
||||||
|
while (i * i != n) {
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
35
Informatik_I/Exercise_5/Task_3/main.md
Normal file
35
Informatik_I/Exercise_5/Task_3/main.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
Please write your solution here.
|
||||||
|
For your convenience we have added a template for your answers below.
|
||||||
|
|
||||||
|
Note: Remember to also describe the problem of the function.
|
||||||
|
|
||||||
|
# Function `c++|is_even`:
|
||||||
|
|
||||||
|
The problem with this function is that it does not return a bool if the number `i` is uneven.
|
||||||
|
|
||||||
|
```c++
|
||||||
|
// PRE: n/a
|
||||||
|
// POST: returns true if i is even. If not it returns false.
|
||||||
|
bool is_even(int i) {
|
||||||
|
if (i % 2 == 0) return true;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# Function `c++|invert`:
|
||||||
|
|
||||||
|
The problem with this function is
|
||||||
|
|
||||||
|
```c++
|
||||||
|
// PRE: x is positive or negative but not zero.
|
||||||
|
// POST: returns inverse with respect to multiplication of x.
|
||||||
|
double invert(int x) {
|
||||||
|
// TODO: Fix code below.
|
||||||
|
if (x != 0) {
|
||||||
|
return 1.0 / x;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
std::cout << "0 has no inverse!";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
63
Informatik_I/Exercise_5/Task_4/run_length.cpp
Normal file
63
Informatik_I/Exercise_5/Task_4/run_length.cpp
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#include "run_length.h"
|
||||||
|
|
||||||
|
void encode() {
|
||||||
|
int i;
|
||||||
|
int c;
|
||||||
|
int count;
|
||||||
|
std::cin >> i;
|
||||||
|
std::cout << 1 << " ";
|
||||||
|
while (i != -1) {
|
||||||
|
count = 0;
|
||||||
|
c = i;
|
||||||
|
while (i == c && i >= 0 && i <= 255) {
|
||||||
|
++count;
|
||||||
|
std::cin >> i;
|
||||||
|
if (count == 255) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i < -1 || i > 255) {
|
||||||
|
if (count == 0) {
|
||||||
|
std::cout << "error";
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
std::cout << count << " ";
|
||||||
|
std::cout << c << " ";
|
||||||
|
std::cout << "error";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::cout << count << " ";
|
||||||
|
std::cout << c << " ";
|
||||||
|
}
|
||||||
|
std::cout << -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void decode() {
|
||||||
|
int i;
|
||||||
|
int count;
|
||||||
|
std::cin >> count;
|
||||||
|
std::cin >> i;
|
||||||
|
std::cout << 0 << " ";
|
||||||
|
while (count != -1) {
|
||||||
|
if (i < -1 || i > 255) {
|
||||||
|
std::cout << "error";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (count < -1 || count > 255) {
|
||||||
|
std::cout << "error";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int j = 0; j < count; ++j) {
|
||||||
|
std::cout << i << " ";
|
||||||
|
}
|
||||||
|
std::cin >> count;
|
||||||
|
if (count != -1)
|
||||||
|
std::cin >> i;
|
||||||
|
if (i == -1) {
|
||||||
|
std::cout << "error";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::cout << -1;
|
||||||
|
}
|
Reference in New Issue
Block a user