Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.88
Stysha
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 14
#1

Как создать механические часы (с циферблатом и стрелками) - C++

17.08.2012, 09:51. Просмотров 3421. Ответов 23
Метки нет (Все метки)

Всем привет)
Мне в универе задали написать мех. часы, но как я поняла, они создаются при помощи классов...
Меня это удивило, потому что нам говорили, что мы только на след. год будем работать с классами...
Скажите, можно ли их создать без классов?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2012, 09:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как создать механические часы (с циферблатом и стрелками) (C++):

Часы со стрелками - C++
Добрый день! Выдает ошибку ||=== Build: Debug in gggg (compiler: GNU GCC Compiler) ===| c:\CppProjects\gggg\сячмямчячмчя.cpp||In...

создать электронные часы - C++
Написать профамму, которая выводит на экран работающие "электронные часы", которые работают в течение, например, трех минут или до тех...

Создать класс времени: часы, минута, секунда - C++
Создать класс времени: часы, минута, секунда. К нему класс потомок "Абонемент мобильной связи": фамилия, оператор и текущее время и нужно...

Создать структуру Время с элементами Часы, Минуты - C++
Создать структуру Время с элементами Часы, Минуты. Реализовать следующую задачу - у прибора зафиксировано время начала работы и время...

Объясните как работает _getch() со стрелками - C++
Я недавно начал учить С++ и я совершенно не понимаю как эта функция работает со стрелками. Например код вида char ch; ch=_getch(); ...

Как сделать управление стрелками в консольной змейке? - C++
Доброго времени суток. Создаю консольную змейку. Поле на котором бегает змея это двумерный массив чаров. Змея отображается символами * 1...

23
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
17.08.2012, 16:46 #16
Цитата Сообщение от novi4ok Посмотреть сообщение
а чем они должны быть механические?
механические (аналоговые) -> со стрелками
цифровые (электронные) -> с цифрами
еще есть бинарные (в двоичной системе) и комбинированные

Ябы решал задачу так - сделал бы 2 массива координат из 60 и 24 элементов, в которых бы описал все положения стрелки.
После каждую секунду надо очищать экран, секунды и минуты - индекс в первом массиве, час - индекс во втором массиве.
Остается поставить любой символ по всем координатам для всех трех стрелок.
После чего, спустя секунду, всё очистить и опять по новой.

Приведенный код слишком большой для такой задачи...
1
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,508
17.08.2012, 16:48 #17
Пусть берёт что дают или стрелки в консоли рисует
0
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
17.08.2012, 16:53 #18
Если дали задание в универе,

Не по теме:

на лето что-ли?

- то готовые часы не сама цель. Надо учиться соображать самой...
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,508
17.08.2012, 17:30 #19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
// ch.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
 
/* analog-clock.cpp */  
# include <windows.h>
#include <windowsx.h>
#include <math.h>//sin,cos
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL OnCreate(HWND,CREATESTRUCT FAR*);
void OnPaint(HWND);
void CYFERBL(HWND);
void OnDestroy(HWND);
void OnTimer(HWND,UINT);
void STRELKA (COLORREF,int,int,float);
 
/*Глобалъные переменные*/
int nFunsterStil;
int iwinX=400, iwinY=40, iwinXC=iwinX-150, iwinYC=iwinY;
int iDia=130,iHeight=iDia+34, iWidth=iDia+8, iRad=iDia/2,
      sizFont=int(iDia/6.7);
int iKorp=8,iMetM=3,iMetH=5;  
int iRadMet=iRad-iKorp, iRadCFR=iRadMet-sizFont/2-iMetH;
int penwKorp=2, penwCfrbl=2, penwmM=2,penwmH=3;
COLORREF colKorp=RGB(150,150,150), colCfrbl=RGB(0,0,0),
 colStrMH=colKorp, colStrS=RGB(255,0,0), colmM=colKorp,
 colmH=colKorp, colCfr=colKorp;
HWND hwnd; HDC hdcMem0, hdcMem,hdc; 
HBITMAP hBitmap,hOldBitmap; BITMAP bm; PAINTSTRUCT ps;
HBRUSH br; HPEN pen; HFONT hFontO, hOldFont; 
MSG mMsg; 
char szClassName[ ] = "WindowsApp";
char szCurrentTime[3],tstr[1000]="",str[1000]="";   
 
 
HINSTANCE hInst= GetModuleHandle (NULL);;
 
