Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1175 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Aide code C++ faire un rectangle ( noob )

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide code C++ faire un rectangle ( noob )

n°2282146
Luiser
Posté le 24-05-2016 à 11:55:26  profilanswer
 

Salut à tous,
 
Voilà tout j'apprends le C++ pendant mes cours d’hôtellerie :p après quelques jours je viens d'apprendre,avec openclassrooms et un bouquin, à faire plusieurs fonctions pour découper son programme, j'ai commencé par des calculs puis là il me demandait de comprendre ça :  
 
#include <iostream>
using namespace std;
 
void dessineRectangle(int l, int h)
{
    for(int ligne(0); ligne < h; ligne++)
    {
        for(int colonne(0); colonne < l; colonne++)
        {
            cout << "*";
        }
        cout << endl;
    }
}
 
int main()
{
    int largeur, hauteur;
    cout << "Largeur du rectangle : ";
    cin >> largeur;
    cout << "Hauteur du rectangle : ";
    cin >> hauteur;
 
    dessineRectangle(largeur, hauteur);
    return 0;
}
 
 
J'ai bien compris donc je me suis donné un petit excercice, faire un rectangle pas plein puis écrire dedans ! :p puis ba ça fait 20 min que je réfléchis et je suis en galère ! Quelqu'un pour m'aider ?
 
Merci d'avance,
Louis

mood
Publicité
Posté le 24-05-2016 à 11:55:26  profilanswer
 

n°2282149
theshockwa​ve
I work at a firm named Koslow
Posté le 24-05-2016 à 12:55:12  profilanswer
 

Placer le texte dedans est largement moins trivial que dessiner un rectangle en texte :)
 
Vu que tu ne peux pas déplacer ton curseur (au moins, pas de manière standard), tu dois avoir ton code prêt pour afficher un rectangle creux
* affiche une ligne pleine,  
* affiche ligne-2 lignes creuses (affiche une étoile puis colonne-2 espaces, puis une autre étoile pour le corps)
* affiche une nouvelle ligne pleine
 
Une fois que tu en es là, tu pourras t'attaquer à mettre une chaine de caractères dans le rectangle. Pour ca, il faut que tu te prépares porbablement une fonction qui va afficher une ligne avec une étoile de chaque côté et la chaine de ton choix au milieu.


---------------
last.fm
n°2282153
Luiser
Posté le 24-05-2016 à 13:14:11  profilanswer
 

Merci de ta réponse ! J'ai pas compris ça : "que tu ne peux pas déplacer ton curseur (au moins, pas de manière standard)" ^^  
 
Sinon ce qu'il faut c'est créer :
 
 
************************
 
 
 
 
***********************
 
puis après créer une fonction après qui faire  
 
*                            *
*Chaîne de caractères*
*                            *
*                            *
 
Puis assembler les 2 :) ?
 
*************
*      Char     *
*************
Quant à utilisation du for (que j'ai appris comme boucle) pour mon exercice je suis septique ça te paraît bien d'utiliser for ?

n°2282157
theshockwa​ve
I work at a firm named Koslow
Posté le 24-05-2016 à 14:22:11  profilanswer
 

oui, c'est très bien d'utiliser for.
Tu vas devoir itérer sur tes lignes, pour ca, il te faut un for.
 
Quand tu fais ton remplissage d'espaces au sein d'une même ligne, à nouveau, il faut utiliser for.
 
Un indice pour te simplifier la mise en oeuvre :
 

*         *
*  hello  *


 
Ces deux lignes peuvent être considérées de la même manière, l'une affichant hello, l'autre affichant simplement une chaîne vide.


---------------
last.fm
n°2282160
Luiser
Posté le 24-05-2016 à 14:29:46  profilanswer
 

Merci pour ton aide :)

 

Oui j'ai réussi à monter un truc comme ça mais j'ai pas réussi à le monter en donnant moi même les valeurs du rectangle ( cin >> ect .. ) :)

 

J'essaye encore


Message édité par Luiser le 24-05-2016 à 14:40:22
n°2282164
theshockwa​ve
I work at a firm named Koslow
Posté le 24-05-2016 à 14:51:21  profilanswer
 

tu dois calculer le nombre de caractères d'un type avant d'itérer dessus.
 
Tu peux passer par une étape de ce genre :

Code :
  1. void dessineLignePleine(int l)
  2. {
  3.     for(int colonne(0); colonne < l; colonne++)
  4.     {
  5.         cout << "*";
  6.     }
  7.     cout << endl;
  8. }
  9. void dessineRectangle(int l, int h)
  10. {
  11.     for(int ligne(0); ligne < h; ligne++)
  12.     {
  13.         dessineLignePleine(l);
  14.     }
  15. }


 
