Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
RAFA91
Заблокирован
#1

Разработать семисегментные часы в консоли

16.02.2016, 17:08. Просмотров 807. Ответов 6
Метки нет (Все метки)

Добрый день !

Знакомый попросил помочь Разработать семисегментные часы в консоли в двух вкрсиях (антиплагиат)

одну версию разработал , а вторую не знаю как.

может у кого-то созреют свои мысли. c применением другого подхода

спасибо!

________________________________________________

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
245
246
247
// drew.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <list>
#include <windows.h>
#include <ctime>
#include <conio.h>
#include <string>
 
using namespace std;
 
bool decoder[10][7]; //семисегментный декодер
 
void read_decoder() //чтение из файла
{
    ifstream in;
    in.open("decoder.txt");
    if (!in) 
    {
        cout<<"error decoder.txt"<<endl;
        getch();
        exit(1);
    }
        for (int i = 0;i < 10;i++)
        for (int j = 0;j < 7;j++)
        in >> decoder[i][j];
        in.close();
}
 
class Line //линия
{
    int x1,y1,x2,y2;
    HANDLE hCon;
    COORD cPos;
public:
    Line() : x1(0),y1(0),x2(0),y2(0) 
    {hCon = GetStdHandle(STD_OUTPUT_HANDLE);}
    Line(int _x1,int _y1,int _x2,int _y2) : x1(_x1),y1(_y1),x2(_x2),y2(_y2) 
    {
        hCon = GetStdHandle(STD_OUTPUT_HANDLE);
        if (x1>x2 || y1>y2) 
        {
            cout<<"x1>x2 || y1>y2";
            cout<<"  x1 = "<<x1<<" x2 = "<<x2;
            cout<<" y1 = "<<y1<<" y2 = "<<y2<<endl;
            getch();
            exit(1);
        }
        if (x1!=x2 && y1!=y2)
        {
            cout<<"x1!=x2 && y1!=y2";
            cout<<"  x1 = "<<x1<<" x2 = "<<x2;
            cout<<" y1 = "<<y1<<" y2 = "<<y2<<endl;
            getch();
            exit(1);
        }
    }
    void draw() //рисуем линию (Line)
    {
        int x=x1,y=y1;
        cPos.X = x;
        cPos.Y = y;
        if (x1==x2) 
        {
            for (;y<=y2;y++)
            {
                cPos.Y = y;
                SetConsoleCursorPosition(hCon, cPos); //устанавливаем курсор в позицию X,Y
                cout<<"&";
            }
        }
        else
        {
            SetConsoleCursorPosition(hCon, cPos); //устанавливаем курсор в позицию X,Y
            for (;x<=x2;x++) cout<<"&";
        }
    }
};
 
class Frame //рамка
{
    list<Line> l;
public:
    Frame(list<Line> &_l) : l(_l) {}
    void build() //строить рамку
    {
        list<Line> :: iterator it;
        it = l.begin();  //на начало списка
        while (it != l.end())
        {
            (*it).draw(); //или it->draw();
            it++;
        }
    }
 
};
 
class numeral //цифра
{
    int num; //значение
    list<Line> l; //список сегментов
public:
    numeral() : num(0) {}
    ~numeral() {}
    void init(list<Line> &_l) {l = _l;}
    void set_num(int _num) {num = _num;}
    void mapping(int k) //отображение цифры
    {
        
        int j=0;
        list<Line> :: iterator it;
        it = l.begin();  //на начало списка
        while (it != l.end())
        {
            
            if (decoder[num][j]) (*it).draw(); //зажечь сегмент цифры
            it++;
            j++;
        }
    }
};
 
