La connexion SSH n'est actuelle disponible que depuis une petite partie du reseau interne U-PSud. Utilisez de préférence les adresses de dépots en HTTPS pour le moment.

Commit 3018d416 authored by Virgile Robles's avatar Virgile Robles

[Semaine 10] Retouches et MAJ

parent dd6f81f3
......@@ -6,7 +6,7 @@ TARGET=$(PROGS:%.cpp=%)
# -NDEBUG pour tester comme dans l'environnement conda où elle est définie
CXXFLAGS+=-std=c++11 -Wall -Wno-narrowing -pedantic -DNDEBUG
all: $(TARGET)
all: $(TARGET) fibonacci-exemple-correction fibonacci-test-correction
# filter-out factorielle factorielle-test factorielle-exemple fibonacci-correction fibonacci-exemple-correction fibonacci-test-correction affiche-ppm mlv-test/11_turtle, $(TARGET))
......@@ -19,7 +19,7 @@ factorielle-test: factorielle.o factorielle-test.o
fibonacci-exemple-correction: fibonacci-correction.o fibonacci-exemple-correction.o
g++ $^ -o $@
fibonacci-test-correction: fibonacci-correction.o factorielle-test-correction.o
fibonacci-test-correction: fibonacci-correction.o fibonacci-test-correction.o
g++ $^ -o $@
%.o: %.cpp
......@@ -29,4 +29,4 @@ $(GRAPHIC_PROGS:%.cpp=%): %: %.o primitives.o
g++ $(CXXFLAGS) $(LDFLAGS) $^ -o $@ -lsfml-window -lsfml-graphics -lsfml-system
clean:
-rm $(TARGET) *.o
-rm -rf $(TARGET) *.o
%\def\withcorrection{}
%\def\withnotes{}
\documentclass{ficheTDTP}
\usepackage{enumitem}
\title{TD 10: compilation séparée, graphiques}
......@@ -201,7 +203,7 @@ void draw_filled_circle(RenderWindow& w, Point center, int r, Color color);
fonctions puissent la modifier. Vous pouvez essentiellement ignorer
ce détail technique dont vous verrez les tenants et les aboutissants au
deuxième semestre.
\clearpage
Notez aussi les variables de type \lstinline{Point}. Ces dernières
représentent des coordonnées. On peut créer un point et accéder à ses
coordonnées comme suit :
......@@ -273,45 +275,4 @@ void draw_line (RenderWindow& w, Point pos1, Point pos2, Color color);
\end{enumerate}
\end{exercice}
%
%\begin{exercice}[Graphiques]
% Pour les graphiques, nous utiliserons une bibliothèque écrite par
% Franck Quessette\footnote{\url{http://www.prism.uvsq.fr/~qst/}}
% basée sur la bibliothèque graphique
% SDL\footnote{\url{www.libsdl.org}}. Pour nous préparer à son
% utilisation, nous allons maintenant réfléchir à comment pourraient
% être implantées les primitives graphiques qu'elle fournit. À la
% base, nous supposerons que le programme a à sa disposition une
% fenêtre formée d'une grille de pixels avec une primitive pour
% dessiner un pixel:
% \begin{lstlisting}
% // Dessine un pixel
% void draw_pixel(POINT p);
% \end{lstlisting}
% En utilisant celle-ci, proposer une implantation de chacune des
% fonctions suivantes:
% \begin{lstlisting}
% // Dessine un triangle (en supposant draw_line déjà implanté)
% void draw_triangle(POINT p1, POINT p2, POINT p3);
% // Dessine un rectangle non rempli (avec puis sans draw_line)
% void draw_rectangle(POINT p1, POINT p2);
% // Dessine un cercle non rempli
% void draw_circle(POINT centre, int rayon);
% // Dessine un segment
% void draw_line(POINT p1, POINT p2);
% // Dessine un rectangle rempli
% void draw_fill_rectangle(POINT p1, POINT p2);
% // Dessine un cercle rempli
% void draw_fill_circle(POINT centre, int rayon);
% // Dessine une ellipse remplie
% void draw_fill_ellipse(POINT F1, POINT F2, int r);
% // Dessine un triangle rempli
% void draw_fill_triangle(POINT p1, POINT p2, POINT p3);
% \end{lstlisting}
%\end{exercice}
%
%\begin{correction}
% \lstinputlisting[firstline=13, lastline=276]{graphiques-correction.cpp}
%\end{correction}
\end{document}
......@@ -10,8 +10,6 @@
Comme d'habitude, utilisez la commande \lstinline{info-111} pour
télécharger les fichiers du TP.
\TODO{leur faire utiliser info-111 g++ systématiquement?}
\begin{exercice}[Préliminaires: compilation séparée]\newlineforenumerate
\begin{enumerate}
\item Consulter le contenu des fichiers suivants: \lstinline{factorielle.h},
......@@ -19,8 +17,8 @@ télécharger les fichiers du TP.
\item Pour compiler le programme entier, il faut d'abord compiler chacun des bouts de programme (les fichiers \lstinline{.cpp}).
Pour cela on utilise l'option \lstinline{-c}:
\begin{lstlisting}
g++ -c factorielle.cpp
g++ -c factorielle-exemple.cpp
info-111 g++ -c factorielle.cpp
info-111 g++ -c factorielle-exemple.cpp
\end{lstlisting}
%Il faut bien sûr, au préalable, être allé avec \lstinline{cd} dans
%le dossier contenant ce programme.
......@@ -30,7 +28,7 @@ télécharger les fichiers du TP.
Ensuite on les combine ces deux bouts de programme de la façon suivante:
\begin{lstlisting}
g++ factorielle.o factorielle-exemple.o -o factorielle-exemple
info-111 g++ factorielle.o factorielle-exemple.o -o factorielle-exemple
\end{lstlisting}
Vérifier avec \code{ls} que cette commande crée bien un exécutable \code{factorielle-exemple}.
\item Exécuter le programme \lstinline{factorielle-exemple}.
......@@ -40,13 +38,15 @@ télécharger les fichiers du TP.
% \lstinline{factorielle-exemple.cpp} par \lstinline{factorielle-test.cpp}, puis testez ce nouveau programme.
\item Une autre méthode pour construire \lstinline{factorielle-exemple} est de remplacer les trois commandes de la question (2) par la seule commande:
\begin{lstlisting}
g++ factorielle.cpp factorielle-exemple.cpp -o factorielle-exemple
info-111 g++ factorielle.cpp factorielle-exemple.cpp -o factorielle-exemple
\end{lstlisting}
Supprimer les fichiers \lstinline{factorielle.o}, \lstinline{factorielle-exemple.o} et \lstinline{factorielle-exemple} de votre dossier avec \lstinline{rm}.
Tester alors la commande précédente. Quel(s) fichier(s) ont été créés? En déduire quelles sont les différences avec la méthode précédente?
En fonction des moments vous pourrez être amené à faire l'une ou l'autre, notamment dans le projet.
\begin{correction}
Il n'y a pas eu création de fichiers .o mais uniquement de l'exécutable \code{factorielle-exemple}.
Il n'y a pas eu création de fichiers .o mais uniquement de l'exécutable
\code{factorielle-exemple}. Cette commande compile \emph{et} combine d'un
seul coup.
\end{correction}
\end{enumerate}
\end{exercice}
......@@ -89,10 +89,33 @@ télécharger les fichiers du TP.
et pose le problème de la déclaration de la fonction de test.
\end{notes}
\begin{correction}
\lstinputlisting{fibonacci-correction.h}
\lstinputlisting{fibonacci-correction.cpp}
\lstinputlisting{fibonacci-exemple-correction.cpp}
\lstinputlisting{fibonacci-test-correction.cpp}
\begin{enumerate}
\setcounter{enumi}{1}
\item On réorganise les fichiers comme suit. Notez bien les
\lstinline{#include "fibonacci.h"} au début de chaque fichier
\verb|.cpp|.
\lstinputlisting[caption=fibonacci.h]{fibonacci.h}
\lstinputlisting[caption=fibonacci.cpp]{fibonacci-correction.cpp}
\lstinputlisting[caption=fibonacci-exemple.cpp]{fibonacci-exemple-correction.cpp}
\lstinputlisting[caption=fibonacci-test.cpp]{fibonacci-test-correction.cpp}
\item On construit autant d'exécutables qu'il y a de fonctions
\lstinline{main}. Un pour lancer l'exemple, et un pour lancer les tests
automatiques. Dans les deux cas, on doit combiner le fichier contenant
le code de la bibliothèque et le fichier qui l'utilise.
Ainsi pour obtenir le premier, on doit combiner
\lstinline{fibonacci.cpp} et \lstinline{fibonacci-exemple.cpp}. Pour le
second, on combine \lstinline{fibonacci.cpp} et
\lstinline{fibonacci-test.cpp}.
\item On compile les deux programmes avec les commandes suivantes
\begin{lstlisting}
info-111 g++ fibonacci.cpp fibonacci-exemple.cpp -o fibonacci-exemple
info-111 g++ fibonacci.cpp fibonacci-test.cpp -o fibonacci-test
\end{lstlisting}
\end{enumerate}
\end{correction}
\end{exercice}
......@@ -112,12 +135,12 @@ télécharger les fichiers du TP.
\lstinline{primitives.h} et consulter le premier.
\item Compiler ce programme depuis le terminal avec (en une seule ligne!):
\begin{lstlisting}
info-111 g++ exemple-graphisme1.cpp primitives.cpp -o exemple-graphisme1
-lsfml-system -lsfml-window -lsfml-graphics
info-111 g++ exemple-graphisme1.cpp primitives.cpp
-o exemple-graphisme1 -lsfml-system -lsfml-window -lsfml-graphics
\end{lstlisting}
puis le lancer avec:
\begin{lstlisting}
./exemple-graphisme1
./exemple-graphisme1
\end{lstlisting}
Explication: le code binaire de SFML est réparti dans trois
......@@ -210,7 +233,7 @@ Erreur fréquente: oublier \code{window.display()}
ici : \url{{https://www.sfml-dev.org/learn-fr.php}}.
\end{exerciceavance}
\begin{correction}\
\lstinputlisting{affiche-ppm-correction.cpp}
\lstinputlisting[linerange=42-48]{primitives.cpp}
\end{correction}
\bigskip
......
/** @file **/
#include "fibonacci-correction.h"
#include "fibonacci.h"
int fibonacci(int n) {
int u1 = 1;
......
......@@ -3,7 +3,7 @@
**/
#include <iostream>
#include "fibonacci-correction.h"
#include "fibonacci.h"
using namespace std;
int main() {
......
/** @file **/
#include <iostream>
#include "fibonacci-correction.h"
#include "fibonacci.h"
using namespace std;
/** Infrastructure minimale de test **/
......
......@@ -50,15 +50,20 @@ void draw_filled_rectangle(RenderWindow& w, Point pos, int width, int height, Co
Font minipax;
bool loadfont() {
static bool loaded = false;
static bool giveup = false;
/**
* Using the Minipax font, by Raphaël Ronot
* Under the SIL Open Font License
* Retrieved on Velvetyne Type Foundry
*/
if(!loaded) loaded = minipax.loadFromFile("minipax.ttf");
if(!loaded)
cerr << "ERREUR: Le fichier 'minipax.ttf' n'a pas été trouvé dans le dossier."
<< "Le programme ne pourra pas afficher de texte !" << endl;
if(not giveup and not loaded) {
loaded = minipax.loadFromFile("minipax.ttf");
if(not loaded) {
cerr << "ERREUR: Le fichier 'minipax.ttf' n'a pas été trouvé dans le dossier."
<< "Le programme ne pourra pas afficher de texte !" << endl;
giveup = true;
}
}
return loaded;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment