Список фигур

Перебираем список объектов с общим контрактом и считаем площадь.

Код

// «для каждого» по списку контрактов.
контракт Фигура
    функция площадь(): целое;
    функция название(): текст;
конец

структура Квадрат : Фигура
    целое сторона;
    функция площадь(): целое
        вернуть это.сторона * это.сторона;
    конец
    функция название(): текст
        вернуть "квадрат";
    конец
конец

структура Прямоугольник : Фигура
    целое ширина;
    целое высота;
    функция площадь(): целое
        вернуть это.ширина * это.высота;
    конец
    функция название(): текст
        вернуть "прямоугольник";
    конец
конец

функция главная(): целое
    Список из Фигура фигуры = Список из Фигура();
    Квадрат к = Квадрат(3);
    Прямоугольник р = Прямоугольник(2, 5);
    фигуры.добавить(к);
    фигуры.добавить(р);

    целое всего = 0;
    для каждого ф в фигуры
        вывести("%(ф.название())%: %(ф.площадь())%");
        всего = всего + ф.площадь();
    конец
    вывести("Общая площадь: %всего%");
    вернуть 0;
конец

Как запустить

Сохраните код в файл, например контракты_для_каждого.код, и выполните:

запустить контракты_для_каждого.код

Как это работает

  • Список из Фигура хранит разные структуры, если все они выполняют контракт Фигура.
  • Цикл для каждого ф в фигуры отдаёт каждый элемент как Фигура: можно вызывать название() и площадь().
  • Конструктор структуры принимает поля по порядку: Прямоугольник(2, 5).

Исходник лежит в репозитории: examples/контракты_для_каждого.код.