Triangle en c++

Triangle en c++ - C++ - Programmation

Marsh Posté le 07-10-2009 à 20:14:18    

Bonjour
je voudrais faire un triangle en c++. Un triangle de ce genre :
 
http://img104.imageshack.us/img104/9701/triaglec.jpg
 
j'ai déja réussis à afficher la moitié du triangle comme cela :
 
*
**
***
****
*****
******
 
avec le code suivant :
 

Code :
  1. int main ()
  2. {
  3.     for (int i = 0; i < 5; i++)
  4.     {
  5.     for (int j = 0; j < i+1; j++)
  6.     {
  7.     cout << "*" ;
  8.     }
  9.     cout << endl ;
  10.     }
  11. return 0;
  12. }


 
 
Cependant , il faut que j'affiche un triangle de la sorte comme je viens de le dire :
 
http://img104.imageshack.us/img104/9701/triaglec.jpg
 
Est-ce que quelqu'un aurait la gentillesse de me filer un coup de pousse.
 
N.B:
 
Je dois faire plusieurs triangles sur une même ligne mais je voudrai déjà faire un seul triangle. Je verrai pour la suite...
 
 
Je vous remercie à l'avance.
 


---------------
Le plus grand risque dans la vie, est de n'en prendre aucun!
Reply

Marsh Posté le 07-10-2009 à 20:14:18   

Reply

Marsh Posté le 08-10-2009 à 01:45:29    

quand tu pousses pas un * tu pousses un espace.

Reply

Marsh Posté le 08-10-2009 à 07:25:34    

bel exercice :/
ca sort d'ou ces TPs foireux ? Tout les ans on les revoit

Reply

Marsh Posté le 08-10-2009 à 10:52:11    

Bah les profs vont quand même pas commencer à bosser hein :o
 
Ils reprennent tout les ans les mêmes exos, comme çà ils peuvent glander tranquille :D

Reply

Marsh Posté le 08-10-2009 à 11:24:49    

En même temps faut bien commencer par quelque chose.
On a tous fait ce genre de truc au début sur MO5 ou une calculette :D

Reply

Marsh Posté le 08-10-2009 à 15:53:37    

Ca donnerait un truc comme : pour un espace de supprimé on supprime 2 étoiles ? :o
Chuis nul, j'débute aussi :o


Message édité par Funkpeck le 08-10-2009 à 15:53:51

---------------
Et si la vraie démocratie c'était cela ? | La folie, c'est se comporter de la même manière et s'attendre à un résultat différent.
Reply

Marsh Posté le 08-10-2009 à 16:02:18    

C'est plus un pb d'algo que de c++ en l'occurrence :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 08-10-2009 à 16:31:41    

J'débute aussi en algo :o


---------------
Et si la vraie démocratie c'était cela ? | La folie, c'est se comporter de la même manière et s'attendre à un résultat différent.
Reply

Marsh Posté le 08-10-2009 à 16:53:40    

Moi j'ai ça aussi à faire en java! mdr

Reply

Marsh Posté le 08-10-2009 à 17:20:50    

Mais l'algo c'est juste du creusage de tête :o

 


J'utilise - pour symboliser une espace et je commence par la base. Genre pour 3 lignes ça fait :

  • ****** (6 étoiles)
  • puis  -****- (4)
  • puis --**-- (2)
 

Si on s'intéresse aux lignes :

  • toutes les lignes contiennent des * et/ou des espaces et font la même longueur (la longueur de la ligne la plus longue, cad la base, cad 6 caractères dans mon exemple)
  • la longueur de la base détermine le nombre de lignes qui compose le triangle : plus la base est grande, plus ya de lignes pour atteindre le chapeau (obvious :o).

Pour une base de 6 dans mon exemple, on a 3 lignes... en dessinant 2-3 exemples on dirait bien que pour une base de longueur paire (2N étoiles de long) on obtient un triangle de N étages
Ici on sait que si on nous donne une longueur de base (genre 8), on déduit un nombre de ligne (4)

 

Si on s'intéresse au contenu d'une ligne : en fonction de l'étage souhaité les * commencent plus ou moins tard (après plus ou moins d'espaces). Mais combien d'espace avant la première * ?
Pour le nombre d'espaces on constate que les étoiles commencent :

  • après 0 espace pour la 1ère ligne... on va dire pour la ligne numéro 0 (en info on aime bien commencer à 0)
  • après 1 espace pour la 2ème ligne, ligne numéro 1
  • après 2 espaces pour la 3ème ligne, ligne numéro 2
  • ...

Bref on a une relation entre le numéro de l'étage et le nombre d'espace à insérer.
Ici on sait que pour la ligne numéro N on commence par foutre N espaces

 

Pour le nombre d'étoiles sur une ligne on remarque que  :

  • longueur de la base (ligne numéro 0)
  • longueur de la base moins 2 étoiles (ligne numéro 1, car on a mis 1 espace à gauche et 1 à droite)
  • longueur de la base moins 4 étoiles (ligne numéro 2)

Ici on sait que pour la ligne numéro N on fout [longueur de la base - 2*N] étoiles

 

Pour le nombre d'espaces après la dernière étoile d'une ligne, c'est le même que pour le nombre d'espaces avant la première étoile de cette même ligne, donc pb déjà résolu ici
Ici on sait que pour la ligne numéro N on termine par foutre N espaces

 


Bref pourquoi pas faire une fonction du genre ligne(numéro de l'étage, longueur de la base), en tenant compte du fait que pour toi la base est en bas, pas en haut  :o


Message édité par Xavier_OM le 08-10-2009 à 17:21:27

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 08-10-2009 à 17:20:50   

Reply

Marsh Posté le 09-10-2009 à 09:07:48    

Non mais le nombre d'étoiles à imprimer c'est juste 2*L (avec L == n° de la ligne à imprimer), et le nombre d'espace en début c'est N-L (avec N == nombre de lignes total).

 

Donc, soit 3 lignes à imprimer :
- ligne 1 : 2 * 1 étoiles, 3 - 1 espaces :


  **

 

- ligne 2 : 2 * 2 étoiles, 3 - 2 espaces :


  **
 ****

 

- ligne 3 : 2 * 3 étoiles, 3 - 3 espaces :


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

 

Après il suffit d'utiliser la classe std::string et le constructeur suivant :

string ( size_t n, char c );


(cf. http://cplusplus.com/reference/string/string/string )


Message édité par Elmoricq le 09-10-2009 à 09:09:18
Reply

Marsh Posté le 14-10-2009 à 18:28:22    

Merci @Xavier_OM et merci à toi @Elmoricq. J'ai lu vos réponses et sur le moment même j'ai pas compris mais après l'avoir fait j'ai compris X-D
Enfin bréf
Merci


---------------
Le plus grand risque dans la vie, est de n'en prendre aucun!
Reply

Sujets relatifs:

Leave a Replay

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