Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2012, 23:32   #1
Carter
Пользователь
 
Регистрация: 21.08.2011
Сообщений: 15
По умолчанию Эпициклоида с часами (С++)

Такое задание: построить график эпициклоиды и в этом же окне вывести цифровые часы. Проблема в обновлении часов. При выводе на экран нового значения времени, предыдущее значение я стираю (используя clrscr()) и график стирается вместе с ним. Как мне сделать так, чтобы график оставался?
Вот код:
Код:
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <dos.h>

void epicykl(int br, int sr)
{
float t,x,y;
setcolor(YELLOW);
line(0,240,640,240); // OX
line(320,0,320,480); // OY
line(630,235,640,240); // -> OX
line(630,245,640,240); // -> OX
line(315,10,320,0); // -> OY
line(325,10,320,0); // -> OY
outtextxy(328,5,"Y");
outtextxy(630,248,"X");
outtextxy(325,248,"0");
line(350,238,350,242);
line(318,210,322,210);
outtextxy(348,248,"1");
outtextxy(328,210,"1");
//circle(320,240,br*10);
//circle(320+br+sr,240,sr);
t=0.01;
while (t<=2*M_PI)
{
x=(br+sr)*cos(t)-sr*cos((br+sr)/sr*t);
y=sr*sin((br+sr)/sr*t)-(br+sr)*sin(t);
/*printf("%lf\n",x);
printf("%lf",y);
break;*/
putpixel(x*30+320,y*30+240,GREEN);
t+=0.001;
delay(1);
}
}

void clock()
{
struct time ti;
while(!kbhit())
{
gettime(&ti);
printf("%2d:%02d:%02d",ti.ti_hour,ti.ti_min,ti.ti_sec);
delay(1000);
//clrscr();
}
}

void main()
{
int graphdriver=DETECT, gmode;
int br,sr;
printf("Radius of a big circle: ");
scanf("%d",&br);
printf("Radius of a small circle: ");
scanf("%d",&sr);
initgraph(&graphdriver,&gmode,"");
epicykl(br,sr);
clock();
getch();
closegraph();
}
Carter вне форума Ответить с цитированием
Старый 14.04.2012, 23:45   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,427
По умолчанию

Скомпилировать нечем, но чисто теоретически попробуйте так:
Код:
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <dos.h>

int br,sr;

void epicykl(int br, int sr)
{
float t,x,y;
setcolor(YELLOW);
line(0,240,640,240); // OX
line(320,0,320,480); // OY
line(630,235,640,240); // -> OX
line(630,245,640,240); // -> OX
line(315,10,320,0); // -> OY
line(325,10,320,0); // -> OY
outtextxy(328,5,"Y");
outtextxy(630,248,"X");
outtextxy(325,248,"0");
line(350,238,350,242);
line(318,210,322,210);
outtextxy(348,248,"1");
outtextxy(328,210,"1");
//circle(320,240,br*10);
//circle(320+br+sr,240,sr);
t=0.01;
while (t<=2*M_PI)
{
x=(br+sr)*cos(t)-sr*cos((br+sr)/sr*t);
y=sr*sin((br+sr)/sr*t)-(br+sr)*sin(t);
/*printf("%lf\n",x);
printf("%lf",y);
break;*/
putpixel(x*30+320,y*30+240,GREEN);
t+=0.001;
delay(1);
}
}

void clock()
{
struct time ti;
while(!kbhit())
{
gettime(&ti);
printf("%2d:%02d:%02d",ti.ti_hour,ti.ti_min,ti.ti_sec);
epicykl(br,sr);
delay(1000);
clrscr();
}
}

void main()
{
int graphdriver=DETECT, gmode;
printf("Radius of a big circle: ");
scanf("%d",&br);
printf("Radius of a small circle: ");
scanf("%d",&sr);
initgraph(&graphdriver,&gmode,"");
clock();
getch();
closegraph();
}
Кстати, в чем скомпилировать?)
Clrscr, наверное, очищает весь экран, так что единственный вариант - перерисовывать эпициклоиду.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.04.2012, 00:07   #3
Carter
Пользователь
 
Регистрация: 21.08.2011
Сообщений: 15
По умолчанию

О перерисовке я сразу не подумал) Спасибо большое! Сейчас буду разбираться.
А компилировать такой проект надо в Borland C или Turbo C.
Carter вне форума Ответить с цитированием
Старый 15.04.2012, 00:56   #4
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

А почему бы не выводить время например в label?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 26.04.2012, 00:00   #5
Deadkill
Новичок
Джуниор
 
Регистрация: 25.04.2012
Сообщений: 1
По умолчанию

Как можно эпициклоид в Microsoft Visual C++ 2008 скомпилировать не используя время? Если не сложно напишите исходник, просто с графиком не могу разобраться.
Deadkill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кнопка рядом с часами grafgrial Общие вопросы Delphi 3 19.10.2011 11:21
как поместить значёк программы на панель рядом с часами 54rus Помощь студентам 2 08.12.2009 20:50
Паскаль.Программа с часами romich.91 Помощь студентам 1 08.12.2009 13:26
приложение рядом с часами ERASERROR Общие вопросы Delphi 10 23.01.2008 23:59