#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>
typedef struct {
void *elements;
size_t element_size;
size_t size;
} array_t;
void *get_array_element(array_t array, size_t idx) {
return array.elements + idx*array.element_size;
}
array_t create_array(size_t size_of_array, size_t size_of_element) {
array_t result = {
malloc(size_of_array
*size_of_element
), size_of_element,
size_of_array
};
return result;
}
void free_array_mem(array_t array) {
}
typedef struct {
float x, y;
} point_t;
float calc_point_length(point_t point) {
return sqrt(point.
x*point.
x + point.
y*point.
y); }
array_t transform_points_to_lengths(array_t points) {
assert(points.
element_size == sizeof(point_t
)); array_t result = create_array(points.size, sizeof(float));
int i = 0;
for(; i < points.size; i += 1) {
float *result_el = get_array_element(result, i);
point_t *point_el = get_array_element(points, i);
*result_el = calc_point_length(*point_el);
}
return result;
}
array_t read_points(FILE *file) {
int size = 0;
array_t result = create_array(size, sizeof(point_t));
int i = 0;
for(; i < size; i += 1) {
point_t *el = get_array_element(result, i);
fscanf(file
, "%f %f", &el
->x
, &el
->y
); }
return result;
}
int main(void) {
array_t points = read_points(stdin);
array_t lengths = transform_points_to_lengths(points);
int i = 0;
for(; i < lengths.size; i += 1) {
point_t *point = get_array_element(points, i);
float *length = get_array_element(lengths, i);
printf("[%f, %f] = %f\n", point
->x
, point
->y
, *length
); }
free_array_mem(points);
free_array_mem(lengths);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVkZSA8bWF0aC5oPgoKdHlwZWRlZiBzdHJ1Y3QgewoJdm9pZCAqZWxlbWVudHM7CglzaXplX3QgZWxlbWVudF9zaXplOwoJc2l6ZV90IHNpemU7Cn0gYXJyYXlfdDsKCnZvaWQgKmdldF9hcnJheV9lbGVtZW50KGFycmF5X3QgYXJyYXksIHNpemVfdCBpZHgpIHsKCWFzc2VydChpZHggPCBhcnJheS5zaXplKTsKCXJldHVybiBhcnJheS5lbGVtZW50cyArIGlkeCphcnJheS5lbGVtZW50X3NpemU7Cn0KCmFycmF5X3QgY3JlYXRlX2FycmF5KHNpemVfdCBzaXplX29mX2FycmF5LCBzaXplX3Qgc2l6ZV9vZl9lbGVtZW50KSB7Cglhc3NlcnQoc2l6ZV9vZl9hcnJheSA+IDApOwoJYXNzZXJ0KHNpemVfb2ZfZWxlbWVudCA+IDApOwoJCglhcnJheV90IHJlc3VsdCA9IHsKCQltYWxsb2Moc2l6ZV9vZl9hcnJheSpzaXplX29mX2VsZW1lbnQpLAoJCXNpemVfb2ZfZWxlbWVudCwKCQlzaXplX29mX2FycmF5Cgl9OwoJCglyZXR1cm4gcmVzdWx0Owp9Cgp2b2lkIGZyZWVfYXJyYXlfbWVtKGFycmF5X3QgYXJyYXkpIHsKCWZyZWUoYXJyYXkuZWxlbWVudHMpOwp9Cgp0eXBlZGVmIHN0cnVjdCB7CglmbG9hdCB4LCB5Owp9IHBvaW50X3Q7CgpmbG9hdCBjYWxjX3BvaW50X2xlbmd0aChwb2ludF90IHBvaW50KSB7CglyZXR1cm4gc3FydChwb2ludC54KnBvaW50LnggKyBwb2ludC55KnBvaW50LnkpOwp9CgphcnJheV90IHRyYW5zZm9ybV9wb2ludHNfdG9fbGVuZ3RocyhhcnJheV90IHBvaW50cykgewoJYXNzZXJ0KHBvaW50cy5lbGVtZW50X3NpemUgPT0gc2l6ZW9mKHBvaW50X3QpKTsKCWFycmF5X3QgcmVzdWx0ID0gY3JlYXRlX2FycmF5KHBvaW50cy5zaXplLCBzaXplb2YoZmxvYXQpKTsKCWludCBpID0gMDsKCWZvcig7IGkgPCBwb2ludHMuc2l6ZTsgaSArPSAxKSB7CgkJZmxvYXQgKnJlc3VsdF9lbCA9IGdldF9hcnJheV9lbGVtZW50KHJlc3VsdCwgaSk7CgkJcG9pbnRfdCAqcG9pbnRfZWwgPSBnZXRfYXJyYXlfZWxlbWVudChwb2ludHMsIGkpOwoJCSpyZXN1bHRfZWwgPSBjYWxjX3BvaW50X2xlbmd0aCgqcG9pbnRfZWwpOwoJfQoJcmV0dXJuIHJlc3VsdDsKfQoKYXJyYXlfdCByZWFkX3BvaW50cyhGSUxFICpmaWxlKSB7CglpbnQgc2l6ZSA9IDA7Cglmc2NhbmYoZmlsZSwgIiVkIiwgJnNpemUpOwoJYXJyYXlfdCByZXN1bHQgPSBjcmVhdGVfYXJyYXkoc2l6ZSwgc2l6ZW9mKHBvaW50X3QpKTsKCWludCBpID0gMDsKCWZvcig7IGkgPCBzaXplOyBpICs9IDEpIHsKCQlwb2ludF90ICplbCA9IGdldF9hcnJheV9lbGVtZW50KHJlc3VsdCwgaSk7CgkJZnNjYW5mKGZpbGUsICIlZiAlZiIsICZlbC0+eCwgJmVsLT55KTsKCX0KCXJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKHZvaWQpIHsKCWFycmF5X3QgcG9pbnRzID0gcmVhZF9wb2ludHMoc3RkaW4pOwoJYXJyYXlfdCBsZW5ndGhzID0gdHJhbnNmb3JtX3BvaW50c190b19sZW5ndGhzKHBvaW50cyk7CgkKCWludCBpID0gMDsKCWZvcig7IGkgPCBsZW5ndGhzLnNpemU7IGkgKz0gMSkgewoJCXBvaW50X3QgKnBvaW50ID0gZ2V0X2FycmF5X2VsZW1lbnQocG9pbnRzLCBpKTsKCQlmbG9hdCAqbGVuZ3RoID0gZ2V0X2FycmF5X2VsZW1lbnQobGVuZ3RocywgaSk7CgkJcHJpbnRmKCJbJWYsICVmXSA9ICVmXG4iLCBwb2ludC0+eCwgcG9pbnQtPnksICpsZW5ndGgpOwoJfQoJCglmcmVlX2FycmF5X21lbShwb2ludHMpOwoJZnJlZV9hcnJheV9tZW0obGVuZ3Rocyk7CglyZXR1cm4gMDsKfQo=