#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include // Глобальные переменные для управления int hours = 0, minutes = 0, seconds = 0; int running = 1; // Флаг работы часов int paused = 0; // Флаг паузы HANDLE clockThread; // Дескриптор потока // Функция для установки курсора в указанную позицию void setCursorPosition(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } // Функция отображения времени void displayTime() { setCursorPosition(0, 0); printf("Текущее время: %02d:%02d:%02d\n", hours, minutes, seconds); fflush(stdout); } // Поток для часов DWORD WINAPI clockFunction(LPVOID lpParam) { while (running) { if (!paused) { Sleep(1000); // Задержка в 1 секунду seconds++; if (seconds == 60) { seconds = 0; minutes++; if (minutes == 60) { minutes = 0; hours++; if (hours == 24) { hours = 0; } } } displayTime(); } } return 0; } // Функция настройки времени void setTime() { printf("\nВведите часы: \n"); scanf("%d", &hours); printf("Введите минуты: \n"); scanf("%d", &minutes); printf("Введите секунды: \n"); scanf("%d", &seconds); displayTime(); } // Секундомер void stopwatch() { int sw_hours = 0, sw_minutes = 0, sw_seconds = 0; printf("\nСекундомер запущен. Нажмите любую клавишу для остановки.\n"); while (!kbhit()) { Sleep(1000); sw_seconds++; if (sw_seconds == 60) { sw_seconds = 0; sw_minutes++; if (sw_minutes == 60) { sw_minutes = 0; sw_hours++; } } setCursorPosition(0, 2); printf("\nСекундомер: %02d:%02d:%02d \n", sw_hours, sw_minutes, sw_seconds); fflush(stdout); } getchar(); // Ожидание нажатия клавиши setCursorPosition(0, 2); printf(" "); // Очистка строки } // Таймер void timer() { int t_hours = 0, t_minutes = 0, t_seconds = 0; printf("\nВведите время таймера (часы, минуты, секунды):\n"); printf("Часы: \n"); scanf("%d", &t_hours); printf("Минуты: \n"); scanf("%d", &t_minutes); printf("Секунды: \n"); scanf("%d", &t_seconds); printf("\nТаймер запущен.\n"); while (t_hours > 0 || t_minutes > 0 || t_seconds > 0) { Sleep(1000); if (t_seconds > 0) { t_seconds--; } else { t_seconds = 59; if (t_minutes > 0) { t_minutes--; } else { t_minutes = 59; if (t_hours > 0) { t_hours--; } } } setCursorPosition(0, 3); printf("Таймер: %02d:%02d:%02d \n", t_hours, t_minutes, t_seconds); fflush(stdout); } printf("\nТаймер завершен!\n"); setCursorPosition(0, 3); } // Основная функция int main() { system("chcp 1251>null"); int choice; // Запуск потока часов clockThread = CreateThread(NULL, 0, clockFunction, NULL, 0, NULL); do { setCursorPosition(0, 5); // Переместить курсор под часы printf("\nМеню управления часами:\n"); printf("1. Пауза/Продолжить\n"); printf("2. Настройка времени\n"); printf("3. Секундомер\n"); printf("4. Таймер\n"); printf("5. Выход\n"); printf("\nВыберите опцию: "); scanf("%d", &choice); switch (choice) { case 1: paused = !paused; if (paused) { printf("\nЧасы на паузе.\n"); } else { printf("\nЧасы продолжают работать.\n"); } break; case 2: setTime(); break; case 3: stopwatch(); break; case 4: timer(); break; case 5: running = 0; WaitForSingleObject(clockThread, INFINITE); // Ожидание завершения потока CloseHandle(clockThread); printf("\nПрограмма завершена.\n"); break; default: printf("\nНеверный выбор, попробуйте снова.\n"); } } while (choice != 5); return 0; }