(495)240-8280ПН-СБ с 12:00 до 20:00
We speak English

Урок 4.2. Иконка 6x6 пикселей: программа DRAWICON6(number)

Ввод: Действительные числа, целые числа

Эта программа является практически точной копией программы DRAWICON4, только здесь другие пределы.

Программа:

Текст после двойной косой черты // нужен только для пометок, его не обязательно вводить

EXPORT DRAWICON6(m)
BEGIN
  // EWS 12/28/2020

  // нужно ли пользователю вводить цвет?
  LOCAL ch, R, G, B;
  CHOOSE(ch, " Color?", " Black", " Yes");
  IF ch == 1 THEN
    ch := RGB(0, 0, 0);
    ELSE
    INPUT({R, G, B}, " Color Input",
    {" Red", " Green", " Blue"}, { }, {0, 0, 0});
    ch := RGB(R, G, B);
  END;

  // конвертировать m в действительное число, которое можно разделить
  // ввести 1 как целое число (#)
  IF TYPE(m) == 1 THEN
    m := B→R(m);
  END;

  // удалить части отрицательного значения и дроби (чтобы принимались такие числа как -12 и 34.55)
  m := ABS(IP(m));

  // разрешить m быть в текстовом формате, сохранив ее в M
  LOCAL M := m;

  // проверить верхний предел
  IF m > 2^36-1 THEN
    MSGBOX("Excess!");
    KILL;
  END;

  // разделить m на двоичные части и поместить их в нужно порядке
  LOCAL n := 35, r, c,
  mat := MAKELIST(0, X, 1, 36);

  REPEAT
    IF 2^n ≤ m THEN
      m := m-2^n;
      mat(n+1) := 1;
    END;
    n := n-1;
  UNTIL n < 0;
  mat := REVERSE(mat);

  // команда list2mat(список, количество столбцов) находится в каталоге
  mat := list2mat(mat, 6);

  // нарисовать границу и обозначение
  RECT();
  RECT_P(129, 79, 219, 169, RGB(0, 0, 255),
  RGB(255, 255, 255));
  TEXTOUT_P(M, 139, 0, 4, RGB(0, 128, 0));

  // использовать матрицу для рисования квадратов
  // пиксели x = столбцы, y = ряды
  FOR r FROM 1 TO 6 DO
    FOR c FROM 1 TO 6 DO
      IF mat(r, c) == 1 THEN
        RECT_P(129+15 * (c-1), 79+15 * (r-1),
        129+15*c, 79+15*r, ch);
      END;
    END;
  END;

  WAIT(0);

END;

Надеюсь, вам понравилось! Спасибо за внимание!

Интересно, насколько сложнее будет выполнить этот проект на калькуляторе TI-84 CE-T?

До новых встреч!