Pour, ensuite, aller vers :

Code :
  1. void dessineLignePleine(int l)
  2. {
  3.     for(int colonne(0); colonne < l; colonne++)
  4.     {
  5.         cout << "*";
  6.     }
  7.     cout << endl;
  8. }
  9. void dessineLigneCreuse(int l)
  10. {
  11.   // ...
  12. }
  13. void dessineRectangle(int l, int h)
  14. {
  15.   if(h>2)
  16.   {
  17.     dessineLignePleine(l);
  18.     for(int ligne(0); ligne < h-2; ligne++)
  19.     {
  20.         dessineLigneCreuse(l);
  21.     }
  22.     dessineLignePleine(l);
  23.   }
  24.   else
  25.   {
  26.     for(int ligne(0); ligne < h; ligne++)
  27.     {
  28.         dessineLignePleine(l);
  29.     }
  30.   }
  31. }


 
Tu peux appliquer la même logique pour les colonnes que je t'ai montrée ici pour les lignes :)


---------------
last.fm
n°2282188
Luiser
Posté le 24-05-2016 à 18:33:32  profilanswer
 

Super Mr ! Je m'y remet ! J'essaye de faire en m'inspirant de toi je te dis si j'y suis arrivé d'ici ce soir ^^
Merci encore passes une bonne soirée
 
Louis

n°2282205
Luiser
Posté le 24-05-2016 à 21:19:56  profilanswer
 

Voilà après quelqueS heureS un demi cahier de brouillon utiliser :

 
Code :
  1. #include <iostream>
  2. using namespace std;
  3. void dessinerRectangleVide(int nbLigne, int nbColonne)
  4. {
  5.     cout << endl;
  6.     for(int i = 1; i <= nbLigne; i++) {
  7.         if(i == 1 || i == nbLigne) {
  8.             for(int j = 1 ; j <= nbColonne; j++) {
  9.                 cout << "*";
  10.             }
  11.         }else{
  12.             for(int j = 1; j <= 2; j++) {
  13.                 cout << "*" << string(nbColonne-1, ' ');
  14.             }
  15.         }
  16.         cout << " " << endl;
  17.     }
  18. }
  19. int main()
  20. {
  21.     int nbLignes, nbColonnes;
  22.     cout << "Combien de lignes doit faire votre rectangle?" << endl;
  23.     cin >> nbLignes;
  24.     cout << "Combien de colonnes doit faire votre rectangle?" << endl;
  25.     cin >> nbColonnes;
  26. dessinerRectangleVide(nbColonnes,nbLignes);
  27.     return 0;
  28. }
 

reste plus qu'a écrire dedans :)
Merci encore theshockwave


Message édité par Luiser le 24-05-2016 à 21:32:03
n°2282209
gilou
Modérateur
Modzilla
Posté le 24-05-2016 à 23:13:37  profilanswer
 

Une variante:

Code :
  1. #include <iostream>
  2. #include <string>
  3. void dessineRectangle(int largeur, int hauteur) {
  4.     if ((largeur > 0) && (hauteur > 0)) {
  5.         const std::string lignePleine(largeur, '*');
  6.         if (largeur < 3) {
  7.             for (int i = 0; i < hauteur; ++i) {
  8.                 std::cout << lignePleine << std::endl;
  9.             }
  10.         } else {
  11.             const std::string ligneVide = "*" + std::string(largeur - 2, ' ') + "*";
  12.             std::cout << lignePleine << std::endl;
  13.             if (hauteur > 1) {
  14.                 for (int i = 0; i < (hauteur - 2); ++i) {
  15.                     std::cout << ligneVide << std::endl;
  16.                 }
  17.                 std::cout << lignePleine << std::endl;
  18.             }
  19.         }
  20.     } else {
  21.         if (largeur < 0) {
  22.             std::cerr << "Largeur négative!" << std::endl;
  23.         }
  24.         if (hauteur < 0) {
  25.             std::cerr << "Hauteur négative!" << std::endl;
  26.         }
  27.     }
  28. }
  29. int main() {
  30.     int largeur, hauteur;
  31.     std::cout << "Largeur du rectangle : ";
  32.     std::cin >> largeur;
  33.     if (!std::cin) {
  34.         std::cerr << "Largeur incorrecte!" << std::endl;
  35.         return(-1);
  36.     }
  37.     std::cout << "Hauteur du rectangle : ";
  38.     std::cin >> hauteur;
  39.     if (!std::cin) {
  40.         std::cerr << "Hauteur incorrecte!" << std::endl;
  41.         return(-1);
  42.     }
  43.     dessineRectangle(largeur, hauteur);
  44.     return 0;
  45. }


 
