programme c++

programme c++ - C++ - Programmation

Marsh Posté le 02-02-2007 à 17:20:52    

depuis 2 jours j'essaie sans succes de faire un programme c++ qui affiche la lettre lette A en etoile, l'utilisateur doit pouvoir entrer la hauteur; et la barre du A doit toujours se situer à la 4 eme ligne en partant du bas et elle est toujours située la . Merci de m'aider, je dois le rendre dans 5 jours.

Reply

Marsh Posté le 02-02-2007 à 17:20:52   

Reply

Marsh Posté le 02-02-2007 à 17:21:55    

Qu'à tu déjà fais et quel est le résultat obtenu?

Reply

Marsh Posté le 04-02-2007 à 11:23:00    

IrmatDen a écrit :

Qu'à tu déjà fais et quel est le résultat obtenu?


Reply

Marsh Posté le 04-02-2007 à 11:39:10    

personne pour m'aider???

Reply

Marsh Posté le 04-02-2007 à 11:40:13    

IrmatDen a écrit :

Qu'à tu déjà fais et quel est le résultat obtenu?


 

Reply

Marsh Posté le 04-02-2007 à 11:42:18    

richie_heig a écrit :

personne pour m'aider???


Si, mais ne crois pas qu'on va te pondre ton programme sans que tu n'aies fourni le moindre effort. IrmatDen t'as posé une question, merci d'y répondre. Si tu n'as rien fait, alors il te reste 3 jours. Si tu as fait quelque chose mais que tu coinces sur un bug ou un disfonctionement de ton programme, alors poste le code concerné ici et on t'aidera à corriger.


Message édité par Harkonnen le 04-02-2007 à 11:42:58
Reply

Marsh Posté le 04-02-2007 à 11:44:49    

#include<iostream>
 
 
int main()
{
int i,j,hauteur;
 
cout<<"hauteur : ";cin>>hauteur;
 
for(i=1;i<=hauteur;i++)
        {
        for(j=1;j<i;j++)cout<<" ";
        for(j=1;j<=hauteur+1-i;j++)cout<<"*";
        cout<<endl;
        }
 
}
 
j'obtient un côté de A, quelqu'un peut medire ou se trouve l'erreur svp, je navigue...

Reply

Marsh Posté le 04-02-2007 à 11:47:09    

ça compile pas, cout et cin sont dans le namesapce std :o

Reply

Marsh Posté le 04-02-2007 à 11:51:08    

Mais bien sur... Pour ton info, ton programme ne compilera jamais, donc ça m'étonnerait que tu obtiennes ne serait-ce qu'un coté de A

 

edit: [:benou_grilled], ça m'apprendra à répondre sur MSN pendant que je rédige mon message


Message édité par Harkonnen le 04-02-2007 à 11:51:58
Reply

Marsh Posté le 04-02-2007 à 12:14:45    

on utilise à l'école Borland c++ et chez moi 4a compile, sinon voici une autre version#include<iostream>
using namespace std;
 
int main()
{
int i,j,hauteur;
 
cout<<"hauteur : ";cin>>hauteur;
 
for(i=1;i<=hauteur;i++)
        {
        for(j=1;j<i;j++)cout<<" ";
        for(j=hauteur-i;j<=hauteur-i;j++)cout<<"*";
        cout<<endl;
        }
 
}
 
et ceci

Reply

Marsh Posté le 04-02-2007 à 12:14:45   

Reply

Marsh Posté le 04-02-2007 à 14:55:40    

La première boucle va plutôt te dessiner le côté gauche d'un V, et la 2ème, va n'afficher d'une étoile quoi qu'il arrive, donc autant virer la boucle.
 
Pour la première boucle il te faut inverser les bornes, tu affiches une étoile: ca affichera le coté gauche du A.
Après si tu regardes ce que ça doit donner pour une hauteur de 6:

     *
    * *
   *****
  *     *
 *       *
*         *


Quel relation trouves-tu pour le côté droit par rapport au gauche? A quel indice se trouve toujours le milieu?

Reply

Marsh Posté le 04-02-2007 à 15:04:25    

richie_heig a écrit :

on utilise à l'école Borland c++


 
On va trouver que je me repéte mais ...
 
change d'école ou du moins, rend toi service, utilise g++ ...

Reply

Marsh Posté le 04-02-2007 à 16:36:31    

je m'excuse, j'ai eu un probléme de conexion, j'arrive toujours même aprés avoir inversé les bornes...  

Reply

Marsh Posté le 04-02-2007 à 16:41:07    

Irmadem, comment tu fais pour afficher la barre du A

Reply

Marsh Posté le 04-02-2007 à 16:41:34    

Effectivement, inverser c'est pas très clair. Tu mets un espace pour j de 1 à hauteur moins i.

Reply

Marsh Posté le 04-02-2007 à 16:41:46    

richie_heig a écrit :

