♣ Dessins géométriques

Exercice:

Dans cet exercice, nous utiliserons des affichages et auront donc besoin de la bibliothèque C++ correspondante:

#include <iostream>
using namespace std;
  1. Écrire 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)
  1. 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
}
carre_vide(5)
carre_vide(2)
carre_vide(1)
carre_vide(0)
  1. Transformer votre fonction pour qu’il soit simple de remplacer le caractère * par un autre caractère caractere:

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, "#")
  1. Écrire 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
}

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)
  1. Écrire 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
}
losange(5)
losange(1)
losange(0)