This commit is contained in:
2025-04-21 00:40:30 +02:00
parent 9ccc21edde
commit b8c75fc6d3
87 changed files with 2788 additions and 99 deletions

View File

@@ -0,0 +1,85 @@
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
// This is the definition for a fraction from the task
typedef struct {
int n;
int d;
} fraction_t;
fraction_t sub_frac(fraction_t *a, fraction_t *b) {
// this function should substract fractions from anonther
// with the condition that a/b - c/d = (ad + bc)/(bd)
// also check that the negative sign always is on the nominator
fraction_t r = {0};
// Check for edge cases
if (!a || !b || a->d == 0 || b->d == 0) return r;
// Calculate the result
r.n = a->n * b->d - a->d * b->n;
r.d = a->d * b->d;
// flip the signs
if (r.d < 0) {
r.d *= -1; r.n *= -1;
}
return r;
}
fraction_t *max_frac(fraction_t a[], int l) {
// This function should return a pointer to the biggest fraction in the array
// Do this with the condition that if a - b < 0 it follows that a < b.
// Init the max
fraction_t *m = a;
// Find the max
for (int i = 1; i < l; i++) {
if (sub_frac(m, a + i).n < 0) {
m = a + i;
}
}
return m;
}
#define N 10
void print_frac(fraction_t *f) {
printf("%d/%d ", f->n, f->d);
}
int main() {
// Seed the randomness
srand(time(NULL));
// Generate a list of random fractions
fraction_t l[N];
for (int i = 0; i < N; i++) {
fraction_t r = {rand()%5+1, rand()%5+1};
// Also give a random sign
if (rand()%2 == 0) {
r.n *= -1;
}
l[i] = r;
}
// print the fracions
for (int i = 0; i < N; i++) {
print_frac(l +i);
}
putchar('\n');
// Print the max Fraction
fraction_t *max = max_frac(l, N);
printf("The max fraction is: ");
print_frac(max);
putchar('\n');
}