//int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
int main ()
 {
  char szClassName[]="MainWind";
  char* szTitle="CLOC";
  MSG msg;
  WNDCLASS wc;
  ZeroMemory (&wc, sizeof (wc) );
  wc.lpszClassName= (LPWSTR)szClassName;
  wc.hInstance= hInst;
  wc.lpfnWndProc=WndProc ;
  wc.hCursor=LoadCursor(NULL,IDC_ARROW) ;
  wc.hIcon=LoadIcon(hInst, (LPCWSTR)"icon") ;
  wc.hbrBackground=GetStockBrush(GRAY_BRUSH);
  RegisterClass(&wc);
  hwnd=CreateWindow((LPCWSTR)szClassName, (LPCWSTR)szTitle, WS_OVERLAPPEDWINDOW,iwinX,iwinY,iWidth,iHeight,HWND_DESKTOP,NULL,hInst,NULL);
  ShowWindow(hwnd,SW_SHOWNORMAL);
  while(GetMessage(&msg,NULL,0,0)) DispatchMessage(&msg);
  DeleteObject(hwnd);
  return 0; 
 }
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
                          WPARAM wParam,LPARAM lParam)
 {
 switch(msg)
  {
  HANDLE_MSG (hwnd, WM_CREATE, OnCreate) ;
  HANDLE_MSG(hwnd,WM_TIMER,OnTimer);
  HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
  HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy);
  default:
  return(DefWindowProc(hwnd,msg,wParam,lParam));
  }
 }  
 
BOOL OnCreate(HWND hwnd,LPCREATESTRUCT)
 {
  SetWindowPos(hwnd,NULL,iwinX,iwinY,iWidth,iHeight,SWP_NOSIZE);     
  hdc=GetDC(hwnd);hdcMem=CreateCompatibleDC(hdc); 
  hdcMem0=CreateCompatibleDC(hdc); 
  hBitmap=CreateCompatibleBitmap(hdc,iDia,iDia);
  GetObject(hBitmap,sizeof(BITMAP),&bm);
  hOldBitmap=SelectBitmap(hdcMem0,hBitmap) ; 
  CYFERBL(hwnd);  // risovanie cyferblata
 SetTimer(hwnd,1,1000,NULL);
 return TRUE;
 }// OnCreate
 
void OnPaint(HWND hwnd)
 {
  float strUgolS,strUgolM,strUgolH;   
  hdcMem=BeginPaint(hwnd,&ps);
  BitBlt (hdcMem,0,0,bm.bmWidth,bm.bmHeight,hdcMem0,0,0,SRCCOPY);
  SYSTEMTIME chas ;
  GetLocalTime(&chas);              
  //UGLY
  strUgolS= -0.017453292*6*chas.wSecond;
  strUgolM= -0.017453292*6*chas.wMinute+strUgolS/60;
  strUgolH= -0.017453292*30*chas.wHour+strUgolM/12;
  //STRELKI 
  STRELKA (colStrMH,iRadMet-4*iMetH-iMetM,2,strUgolH);//CHAS
  STRELKA (colStrMH,iRadMet-iMetH-iMetM,2,strUgolM);//MIN
  STRELKA (colStrS,iRadMet-iMetH-iMetM,1,strUgolS);//SEC
  //CENTR TO4KA
  pen = CreatePen(PS_SOLID, 1,colStrMH);
  br = CreateSolidBrush(colStrMH);
  SelectBrush(hdcMem, br);     
  Ellipse(hdcMem, iRad-3, iRad-3,iRad+3,iRad+3);  
  DeleteObject(br);
  DeleteObject(pen);
  BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdcMem,0,0,SRCCOPY) ;
  ReleaseDC(hwnd,hdc);
  ReleaseDC(hwnd,hdcMem);
  ReleaseDC(hwnd,hdcMem0);
  DeleteObject(hBitmap);
  EndPaint(hwnd,&ps);
 }
 
void OnDestroy(HWND hwnd)
 {
  KillTimer(hwnd,1);     
  DeleteBitmap(hBitmap);
  SelectBitmap (hdcMem,hOldBitmap);
  DeleteDC(hdcMem);
  DeleteDC(hdcMem0);
  PostQuitMessage(0);
 }//OnDestroy
 
void OnTimer(HWND hwnd,UINT)
 {
  //Перерисовка окна.Если FALSE - не мигает
  InvalidateRect(hwnd,NULL,FALSE);
 } //OnTimer
void CYFERBL(HWND hwnd)
 {
  int ii,jj,iX,iY,iXc,iYc,t=0;   
  float fUgol,fUgolc;   
      // risovanie cyferblata
  BeginPaint(hwnd, &ps);
      // zalivka korpusa
  br = CreateSolidBrush(RGB(64,64,64));
  SelectObject(hdcMem0, br);
  Rectangle(hdcMem0, 0, 0, iDia, iDia);
  DeleteObject(br);
  pen = CreatePen(PS_SOLID, 1,colKorp);
   SelectObject(hdcMem0, pen);
  br = CreateSolidBrush(colKorp);
  SelectObject(hdcMem0, br);     
  Ellipse(hdcMem0, 0, 0,iDia,iDia);
  DeleteObject(br);DeleteObject(pen);
      // zalivka cyferblata
  br = CreateSolidBrush(colCfrbl);
  SelectObject(hdcMem0, br);     
  Ellipse(hdcMem0,iKorp, iKorp,iDia-iKorp,iDia-iKorp);
  DeleteObject(br);
       //metki minut  
  pen = CreatePen(PS_SOLID, penwmM,colmM);
  SelectObject(hdcMem0, pen);
  for (ii = 1; ii <= 60; ii++)
   {                          
   fUgol = - 0.017453292*6*ii;
   iX=iRad-int(iRadMet*sin(fUgol));
   iY=iRad-int(iRadMet*cos(fUgol));
   MoveToEx(hdcMem0, iX,iY, NULL);
   iX=iRad-int((iRadMet-iMetM)*sin(fUgol));
   iY=iRad-int((iRadMet-iMetM)*cos(fUgol));
   LineTo(hdcMem0, iX,iY);
   }
  DeleteObject(pen);
      //metki chasov
  pen = CreatePen(PS_SOLID, penwmH,colmH);
  SelectObject(hdcMem0, pen);
  for (ii = 1; ii <= 12; ii++)
   {                          
   fUgol =  - 0.017453292*30*ii;
   iX=iRad-int(iRadMet*sin(fUgol));
   iY=iRad-int(iRadMet*cos(fUgol));
   MoveToEx(hdcMem0, iX,iY, NULL);
   iX=iRad-int((iRadMet-iMetH)*sin(fUgol));
   iY=iRad-int((iRadMet-iMetH)*cos(fUgol));
   LineTo(hdcMem0, iX,  iY);
   }
  DeleteObject(pen);
     //SHRIFT CYFR
  static LOGFONT lf; 
  lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN; 
  lf.lfItalic = FALSE;
  lf.lfWeight = FW_BOLD;
  lf.lfHeight = sizFont; 
  lf.lfCharSet = DEFAULT_CHARSET; 
  //lstrcpy(&lf.lfFaceName, (LPWSTR)"Impact" );
  hFontO = CreateFontIndirect(&lf); 
  hOldFont = (HFONT)SelectObject(hdcMem0, hFontO); 
  SetBkMode(hdcMem0,TRANSPARENT);//CVET FONA CYFR = CV.BRUSH
  SetTextColor(hdcMem0,colCfr);//CVET CYFR
       //VYVOD CYFR 
  char ttt1[2];    
  for (jj = 1; jj <= 12; jj++)
   {
   fUgolc =  - 0.017453292*30*jj;
   iXc=iRad-int(iRadCFR*sin(fUgolc))-sizFont/4;
   iYc=iRad-int(iRadCFR*cos(fUgolc))-sizFont/2;
   
   //Это я закомментил 
//   wsprintf(ttt1,"%d",jj);
//   TextOut(hdcMem0,iXc ,iYc, ttt1, strlen(ttt1));
 
   //А это я вставил
   char t [3];
   if (jj>= 10) {
    t[0]= '1';
    t[2]= 0;
    t[1]= jj%10+ 48;
   }
   else
   _itoa_s (jj, t, 10);
   TextOutA(hdcMem0,iXc ,iYc, (LPCSTR)t, strlen(t));
 
 
   }
  EndPaint(hwnd, &ps);
 } //CYFERBL 
