Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 3


/p>

Номер точки

Смещения по координатам относительно предыдущей точки

Для горизонтального сегмента

Для вертикального сегмента

По х

По у

Пох

По у

3

а

а


а

4


а



5

-b

0

0

-b

Из табл. 8.4 видно, что при реализации программы достаточно иметь всего два массива смещений:

d1 = (0, а,b, а,-а,-а) и d2 = (0,-а, 0, а, а, 0)

Для вертикального сегмента они меняются местами и у одного из них меняются знаки.

Установим соотношения между точкой привязки цифры и координатами начальных точек каждого из семи сегментов. Пронумеруем сверху вниз числами 1, 2 и 3 горизонтальные сегменты, а числами 1, 2, 3 и 4 — вертикальные сегменты слева направо и сверху вниз. Несложно убедиться в том, что координаты их нулевых вершин вычисляются следующим образом.

Для горизонтальных сегментов:

xl = х х2 = х х3= х

yl = у у2 = у + с уЗ = у + 2*с

Для вертикальных сегментов:

xl=x х2=х+с х3=х х4 = х + с

yl = у у2 = у у3 = у + с у4=у + с

Совет 2 (Си)

Для того-чтобы установить соответствие между числовым значением отображаемой цифры и составляющим ее набором сегментов, предлагается использовать семиразрядные двоичные числа, единичные разряды в которых устанавливают присутствие того или иного сегмента. Например, контур цифры 0 образуется первым и третьим горизонтальными сегментами и всеми четырьмя вертикальными. Поэтому цифре 0 можно поставить в соответствие код 1011111. Цифра 9 описывается кодом 1111101 и т. д. В приведенном ниже тексте программы на Си эти коды представлены не самым рациональным способом — в виде двумерного массива. Более оптимальный вариант предложен в следующем задании:

Программа 8_15.с

/* Построение 7-сегментных цифр */

#include <stdio.h>

#include <conio.h>

#include <graphics.h>

void cifra(int x,int y,int n) ;

void main() {

int gd=0,gm, k;

initgraph(&gd,&gm,"");

setcolor(4);

for(k=0;k<10;k++)

cifrat(k+1)*50,30,k) ; getch(}; return;




Содержание  Назад  Вперед