class sec
{
    numeral num[6];
    int t[3];
    int a[6];
    bool s;
    void mapping() //отображение цифры
    {
        system("cls"); //очистка экрана
        for (int i=0; i<6; i++)
        num[i].mapping(i);
    }
    void init(list<Line> &l)
    {
        list<Line> temp;
        list<Line> :: iterator it_begin,it_end = l.begin();
        
        for (int i=0; i<6; i++)
        {
            it_begin = it_end;
            advance(it_end,7);
            temp.insert(temp.begin(),it_begin,it_end);
            num[i].init(temp);
            temp.clear();
        }
    }
public:
    sec(const char *str)  
    {
        s = false; //несоответствие
        list<Line> l;
        list<Line> :: iterator it;
        int x1,y1,x2,y2;
        ifstream in;
        in.open(str);
        if (!in) 
        {
            cout<<"error coordinates_line.txt"<<endl;
            getch();
            exit(1);
        }
        while (!in.eof())
        {
            in >> x1;
            in >> y1;
            in >> x2;
            in >> y2;
            l.push_back(Line(x1,y1,x2,y2));
        }
        in.close(); 
        init(l);
    } 
    ~sec()  {}
    void set_num() 
    {
        int temr_time[3];
        time_t rawtime;
        time(&rawtime);
        tm * timeinfo = localtime(&rawtime);
        temr_time[0] = timeinfo->tm_hour; //часы
        temr_time[1] = timeinfo->tm_min;  //минуты
        temr_time[2] = timeinfo->tm_sec;  //секунды
        
 
        if (s)
        {
            for (int i=0;i<3;i++)
            {
                if (temr_time[i] != t[i]) //несоответствие
                {
                    s = false;
                    break;
                }
            }
        }
        if (!s)
        {
            for (int i=0;i<3;i++) t[i] = temr_time[i];
            for (int i=0,j=0;i<3;i++) 
            {
                a[j++] = t[i]/10;
                a[j++] = t[i] % 10;
            }
            for (int i=0; i<6; i++) num[i].set_num(a[i]);
            
            s = true;
            mapping();
        }
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    read_decoder();
    list<Line> l;
    sec S("coordinates_line.txt");
    l.push_back(Line(2,2,77,2));
    l.push_back(Line(2,22,77,22));
    l.push_back(Line(2,3,2,21));
    l.push_back(Line(27,3,27,21));
    l.push_back(Line(52,3,52,21));
    l.push_back(Line(77,3,77,21));
    Frame fr(l); 
    l.clear(); //очистка списка
    
    
    
    
    for(;;) 
    {
        
        S.set_num();
        fr.build();
        
        
    }
    
        
        
    getch();
    return 0;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Миниатюры
Разработать семисегментные часы в консоли  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2016, 17:08
Ответы с готовыми решениями:

часы в консоли
Такой вопрос, допустим я пишу в консольке прогу, и хочу запилить часы в угол...

Часы в консоли
Здравствуйте! Такой вопрос - есть консольная программа , хочу сделать часы в...

Разработать иерархию не менее 2 классов, и программу Разработать программу для реализации игры пятнашки. Разработать 2-3
Составить описание класса многочленов от одной переменной, задаваемых степенью...

Клавиши F1-F12 в консоли, и работа с мышкой в консоли
Я искал на сайте, но не нашел упоминания о том как обрабатывать и или узнавать...

считывание с консоли ( не с клавы, а именно с консоли)
нужно написать функцию которая возвращает string в котором написано 500...

6
Kastaneda
Jesus loves me
Эксперт С++
4763 / 2966 / 342
Регистрация: 12.12.2009
Сообщений: 7,531
Записей в блоге: 2
Завершенные тесты: 1
16.02.2016, 17:35 #2
Лучший ответ Сообщение было отмечено RAFA91 как решение

Решение

100 лет назад писал, может поможет
1
RAFA91
Заблокирован
16.02.2016, 18:16  [ТС] #3
это в консоли ?
0
Kastaneda
Jesus loves me
Эксперт С++
4763 / 2966 / 342
Регистрация: 12.12.2009
Сообщений: 7,531
Записей в блоге: 2
Завершенные тесты: 1
16.02.2016, 18:21 #4
Лучший ответ Сообщение было отмечено RAFA91 как решение

Решение

Цитата Сообщение от RAFA91 Посмотреть сообщение
это в консоли ?
да, там же на скрине видно
1
RAFA91
Заблокирован
17.02.2016, 12:49  [ТС] #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
да, там же на скрине видно
что то мне подсказывает что тут без WIN API не обошлось.
0
Kastaneda
Jesus loves me
Эксперт С++
4763 / 2966 / 342
Регистрация: 12.12.2009
Сообщений: 7,531
Записей в блоге: 2
Завершенные тесты: 1
17.02.2016, 12:51 #6
Цитата Сообщение от RAFA91 Посмотреть сообщение
что то мне подсказывает что тут без WIN API не обошлось.
Дык оно и в твоем коде из 1го поста тоже используется.
0
RAFA91
Заблокирован
17.02.2016, 12:58  [ТС] #7
Цитата Сообщение от Kastaneda Посмотреть сообщение
Дык оно и в твоем коде из 1го поста тоже используется.
там кроме позиционирование курсора из WIN API нечего нету. ну еще таймер.

если не секрет в чем фишка вашего приложения ? каким образом рисовались цифры ? пока в подробности не вникал.

я для этого использовал на каждую цифру семь сегментов (линий) координаты которых записаны в файле.

нужный сегмент выводил на основании декодера. двумерный массив.

строки это цифра , а столбец - сегмент. 1 - включен 0 - выключен

1 1 1 1 1 1 0 (цифра 0)
0 1 1 0 0 0 0
1 1 0 1 1 0 1
1 1 1 1 0 0 1
0 1 1 0 0 1 1
1 0 1 1 0 1 1
1 0 1 1 1 1 1
1 1 1 0 0 0 0
1 1 1 1 1 1 1
1 1 1 1 0 1 1 (цифра 9)
0
17.02.2016, 12:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2016, 12:58

Программа, которая переводит часы и минуты в минуты или минуты – в часы и минуты
Составьте программу, которая в зависимости от входных данных переводит ...

Разработать программу «Система учета работников предприятия»; разработать собственный тип «Работник»
Всем привет. Есть задача: Разработать программу «Система учета работников...

Семисегментные часы
Здравствуйте, уважаемые! :) Задача такая : Написать часы, которые отображают...


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

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

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