Exercice3
Exercice 3 : Affichage 7-segments
Écrivez un programme en C++ qui simule un affichage à sept segments.
L’interface publique de la classe Segments est donnée :
class Segments {
public:
Segments(int n = 1);
void Set(int v);
void Draw(int w = 3, int h = 2, int dx = 1);
private:
// TODO
};
L’argument du constructeur indique le nombre de “digits” qui compose
l’affichage. La méthode Set définit le nombre à afficher. La méthode
Draw simule l’affichage avec des segments horizontaux de w caractères,
des segments verticaux de h caractères et un espace de dx entre deux
segments.
Testez avec le programme principal suivant :
int main()
{
Segments s(4) ;
s.Set(639);
s.Draw();
}
Le résultat devrait ressembler à ça :
--- --- --- ---
| | | | | |
| | | | | |
--- --- ---
| | | | | |
| | | | | |
--- --- --- ---
Pour l’affichage, vous pouvez utiliser la classe Canvas que nous
vous donnons ci-dessous, mais vous pouvez aussi faire autrement si vous
voulez :
#include <iostream>
#include <vector>
#include <stdint.h>
class Canvas {
public:
Canvas (int w, int h);
virtual ~Canvas() {};
void Clear (char c = '.');
void HLine(int x, int y, int len, char c = '*');
void VLine(int x, int y, int len, char c = '*');
void Print();
private:
std::vector<std::vector<char>> canvas_;
};
Canvas::Canvas (int w, int h) {
canvas_.resize(h);
for (int y = 0; y < h; y++) {
canvas_[y].resize(w, ' ');
}
}
void Canvas::Clear (char c) {
for (int y = 0; y < canvas_.size(); y++) {
for (int x = 0; x < canvas_[y].size(); x++) {
canvas_[y][x] = c;
}
}
}
void Canvas::HLine(int x, int y, int len, char c) {
for (int i = 0; i < len; i++) {
canvas_[y][x+i] = c;
}
}
void Canvas::VLine(int x, int y, int len, char c) {
for (int i = 0; i < len; i++) {
canvas_[y+i][x] = c;
}
}
void Canvas::Print() {
for (auto row: canvas_) {
for (auto c: row) {
std::cout << c;
}
std::cout << std::endl;
}
}