Irmadem, comment tu fais pour afficher la barre du A


if

Reply

Marsh Posté le 04-02-2007 à 16:43:24    

Au secours,je stresse, ne me laissez pas tomber...

Reply

Marsh Posté le 04-02-2007 à 16:48:33    

#include<iostream>
using namespace std;
 
int main()
{
int i,j,hauteur;
 
cout<<"hauteur : ";cin>>hauteur;
 
for(i=1;i<=hauteur;i++)
        {
        for(j=1;j<=hauteur-i;j++)cout<<" ";
        for(j=hauteur-i;j<=hauteur-i;j++)cout<<"*";
        cout<<endl;
        }
 
}
j'obtient le côté de A et pour la suite

Reply

Marsh Posté le 04-02-2007 à 16:59:00    

je n'arrive pas à trouver la relation entre le côté droit par rapport au milieu...

Reply

Marsh Posté le 04-02-2007 à 17:23:09    

quelqu'un peut il m'aider???

Reply

Marsh Posté le 04-02-2007 à 17:24:46    

dessine ton A sur une feuille à petit careau, une case par caractère. Et compte.

Reply

Marsh Posté le 04-02-2007 à 17:48:12    

c'est ce que j'ai fais pour trouver le côté gauche, le probléme c'est cette barre, stp sois plus explicite elianor...

Reply

Marsh Posté le 04-02-2007 à 17:59:03    

Code :
  1. if (i == POSITION_BARRE_A)
  2. {
  3.   // dessiner la barre
  4. }

Reply

Marsh Posté le 04-02-2007 à 18:07:34    

merci slash, mais ca ne resoud pas entierement le pb, il me manque une relation entre cette barre et le côté droit de A

Reply

Marsh Posté le 04-02-2007 à 18:12:27    

#include<iostream>
using namespace std;  
 
int main()
{
int i,j,hauteur;
 
cout<<"hauteur : ";cin>>hauteur;
 
for(i=1;i<=hauteur;i++)
        {
        for(j=1;j<=hauteur-i;j++)cout<<" ";
        for(j=hauteur-3;j<=hauteur-3;j++)cout<<"*";
         if (i == hauteur-3)
         {
         cout <<"*" ;
         }
 
        cout<<endl;
        }
 
}

Reply

Marsh Posté le 04-02-2007 à 18:24:22    

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int main()
  5. {
  6. int i,j,hauteur;
  7.         int mid,space,col,bar,lin;
  8.        
  9. std::cout << "hauteur : ";
  10. std::cin >> hauteur;
  11.        
  12.         mid=hauteur;
  13.        
  14.         bar=floor(0.5*hauteur);
  15.        
  16.        
  17.         for(space=0;space<mid;space++)
  18.         {
  19.             for(col=1;col<=mid+space;col++)
  20.             {
  21.                 if(col==(mid-space) || col==(mid+space) )
  22.                 {
  23.                     std::cout << "*";
  24.                 }
  25.                 else
  26.                 {
  27.                     if(lin==bar && col<(mid+space) && col>(mid-space))
  28.                     {
  29.                         std::cout << "*";
  30.                     }
  31.                     else
  32.                     {
  33.                         std::cout << " ";
  34.                     }
  35.                 }
  36.             }
  37.             std::cout << "\n";
  38.             lin++;
  39.         }
  40. }


 
