diff --git a/ex4/ex4.c b/ex4/ex4.c index 900c833c4a38e6abfd6c8584e06a14b000e3bbdf..26cb2b55e32c1b7c32ef81982fe033b2d92f3593 100644 --- a/ex4/ex4.c +++ b/ex4/ex4.c @@ -16,30 +16,84 @@ #include <stdlib.h> #include <string.h> +typedef struct Point { + int32_t x; + int32_t y; +} Point; + +Point **read_points_from_input(int32_t points_length) { + Point **points = (Point **)malloc(sizeof(Point) * points_length); + + for (int32_t i = 0; i < points_length; i += 1) { + Point *point = (Point *)malloc(sizeof(Point)); + scanf("%d %d", &point->x, &point->y); + points[i] = point; + } + + return points; +} + +int32_t **new_matrix(int32_t row_count, int32_t column_count) { + int32_t **matrix = (int32_t **)malloc(sizeof(int32_t *) * row_count); + + for (int32_t i = 0; i < row_count; i += 1) { + matrix[i] = (int32_t *)malloc(sizeof(int32_t) * column_count); + } + + return matrix; +} + +int32_t calculate_distance(Point *p1, Point *p2) { + return abs(p2->x - p1->x) + abs(p2->y - p1->y); +} + +void compute_distances(int32_t **distances, Point **points, int32_t points_length) { + for (int32_t i = 0; i < points_length; i += 1) { + for (int32_t j = 0; j < points_length; j += 1) { + distances[i][j] = calculate_distance(points[i], points[j]); + } + } +} + +void print_matrix(int32_t **matrix, int32_t row_count, int32_t column_count) { + for (int32_t i = 0; i < row_count; i += 1) { + for (int32_t j = 0; j < column_count; j += 1) { + printf("%d ", matrix[i][j]); + } + + printf("\n"); + } +} + +void delete_matrix(int32_t **matrix, int32_t row_count) { + for (int32_t i = 0; i < row_count; i += 1) { + free(matrix[i]); + } + + free(matrix); +} + +void delete_points(Point **points, int32_t points_length) { + for (int32_t i = 0; i < points_length; i += 1) { + free(points[i]); + } + + free(points); +} + int main() { - // int32_t values_length = 5; - // double values[values_length]; - - // for (int32_t i = 0; i < values_length; i += 1) { - // double value; - // scanf("%lf", &value); - // values[i] = value; - // } - - // int32_t values_length = 5; - // int32_t values[values_length]; - - // for (int32_t i = 0; i < values_length; i += 1) { - // int32_t value; - // scanf("%d", &value); - // values[i] = value; - // } - - // char a[100]; - // int32_t b; - // scanf("%s %d", a, &b); - // printf("%s %d\n", a, b); - - printf("ex4\n"); + int32_t points_length; + scanf("%d", &points_length); + Point **points = read_points_from_input(points_length); + + int32_t **distances = new_matrix(points_length, points_length); + compute_distances(distances, points, points_length); + + printf("\n"); + print_matrix(distances, points_length, points_length); + + delete_matrix(distances, points_length); + delete_points(points, points_length); + return EXIT_SUCCESS; }