void STRELKA (COLORREF colStr,int radSTR,int shirSTR,float strUgol)
 {
  int okrR=3*shirSTR;     
  int penwSTR=2;     
  int strX1=iRad+int(0.3*radSTR * sin(strUgol)-shirSTR*cos(strUgol)); 
  int strY1=iRad+int(0.3*radSTR * cos(strUgol)+shirSTR*sin(strUgol));
  int strX2=iRad+int(0.3*radSTR * sin(strUgol)+shirSTR*cos(strUgol)); 
  int strY2=iRad+int(0.3*radSTR * cos(strUgol)-shirSTR*sin(strUgol));
  int strX=iRad-int(radSTR * sin(strUgol));
  int strY=iRad-int(radSTR * cos(strUgol));
  POINT pt[3]={{strX1, strY1}, {strX2, strY2}, {strX, strY}};
  pen = CreatePen(PS_SOLID, penwSTR,colStr);
  SelectObject(hdcMem, pen); 
  br = CreateSolidBrush(colStr);
  SelectObject(hdcMem, br);  
  Polygon(hdcMem,pt,3);
  Ellipse(hdcMem, iRad-okrR, iRad-okrR,iRad+okrR,iRad+okrR);
  DeleteObject(br);
  DeleteObject(pen);
 }//STRELKA
вот консольный вариант для MSVS 2010, только он всё равно у ТС не заработает ну да тут уж ничего не поделать я закалебался уже код править и вообще кто выдумал такую IDE у коотрой по умолчанию TextOut== TextOutW ???
0
programina
2046 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.08.2012, 17:48 #20
Цитата Сообщение от kravam Посмотреть сообщение
вот консольный вариант для MSVS 2010
Вы шутите? Заменили WinMain() на main()
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,508
17.08.2012, 17:53 #21
Ну и хватит, если надо стрелки в консоли, пусть так и скажет.
0
programina
2046 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.08.2012, 18:04 #22
Stysha, делайте как предлогает Union - пусть этот способ не самый оптимальный, но самый простой.
Цитата Сообщение от Union Посмотреть сообщение
Ябы решал задачу так - сделал бы 2 массива координат из 60 и 24 элементов, в которых бы описал все положения стрелки.
После каждую секунду надо очищать экран, секунды и минуты - индекс в первом массиве, час - индекс во втором массиве.
Остается поставить любой символ по всем координатам для всех трех стрелок.
После чего, спустя секунду, всё очистить и опять по новой.
Для упрощения можно обойтись часовой и минутной стрелкой.
0
Xorazm
0 / 0 / 0
Регистрация: 19.06.2017
Сообщений: 32
19.06.2017, 21:13 #23
Боже простые часы за 200 строк на паскали этот бубен на 20 строк
0
CtrlDe
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
Завершенные тесты: 1
20.06.2017, 00:16 #24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
int main()
{
    int sec = 0;
    int min= 0;
    int hours = 0;
 
    if (sec == 60)
    {
        min++;
        sec = 0;
    }
    if (min == 60)
    {
        hours++;
        min = 0;
    }
    if (hours == 24)
    {
        hours = 0;
    }
    
    while (true)
    {
        sec++;
        cout << hours << " : " << min << " : " << sec;
        Sleep(1000);
        system("cls");
    }
 
    cin.get();
    return 0;
}
Не смотрите сюда, я стрелки забыл(
0
20.06.2017, 00:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2017, 00:16
Привет! Вот еще темы с ответами:

Создать класс время с данными-членами часы, минуты, секунды - C++
отучилась на программиста уже год, но пока что как-то тяжко с заданиями, тем более с классами, не успели пройти их... помогите пожалуйста...

Создать базовый класс Тройка_чисел (Triad) и производный класс Time с полями часы, минуты и секунды - C++
Наследование. Виртуальныефункции.Полиморфизм. 1. Цельзадания: 1) Создание консольного приложения, состоящего и - Базовый класс:...

Механические часы со стрелками в java! - Java
Помогите решить задачу!!! Реализовать приложение, которое рисует на экране механические часы с секундной, минутной и часовой...

.NET 4.x Делаю часы с циферблатом,как синхронизировать время с ПК - C#
Ну короче,хочу написать часы себе для общего развития.Какбэ они работают,но не могу представить как синхронизировать время с ПК? Там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru