Week 5 (10.10.)
Task descriptions are on the portal
Task 1
#include <stdio.h>
typedef struct Rational {
int nominator;
int denominator;
} Rational;
void print_rat(Rational r) {
printf("%d / %d", r.nominator, r.denominator);
}
Rational scan_rat() {
Rational value;
scanf("%d", &value.nominator);
scanf("%d", &value.denominator);
return value;
}
Rational mult_rat(Rational r_a, Rational r_b) {
Rational value = {.nominator = r_a.nominator * r_b.nominator, .denominator = r_a.denominator * r_b.denominator};
return value;
}
Rational add_rat(Rational r_a, Rational r_b) {
int nom = (r_a.nominator * r_b.denominator) + (r_b.nominator * r_a.denominator);
int den = r_a.denominator * r_b.denominator;
Rational value = {.nominator = nom, .denominator = den};
return value;
}
double rat_to_double(Rational r) {
return (double)r.nominator / r.denominator;
}
int main(void) {
Rational r1 = scan_rat();
printf("%f", rat_to_double(r1));
return 0;
}
Task 2
#include <stdio.h>
typedef struct Time {
int hour;
int minute;
} Time;
void print_time(Time t) {
printf("%02d:%02d\n", t.hour, t.minute);
}
Time add_to_time(Time t, int minutes) {
Time value = {.hour = t.hour, .minute = t.minute+minutes};
while (value.minute >= 60) {
value.minute -= 60;
value.hour += 1;
}
while (value.minute < 0) {
value.minute += 60;
value.hour -= 1;
}
while (value.hour >= 24) {
value.hour -= 24;
}
while (value.hour < 0) {
value.hour += 24;
}
return value;
}
int total_minutes(Time t) {
return t.hour * 60 + t.minute;
}
int elapsed_time(Time late_time, Time early_time) {
return total_minutes(late_time) - total_minutes(early_time);
}
Time subtract_from_time(Time t, int minutes) {
return add_to_time(t, -minutes);
}
int main(void) {
Time time_now = {.hour = 13, .minute = 5};
print_time(time_now);
printf("%d", elapsed_time(time_now, subtract_from_time(time_now, 60)));
}
Task 4
#include <stdio.h>
typedef struct Rod {
int minimum_mm;
int maximum_mm;
} Rod;
Rod join_rods(Rod r1, Rod r2) {
Rod value;
value.minimum_mm = r1.minimum_mm + r2.minimum_mm;
value.maximum_mm = r1.maximum_mm + r2.maximum_mm;
return value;
}
double mean_length(Rod r) {
return (r.maximum_mm + r.minimum_mm) / 2.0;
}
int main(void) {
Rod r1 = {.minimum_mm = 999, .maximum_mm = 1001};
Rod r2 = {.minimum_mm = 498, .maximum_mm = 502};
Rod r3 = {.minimum_mm = 300, .maximum_mm = 305};
Rod r_joined = join_rods(join_rods(r1,r2), r3);
printf("min: %d\nmax: %d\nmean: %.1f", r_joined.minimum_mm, r_joined.maximum_mm, mean_length(r_joined));
return 0;
}
- ← Previous
Week 4 (10.03.) - Next →
Week 6 (10.17.)