From 7a09c2b5e6483613b2400b8e9e8c60f8bfc55aea Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Tue, 10 Jan 2023 11:53:46 -0500 Subject: Initial commit --- .gitignore | 24 ++++++++++++++- rapport/document.sty | 72 +++++++++++++++++++++++++++++++++++++++++++++ rapport/frpseudocode.sty | 74 +++++++++++++++++++++++++++++++++++++++++++++++ rapport/main.pdf | Bin 0 -> 139724 bytes rapport/main.tex | 66 ++++++++++++++++++++++++++++++++++++++++++ rapport/titlepage.sty | 69 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 304 insertions(+), 1 deletion(-) create mode 100644 rapport/document.sty create mode 100644 rapport/frpseudocode.sty create mode 100644 rapport/main.pdf create mode 100644 rapport/main.tex create mode 100644 rapport/titlepage.sty diff --git a/.gitignore b/.gitignore index 7aa28f5..d493a72 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,33 @@ -# C++ binary files: +# C++ files: *.exe *.out *.o *.obj +*.so +*.a # Ctags: tags # Vim buffers: *.swp + +# LaTeX Files +*.4tc +*.xref +*.tmp +*.pyc +*.pyo +*.fls +*.vrb +*.fdb_latexmk +*.bak +*.swp +*.aux +*.log +*.bbl +*.blg +*.bcf +*.run.xml +*.synctex +_minted-* diff --git a/rapport/document.sty b/rapport/document.sty new file mode 100644 index 0000000..511d030 --- /dev/null +++ b/rapport/document.sty @@ -0,0 +1,72 @@ +\ProvidesPackage{document} + + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Packages % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% + +% Margin Setup according to University methodology: +\RequirePackage[top=2.5cm,bottom=2.5cm,inner=3cm,outer=2.5cm]{geometry} +% IEEE references & bibliography +\RequirePackage[style=ieee]{biblatex} +\RequirePackage[T1]{fontenc} % French compatibility +\RequirePackage[utf8]{inputenc} % Sensible text encoding +\RequirePackage[french]{babel} % French document environment +\RequirePackage{fancyhdr} % Footer customisation +\RequirePackage{booktabs} % Elegant tables +\RequirePackage{float} % Accurate positionning of figures +\usepackage{titlesec} % Font sizes for sections/subsection +\RequirePackage{amsmath} % Mathematics environments +\RequirePackage{amssymb} % Mathematical symbols +\RequirePackage{siunitx} % SI Units +\RequirePackage{setspace} % Line spacing + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Headers/Footers % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% + +\renewcommand{\footrulewidth}{.5pt} % Line at the bottom +\cfoot{\thepage} % Centered page number (footer) + + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Sections % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% + +% Font size for section (16) +\titleformat{\section} +{\normalfont\fontsize{16}{19}\bfseries}{\thesection}{1em}{} +% Font size for subsection (14) +\titleformat{\subsection} +{\normalfont\fontsize{14}{17}\bfseries}{\thesubsection}{1em}{} + + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Equations/Math % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% + +% Number equation with section number (ex: First equation in section 3 is 3.1) +\numberwithin{equation}{section} +% Use french commas when writing numbers +\sisetup{locale=FR} + + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Line Spacing % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% + +% Set 1.5 linespacing for the document +\onehalfspacing + + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Figures/Tables % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% + +% Count within sections (third table of section 5 would be Table 5.3) +\counterwithin{figure}{section} +\counterwithin{table}{section} +% Separate section number from fig/table with a hyphen (5-3 instead of 5.3) +\renewcommand{\thefigure}{\thesection-\arabic{figure}} +\renewcommand{\thetable}{\thesection-\arabic{table}} + diff --git a/rapport/frpseudocode.sty b/rapport/frpseudocode.sty new file mode 100644 index 0000000..06be0cc --- /dev/null +++ b/rapport/frpseudocode.sty @@ -0,0 +1,74 @@ +%% @author Oliver Irwin +%% DATE +\ProvidesPackage{frpseudocode}[DATE French Pseudocode VERSION] +\RequirePackage{algpseudocode} + +%% Global mod +\floatname{algorithm}{Algorithme} + +%% Functions %% +\algrenewcommand\algorithmicprocedure{\textbf{PROCÉDURE}} +\algrenewcommand\algorithmicfunction{\textbf{FONCTION}} +\algrenewcommand\algorithmicreturn{\textbf{RENVOYER}} + +\algrenewtext{Procedure}[2]% +{\algorithmicprocedure\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}\ :} + +\algrenewtext{Function}[2]% +{\algorithmicfunction\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}\ :} + +%% Inputs +\algrenewcommand\algorithmicrequire{\textbf{REQUIERT : }} +\algrenewcommand\algorithmicensure{\textbf{VÉRIFIER : }} + +%% Control Instructions %% +\algrenewcommand\algorithmicwhile{\textbf{TANT QUE}} +\algnewcommand\algorithmicwhilem{\textbf{TANT QUE}} +\algrenewcommand\algorithmicdo{\textbf{FAIRE}} +\algnewcommand\algorithmicdom{\textbf{FAIRE}} +\algrenewcommand\algorithmicend{\textbf{FIN}} +\algrenewcommand\algorithmicfor{\textbf{POUR}} +\algrenewcommand\algorithmicforall{\textbf{POUR TOUT}} +\algnewcommand\algorithmicfrom{\textbf{DE }} +\algnewcommand\algorithmicto{\textbf{À}} +\algnewcommand\algorithmicform{\textbf{POUR}} + +\algrenewcommand\algorithmicrepeat{\textbf{RÉPÉTER}} +\algrenewcommand\algorithmicuntil{\textbf{JUSQU'À}} + +\algdef{SE}[FORFT]{ForFT}{EndFor}[3]{}% + +%% Change commands +\algrenewtext{ForFT}[3]% +{\algorithmicfor\ #1 \algorithmicfrom #2 \algorithmicto\ #3,\ \algorithmicdom\ :} + +\algrenewtext{For}[1]% +{\algorithmicfor\ #1,\ \algorithmicdom\ :} + +\algrenewtext{EndFor}[0]% +{\algorithmicend\ \algorithmicform} + +\algrenewtext{While}[1]% +{\algorithmicwhile\ #1,\ \algorithmicdom\ :} + +\algrenewtext{EndWhile}[0]% +{\algorithmicend\ \algorithmicwhilem} + +%% Conditionnals %% + +\algrenewcommand\algorithmicif{\textbf{SI}} +\algnewcommand\algorithmicifm{\textbf{SI}} +\algrenewcommand\algorithmicelse{\textbf{SINON}} +\algrenewcommand\algorithmicthen{\textbf{ALORS}} +\newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif} + +\algrenewtext{SINON SI}[1]% +{\algorithmicelse ,\ \algorithmicifm\ #1} + +\algrenewtext{ENDIF}[0]% +{\algorithmicend\ \algorithmicifm} + +%% Logical +%\algrenewcommand{\algorithmicnot}{\textbf{non}} +%\algrenewcommand{\algorithmicand}{\textbf{et}} +%\algrenewcommand{\algorithmicor}{\textbf{ou}} diff --git a/rapport/main.pdf b/rapport/main.pdf new file mode 100644 index 0000000..501483a Binary files /dev/null and b/rapport/main.pdf differ diff --git a/rapport/main.tex b/rapport/main.tex new file mode 100644 index 0000000..f7afdcb --- /dev/null +++ b/rapport/main.tex @@ -0,0 +1,66 @@ +\documentclass[a11paper, 11pt]{article} + +\usepackage{document} +\usepackage{titlepage} +\usepackage{float} +\usepackage{algorithm} +\usepackage{algpseudocode} +\usepackage{frpseudocode} +\usepackage[T1]{fontenc} +\usepackage[french]{babel} + +% \addbibresource{bibliography.bib} +% \nofiles + +% \institution{Université de Sherbrooke} +% \faculty{Faculté de génie} +% \department{Département de génie électrique et de génie informatique} +\title{Titre du document} +\classnb{GEN420} +\class{Mathématiques des circuits logiques} +\author{ + \addtolength{\tabcolsep}{-0.4em} + \begin{tabular}{rcl} % Ajouter des auteurs au besoin + Benjamin Chausse & -- & chab1704 \\ + Édouard Laurent & -- & laue \\ % TODO: demander le numéro du CIP + \end{tabular} +} +% \teacher{Benjamin Chausse} +% \location{Sherbrooke} +% \date{\today} + + +\begin{document} +\maketitle +\newpage +% \tableofcontents +% \newpage + +\section{Diagrammes UML} + +\section{Pseudo-code} + +Ceci est un test pour voir comment le package frpseudocode fonctionne. +Du pseudo-code est pertinent pour l'APP ira ici. + +\begin{algorithm} +\caption{Euclid's algorithm}\label{alg:euclid} +\begin{algorithmic}[1] + \Function{Euclid}{$a, b$} + \While{$a \neq b$} + \If{$a > b$} + \State $a \gets a - b$ + \Else + \State $b \gets b - a$ + \EndIf + \EndWhile + \State \Return $a$ + \EndFunction +\end{algorithmic} +\end{algorithm} + + + +% \newpage +% \printbibliography[heading=bibintoc] +\end{document} diff --git a/rapport/titlepage.sty b/rapport/titlepage.sty new file mode 100644 index 0000000..72caa5b --- /dev/null +++ b/rapport/titlepage.sty @@ -0,0 +1,69 @@ +\ProvidesPackage{titlepage}[ +Sherbrooke Engineering Title Page by Benjamin Chausse +] +\RequirePackage{setspace} +\RequirePackage{tabularx} +\RequirePackage[french]{babel} + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Plain Definitions % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +\newcommand*{\institution}[1]{\gdef\@institution{#1}} +\newcommand*{\faculty}[1]{\gdef\@faculty{#1}} +\newcommand*{\department}[1]{\gdef\@department{#1}} +\renewcommand*{\title}[1]{\gdef\@title{#1}} +\newcommand*{\class}[1]{\gdef\@class{#1}} +\newcommand*{\classnb}[1]{\gdef\@classnb{#1}} +\newcommand*{\presentation}[1]{\gdef\@presentation{#1}} +\newcommand*{\teacher}[1]{\gdef\@teacher{#1}} +\renewcommand*{\author}[1]{\gdef\@author{#1}} +\newcommand*{\location}[1]{\gdef\@location{#1}} + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Templated Definitions % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +\newcommand*{\@institution}{Université de Sherbrooke} +\newcommand*{\@faculty}{Faculté de génie} +\newcommand*{\@department}{Département de génie électrique et de génie informatique} +\renewcommand*{\@title}{Titre du document} +\newcommand*{\@class}{Mathématiques des circuits logiques} +\newcommand*{\@classnb}{GEN420} +\newcommand*{\@presentation}{Présenté à} +\newcommand*{\@teacher}{Prénom Nom} +\renewcommand*{\@author}{Prénom Nom -- CIP} +\newcommand*{\@location}{Sherbrooke} + +% Simple Macro +\newcommand{\usp}{\unskip\strut\par} + +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +% Updated Title Page Template % +%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% +\renewcommand*{\maketitle}{ +\begin{titlepage} + % \centering\LARGE\setstretch{.7} + \centering\normalsize + + {\MakeUppercase{\@institution}\usp} + {\@faculty\usp} + {\@department} + \vfill + + {\LARGE{\@title}} + \vfill + + {\@class\usp} + {\@classnb} + \vfill + + {\@presentation\usp} + {\@teacher} + \vfill + + {Présenté par\usp} + {\@author} + \vfill + + {\large \@location\ -- \@date\usp} +\end{titlepage} +} -- cgit v1.2.3 From d9e7b4893a0debc0d170122285db780a7b93e703 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Tue, 10 Jan 2023 12:00:43 -0500 Subject: Update page présentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rapport/main.tex | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/rapport/main.tex b/rapport/main.tex index f7afdcb..5e9cccf 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -15,17 +15,17 @@ % \institution{Université de Sherbrooke} % \faculty{Faculté de génie} % \department{Département de génie électrique et de génie informatique} -\title{Titre du document} -\classnb{GEN420} -\class{Mathématiques des circuits logiques} +\title{Rapport d'APP} +\classnb{GEN241} +\class{Modélisation et programmation orientée objet} \author{ \addtolength{\tabcolsep}{-0.4em} \begin{tabular}{rcl} % Ajouter des auteurs au besoin Benjamin Chausse & -- & chab1704 \\ - Édouard Laurent & -- & laue \\ % TODO: demander le numéro du CIP + Édouard Laurent & -- & laue\textbf{XXXX} \\ % TODO: demander numéro du CIP \end{tabular} } -% \teacher{Benjamin Chausse} +\teacher{Eugène Morin} % \location{Sherbrooke} % \date{\today} @@ -33,8 +33,8 @@ \begin{document} \maketitle \newpage -% \tableofcontents -% \newpage +\tableofcontents +\newpage \section{Diagrammes UML} -- cgit v1.2.3 From bd3b390064aa8dee26845dc6fcc1b5d79773a167 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Tue, 10 Jan 2023 12:01:08 -0500 Subject: Update pdf --- rapport/main.pdf | Bin 139724 -> 138334 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rapport/main.pdf b/rapport/main.pdf index 501483a..7336053 100644 Binary files a/rapport/main.pdf and b/rapport/main.pdf differ -- cgit v1.2.3 From b83f6f255a3205bf8f99f8f1391aa0856c8aafb6 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Sun, 15 Jan 2023 00:44:03 -0500 Subject: small optimisations --- canevas.cpp | 3 --- tests.cpp | 32 ++++++++++++++++---------------- vecteur.cpp | 1 + 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/canevas.cpp b/canevas.cpp index 0c203fc..959e681 100644 --- a/canevas.cpp +++ b/canevas.cpp @@ -10,9 +10,6 @@ Canevas::Canevas() { Couche couches[MAX_COUCHES]; - /* for (int i = 0; i < MAX_COUCHES; i++) { */ - /* couches[i] = Couche(); */ - /* }; */ couches[0].changerEtat(STATE_ACTIVE); } diff --git a/tests.cpp b/tests.cpp index 12dff1d..e3a283c 100644 --- a/tests.cpp +++ b/tests.cpp @@ -9,7 +9,7 @@ #include "tests.h" -// Tests sur les formes geometriques +// Tests sur les formes geometriques {{{ void Tests::tests_unitaires_formes() { cout << "----- Tests des formes geometriques -----\n"; @@ -49,9 +49,9 @@ void Tests::tests_unitaires_formes() { Cercle cc2; cc2.afficher(cout); cout << "\n"; -}; +}; // }}} -// Tests sur la classe Vecteur +// Tests sur la classe Vecteur {{{ void Tests::tests_unitaires_vecteur() { cout << "----- Tests de la classe Vecteur -----\n\n"; @@ -114,9 +114,9 @@ void Tests::tests_unitaires_vecteur() { << "\nAffichage: {\n"; v1.afficher(cout); cout << "}\n"; -}; +}; // }}} -// Tests sur la classe Couche +// Tests sur la classe Couche {{{ void Tests::tests_unitaires_couche() { cout << "----- Tests de la classe Couche -----\n"; @@ -193,29 +193,29 @@ void Tests::tests_unitaires_couche() { << "\nAffichage: {\n"; c1.afficher(cout); cout << "}\n\n"; +}; // }}} - - -}; - -// Tests sur la classe Canevas +// Tests sur la classe Canevas {{{ void Tests::tests_unitaires_canevas() { -}; +}; // }}} +// Execution de tout les tests unitaires {{{ void Tests::tests_unitaires() { // Fait tous les tests unitaires tests_unitaires_formes(); tests_unitaires_vecteur(); tests_unitaires_couche(); tests_unitaires_canevas(); -}; +}; // }}} +// Execution de tout les tests de mise en application {{{ void Tests::tests_application() { // Fait tous les tests applicatifs tests_application_cas_01(); tests_application_cas_02(); -}; +}; // }}} +// Premiere application {{{ void Tests::tests_application_cas_01() { // Mise en place int etape = 1; @@ -317,10 +317,10 @@ void Tests::tests_application_cas_01() { cout << "Etape " << etape++ << ": Afficher l'aire du canevas" << endl; cout << "\t* Aire du canevas: " << c.aire() << endl; +}; // }}} -}; - +// Deuxieme application {{{ void Tests::tests_application_cas_02() { cout << "TESTS APPLICATION (CAS 02)" << endl; // Il faut ajouter les operations realisant ce scenario de test. -}; +}; // }}} diff --git a/vecteur.cpp b/vecteur.cpp index 56b59ed..fdb153f 100644 --- a/vecteur.cpp +++ b/vecteur.cpp @@ -34,6 +34,7 @@ void Vecteur::afficher(ostream &s){ }; bool Vecteur::ajouterForme(Forme *f) { + if (f == NULL) return false; if (taille == capacite) { // Double the size of the array int newCapacite = capacite * 2; -- cgit v1.2.3 From 8dd2515cc25fc558f70884894bbc9c7d994e9754 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Sun, 15 Jan 2023 00:48:25 -0500 Subject: Remove never present teammate from authors --- rapport/main.pdf | Bin 138334 -> 137828 bytes rapport/main.tex | 1 - 2 files changed, 1 deletion(-) diff --git a/rapport/main.pdf b/rapport/main.pdf index 7336053..1fbfb35 100644 Binary files a/rapport/main.pdf and b/rapport/main.pdf differ diff --git a/rapport/main.tex b/rapport/main.tex index 5e9cccf..a465927 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -22,7 +22,6 @@ \addtolength{\tabcolsep}{-0.4em} \begin{tabular}{rcl} % Ajouter des auteurs au besoin Benjamin Chausse & -- & chab1704 \\ - Édouard Laurent & -- & laue\textbf{XXXX} \\ % TODO: demander numéro du CIP \end{tabular} } \teacher{Eugène Morin} -- cgit v1.2.3 From 766f377da3f63ea674ae3903c95cf0b512834049 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Sun, 15 Jan 2023 15:01:44 -0500 Subject: Bon nom dans le fichier graphicus.cpp --- graphicus-02.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphicus-02.cpp b/graphicus-02.cpp index d42dd8f..f9081d9 100644 --- a/graphicus-02.cpp +++ b/graphicus-02.cpp @@ -1,7 +1,7 @@ /******** * Fichier: graphicus-02.cpp - * Auteurs: C.-A. Brunet - * Date: 08 janvier 2018 (creation) + * Auteurs: Benjamin Chausse - chab1704 + * Date: 15 janvier 2023 (modification) * Description: gestionnaire de tests pour l'application Graphicus. Ce * fichier fait partie de la distribution de Graphicus. ********/ -- cgit v1.2.3 From e37d4911c750550896c4155f452736200d977b83 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Mon, 16 Jan 2023 02:51:22 -0500 Subject: Almost done... --- .gitignore | 3 + canevas.cpp | 18 +++-- canevas.h | 23 +++--- couche.h | 5 +- forme.h | 8 +- rapport/algpseudocode.sty | 92 +++++++++++++++++++++++ rapport/class.png | Bin 0 -> 142596 bytes rapport/frpseudocode.sty | 7 +- rapport/main.pdf | Bin 137828 -> 577604 bytes rapport/main.tex | 183 ++++++++++++++++++++++++++++++++++++++++++---- rapport/sequence.png | Bin 0 -> 102706 bytes rapport/usecase.png | Bin 0 -> 264876 bytes rectangle.h | 12 +-- tests.cpp | 68 +++++++++++++++++ tests.h | 1 - vecteur.h | 21 +++--- 16 files changed, 375 insertions(+), 66 deletions(-) create mode 100644 rapport/algpseudocode.sty create mode 100644 rapport/class.png create mode 100644 rapport/sequence.png create mode 100644 rapport/usecase.png diff --git a/.gitignore b/.gitignore index 6a1ed24..71895e2 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,6 @@ tags *.run.xml *.synctex _minted-* +*.lof +*.lot +*.toc diff --git a/canevas.cpp b/canevas.cpp index 959e681..edcb8be 100644 --- a/canevas.cpp +++ b/canevas.cpp @@ -10,7 +10,7 @@ Canevas::Canevas() { Couche couches[MAX_COUCHES]; - couches[0].changerEtat(STATE_ACTIVE); + activerCouche(0); } Canevas::~Canevas() { @@ -37,13 +37,6 @@ bool Canevas::activerCouche(int index) { return couches[index].changerEtat(STATE_ACTIVE); }; -bool Canevas::cacherCouche(int index) { - if (index < 0 || index >= MAX_COUCHES) - return false; - couches[index].changerEtat(STATE_INACTIVE); - return true; -}; - bool Canevas::ajouterForme(Forme *p_forme) { int active = -1; for (int i = 0; i < MAX_COUCHES; i++) @@ -88,6 +81,15 @@ void Canevas::afficher(ostream & s) { }; }; +void Canevas::getEtats(ostream &s) { + s << "[ "; + for (int i = 0; i < MAX_COUCHES; i++) { + s << STATES[couches[i].getEtat()]; + if (i < MAX_COUCHES - 1) s << ", "; + else s << " ]\n"; + }; +} + bool Canevas::reinitialiserCouche(int index) { if (index < 0 || index >= MAX_COUCHES){ return false; diff --git a/canevas.h b/canevas.h index 64b833a..6ccd68a 100644 --- a/canevas.h +++ b/canevas.h @@ -22,22 +22,17 @@ class Canevas { public: Canevas(); ~Canevas(); - - bool reinitialiser(); - - bool activerCouche(int index); - bool cacherCouche(int index); - - bool ajouterForme(Forme *p_forme); - bool retirerForme(int index); - + bool reinitialiser(); + bool activerCouche(int index); + bool ajouterForme(Forme *p_forme); + bool retirerForme(int index); double aire(); - bool translater(int deltaX, int deltaY); - void afficher(ostream & s); - bool reinitialiserCouche(int index); - + bool translater(int deltaX, int deltaY); + void afficher(ostream &s); + void getEtats(ostream &s); + bool reinitialiserCouche(int index); private: - Couche couches[MAX_COUCHES]; + Couche couches[MAX_COUCHES]; }; #endif diff --git a/couche.h b/couche.h index 4ef44a2..ec71444 100644 --- a/couche.h +++ b/couche.h @@ -19,18 +19,15 @@ class Couche { private: - int state; + int state; Vecteur vecteur; public: - // Initialisation Couche(); ~Couche(); - // Informations int getEtat(); Forme *getForme(int index); double aire(); void afficher(ostream &s); - // Modifications bool changerEtat(int newState); bool translater(int deltaX, int deltaY); bool ajouterForme(Forme *f); diff --git a/forme.h b/forme.h index c719366..f1fb5b6 100644 --- a/forme.h +++ b/forme.h @@ -19,11 +19,11 @@ class Forme { public: Forme(int x = 0, int y = 0); virtual ~Forme(); - void translater(int deltaX, int deltaY); + void translater(int deltaX, int deltaY); Coordonnee getAncrage(); - void setAncrage(Coordonnee c); - virtual double aire() = 0; - virtual void afficher(ostream & s) = 0; + void setAncrage(Coordonnee c); + virtual double aire() = 0; + virtual void afficher(ostream & s) = 0; protected: Coordonnee ancrage; }; diff --git a/rapport/algpseudocode.sty b/rapport/algpseudocode.sty new file mode 100644 index 0000000..8cc2bf0 --- /dev/null +++ b/rapport/algpseudocode.sty @@ -0,0 +1,92 @@ +% PSEUDOCODE ALGORITHMIC STYLE -- Released 27 APR 2005 +% for LaTeX version 2e +% +% Copyright Szasz Janos +% E-mail szaszjanos@users.sourceforge.net +% Based on Peter Williams's algorithmic.sty +% +\NeedsTeXFormat{LaTeX2e}% +\ProvidesPackage{algpseudocode}% +\RequirePackage{ifthen}% +\RequirePackage{algorithmicx}% +\typeout{Document Style - pseudocode environments for use with the `algorithmicx' style}% +% +\def\ALG@noend{f}% +\newboolean{ALG@compatible}% +\setboolean{ALG@compatible}{false}% +% +\DeclareOption{noend}{\def\ALG@noend{t}}% +\DeclareOption{end}{\def\ALG@noend{f}}% +\DeclareOption{compatible}{\typeout{For compatibility mode use algcompatible.sty!!!}\setboolean{ALG@compatible}{true}}% +\DeclareOption{noncompatible}{\setboolean{ALG@noncompatible}{false}}% +\ProcessOptions% +% +% *** DECLARATIONS *** +% +\algnewlanguage{pseudocode}% +\alglanguage{pseudocode}% +% +% *** KEYWORDS *** +% +\algnewcommand\algorithmicend{\textbf{end}} +\algnewcommand\algorithmicdo{\textbf{do}} +\algnewcommand\algorithmicwhile{\textbf{while}} +\algnewcommand\algorithmicfor{\textbf{for}} +\algnewcommand\algorithmicforall{\textbf{for all}} +\algnewcommand\algorithmicloop{\textbf{loop}} +\algnewcommand\algorithmicrepeat{\textbf{repeat}} +\algnewcommand\algorithmicuntil{\textbf{until}} +\algnewcommand\algorithmicprocedure{\textbf{procedure}} +\algnewcommand\algorithmicfunction{\textbf{function}} +\algnewcommand\algorithmicif{\textbf{if}} +\algnewcommand\algorithmicthen{\textbf{then}} +\algnewcommand\algorithmicelse{\textbf{else}} +\algnewcommand\algorithmicrequire{\textbf{Require:}} +\algnewcommand\algorithmicensure{\textbf{Ensure:}} +\algnewcommand\algorithmicreturn{\textbf{return}} +\algnewcommand\textproc{\textsc} +% +% *** DECLARED LOOPS *** +% +\algdef{SE}[WHILE]{While}{EndWhile}[1]{\algorithmicwhile\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicwhile}% +\algdef{SE}[FOR]{For}{EndFor}[1]{\algorithmicfor\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicfor}% +\algdef{S}[FOR]{ForAll}[1]{\algorithmicforall\ #1\ \algorithmicdo}% +\algdef{SE}[LOOP]{Loop}{EndLoop}{\algorithmicloop}{\algorithmicend\ \algorithmicloop}% +\algdef{SE}[REPEAT]{Repeat}{Until}{\algorithmicrepeat}[1]{\algorithmicuntil\ #1}% +\algdef{SE}[IF]{If}{EndIf}[1]{\algorithmicif\ #1\ \algorithmicthen}{\algorithmicend\ \algorithmicif}% +\algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ \algorithmicif\ #1\ \algorithmicthen}% +\algdef{Ce}[ELSE]{IF}{Else}{EndIf}{\algorithmicelse}% +\algdef{SE}[PROCEDURE]{Procedure}{EndProcedure}% + [2]{\algorithmicprocedure\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% + {\algorithmicend\ \algorithmicprocedure}% +\algdef{SE}[FUNCTION]{Function}{EndFunction}% + [2]{\algorithmicfunction\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% + {\algorithmicend}% +% +\ifthenelse{\equal{\ALG@noend}{t}}% + {% + \algtext*{EndWhile}% + \algtext*{EndFor}% + \algtext*{EndLoop}% + \algtext*{EndIf}% + \algtext*{EndProcedure}% + \algtext*{EndFunction}% + }{}% +% +% *** OTHER DECLARATIONS *** +% +\algnewcommand\Require{\item[\algorithmicrequire]}% +\algnewcommand\Ensure{\item[\algorithmicensure]}% +\algnewcommand\Return{\algorithmicreturn{} }% +\algnewcommand\Call[2]{\textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% +% +% +% +\ifthenelse{\boolean{ALG@compatible}}% + {% + \ifthenelse{\equal{\ALG@noend}{t}}% + {\RequirePackage[noend]{algcompatible}}% + {\RequirePackage{algcompatible}}% + }% + {}% +% diff --git a/rapport/class.png b/rapport/class.png new file mode 100644 index 0000000..cfb3804 Binary files /dev/null and b/rapport/class.png differ diff --git a/rapport/frpseudocode.sty b/rapport/frpseudocode.sty index 06be0cc..8e1732a 100644 --- a/rapport/frpseudocode.sty +++ b/rapport/frpseudocode.sty @@ -9,7 +9,7 @@ %% Functions %% \algrenewcommand\algorithmicprocedure{\textbf{PROCÉDURE}} \algrenewcommand\algorithmicfunction{\textbf{FONCTION}} -\algrenewcommand\algorithmicreturn{\textbf{RENVOYER}} +\algrenewcommand\algorithmicreturn{Retourner} \algrenewtext{Procedure}[2]% {\algorithmicprocedure\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}\ :} @@ -68,6 +68,11 @@ \algrenewtext{ENDIF}[0]% {\algorithmicend\ \algorithmicifm} + +\algtext*{EndWhile}% Remove "end while" text +\algtext*{EndIf}% Remove "end if" text +% \algtext*{EndFunction}% Remove "end if" text + %% Logical %\algrenewcommand{\algorithmicnot}{\textbf{non}} %\algrenewcommand{\algorithmicand}{\textbf{et}} diff --git a/rapport/main.pdf b/rapport/main.pdf index 1fbfb35..325b471 100644 Binary files a/rapport/main.pdf and b/rapport/main.pdf differ diff --git a/rapport/main.tex b/rapport/main.tex index a465927..638a69d 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -4,6 +4,9 @@ \usepackage{titlepage} \usepackage{float} \usepackage{algorithm} +\usepackage{amsmath} +\usepackage{graphicx} +\usepackage{tikz-uml} \usepackage{algpseudocode} \usepackage{frpseudocode} \usepackage[T1]{fontenc} @@ -12,6 +15,7 @@ % \addbibresource{bibliography.bib} % \nofiles + % \institution{Université de Sherbrooke} % \faculty{Faculté de génie} % \department{Département de génie électrique et de génie informatique} @@ -24,7 +28,7 @@ Benjamin Chausse & -- & chab1704 \\ \end{tabular} } -\teacher{Eugène Morin} +\teacher{Domingo Palao Muñoz} % \location{Sherbrooke} % \date{\today} @@ -33,31 +37,178 @@ \maketitle \newpage \tableofcontents +\listoffigures +\listoftables \newpage \section{Diagrammes UML} -\section{Pseudo-code} +La figure \ref{fig:class} montre les diverses relation entre les classes de +graphicus-02. Elle permet d'observer la hiérarchie des classes ainsi que les +facteurs de dépendance entre les classes. + +\begin{figure}[H] % Diagramme de classes {{{ +\centering +\caption{Diagrame de classes de graphicus-02}\label{fig:class} +\includegraphics[width=0.8\textwidth]{class.png} +\end{figure} % }}} + +La figure \ref{fig:sequence} montre comment l'application procéderait +lorsqu'un utilisateur voudrait activer la couche 1 du canevas alors que la +couche 0 est présentement active. Les autres couches ont été omises pour +alléger le diagramme. + +\begin{figure}[H] % Diagramme de séquence {{{ +\centering +\caption{Diagrame de séquence d'activation de couche}\label{fig:sequence} +\includegraphics[width=\textwidth]{sequence.png} +\end{figure} % }}} + -Ceci est un test pour voir comment le package frpseudocode fonctionne. -Du pseudo-code est pertinent pour l'APP ira ici. +La figure \ref{fig:usecase} montre les différentes actions que l'utilisateur +peut exécuter dans l'application. Nous voyos par la suite comment certaines de +ces actions agissent en arrière plan et dépendent d'autres actions (parfois +même d'autres actions accessibles à l'utilisateur). -\begin{algorithm} -\caption{Euclid's algorithm}\label{alg:euclid} +\begin{figure}[H] +\centering\caption{Diagramme de cas d'utilisation}\label{fig:usecase} +\includegraphics[width=\textwidth]{usecase.png} +\end{figure} + + +\section{Pseudo-code} + +\begin{algorithm} % {{{ +\caption{Ajout d'un élément au vecteur}\label{alg:ajouterForme} \begin{algorithmic}[1] - \Function{Euclid}{$a, b$} - \While{$a \neq b$} - \If{$a > b$} - \State $a \gets a - b$ - \Else - \State $b \gets b - a$ - \EndIf - \EndWhile - \State \Return $a$ + \Function{Vecteur::ajouterForme}{$f$}{ Booléen}\\ + \hspace{.5cm}// $f$: Forme à ajouter au vecteur\\ + \hspace{.5cm}// $Vecteur::taille$: nombre d'éléments actuellement dans le vecteur (entier)\\ + \hspace{.5cm}// $Vecteur::capacite$: capacité maximale du vecteur actuellement (entier)\\ + \hspace{.5cm}// $Vecteur::formes$: Liste de pointeurs vers les formes du vecteur (*Forme)\\ + \textbf{DÉBUT}\\ + \hspace{.5cm}// $newCapacite$: nouvelle capacité du vecteur (entier)\\ + \hspace{.5cm}// $newFormes$: nouvelle liste de pointeurs vers les formes du vecteur (*Forme) + \If{$f$ est de valeur nulle} + \Comment{Vérifier si la forme est valide} + \State\Return{Faux} + \EndIf + \If{$Vecteur::taille =\joinrel= Vecteur::capacite$} + \Comment{Si le vecteur est plein} + \State $newCapacite := Vecteur::capacite\times2$ + \If{L'espace disponible en mémoire $<$ $newCapacite\times taille(Forme)$} + \State\Return{Faux} + \EndIf + \State $newFormes :=\ $allouer$(newCapacite\times taille(Forme))$ + \For{\textbf{CHAQUE} Forme $i$ dans $Vecteur::formes$} + \State $newFormes[i] := Vecteur::formes[i]$ + \EndFor + \State $Vecteur::capacite := newCapacite$ + \State libérer$(Vecteur::formes)$ + \State $Vecteur::formes := newFormes$ + \EndIf + \State $Vecteur::taille := Vecteur::taille + 1$ + \State $Vecteur::formes[Vecteur::taille] := f$ + \State \Return{Vrai} \EndFunction \end{algorithmic} -\end{algorithm} +\end{algorithm} % }}} + +\section{Plan de test} + +\subsection{Identification} +\begin{table}[H] % {{{ +\centering\caption{Informations générales du plan de test}\label{fig:planTest} +\begin{tabular}{rl} + \\ \toprule + Nom: & Scénario de test du rapport d'APP \\ + But: & Vérifier les fonctionnalitées globales de graphicus-02\\ + Acteur principal: & classe \verb|Test| \\ + Date de création: & 2023-01-14 \\ + Auteur: & Benjamin Chausse -- chab1704 \\ + Version: & 1.0 \\ + \bottomrule +\end{tabular} +\end{table}% }}} + +\subsection{Scénario} + +\subsubsection{Préconditions} + +\begin{itemize} + \item Un canevas vierge vient d'être créé + \item Ce cas d'utilisation emploie la méthode \verb|tests_application_cas_02| + de la classe \verb|Tests|. La première ayant été utilisée lors de la + validation en classe. +\end{itemize} + + +\subsubsection{Postconditions} + +\begin{itemize} + \item Le déroulement du test se fait sans intervention de l'utilisateur. + \item L'affichage doit-être accessible à l'évaluateur: + \begin{itemize} + \item soit par écriture dans un fichier + \item soit par affichage dans un terminal + \end{itemize} + \item Le numéro de chaque étape est identifié avant son exécution. + \item La description de chaque étape est affichée avant son exécution. + \item Les informations passées à chaque étape sont affichées avant son exécution. +\end{itemize} + + +\subsubsection{Limitations} + +\begin{itemize} + \item Le test ne vérifie pas la totalité des cas limites + (ex: capacité insuffisante en mémoire pour agrandir le vecteur). +\end{itemize} + + +\subsection{Enchaînement nominal} + +\subsubsection{Étapes 1 à 4} +\begin{enumerate} + % \setcounter{enumi}{1} + \item Activer la couche d'index 4 + \item Ajouter les formes suivantes au canevas: + \begin{itemize} + \item un cercle de centre (1, 2) et de rayon $\frac{1}{\sqrt{\pi}}$ + \item un rectangle anchré en (3, 4), de largeur + \item un carré anchré en (-1, -1), de côté 2 + \end{itemize} + \item Afficher le canevas + \item Imprimer l'aire du canevas (doit être égale à $1+12+4$ soit $17$) +\end{enumerate} +\subsubsection{Étapes 5 à 13} +\begin{enumerate} + \setcounter{enumi}{4} + \item Activer la couche d'index 3 + \item Ajouter les formes par défaut au canevas. Soit: + \begin{itemize} + \item un cercle de centre (0, 0) et de rayon 1 + \item un rectangle anchré en (0, 0), de largeur 1 et de hauteur 1 + \item un carré anchré en (0, 0), de côté 1 + \end{itemize} + \item Afficher le canevas + \item Translater le canevas de (1, 1) + \item Afficher le canevas + \item Supprimer la forme de l'index 0 (la première) + \item Activer la couche 4 + \item Supprimer la forme de l'index 2 (la dernière) + \item Afficher le canevas +\end{enumerate} +\subsubsection{Étapes 14 à 18} +\begin{enumerate} + \setcounter{enumi}{13} + \item Initialiser la couche 4 + \item Afficher le canevas + \item Imprimer l'aire du canevas (doit être égale à $1+1$ soit $2$) + \item Réinitialiser le canevas + \item Afficher le canevas +\end{enumerate} % \newpage diff --git a/rapport/sequence.png b/rapport/sequence.png new file mode 100644 index 0000000..bdb1aae Binary files /dev/null and b/rapport/sequence.png differ diff --git a/rapport/usecase.png b/rapport/usecase.png new file mode 100644 index 0000000..2bf4ea9 Binary files /dev/null and b/rapport/usecase.png differ diff --git a/rectangle.h b/rectangle.h index 59b990b..02aeb98 100644 --- a/rectangle.h +++ b/rectangle.h @@ -10,13 +10,13 @@ class Rectangle:public Forme{ public: Rectangle(int x=0, int y=0, int l=1, int h=1); ~Rectangle(); - int getLargeur(); - int getHauteur(); + int getLargeur(); + int getHauteur(); Coordonnee getAncrageForme(); - void setLargeur(int l); - void setHauteur(int h); - double aire(); - void afficher(ostream &s); + void setLargeur(int l); + void setHauteur(int h); + double aire(); + void afficher(ostream &s); }; #endif diff --git a/tests.cpp b/tests.cpp index e3a283c..9a2f359 100644 --- a/tests.cpp +++ b/tests.cpp @@ -197,6 +197,74 @@ void Tests::tests_unitaires_couche() { // Tests sur la classe Canevas {{{ void Tests::tests_unitaires_canevas() { + cout << "----- Tests de la classe Canevas -----\n\n"; + + cout << "--- Initialisation d'un canevas ---\n"; + Canevas c1; + cout << "Couches: "; + c1.getEtats(cout); + cout << "Affichage: {\n"; + c1.afficher(cout); + cout << "}\n\n"; + + cout << "--- Ajout d'une forme (doit aller dans la couche 0) ---\n"; + cout << "Couches: "; + c1.getEtats(cout); + cout << "Reussite: " << (c1.ajouterForme(new Carre())? "Oui":"Non") + << "\nAffichage: {\n"; + c1.afficher(cout); + cout << "}\n\n"; + + cout << "--- Activation de la couche 3 ---\n"; + cout << "Reussite: " << (c1.activerCouche(3)? "Oui":"Non") + << "\nCouches: "; + c1.getEtats(cout); + cout << "Affichage: {\n"; + c1.afficher(cout); + cout << "}\n\n"; + + cout << "--- Ajout de forme (doit aller dans la couche 3) ---\n"; + cout << "Reussite: " << (c1.ajouterForme(new Carre())? "Oui":"Non") + << "\nCouches: "; + c1.getEtats(cout); + cout << "Affichage: {\n"; + c1.afficher(cout); + cout << "}\n\n"; + + cout << "--- Reinitialisation de la couche active (3) ---\n"; + cout << "Reussite: " << (c1.reinitialiserCouche(3)? "Oui":"Non") + << "\nCouches: "; + c1.getEtats(cout); + cout << "Affichage: {\n"; + c1.afficher(cout); + cout << "}\n\n"; + + cout << "--- Translation de couche initialisée (couche 3 par 1,2) ---\n"; + cout << "Reussite: " << (c1.translater(1, 2)? "Oui":"Non") + << "\nCouches: "; + c1.getEtats(cout); + cout << "Affichage: {\n"; + c1.afficher(cout); + cout << "}\n\n"; + + cout << "--- Translation d'une couche active (couche 0 par 1,2) ---\n"; + c1.activerCouche(0); + cout << "Reussite: " << (c1.translater(1, 2)? "Oui":"Non") + << "\nCouches: "; + c1.getEtats(cout); + cout << "Affichage: {\n"; + c1.afficher(cout); + cout << "}\n\n"; + + cout << "--- Réinitialisation du canevas ---\n"; + cout << "Reussite: " << (c1.reinitialiser()? "Oui":"Non") + << "\nCouches: "; + c1.getEtats(cout); + cout << "Affichage: {\n"; + c1.afficher(cout); + cout << "}\n"; + + }; // }}} // Execution de tout les tests unitaires {{{ diff --git a/tests.h b/tests.h index 73aaaad..ebafc72 100644 --- a/tests.h +++ b/tests.h @@ -27,7 +27,6 @@ public: void tests_unitaires_couche(); void tests_unitaires_canevas(); void tests_unitaires(); // Appel de tous les tests unitaires - // Methodes pour les tests unitaires des classes void tests_application_cas_01(); void tests_application_cas_02(); diff --git a/vecteur.h b/vecteur.h index de5e163..0f36348 100644 --- a/vecteur.h +++ b/vecteur.h @@ -8,23 +8,20 @@ using namespace std; class Vecteur { private: - int capacite; // capacité maximale actuelle du vecteur - int taille; - // dynamic array of pointers to Forme - Forme **formes; + int capacite; // capacité maximale actuelle du vecteur + int taille; // nombre d'éléments actuellement dans le vecteur + Forme **formes; // dynamic array of pointers to Forme public: Vecteur(); ~Vecteur(); - // Informations - bool estVide(); + bool estVide(); Forme *getForme(int index); - int getTaille(); - int getCapacite(); - void afficher(ostream &s); - // Manipulations - bool ajouterForme(Forme *f); + int getTaille(); + int getCapacite(); + void afficher(ostream &s); + bool ajouterForme(Forme *f); Forme *supprimerForme(int index); - void vider(); + void vider(); }; #endif -- cgit v1.2.3 From 5f8fa959dab1106105f9e58325f65d0b51bb1631 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Mon, 16 Jan 2023 03:25:45 -0500 Subject: One graph left... --- cas-dapplication-01.txt | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ cas-dapplication-02.txt | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ couche.cpp | 1 - graphicus-02.cpp | 2 +- rapport/main.pdf | Bin 577604 -> 577902 bytes rapport/main.tex | 8 ++-- tests.cpp | 78 ++++++++++++++++++++++++++++++++++++++- 7 files changed, 272 insertions(+), 7 deletions(-) create mode 100644 cas-dapplication-01.txt create mode 100644 cas-dapplication-02.txt diff --git a/cas-dapplication-01.txt b/cas-dapplication-01.txt new file mode 100644 index 0000000..35821ca --- /dev/null +++ b/cas-dapplication-01.txt @@ -0,0 +1,95 @@ +TESTS APPLICATION (CAS 01) +Etape 1: Activation de la couche 1 +Etape 2: Ajout des trois formes géométriques suivantes + * Un rectangle (x=0, y=0, largeur=2, hauteur=3) + * Un carré (x=2, y=3, cote=4) + * Un cercle (x=7, y=8, rayon=6) +Etape 3: Activer la couche 2 +Etape 4: Ajouter la forme géométrique suivante + * Un rectangle (x=0, y=0, largeur=4, hauteur=5) +Etape 5: Afficher le canevas +----- Couche 0 +----- Couche 1 +Rectangle:(x=0, y=0, l=2, h=3, aire=6) +Carre(x=2, y=3, c=4, a=16) +Cercle (x=7, y=8, r=6, aire=113.097) +----- Couche 2 +Rectangle:(x=0, y=0, l=4, h=5, aire=20) +----- Couche 3 +Couche initialisée +----- Couche 4 +Couche initialisée +Etape 6: Afficher l'aire du canevas + * Aire du canevas: 155.097 +Etape 7: Activer la couche 0 et ajouter les formes suivantes + * Un rectangle (x=0, y=0, largeur=1, hauteur=1) + * Un carré (x=0, y=0, cote=1) + * Un cercle (x=0, y=0, rayon=1) +Etape 8: Translater les formes de la couche selon x=5, y=5 pour obtenir les formes suivantes lorsque affiché + * Un rectangle (x=5, y=5, largeur=1, hauteur=1) + * Un carré (x=5, y=5, cote=1) + * Un cercle (x=5, y=5, rayon=1) +----- Couche 0 +Rectangle:(x=5, y=5, l=1, h=1, aire=1) +Carre(x=5, y=5, c=1, a=1) +Cercle (x=5, y=5, r=1, aire=3.14159) +----- Couche 1 +Rectangle:(x=0, y=0, l=2, h=3, aire=6) +Carre(x=2, y=3, c=4, a=16) +Cercle (x=7, y=8, r=6, aire=113.097) +----- Couche 2 +Rectangle:(x=0, y=0, l=4, h=5, aire=20) +----- Couche 3 +Couche initialisée +----- Couche 4 +Couche initialisée +Etape 9: Couche 2 - initialisée +Etape 10: Couche 3 - initialisée +Etape 11: Couche 4 - initialisée +Etape 12: Afficher le canevas +----- Couche 0 +Rectangle:(x=5, y=5, l=1, h=1, aire=1) +Carre(x=5, y=5, c=1, a=1) +Cercle (x=5, y=5, r=1, aire=3.14159) +----- Couche 1 +Rectangle:(x=0, y=0, l=2, h=3, aire=6) +Carre(x=2, y=3, c=4, a=16) +Cercle (x=7, y=8, r=6, aire=113.097) +----- Couche 2 +Couche initialisée +----- Couche 3 +Couche initialisée +----- Couche 4 +Couche initialisée +Etape 13: Afficher l'aire du canevas +Etape 14: Retirer la première forme de la couche 1 +Etape 15: Afficher le canevas +----- Couche 0 +Rectangle:(x=5, y=5, l=1, h=1, aire=1) +Carre(x=5, y=5, c=1, a=1) +Cercle (x=5, y=5, r=1, aire=3.14159) +----- Couche 1 +Carre(x=2, y=3, c=4, a=16) +Cercle (x=7, y=8, r=6, aire=113.097) +----- Couche 2 +Couche initialisée +----- Couche 3 +Couche initialisée +----- Couche 4 +Couche initialisée +Etape 16: Afficher l'aire du canevas + * Aire du canevas: 134.239 +Etape 17: Réinitialiser le canevas +Etape 18: Afficher le canevas +----- Couche 0 +Couche initialisée +----- Couche 1 +Couche initialisée +----- Couche 2 +Couche initialisée +----- Couche 3 +Couche initialisée +----- Couche 4 +Couche initialisée +Etape 19: Afficher l'aire du canevas + * Aire du canevas: 0 diff --git a/cas-dapplication-02.txt b/cas-dapplication-02.txt new file mode 100644 index 0000000..3bee6df --- /dev/null +++ b/cas-dapplication-02.txt @@ -0,0 +1,95 @@ +TESTS APPLICATION (CAS 02) +Étape 1: Activer la couche d'index 4 +Étape 2: Ajouter les formes suivantes au canevas: + - Un cercle (x= 1, y= 2, rayon=1/sqrt(pi) ) + - Un rectangle (x= 3, y= 4, largeur=3, hauteur=4) + - Un carré (x=-1, y=-1, cote=2) +Étape 3: Afficher le canevas +----- Couche 0 +----- Couche 1 +Couche initialisée +----- Couche 2 +Couche initialisée +----- Couche 3 +Couche initialisée +----- Couche 4 +Cercle (x=1, y=2, r=0, aire=0) +Rectangle:(x=3, y=4, l=3, h=4, aire=12) +Carre(x=-1, y=-1, c=2, a=4) +Étape 4: Imprimer l'aire du canevas (doit etre egale a 1+12+4 soit 17) + * Aire du canevas: 16 +Étape 5: Activer la couche d'index 3 +Étape 6: Ajouter les formes par défaut au canevas. Soit: + - Un cercle (x=0, y=0, rayon=1) + - Un rectangle (x=0, y=0, largeur=1, hauteur=1) + - Un carre (x=0, y=0, cote=1) +Étape 7: Afficher le canevas +----- Couche 0 +----- Couche 1 +Couche initialisée +----- Couche 2 +Couche initialisée +----- Couche 3 +Cercle (x=0, y=0, r=1, aire=3.14159) +Rectangle:(x=0, y=0, l=1, h=1, aire=1) +Carre(x=0, y=0, c=1, a=1) +----- Couche 4 +Cercle (x=1, y=2, r=0, aire=0) +Rectangle:(x=3, y=4, l=3, h=4, aire=12) +Carre(x=-1, y=-1, c=2, a=4) +Étape 8: Translater la couche active de (1,1) +Étape 9: Afficher le canevas +----- Couche 0 +----- Couche 1 +Couche initialisée +----- Couche 2 +Couche initialisée +----- Couche 3 +Cercle (x=1, y=1, r=1, aire=3.14159) +Rectangle:(x=1, y=1, l=1, h=1, aire=1) +Carre(x=1, y=1, c=1, a=1) +----- Couche 4 +Cercle (x=1, y=2, r=0, aire=0) +Rectangle:(x=3, y=4, l=3, h=4, aire=12) +Carre(x=-1, y=-1, c=2, a=4) +Étape 10: Supprimer la forme d'index 0 (la premiere) +Étape 11: Activer la couche d'index 4 +Étape 12: Supprimer la forme d'index 2 (la dernière) +Étape 13: Afficher le canevas +----- Couche 0 +----- Couche 1 +Couche initialisée +----- Couche 2 +Couche initialisée +----- Couche 3 +Rectangle:(x=1, y=1, l=1, h=1, aire=1) +Carre(x=1, y=1, c=1, a=1) +----- Couche 4 +Cercle (x=1, y=2, r=0, aire=0) +Rectangle:(x=3, y=4, l=3, h=4, aire=12) +Étape 14: Initialiser la couche d'index 4 +Étape 15: Afficher le canevas +----- Couche 0 +----- Couche 1 +Couche initialisée +----- Couche 2 +Couche initialisée +----- Couche 3 +Rectangle:(x=1, y=1, l=1, h=1, aire=1) +Carre(x=1, y=1, c=1, a=1) +----- Couche 4 +Couche initialisée +Étape 16: Imprimer l'aire du canevas + * Aire du canevas: 2 +Étape 17: Réinitialiser le canevas +Étape 18: Afficher le canevas +----- Couche 0 +Couche initialisée +----- Couche 1 +Couche initialisée +----- Couche 2 +Couche initialisée +----- Couche 3 +Couche initialisée +----- Couche 4 +Couche initialisée diff --git a/couche.cpp b/couche.cpp index b84cc73..3d31ebb 100644 --- a/couche.cpp +++ b/couche.cpp @@ -71,7 +71,6 @@ Forme *Couche::supprimerForme(int index) { }; bool Couche::reinitialiser() { - if (state == STATE_INIT) return false; state = STATE_INIT; vecteur.vider(); return true; diff --git a/graphicus-02.cpp b/graphicus-02.cpp index f9081d9..800b393 100644 --- a/graphicus-02.cpp +++ b/graphicus-02.cpp @@ -13,7 +13,7 @@ int main() { Tests tests; /* tests.tests_unitaires(); */ - tests.tests_application_cas_01(); + tests.tests_application(); return 0; } diff --git a/rapport/main.pdf b/rapport/main.pdf index 325b471..e705be0 100644 Binary files a/rapport/main.pdf and b/rapport/main.pdf differ diff --git a/rapport/main.tex b/rapport/main.tex index 638a69d..bdf975e 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -175,7 +175,7 @@ même d'autres actions accessibles à l'utilisateur). \item Ajouter les formes suivantes au canevas: \begin{itemize} \item un cercle de centre (1, 2) et de rayon $\frac{1}{\sqrt{\pi}}$ - \item un rectangle anchré en (3, 4), de largeur + \item un rectangle anchré en (3, 4), de dimensions $3\times4$ \item un carré anchré en (-1, -1), de côté 2 \end{itemize} \item Afficher le canevas @@ -193,17 +193,17 @@ même d'autres actions accessibles à l'utilisateur). \item un carré anchré en (0, 0), de côté 1 \end{itemize} \item Afficher le canevas - \item Translater le canevas de (1, 1) + \item Translater la couche active de (1, 1) \item Afficher le canevas \item Supprimer la forme de l'index 0 (la première) - \item Activer la couche 4 + \item Activer la couche d'index 4 \item Supprimer la forme de l'index 2 (la dernière) \item Afficher le canevas \end{enumerate} \subsubsection{Étapes 14 à 18} \begin{enumerate} \setcounter{enumi}{13} - \item Initialiser la couche 4 + \item Initialiser la couche d'index 4 \item Afficher le canevas \item Imprimer l'aire du canevas (doit être égale à $1+1$ soit $2$) \item Réinitialiser le canevas diff --git a/tests.cpp b/tests.cpp index 9a2f359..843454b 100644 --- a/tests.cpp +++ b/tests.cpp @@ -8,6 +8,8 @@ ********/ #include "tests.h" +#include "math.h" + // Tests sur les formes geometriques {{{ void Tests::tests_unitaires_formes() { @@ -387,8 +389,82 @@ void Tests::tests_application_cas_01() { cout << "\t* Aire du canevas: " << c.aire() << endl; }; // }}} +// takes an int pointer and increments it, prints the message: "Step i: msg\n" +void step(string msg, int *i) { + cout << "Étape " << *i << ": " << msg << endl; + (*i)++; +} + // Deuxieme application {{{ void Tests::tests_application_cas_02() { cout << "TESTS APPLICATION (CAS 02)" << endl; - // Il faut ajouter les operations realisant ce scenario de test. + // Mise en place + Canevas c; + int etape = 1; + + + step("Activer la couche d'index 4", &etape); + c.activerCouche(4); + + step("Ajouter les formes suivantes au canevas:", &etape); + cout << "\t- Un cercle (x= 1, y= 2, rayon=1/sqrt(pi) )\n" + << "\t- Un rectangle (x= 3, y= 4, largeur=3, hauteur=4)\n" + << "\t- Un carré (x=-1, y=-1, cote=2)\n"; + c.ajouterForme(new Cercle(1, 2, 1/sqrt(M_PI))); + c.ajouterForme(new Rectangle(3, 4, 3, 4)); + c.ajouterForme(new Carre(-1, -1, 2)); + + step("Afficher le canevas", &etape); + c.afficher(cout); + + step("Imprimer l'aire du canevas (doit etre egale a 1+12+4 soit 17)", &etape); + cout << "\t* Aire du canevas: " << c.aire() << endl; + + step("Activer la couche d'index 3", &etape); + c.activerCouche(3); + + step("Ajouter les formes par défaut au canevas. Soit:", &etape); + cout << "\t- Un cercle (x=0, y=0, rayon=1)\n" + << "\t- Un rectangle (x=0, y=0, largeur=1, hauteur=1)\n" + << "\t- Un carre (x=0, y=0, cote=1)\n"; + c.ajouterForme(new Cercle()); + c.ajouterForme(new Rectangle()); + c.ajouterForme(new Carre()); + + step("Afficher le canevas", &etape); + c.afficher(cout); + + step("Translater la couche active de (1,1)", &etape); + c.translater(1, 1); + + step("Afficher le canevas", &etape); + c.afficher(cout); + + step("Supprimer la forme d'index 0 (la premiere)", &etape); + c.retirerForme(0); + + step("Activer la couche d'index 4", &etape); + c.activerCouche(4); + + step("Supprimer la forme d'index 2 (la dernière)", &etape); + c.retirerForme(2); + + step("Afficher le canevas", &etape); + c.afficher(cout); + + step("Initialiser la couche d'index 4", &etape); + c.reinitialiserCouche(4); + + step("Afficher le canevas", &etape); + c.afficher(cout); + + step("Imprimer l'aire du canevas", &etape); + cout << "\t* Aire du canevas: " << c.aire() << endl; + + step("Réinitialiser le canevas", &etape); + c.reinitialiser(); + + step("Afficher le canevas", &etape); + c.afficher(cout); + }; // }}} -- cgit v1.2.3