OSEF le warning pour le floor (conversion d'un double en entier) et ca donne:
 

Code :
  1. hauteur : 30
  2.                              *
  3.                             * *
  4.                            *   *
  5.                           *     *
  6.                          *       *
  7.                         *         *
  8.                        *           *
  9.                       *             *
  10.                      *               *
  11.                     *                 *
  12.                    *                   *
  13.                   *                     *
  14.                  *                       *
  15.                 *                         *
  16.                *                           *
  17.               *******************************
  18.              *                               *
  19.             *                                 *
  20.            *                                   *
  21.           *                                     *
  22.          *                                       *
  23.         *                                         *
  24.        *                                           *
  25.       *                                             *
  26.      *                                               *
  27.     *                                                 *
  28.    *                                                   *
  29.   *                                                     *
  30. *                                                       *
  31. *                                                         *
  32. [Press Enter to close window]


 
 
 [:r3g]

Spoiler :


edit: je sais, j'ai que ca a foutre, mais j'avais que ca a foutre pour tester Netbeans que je viens de re-installer


Message édité par Ben_be le 04-02-2007 à 18:26:19
Reply

Marsh Posté le 04-02-2007 à 18:38:55    

merci Ben_be, pas facile ton code

Reply

Marsh Posté le 04-02-2007 à 18:44:48    

Code :
  1. void draw_line(unsigned int letter_height, unsigned int y_offset, bool isHBar)
  2. {
  3. const unsigned int x_offset = letter_height - y_offset;
  4. const unsigned int x_1st = x_offset - 1;
  5. const unsigned int x_last = 2 * letter_height - x_offset - 1;
  6. for (unsigned x = 0; x < 2 * letter_height - 1; x++)
  7. {
  8.    if ((x == x_1st) || (x == x_last))
  9.   cout << "*";
  10.    else if (isHBar && x > x_1st && x < x_last )
  11.   cout << "*";
  12.    else
  13.   cout << " ";
  14. }
  15. cout << endl;
  16. }
  17. int main(int argc, char* argv[])
  18. {
  19. const unsigned int letter_height = 6;
  20. const unsigned int bar_offset = 3;
  21. for (unsigned line_index = 0; line_index < letter_height; line_index++)
  22. {
  23.  draw_line(letter_height, line_index, line_index == bar_offset);
  24. }
  25. return 0;
  26. }


 
Edit: grilled


Message édité par slash33 le 04-02-2007 à 19:25:29
Reply

Marsh Posté le 04-02-2007 à 18:57:25    

Merci slash33

Reply

Marsh Posté le 05-02-2007 à 18:52:14    

salut IrmatDen, c'était quoi ta solution?

Reply

Marsh Posté le 05-02-2007 à 19:10:46    

Euh, niveau code, ça se serait rapproché de ce qu'ont fait slash33 et Ben_be je pense. Pourquoi?

Reply

Marsh Posté le 05-02-2007 à 19:17:07    

parceque pour slash33 me semble compliqué, je debute en c++, sinon le raisonnement de Ben_be, je le comprends facilement, je peux voir ta solution?

Reply

Marsh Posté le 05-02-2007 à 19:22:10    

Euh, j'ai rien codé hein :D (et de toute façon, je suis pas pour balancer des solutions, je doute que ça t'enseigne quoi que ce soit puisque tu débutes).
Je t'ai indiqué des étapes de raisonnement: ça allié à tes cours et des croquis (comme elianor l'a conseillé plus tôt), tu devrais comprendre l'étape. Il te suffit de reproduire l'algo que tu appliques toi-même pour dessiner.

Reply

Marsh Posté le 05-02-2007 à 19:27:56    

C'etait juste pour voir...

Reply

Marsh Posté le 05-02-2007 à 19:29:14    

Code :
  1. #include <iostream>
  2.  
  3. std::string repeat(const char* str, int times) {
  4.     std::string base(str);
  5.     std::string joined;
  6.     while (times>=1) {
  7.         if (times%2) {
  8.             times-=1;
  9.             joined+=base;
  10.         } else {
  11.             times/=2;
  12.             base+=base;
  13.         }
  14.     }
  15.     return joined;
  16. }
  17.  
  18. template <int taille, int revco>
  19. struct affiche_le_a {
  20.     affiche_le_a() {
  21.         affiche_le_a<taille-1, revco+1> la_suite_marcel;
  22.         std::cout << repeat(" ", revco+1) << "* " << repeat("  ", taille-2) << "*" << std::endl;
  23.     }
  24. };
  25.  
  26. template <int revco>
  27. struct affiche_le_a<1, revco> {
  28.     affiche_le_a() {
  29.         std::cout << repeat(" ", revco+1) << "*" << std::endl;
  30.     }
  31. };
  32.  
  33. template <int taille>
  34. struct affiche_le_a<taille, 3> {
  35.     affiche_le_a() {
  36.         affiche_le_a<taille-1, 4> la_suite_marcel ;
  37.         std::cout << "    *" << repeat("**", taille-1) << std::endl;
  38.     }
  39. };
  40.  
  41. int main(void) {
  42.     affiche_le_a<42, 0> on_y_va;
  43. }


 
[:chrisbk]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 05-02-2007 à 19:33:11    

http://www.tolor.net/Smileys/Ounet/xpounet.gif [:rofl]

Reply

Marsh Posté le 05-02-2007 à 20:28:04    

@richie_heig: tu dois te taper d'autres lettres à part le A et le E?
Tu devrais chercher à comprendre les solutions qui t'ont été proposées (enfin, ptet pas celle de 0x90 pour le moment :D). Tu gagnerais du temps...

Reply

Marsh Posté le 05-02-2007 à 20:34:59    

justement, actuellement, je travaille sur le E, c pas évident... mais j'essaie pour mieux comprendre cette histoire de boucles...sinon je suis pour toutes aide...

Reply

Marsh Posté le 05-02-2007 à 20:38:42    

et dire que je dois rendre ça mercredi...

Reply

Marsh Posté le 05-02-2007 à 20:39:25    

Bon, déjà pour un E, t'as pas besoin d'espaces. Ensuite, tu as quoi:
> une barre à gauche qui fait toute la hauteur,
> une barre sur la première ligne,
> une sur la dernière,
> et enfin une au milieu.
Donc, t'as besoin d'une boucle et 1 ou 3 if selon à quel point tu les imbrique.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed