TP : dessins géométriques ♣#
Exercice :
Dans cet exercice, nous utiliserons des affichages et aurons donc besoin de la bibliothèque C++ correspondante :
#include <iostream>
using namespace std;
Écrivez une fonction
carre_plein
qui, pour un entier positif non nul \(L\) donné, affiche sur la sortie standard un carré plein dont les côtés sont de longueur \(L\) caractères. Par exemple, pour \(L=5\), la fonction affichera :***** ***** ***** ***** *****
void carre_plein(int L) {
/// BEGIN SOLUTION
string caractere = "*";
for (int i = 0; i < L; i++) {
for (int j = 0; j < L; j++) {
cout << caractere;
}
cout << endl;
}
/// END SOLUTION
}
carre_plein(5)
carre_plein(3)
Même question mais cette fois la fonction affiche un carré vide. Pour l’exemple précédent, cela donne :
***** * * * * * * *****
void carre_vide(int L) {
/// BEGIN SOLUTION
if ( L >= 1 ) {
for (int j = 0; j < L; j++) {
cout << "*";
}
}
cout << endl;
for (int i = 1; i < L - 1; i++) {
cout << "*";
for (int j = 0; j < L - 2; j++) {
cout << " ";
}
cout << "*" << endl;
}
if ( L >= 2 ) {
for (int j = 0; j < L; j++) {
cout << "*";
}
}
cout << endl;
/// END SOLUTION
}
/// BEGIN SOLUTION
// Solution alternative
void carre_vide(int L) {
for (int i = 0; i < L; i++ ){
for (int j = 0; j < L; j++){
if ( i == 0 or i == L-1 or j == 0 or j == L-1){
cout << "*";
} else {
cout << " ";
}
}
cout << endl;
}
}
/// END SOLUTION
carre_vide(5)
carre_vide(2)
carre_vide(1)
carre_vide(0)
Transformez votre fonction pour qu’il soit simple de remplacer le caractère
*
par un autre caractèrecaractere
:
void carre_vide(int L, string caractere) {
/// BEGIN SOLUTION
if ( L >= 1 ) {
for (int j = 0; j < L; j++) {
cout << caractere;
}
}
cout << endl;
for (int i = 1; i < L - 1; i++) {
cout << caractere;
for (int j = 0; j < L - 2; j++) {
cout << " ";
}
cout << caractere << endl;
}
if ( L >= 2 ) {
for (int j = 0; j < L; j++) {
cout << caractere;
}
}
cout << endl;
/// END SOLUTION
}
carre_vide(4, "#")
Écrivez une fonction qui, pour un entier positif \(h\) donné, affiche le triangle isocèle pointe en haut dont le contour est décrit par des étoiles, de hauteur \(h\) et de base \(2h-1\). Par exemple, pour \(h=5\), la fonction affichera :
* * * * * * * *********
void triangle(int h, string caractere="*") {
/// BEGIN SOLUTION
for (int i = 0; i < h - 1; i++) {
for (int j = 0; j < h - i - 1; j++) {
cout << " ";
}
cout << caractere;
if (i > 0) {
for (int j = 0; j < 2 * i - 1; j++) {
cout << " ";
}
cout << caractere;
}
cout << endl;
}
for (int j = 0; j < 2 * h - 1; j++) {
cout << caractere;
}
cout << endl;
/// END SOLUTION
}
/// BEGIN SOLUTION
//Solution alternative
void triangle(int h, string caractere="*") {
for ( int i = 0; i < h; i++ ){
for ( int j = 0; j < 2 * h - 1; j++ ) {
if ( i == -j + h - 1 or i == h-1 or i == j - h + 1 ) {
cout << caractere;
} else {
cout << " ";
}
}
cout << endl;
}
}
/// END SOLUTION
Vous noterez ci-dessous que l’on a donné une valeur par défaut pour
caractere
: *
. Du coup, on peut utiliser les deux formes
suivantes :
triangle(4)
triangle(5, "#")
triangle(2)
triangle(1)
triangle(0)
Écrivez une fonction qui affiche un losange. Par exemple, pour \(h=5\), la fonction affichera :
* * * * * * * * * * * * * * * *
void losange(int h, string caractere="*") {
/// BEGIN SOLUTION
for (int i = 0; i < h; i++) {
for (int j = 0; j < h - i - 1; j++) {
cout << " ";
}
cout << caractere;
if (i > 0) {
for (int j = 0; j < 2 * i - 1; j++) {
cout << " ";
}
cout << caractere;
}
cout << endl;
}
for (int i = h - 2; i >= 0; i--) {
for (int j = 0; j < h - i - 1; j++) {
cout << " ";
}
cout << caractere;
if (i > 0) {
for (int j = 0; j < 2 * i - 1; j++) {
cout << " ";
}
cout << caractere;
}
cout << endl;
}
/// END SOLUTION
}
/// BEGIN SOLUTION
// Solution alternative
void losange(int h, string caractere="*") {
for ( int i = 0; i < 2*h -1; i++ ){
for (int j = 0; j < 2 * h - 1; j++){
if ( ( i <= h-1 and (i == -j + h - 1 or i == j - h + 1) ) or
( i > h-1 and (i == -j + 3*h - 3 or i == j + h - 1) ) ) {
cout << caractere;
} else {
cout << " ";
}
}
cout << endl;
}
}
/// END SOLUTION
losange(5)
losange(1)
losange(0)