Commit d731e5e4 authored by CHAMONT David's avatar CHAMONT David
Browse files

Merge branch 'CppLambdaCorrections2' into 'master'

ajout d'une section de verification de l'environnement de travail



See merge request !9
parents 9070c0d8 0c4ddfb1
......@@ -10,9 +10,77 @@ retranchements avec des fonctions lambda très compliquées, c'est moins éviden
de juger.
* prérequis : connaissance du C++ historique, et si possible des objets-fonctions.
* préinstallation : Docker.
* préinstallation : Docker, image `gcc:6.1`.
* fichiers : https://gitlab.in2p3.fr/MaitresNageurs/PiscineJI/tree/master/CppLambda
---
## Vérification de votre environnement de travail
Nous vous proposons de modifier vos fichiers de code au sein du système
d'exploitation natif de votre ordinateur portable, avec vos outils d'édition
habituels, et d'utiliser une machine Docker uniquement pour compiler et exécuter
le programme résultant.
Vous devriez avoir déjà installé Docker et VirtualBox, conformément aux instructions
du [README.md](../README.md) principal de ce projet. Pour vérifier que votre Docker
est opérationnel, ouvrez une fenêtre de commande et tapez `docker run hello-world`:
```
> docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
```
Vous devriez également déjà disposer de l'image `gcc:6.1`. Si ce n'est pas
le cas et que vous disposez de réseau, tapez `docker pull gcc:6.1`.
En partant de l'hypothèse que vous éditerez vos fichiers dans le répertoire
local <LOCAL>, nous vous proposons de monter ce répertoire en tant que
`/Piscine` au sein de la machine Docker. Créez le programme suivant au sein
de <LOCAL> :
```c++
// Fichier hello_world.cpp
#include <iostream>
int main()
{
std::cout<<"Hello World !"<<std::endl ;
}
```
A présent, compilez le et exécutez le au sein d'une machine Docker `gcc:6.1` :
```
> docker run -it -v <LOCAL>:/Piscine gcc:6.1 /bin/bash
> cd /Piscine
> g++ -std=c++11 hello_world.cpp -o hello_world.exe
> ./hello_world.exe
Hello World !
```
Vous etes prêt.
---
## Motivation : la définition au vol de fonctions simples
......@@ -51,14 +119,12 @@ int main()
```
Placez le code ci-dessus dans un fichier `lbd_motivation_1.cpp` sur votre ordinateur
portable, dans un répertoire de votre choix, que nous appelerons <TRAVAIL>. Vous pouvez
aussi récupérer ce fichier déjà prêt à l'adresse internet donnée au début de ce tutoriel.
Essayez de compiler et d'exécuter ce code au sein d'une machine docker `gcc 6.1` :
portable (répertoire <LOCAL>). Vous pouvez aussi récupérer ce fichier déjà prêt à
l'adresse internet donnée au début de ce tutoriel. Essayez de compiler et d'exécuter
ce code au sein d'une machine docker `gcc 6.1` :
```
> docker pull gcc 6.1
> docker run -it -v <TRAVAIL>:/home/<USER>/Piscine gcc:6.1 /bin/bash
> cd /home/<USER>/Piscine
> docker run -it -v <LOCAL>:/Piscine gcc:6.1 /bin/bash
> cd /Piscine
> g++ -std=c++11 lbd_motivation_1.cpp -o lbd_motivation_1.exe
> ./lbd_motivation_1.exe
```
......@@ -709,7 +775,7 @@ qui ressemble à notre fonction `applique()`, à ceci près qu'elle prend en arg
un itérateur de début et de fin, plutôt que la collection elle-même (ce qui permet de
traiter une sous-partie de la collection si on le souhaite).
Question 1 : remplacez la fonction `random_complex()` par une fonction anonyme donnée
**Question 1** : remplacez la fonction `random_complex()` par une fonction anonyme donnée
directement dans le programme principal.
On notera également l'utilisation de la fonction `std::transform()`, qui effectue
......@@ -717,7 +783,7 @@ un calcul sur chaque élément d'une collection, et stocke le résultat dans une
collection. Ici on utilise un foncteur, car on veut y stocker la puissance à laquelle
on veut élever les éléments d'entrée.
Question 2 : remplacez le foncteur `ComplexPow` par une fonction anonyme qui capture
**Question 2** : remplacez le foncteur `ComplexPow` par une fonction anonyme qui capture
la valeur de `p`.
La bonne façon de simplifier l'écriture des fonctions `print_complexes()` et
......@@ -725,7 +791,7 @@ La bonne façon de simplifier l'écriture des fonctions `print_complexes()` et
généralisé". Mais pour finir en beauté ce plongeon, essayons d'y glisser des fonctions
lambdas.
Question 3 : réécrivez les boucles de `print_complexes()` et `print_product()`
**Question 3** : réécrivez les boucles de `print_complexes()` et `print_product()`
avec un appel à `std::for_each()` combiné à une fonction lambda. Une capture
par référence s'impose.
......
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