11.12 Структуры (продолжение), argv и random
Лайфхак: чтобы не писать везде struct имя, можно начать определение структуры с typdef struct имя имя
Написать функцию float distance(dot a, dot b), рассчитывающую расстояние между двумя точками
функцию вывода точки print_dot(dot a) (без перевода строки) в формате абсцисса:ордината (используется "%f")
Указатель на структуру
Большее упражнение из трёх частей Написать функцию triangle make_triangle(a, b, c), которая возвращает треугольник с заполненными полями a, b, c и s (площадь вычисляется по формуле Герона)
Написать функцию int scan_triange(triangle *t), которая вводит три числа и заполняет поля треугольника t
Вспоминаем, что (*x).(y) — это x->y
Написать функцию print_triangle(triangle t), которая выводит треугольник с помощью print_dot() в формате вершина вершина вершина площадь
Пятиминутка отдыха
int main(int argc, char *argv)
Вывести весь argv[] Попытаться вывести за его пределами
atoi() и random() — вывести псевдослучайное число в диапазоне от argv[1] до argv[2]
С помощью atof() и drand48() написать программу fseq количество от до, которая выводит количество псевдослучайных чисел в диапазоне от…до.
Запасти эту программу в каталог NET: ls NET
cp fseq.c NET/
rm fseq.c
cp NET/fseq.c .
Массивы структур, malloc / calloc
Завести массив из 10 треугольников, ввести их с помощью scan_triange(), тут же вывести Сгенерировать входные данные с помощью fseq!
Если структур планируется много, локально их заводить нельзя. Надо malloc() или calloc(), а потом free()
Переписать пример с N треугольниками, calloc() и free()
Лайфхак: к серверу практикума можно подключиться из дома! (например, скачать с него файлы)!
Д/З (планируемое)
TODO
Ввести N ⩽ 100, затем — N точек (пар вещественных чисел). Вывести (с помощью print_triangle()) все образуемые ими треугольники в порядке возрастания площади. Вершины треугольника всегда идут в порядке их ввода.
Подсказка: поскольку треугольников будет немного, их можно даже не сортировать заранее — просто искать очередной. Это всего лишь в два раза медленнее обменной сортировки…
Написать программу, которая получает в командной строке (стандартный ввод не используется) четыре параметра: координаты центра окружности x, y; её радиус r, и количество точек N. Программа должна вывести N координат случайных точек в формате абсцисса:ордината, равномерно распределённых внутри окружности.
Описать несколько функций, работающих с типом struct rational { int num; int denom; } — рациональными числами, представленными в виде простой дроби.
normalize(a) — сокращение дроби (пригодится НОД)
add(a, b), mul, sub, div — арифметические операции
eq(a, b) — равнение на ==
double(a) — преобразование в вещественное число
Ввести N ⩽ 10000, затем — N строк вида «имя фамилия возраст». Отсортировать ввод любым эффективным устойчивым методом (годится сортировка слиянием, quicksort не годится) и вывести. Строки сравниваются лексикографически (например, с помощью strcmp()), возраст — как число.
