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

  FORUM HardWare.fr
  Programmation
  C++

  Triangle en c++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Triangle en c++

n°1929954
goozidi
Posté le 07-10-2009 à 20:14:18  profilanswer
 

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!
mood
Publicité
Posté le 07-10-2009 à 20:14:18  profilanswer
 

n°1930033
bjone
Insert booze to continue
Posté le 08-10-2009 à 01:45:29  profilanswer
 

quand tu pousses pas un * tu pousses un espace.

n°1930037
Joel F
Real men use unique_ptr
Posté le 08-10-2009 à 07:25:34  profilanswer
 

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

n°1930131
_synapse_
Posté le 08-10-2009 à 10:52:11  profilanswer
 

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

n°1930154
bjone
Insert booze to continue
Posté le 08-10-2009 à 11:24:49  profilanswer
 

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

n°1930269
Funkpeck
Je suis une citation.
Posté le 08-10-2009 à 15:53:37  profilanswer
 

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.
n°1930278
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 08-10-2009 à 16:02:18  profilanswer
 

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.
n°1930297
Funkpeck
Je suis une citation.
Posté le 08-10-2009 à 16:31:41  profilanswer
 

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.
n°1930309
moiguigui6​0
Posté le 08-10-2009 à 16:53:40  profilanswer
 

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

n°1930340
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 08-10-2009 à 17:20:50  profilanswer
 

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.
mood
Publicité
Posté le 08-10-2009 à 17:20:50  profilanswer
 

n°1930496
Elmoricq
Modérateur
Posté le 09-10-2009 à 09:07:48  profilanswer
 

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
n°1931859
goozidi
Posté le 14-10-2009 à 18:28:22  profilanswer
 

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!

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

  Triangle en c++

 

Sujets relatifs
anti-aliasing triangle stripanti-aliasing triangle strip
calcul du normal d'un triangle en c++Triangle isocele
Faire un JPanel en forme de triangletriangle et variable globales... Help!!!
triangle de pascal[C] faire un prog qui affiche une ligne, un carré, un triangle
appartenance d'un triangle à un rectangle [clipping][Math] calcul du cercle circonscrit a un triangle en 3D
Plus de sujets relatifs à : Triangle en c++


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