A+,


---------------
Samantha Fish Rulez!     --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2282211
Luiser
Posté le 24-05-2016 à 23:29:57  profilanswer
 

Salut Merci pour ton alternative ! ça m'apprendre d'autres versions que les miennes débutantes, question j'ai pas réussi à déplacer mon texte qui s'affiche dans le rectangle avec la condition que le texte soit plus petit que le rectangle.
SOS :p si tu pouvais m'aider


Message édité par Luiser le 24-05-2016 à 23:30:12
mood
Publicité
Posté le 24-05-2016 à 23:29:57  profilanswer
 

n°2282215
gilou
Modérateur
Modzilla
Posté le 25-05-2016 à 01:41:23  profilanswer
 

Ben je comprends pas pourquoi tu veux écrire un texte dans un rectangle de taille précise, c'est pas un truc pour débutants vu qu'il y a plein de trucs pas sympas qui peuvent arriver:
Texte trop grand
Hauteur paire, donc pas autant de texte au dessus qu'en dessous, etc.
 
Bref, autant partir d'un texte, et se mettre à l'encadrer:

Code :
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5. static size_t max_line_length(std::vector<std::string> lines) {
  6.     size_t max = 0;
  7.     for (auto line : lines) {
  8.         if (line.length() > max) {
  9.             max = line.length();
  10.         }
  11.     }
  12.     return max;
  13. }
  14. // padding : nombre de blancs entre la bordure et le texte
  15. // deco: caractère de décoration de la bordure
  16. void encadrerTexte(const std::vector<std::string>& texte, int padding, char deco) {
  17.     int maxlen = max_line_length(texte);
  18.     const std::string lignePleine(maxlen + (2 * padding) + 2, deco);
  19.     const std::string ligneVide = deco + std::string(maxlen + (2 * padding), ' ') + deco;
  20.     std::cout << lignePleine << std::endl;
  21.     std::cout << ligneVide << std::endl;
  22.     // on est en C++11 pour avoir droit à auto ici
  23.     for (auto ligne : texte) {
  24.         std::cout << deco << std::string(padding, ' ');
  25.         std::cout << ligne << std::string(maxlen - ligne.length(), ' ');
  26.         std::cout << std::string(padding, ' ') << deco << std::endl;
  27.     }
  28.     std::cout << ligneVide << std::endl;
  29.     std::cout << lignePleine << std::endl;
  30. }
  31. int main() {
  32.     std::vector<std::string> lignes;
  33.     std::string ligne;
  34.     std::cout << "Veuillez entrer les lignes a encadrer, terminez par une ligne vide." << std::endl;
  35.     while (std::getline(std::cin, ligne)) {
  36.         if (ligne == "" ) {
  37.             break;
  38.         }
  39.         lignes.push_back(ligne);
  40.     }
  41.     std::cout << std::endl;
  42.     encadrerTexte(lignes, 3, '*');
  43.     return 0;
  44. }


Veuillez entrer les lignes a encadrer, terminez par une ligne vide.
hello world
and more
more
and again some more text
enough!
bla bla bla
 
 
********************************
*                              *
*   hello world                *
*   and more                   *
*   more                       *
*   and again some more text   *
*   enough!                    *
*   bla bla bla                *
*                              *
********************************


 
A+,


---------------
Samantha Fish Rulez!     --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2282220
Luiser
Posté le 25-05-2016 à 08:42:06  profilanswer
 

Ok super ! Bon pas du tout de mon niveau donc je passe pour le moment :). Je continue ma route je vous dit si j'ai besoins d'aide merci encore !  
Bonne journée gilou


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Aide code C++ faire un rectangle ( noob )

 

Sujets relatifs
Probleme avec l'exportation de mes programmes en C++Python pygame aide pour un projet
[C#] Base de données ?[SQL] Aide exos (simple)
Petits calculs pour les crédits, ne fonctionne pas [noob]découpage d'un char (C++)
[C#] Capture d'écran en jeuDans quel ordre apprendre le code ?
Besoin d'aide : Pygame 
Plus de sujets relatifs à : Aide code C++ faire un rectangle ( noob )



Copyright © 1997-2016 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR