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

  FORUM HardWare.fr
  Programmation
  C++

  Ecrire W avec étoiles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ecrire W avec étoiles

n°2323929
byakuren
Deviens qui tu es. Nietzsche
Posté le 11-11-2018 à 21:34:01  profilanswer
 

Bonsoir,
je voudrais écrire un programme qui écris la lettre W avec des étoiles sur une hauteur que l'utilisateur a saisi.
exemple: l'utilisateur a saisi la hauteur 5, voici ce que je dois afficher:
***        ******        ***
 ***      ***  ***      ***
  ***    ***    ***    ***
   ***  ***      ***  ***
    ******        ******
 
 
J'ai pensée à une succession d'espace et etoiles,  
A1 =1 espace ; A2= hauteur +(hauteur-2) espaces ; A3= 0 espace.
1ère ligne=   A1 espace + 3etoiles + A2 espaces + 3 etoiles+ A3 espace + 3 etoiles + A2 espaces + 3 etoiles  
2ème ligne=  A1+1 espaces+3 etoiles+A2-2 espaces +3etoiles+A3+2 espaces + 3 etoiles + A2-2 espaces + 3 etoiles etc...
 
 
ce que je réussis avec des variables string, mais le problème est queje n'arrive pas a créer A2-2 espaces.  :??:  
 
puis j'ai pensée écrire des espaces en fonction de la valeur saisie par l'utilisateur mais je suis bloquée  :cry:  
ex: hauteur saisi = 6;
je voudrais faire ecrire = (6+(6-2))espaces mais je n'y arrive pas,  
c'est vraiment là que je bloque pour l'instant  :sweat:  
 
auriez-vous des conseils à me donner sur la marche à suivre  :??:
j'y suis dessus depuis 2 jours et je ne trouve toujours pas  :heink:  
 
 
 
en vous remerciant de votre aide!  :hello:  

mood
Publicité
Posté le 11-11-2018 à 21:34:01  profilanswer
 

n°2323930
byakuren
Deviens qui tu es. Nietzsche
Posté le 11-11-2018 à 22:31:13  profilanswer
 

Code :
  1. #include<iostream>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<iomanip>
  6. using namespace std;
  7. main()
  8. {
  9.       int compteur, hauteur;
  10.       string un_espace(" " ), esp_debut(" " );
  11.       int esp_milieu = -2;
  12.      
  13.       printf("hauteur voulu:" );
  14.        scanf("%d", &hauteur);
  15.        int espace = hauteur;
  16.       for (compteur = 0; compteur<hauteur ; compteur++)
  17.           esp_debut = esp_debut + un_espace;
  18.           espace = espace-2;
  19.           esp_milieu = esp_milieu+2;
  20.           cout << esp_debut <<"***"<< setw(espace)<<"***"<< setw(esp_milieu) << "***" << setw(espace) << "***" << endl;
  21.          
  22.           }
  23.           getch();
  24.           }


 
 
j'ai codé ceci mais le résultat est tout simplement l'horreur  :??:  :(  
je me retrouve avec un écran de charabia rien à voir avec ce que je veux,
je ne comprends pas où ça bloque,
j'ai pourtant augmenté de 2 espaces sur chaque ligne mais il ne prend pas en compte ceci :(

n°2323931
rat de com​bat
attention rongeur méchant!
Posté le 11-11-2018 à 22:50:27  profilanswer
 

byakuren a écrit :

j'ai pourtant augmenté de 2 espaces sur chaque ligne mais il ne prend pas en compte ceci :(

Bah oui, en C(++) faut mettre des blocs avec des accolades... C'est pas du Python. :o Tu le fais à moitié, il manque une accolade ouvrante. Dans cet état le code ne devrait même pas compiler ou alors avec un gros warning (que tu as activés et que tu regardes n'est-ce pas?).

Message cité 1 fois
Message édité par rat de combat le 11-11-2018 à 22:51:44
n°2323934
byakuren
Deviens qui tu es. Nietzsche
Posté le 11-11-2018 à 23:44:48  profilanswer
 

rat de combat a écrit :

Bah oui, en C(++) faut mettre des blocs avec des accolades... C'est pas du Python. :o Tu le fais à moitié, il manque une accolade ouvrante. Dans cet état le code ne devrait même pas compiler ou alors avec un gros warning (que tu as activés et que tu regardes n'est-ce pas?).


 
 
Oh vous avez raison, j'ai meme pas remarquée que j'avais oubliée l'accolade :O
 
 
Mais meme quand j'ajoute ceci le resultat reste le meme, je ne comprends pas :(
 
Et oui les indicateirs d'erreurs sont bel et bien activés mais je n'en ai pas eu lors de la compilation  :??:  

n°2323999
rat de com​bat
attention rongeur méchant!
Posté le 12-11-2018 à 16:56:08  profilanswer
 

byakuren a écrit :

Et oui les indicateirs d'erreurs sont bel et bien activés mais je n'en ai pas eu lors de la compilation  :??:

Moi je vois au moins un warning pour main() dont le type (void/int/...) n'est pas défini...
 
Perso voilà ce que je ferais. Attention: Je ne maîtrise pas le C++, il y a peut-être mieux. J'ai pas compris ce setw(). :o  

Code :
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. string espaces(const int n)
  6. {
  7.     int i;
  8.     string r;
  9.     
  10.     for(i=0; i<n; i++)
  11.     {
  12.         r+=" ";
  13.     }
  14.     
  15.     return r;
  16. }
  17.  
  18. int main(void)
  19. {
  20.     int hauteur, ligne;
  21.  
  22.     cout<<"hauteur voulue: ";
  23.     cin>>hauteur;
  24.     
  25.     for(ligne=0; ligne<hauteur; ligne++)
  26.     {
  27.         cout<<espaces(ligne)<<"***"<<espaces(2*(hauteur-1)-2*ligne)<<"***"<<espaces(2*ligne)<<"***"<<espaces(2*(hauteur-1)-2*ligne)<<"***"<<endl;
  28.     }
  29. }

n°2324004
byakuren
Deviens qui tu es. Nietzsche
Posté le 12-11-2018 à 18:01:05  profilanswer
 

rat de combat a écrit :

Moi je vois au moins un warning pour main() dont le type (void/int/...) n'est pas défini...
 
Perso voilà ce que je ferais. Attention: Je ne maîtrise pas le C++, il y a peut-être mieux. J'ai pas compris ce setw(). :o  

Code :
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. string espaces(const int n)
  6. {
  7.     int i;
  8.     string r;
  9.     
  10.     for(i=0; i<n; i++)
  11.     {
  12.         r+=" ";
  13.     }
  14.     
  15.     return r;
  16. }
  17.  
  18. int main(void)
  19. {
  20.     int hauteur, ligne;
  21.  
  22.     cout<<"hauteur voulue: ";
  23.     cin>>hauteur;
  24.     
  25.     for(ligne=0; ligne<hauteur; ligne++)
  26.     {
  27.         cout<<espaces(ligne)<<"***"<<espaces(2*(hauteur-1)-2*ligne)<<"***"<<espaces(2*ligne)<<"***"<<espaces(2*(hauteur-1)-2*ligne)<<"***"<<endl;
  28.     }
  29. }



 
 
Bonsoir,
merci de votre aide! ^^
j'ai également trouvée la même chose mais un peu plus différemment  :ange:  
voici mon code:
 
 

Code :
  1. #include<iostream>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<iomanip>
  6. using namespace std;
  7. main()
  8. {
  9.       int i, hauteur;
  10.       string un_espace(" " );
  11.       int esp_milieu = 1;
  12.      
  13.       printf("Hauteur souhaité:" );
  14.        scanf("%d", &hauteur);
  15.        int esp_ent_etoile = 2*hauteur+3, espace = 3;
  16.      
  17.       for (i = 0; i<hauteur ; i++)
  18.       {
  19.          
  20.           esp_ent_etoile = esp_ent_etoile-2;
  21.           esp_milieu = esp_milieu + 2;
  22.           cout << setw(espace)<<"***"<<setw(esp_ent_etoile)<<"***"<<setw(esp_milieu)<<"***"<<setw(esp_ent_etoile)<<"***"<< endl;
  23.           ++espace;
  24.           }
  25.           getch();
  26.           }


 
 
 
 
 
 
 
 
or il me reste toujours un problème!  
ce w en est un jusqu'à la valeur saisie 17!
si l'utilisateur saisi 18 ou plus ça devient la catastrophe  :cry:  
ça déborde de la taille du compilateur donc ce dernier passe sur la ligne suivante en affichage :O
je n'ai malheureusement  pas trouvé le remède à ce problème  :cry:  
auriez-vous des idées sur la marche à suivre pour éviter ce problème ?
 
en vous remerciant :)
 
 

n°2324015
gilou
Modérateur
Modzilla
Posté le 12-11-2018 à 19:49:10  profilanswer
 

> ça déborde de la taille du compilateur donc ce dernier passe sur la ligne suivante en affichage
Non, ça déborde de la taille de la fenêtre d'affichage
 
> auriez-vous des idées sur la marche à suivre pour éviter ce problème ?  
Agrandir la taille de la fenêtre, ou limiter la valeur en entrée.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2324028
byakuren
Deviens qui tu es. Nietzsche
Posté le 13-11-2018 à 05:50:42  profilanswer
 

gilou a écrit :

> ça déborde de la taille du compilateur donc ce dernier passe sur la ligne suivante en affichage
Non, ça déborde de la taille de la fenêtre d'affichage
 
> auriez-vous des idées sur la marche à suivre pour éviter ce problème ?  
Agrandir la taille de la fenêtre, ou limiter la valeur en entrée.
 
A+,


 
bonjour,
je vous remercie de votre réponse  :)  
avec ce dernier mon problème est résolu,  
en vous remerciant,
Bonne journée!  :jap:

n°2324198
gilou
Modérateur
Modzilla
Posté le 15-11-2018 à 18:34:43  profilanswer
 

Perso, j'aurais fait un truc dans ces lignes:
 

Code :
  1. #include <string>
  2. #include <iostream>
  3. #include <algorithm>
  4. int main () {
  5.   int height = 5;
  6.   std::string stars = "***";
  7.   std::string spaces(height, ' ');
  8.   std::string base(stars + spaces);
  9.   std::string mirror(base);
  10.   std::reverse(mirror.begin(), mirror.end());
  11.   std::cout << base << mirror << base << mirror << std::endl;
  12.   for (int i=0; i < height; ++i) {
  13.     std::rotate(base.rbegin(), base.rbegin() + 1, base.rend());
  14.     std::rotate(mirror.begin(), mirror.begin() + 1, mirror.end());
  15.     std::cout << base << mirror << base << mirror << std::endl;
  16.   }
  17.   return 0;
  18. }


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2324199
rat de com​bat
attention rongeur méchant!
Posté le 15-11-2018 à 19:06:33  profilanswer
 

Pas sûr que ce soit plus efficace mais ça fait beaucoup plus C++ en tout cas. :jap:  :lol:

mood
Publicité
Posté le 15-11-2018 à 19:06:33  profilanswer
 

n°2324213
gilou
Modérateur
Modzilla
Posté le 15-11-2018 à 20:48:40  profilanswer
 

Certes, parce que l'autre ça se réécrit en C sans problème, c'est du pseudo C++.
Noter que j'aurais pu créer une classe W avec un membre size, un constructeur et une méthode draw...
 
Pour l'algo de dessin, il y a bien plus efficace, avec la fonction standard std::swap, si j'ai un peu de temps, j'écrirais cela tout à l'heure. La c'était pour m'amuser, pour voir si je me souvenais comment coder en C++, parce que je code tous les jours dans un langage fonctionnel très éloigné de cela.
 

Code :
  1. #include <string>
  2. #include <iostream>
  3. #include <algorithm>
  4. int main () {
  5.   auto const w_size = 4;
  6.   auto const w_height = 12;
  7.   auto const span = w_size + w_height;
  8.   const std::string stars(w_size, '*');
  9.   const std::string spaces(w_height, ' ');
  10.   std::string base(stars + spaces + spaces + stars + stars + spaces + spaces + stars);
  11.   std::cout << base << std::endl;
  12.   for (int i=0; i < w_height; ++i) {
  13.     std::swap(base[i], base[w_size+i]);
  14.     std::swap(base[2*span-(i+1)], base[2*span-(w_size+i+1)]);
  15.     std::swap(base[2*span+i], base[2*span+w_size+i]);
  16.     std::swap(base[4*span-(i+1)], base[4*span-(w_size+i+1)]);
  17.     std::cout << base << std::endl;
  18.   }
  19.   return 0;
  20. }


 
A+,


Message édité par gilou le 15-11-2018 à 23:03:31

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2324246
gilou
Modérateur
Modzilla
Posté le 16-11-2018 à 10:53:16  profilanswer
 

Une version pour faire plaisir à RdC [:ddr555] :
 

Code :
  1. #include <string>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <stdexcept>
  5. #include <cctype>
  6. #include <cstdlib>
  7. class picto {
  8. private:
  9.   // members
  10.   int height;          // hauteur du pattern dessiné
  11.   char fillchar{'*'};  // caractère servant à dessiner
  12.   int width{3};        // largeur du pattern dessiné
  13.   int legs{2};         // répétition du pattern de base (2 pour w)
  14.  
  15.   // méthode constante appellée par les constructeurs
  16.   void check_parameters() {
  17.     if (not  std::isprint(static_cast<unsigned char>(fillchar))) {
  18.       throw std::logic_error("Error: fill character is not printable!" );
  19.     }
  20.     if (std::isspace(static_cast<unsigned char>(fillchar))) {
  21.       throw std::logic_error("Error: fill character is a space character!" );
  22.     }
  23.     if (width <= 0) {
  24.       throw std::logic_error("Error: Bad width" );
  25.     }
  26.     if (height <= 0) {
  27.       throw std::logic_error("Error: Bad height" );
  28.     }
  29.     if (legs <= 0) {
  30.       throw std::logic_error("Error: Bad legs" );
  31.     }
  32.   }
  33.  
  34. public:
  35.   //ctors
  36.   picto(char c, int w, int h, int l):fillchar(c), width(w), height(h), legs(l) { check_parameters(); };
  37.   picto(int w, int h, int l):width(w), height(h), legs(l) { check_parameters(); };
  38.   picto(char c, int w, int h):fillchar(c), width(w), height(h) { check_parameters(); };
  39.   picto(int w, int h):width(w), height(h) { check_parameters(); };
  40.   picto(char c, int h):fillchar(c), height(h) { check_parameters(); };
  41.   picto(int h):height(h) { check_parameters(); };
  42.   // methods
  43.   void draw() {
  44.     // première moitié du pattern de base puis seconde moitié en mirroir
  45.     std::string base(std::string(width, fillchar) + std::string(height-1, ' ')); 
  46.     std::string rbase(std::string(height-1, ' ') + std::string(width, fillchar)); 
  47.  
  48.     // dessin d'une ligne
  49.     for (auto i=0; i < legs; ++i) { std::cout << base << rbase; } std::cout << std::endl;
  50.     for (auto j=0; j < height-1; ++j) {
  51.       // échange du premier caractère de dessin avec le premier blanc qui le suit
  52.       std::swap(base[j], base[width+j]);
  53.       // échange du dernier caractère de dessin avec le premier blanc qui le précède
  54.       std::swap(rbase[width+height-j-2], rbase[height-j-2]);
  55.       // dessin d'une ligne
  56.       for (auto i=0; i < legs; ++i) { std::cout << base << rbase; } std::cout << std::endl;
  57.     }
  58.   }
  59. };
  60. int main () {
  61.   int retcode = EXIT_SUCCESS;
  62.   try {
  63.     picto W{'*', 3, 6, 2};
  64.     W.draw();
  65.   } catch ( const std::exception & e ) {
  66.     std::cerr << e.what();
  67.     retcode = EXIT_FAILURE;
  68.   }
  69.   return retcode;
  70. }


 
A+,

Message cité 1 fois
Message édité par gilou le 16-11-2018 à 12:03:15

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2324249
rat de com​bat
attention rongeur méchant!
Posté le 16-11-2018 à 13:27:44  profilanswer
 

gilou a écrit :

Une version pour faire plaisir à RdC [:ddr555]

Ah oui, impressionnant. :jap:

n°2324252
µjoshua w​opr
WOPR V 0.0.0
Posté le 16-11-2018 à 16:51:37  profilanswer
 

gilou a écrit :

> ça déborde de la taille du compilateur donc ce dernier passe sur la ligne suivante en affichage
Non, ça déborde de la taille de la fenêtre d'affichage
 
> auriez-vous des idées sur la marche à suivre pour éviter ce problème ?  
Agrandir la taille de la fenêtre, ou limiter la valeur en entrée.
 
A+,


 
 

Citation :

Non, ça déborde de la taille de la fenêtre d'affichage


 
Sur un P.C. ou tout simplement sur un IBM Compatible PC, quelle(s) différence(s) ?  
 
Le compilateur s'il n'est pas cross-compiliant est une machine de même type que le système opérant sur lequel il tourne.
 
 

Citation :

Agrandir la taille de la fenêtre, ou limiter la valeur en entrée.


 
Humour
 
Avec un écran élastique, en tirant sur les bords, si non à la pioche dans un magasin de télévisions grand format, mais bon j'ai pas d'antenne pour la TNT sur une unique fréquence Hertzienne reçu éventuellement pas câble ; A moins que ce soit l'inverse ; J'ai pas tout compris de la spiritualité scientifico-economico-sociétale.

Message cité 2 fois
Message édité par µjoshua wopr le 16-11-2018 à 16:53:37

---------------
Strange game! jovalise on soureforge.net
n°2324253
rat de com​bat
attention rongeur méchant!
Posté le 16-11-2018 à 16:56:45  profilanswer
 

µjoshua wopr a écrit :

J'ai pas tout compris de la spiritualité scientifico-economico-sociétale.

Je crois bien oui. :o

 

On Topic, dommage que je ne maîtrise pas l'assembleur pour PC. :D

 

edit @gilou: Que signifie ce commentaire?
>public:
>  //ctors
C'est un abrégé pour "constructor"?

Message cité 2 fois
Message édité par rat de combat le 16-11-2018 à 16:58:42
n°2324262
µjoshua w​opr
WOPR V 0.0.0
Posté le 16-11-2018 à 17:54:49  profilanswer
 

rat de combat a écrit :

Je crois bien oui. :o  
 
On Topic, dommage que je ne maîtrise pas l'assembleur pour PC. :D  
 
edit @gilou: Que signifie ce commentaire?
>public:
>  //ctors  
C'est un abrégé pour "constructor"?


Citation :

On Topic, dommage que je ne maîtrise pas l'assembleur pour PC. :D  


 
Ca devient vaste en tous cas.


---------------
Strange game! jovalise on soureforge.net
n°2324285
gilou
Modérateur
Modzilla
Posté le 16-11-2018 à 21:28:27  profilanswer
 

rat de combat a écrit :

Je crois bien oui. :o  
 
On Topic, dommage que je ne maîtrise pas l'assembleur pour PC. :D  
 
edit @gilou: Que signifie ce commentaire?
>public:
>  //ctors  
C'est un abrégé pour "constructor"?

Exactement. En usage assez couramment dans le monde C++
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2324286
gilou
Modérateur
Modzilla
Posté le 16-11-2018 à 21:32:25  profilanswer
 

µjoshua wopr a écrit :


 
 

Citation :

Non, ça déborde de la taille de la fenêtre d'affichage


 
Sur un P.C. ou tout simplement sur un IBM Compatible PC, quelle(s) différence(s) ?  
 
Le compilateur s'il n'est pas cross-compiliant est une machine de même type que le système opérant sur lequel il tourne.
 
 

Citation :

Agrandir la taille de la fenêtre, ou limiter la valeur en entrée.


 
Humour
 
Avec un écran élastique, en tirant sur les bords, si non à la pioche dans un magasin de télévisions grand format, mais bon j'ai pas d'antenne pour la TNT sur une unique fréquence Hertzienne reçu éventuellement pas câble ; A moins que ce soit l'inverse ; J'ai pas tout compris de la spiritualité scientifico-economico-sociétale.

Tu confonds la sortie du programme (des lignes sans taille maximale) et le device sur lequel tu visualises cette sortie (qui lui est de taille fixe).
Avec un scroll horizontal illimité dans ton device d'affichage, le pb disparait.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2324296
µjoshua w​opr
WOPR V 0.0.0
Posté le 16-11-2018 à 22:14:48  profilanswer
 

Ca va déborder.


---------------
Strange game! jovalise on soureforge.net
n°2324303
rat de com​bat
attention rongeur méchant!
Posté le 17-11-2018 à 13:26:21  profilanswer
 

gilou a écrit :

Exactement. En usage assez couramment dans le monde C++

Ok merci. :jap:


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

  Ecrire W avec étoiles

 

Sujets relatifs
ecrire chaine utf8 json à partir d'un dictionnaireÉcrire dans un fichier qui est en cours de lecture
Ecrire un tableau dans une feuille de calculÉcrire à une adresse précise dans la RAM (nasm)
Lire et écrire dans disque dur SATAEcrire un fichier sur le serveur en Javascript
Annuler une fusion et ré-écrire les données dans les cellules videsMacro VBA pour écrire du code Macro ImageJ
Ecrire un secteur d'amorçage sur mon disque dur sous WindowsLire fichier excel écrire dans bdd
Plus de sujets relatifs à : Ecrire W avec étoiles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR