11.12 Структуры

TODO объединить со следующим практикумом (успели только половину)

Форма для сдачи

:)) Зачем? Разве нельзя всё смоделировать массивами?

:)) Массив и структуры — составные типы данных. Чем принципиально int a[3] отличается от struct {int a0; int a1; int a2;} a?

   1 /* координаты точки на плоскости */
   2 struct dot {
   3         float x;
   4         float y;
   5 }

Массивы структур

Указатель на структуру

:)) Зачем нужен указатель на структуру?


TODO отсюда пришлось бежать бегом

Указатель на структуру и malloc / calloc

Если структур планируется много, локально их заводить нельзя. Надо malloc() или calloc(), а потом free()

Структуры и typedef

:)) Что означают эти записи?

Общий вид typedef

Конструкция описание константа_типа в точности совпадает с описанием переменной, но typedef в начале делает констунту_типа типом

Не создавайте typedef-ы для ссылочных типов! В первую очередь — на структуры! Можно на функцию — но она сама по себе и так ссылочный тип.

Д/З (можно делать)

TODO В будущем году добавить заданий


  1. Написать функцию ldiv_t lcms(int a, int b), которая вычисляет наименьшее общее кратное для целых a и b по формуле через наибольший общий делитель, а наибольший общий делитель — по алгоритму Евклида с остатком от деления ­с обязательным использованием функции из семейства div(). Функция также вычисляет сумму всех промежуточных результата деления (которое в нормальном случае в алгоритме Евклида не используется). Возвращает структуру ldit_t, в которой поле quot равно НОК, а rem — сумме частных.

    • Описание структур ldiv_t

      60 32
      • Последовательность пар «частное остаток_от_деления» для чисел 60 и 32 : 1 28, 1 4, 7 0; НОК = a*b/НОД

      480 9
  2. Вводить точки (пары вещественных чисел в формате чиcло:число) — вершины многоугольника без самопересечений. Для представления точек использовать структуру dot из практикума.. Окончание ввода — EOF. Вывести YES, если этот многоугольник — выпуклый, NO в противном случае. Если какие-то точки лежат на одной прямой — многоугольник не выпуклый.

    • Подсказка: все вершины можно не хранить, достаточно проверять, что поворот между тремя соседними (включая начало) всегда происходит в одну сторону (то есть все углы имеет одинаковый знак согласно Atan2)

    • Генератор многоугольников (на Python)

      520:257
      317:335
      142:326
      106:149
      208:48
      411:45
      • →
      YES
    и
    • 253:40
      469:64
      487:195
      419:193
      421:306
      285:342
      101:317
      77:202
      126:62
      • →
      NO

LecturesCMC/AL/Prac/21_Structs (последним исправлял пользователь FrBrGeorge 2026-11-15 17:53:13)