Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
---
jupytext:
text_representation:
extension: .md
format_name: myst
format_version: 0.13
jupytext_version: 1.15.2
kernelspec:
display_name: C++17
language: C++17
name: xcpp17
---
### Objectif pédagogique : boucle while (ici calcul de factorielle)
```{code-cell}
:editable: 'false'
:tags: [hide-cell]
#include <iostream>
#include "jupyter_exercizer_helpers.hpp"
using namespace std;
CONST N0 = RANDOM_INT(3, 5);
```
```{code-cell}
int N, r;
N = N0;
r = 1;
while (N > 0) {
r = r * N;
N = N - 1;
}
```
:::{admonition} Consigne
Quelle est la valeur attendue de `r`?
:::
```{code-cell}
---
editable: true
nbgrader:
grade: false
grade_id: init
locked: false
schema_version: 3
solution: true
---
int result = INPUT(
/// BEGIN SOLUTION
r
/// END SOLUTION
);
```
+++
```{code-cell}
---
editable: false
nbgrader:
grade: true
grade_id: check
locked: true
points: 1
schema_version: 3
solution: false
tags: [hide-cell]
---
CHECK( result == r );
```
---
jupytext:
text_representation:
extension: .md
format_name: myst
format_version: 0.13
jupytext_version: 1.15.2
kernelspec:
display_name: C++17
language: C++17
name: xcpp17
---
### Objectif pédagogique : boucle while (ici calcul du reste)
```{code-cell}
:editable: 'false'
:tags: [hide-cell]
#include <iostream>
#include "jupyter_exercizer_helpers.hpp"
using namespace std;
CONST I1 = RANDOM_INT(20, 37);
CONST I2 = RANDOM_INT(5, 10);
```
```{code-cell}
int r = I1;
while (r > I2) {
r = r - I2;
}
```
:::{admonition} Consigne
Quelle est la valeur attendue de `r`?
:::
```{code-cell}
---
editable: true
nbgrader:
grade: false
grade_id: init
locked: false
schema_version: 3
solution: true
---
int result = INPUT(
/// BEGIN SOLUTION
r
/// END SOLUTION
);
```
+++
```{code-cell}
---
editable: false
nbgrader:
grade: true
grade_id: check
locked: true
points: 1
schema_version: 3
solution: false
tags: [hide-cell]
---
CHECK( result == r );
```
#ifndef RANDOMIZATION_H
#define RANDOMIZATION_H
#include <iostream>
#include <cstdlib>
#include <vector>
#include <functional>
/** Infrastructure minimale de test **/
#ifndef ASSERT
#define ASSERT(test) if (!(test)) { throw std::runtime_error("\\x1b[48;5;224mTest failed: "#test); }
#endif
#ifndef CHECK
#define CHECK(test) if ( !(test) ) { throw std::runtime_error("\\x1b[48;5;224mTest failed: "#test); }
#endif
// TODO: how to initialize the seed?
// TODO: randomize ???
#define PLUSOUMOINS +
#define CONST const auto
// TODO: randomize ???
#define X x
#define Y y
#define Z z
int RANDOM_INT(int min, int max) {
return min + (rand() % (max - min + 1));
}
template<typename T, typename ... Args>
T RANDOM_CHOICE(const T arg0, const Args... args) {
const std::vector<T> v({arg0, args...});
return v[rand() % v.size()];
}
template<typename ... Args>
auto RANDOM_CHOICE(const char * arg0, const Args... args) {
const std::vector<std::string> v({arg0, args...});
return v[rand() % v.size()];
}
class RANDOM_VECTOR_CLASS {
public:
template <typename F, typename ... Args>
auto operator ()(int N, F f, Args ... args) {
using invoke_result_t = typename std::invoke_result<F, Args ...>::type;
std::vector<invoke_result_t> v(N);
for (auto &value: v)
value = f(args...);
return v;
}
/*template<typename ... Args>
auto operator ()(int N, RANDOM_VECTOR_CLASS f, Args... args) {
std::vector<std::vector<int>> v(N);
for (auto &value: v)
value = f(args...);
return v;
}*/
};
RANDOM_VECTOR_CLASS RANDOM_VECTOR;
template<typename T>
std::ostream & operator << (std::ostream& o, const std::vector<T> &v) {
o << "{";
if ( v.size() >= 0 ) {
o << v[0];
for ( unsigned int i=1; i<v.size(); i++ )
o << ", " << v[i];
}
o << "}";
return o;
}
template<class T>
T INPUT(T t) {
return t;
}
#endif
from typing import Any
from random import randint, choice
CONST = Any
def INPUT(default: Any) -> Any:
return default
def RANDOM_INT(min: int, max: int):
return randint(min, max+1)
def RANDOM_CHOICE(*args):
r"""
Return a random element of `args`
>>> RANDOM_CHOICE("alice", "bob", "charlie") # doctest: +SKIP
'charlie'
>>> RANDOM_CHOICE("alice")
'alice'
"""
return choice(args)
......@@ -55,6 +55,16 @@ programmer des dessins et interagir avec l'utilisateur.
## TP
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "0b59002ac0b41ec5fe9db98882963c56", "grade": false, "grade_id": "cell-88edc2f254ba7293", "locked": true, "schema_version": 3, "solution": false}}
### Exercice 0 : préliminaires : exercices d'entraînement
1. Effectuez quelques exercices sur les prototypes de fonction de la
feuille [entraîneur/entraîneur.md](entraîneur/entraîneur.md).
Vous pourrez, pour réviser, travailler les exercices sur les autres
thèmes à la maison, en fonction de vos besoins.
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "c14862eeb15c1d00c45129ecb04ba658", "grade": false, "grade_id": "cell-88edc2f254ba7294", "locked": true, "schema_version": 3, "solution": false}}
### Exercice 1 : préliminaires : compilation séparée
......@@ -317,4 +327,3 @@ de points sera ensuite affiché.
À vous de concevoir les fonctions à introduire pour décomposer le
problème.
......@@ -7,7 +7,7 @@ using namespace std; // Pour les exceptions dans la version distribuée
int main() {
int delai = 1;
RenderWindow window(VideoMode(900, 480), "Ma super fenêtre");
RenderWindow window(VideoMode(640, 480), "Ma super fenêtre");
window.clear(Color::Green);
// Dessine un point noir de coordonnées (418, 143)
......@@ -61,22 +61,31 @@ int main() {
throw runtime_error("code non implanté ligne 56");
window.display();
sleep(seconds(delai));
// Dessine un triangle bleu entre les (0,0), (640,0) et (0,160)
// Remplacez cette ligne et la suivante par le code adéquat
throw runtime_error("code non implanté ligne 65");
window.display();
sleep(seconds(delai));
// Dessine un cercle noir de centre (415,145) et de rayon 10
// Remplacez cette ligne et la suivante par le code adéquat
throw runtime_error("code non implanté ligne 64");
throw runtime_error("code non implanté ligne 72");
window.display();
sleep(seconds(delai));
// Dessine un disque jaune de centre (700, 100) et de rayon 50
// Dessine un disque jaune de centre (550, 75) et de rayon 50
// Remplacez cette ligne et la suivante par le code adéquat
throw runtime_error("code non implanté ligne 72");
throw runtime_error("code non implanté ligne 80");
window.display();
......
......@@ -73,10 +73,10 @@ draw_point(window, {418, 143}, Color::Black );
window.display();
```
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "d8948ac8886182d90df0fb2bce302b52", "grade": false, "grade_id": "cell-db040b06c5a92103", "locked": true, "schema_version": 3, "solution": false, "task": false}}
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "cb08398efe05ecc0073912c50887ba17", "grade": false, "grade_id": "cell-db040b06c5a92103", "locked": true, "schema_version": 3, "solution": false, "task": false}}
1. Dessinez un segment blanc entre les points de coordonnées
respsectives (100,200) et (200,200) :
respectives (100,200) et (200,200) :
```{code-cell}
---
......