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



         

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


}

/*-----------------------------* /

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

{

const a=4,b=20,c=a+a+b; //габариты сегмента

const dl[]={a,b,a,-a,-b}; //приращения по координатам

const d2 [] = {-a,_0,a,a, 0}; //приращения по координатам

const dx[]={0,0,0,0,с,0,с}; //смещения начальных1 вершин по х

const dy [] = {0, с, 2*с, 0, 0, с, с}; //смещения начальных вершин по у

int j, k; struct {int x;int у;} ху[6]; //координаты точек контура

char q[10][7]={ {1,0,1,1,1,1,1}, //перемычки цифры 0

{0,0,0,0,1,0,1},{1,1,1,0,1,1,0}, //перемычки цифр 1,2

{1,1,1,0,1,0,1},{0,1,0,1,1,0,1}, //перемычки цифр 3,4

{1,1,1,1,0,0,1},{!,1,1,1,0,1,1}, //перемычки цифр 5,6

{1,0,0,0,1,0,1},{1,1,1,1,1,1,1}, //перемычки цифр 7,8

{1,1,1,1,1,0,1}}; //перемычки цифры 9

for(j=0; j<7; j++) {

if(q[n][j]==0) continue;

xy[0].x=x+dx[j];

xy[0].y=y+dy[j];

for(k=l; k<6;k++)

{//цикл вычисления координат точек контура if(j<3)

{//пересчет для горизонтальных перемычек

xy[k].x=xy[k-l].x+dl[k-l];

xy[k].y=xy[k-l].y+d2[k-l]; }

else

{//пересчет для вертикальных перемычек

xy[k].x=xy[k-l].x-d2[k-l];

xy[k].y=xy[k-l].y+dl[k-l]; } }

fillpoly(6,(int *)xy); //заливка перемычки

} }

Задание 8.16. Цифровые часы

Используя составленную в предыдущем примере программу формирования семисегментных цифр, написать программу, отображающую на экране текущее показание компьютерных часов.

Попытка использовать предыдущую программу cifra сразу же выявляет ее недостаток. 0на хорошо "рисует" цифры на чистом экране, но в часах приходится строить новую цифру поверх уже нарисованной. Поэтому в самом начале процедуры придется стереть предыдущее изображение, например с помощью процедуры bar.

Совет 1 (Паскаль)

Показания системных часов в Паскале можно опросить с помощью процедуры gettime. Для того чтобы исключить излишнее мигание на экране, целесообразно перерисовывать цифры часов, минут или секунд только при их изменении. С этой целью в программе предусмотрен двойной набор переменных для хранения предыдущего (hl.ml.sl) и текущего (h2,m2,s2) показаний часов. В начале работы программы в первый набор заносятся невообразимые значения, поэтому первое же обращение к gettime вызовет перерисовку всех трех цифр и запоминание нормальных значений часов, минут и секунд. В последующих циклах будут перерисовываться только те цифры, значения которых изменились.




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