Je cherche à dessiner un losange de N ligne (N étant le milieu du losange donc là où il y a le plus d'étoile). Donc je pense qu'il faut utilser deux boucles for, une pour les lignes et une pour les colonnes mais j'ai du mal à le faire. Pouriez vous m'aider ? J'ai du mal à gérer à la fois les * et les espaces.
stp explique bien le problème, ton exemple semble incorrect, dans la deuxième ligne on peut pas ajouter un espace avant les deux étoiles (**) et un autre après car on aura une chaîne avec quatre caractères et ça dépasse la taille de la ligne de milieu,
Il y a déjà eu un topic à ce sujet: cerf-volant. Tu peux t'en inspirer, mais quand tu poses une question, il est bien que tu montres ce que tu as déjà écrit....
Edgar;
- Edité par edgarjacobs 10 octobre 2016 à 19:04:00
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
si les lignes doivent être centrées alors on peut pas le faire dans la deuxième ligne (**) avec N impaire car on peut pas diviser un espace (si ton programme va s'exécuter en mode console),
le nombre des espaces avant les étoiles et après est : (N - nombre_étoiles_de_la_ligne)/2;
(Pendant que je tapais (lentement) mon message, une réponse a été apportée, du coup ce message est redondant.)
Bonjour ! Il y a sûrement plusieurs façons de faire ça. Une possibilité, ce serait de faire une boucle dans laquelle chaque tour de boucle correspond à une ligne, dans laquelle il faut afficher un certain nombre de blancs et un certain nombre d'étoiles. Regarde l'exemple fourni :
─ 1ère ligne : combien de blancs avant les étoiles ? combien d'étoiles ?
─ 2ème ligne : combien de blancs avant les étoiles ? combien d'étoiles ?
─ et ainsi de suite jusqu'à la ligne du milieu.
Si tu écris sur un bout de papier ces nombres, tu remarqueras qu'on passe de l'un à l'autre d'une façon très particulière.
Du coup on pourrait définir deux variables, 'nombre_de_blancs' et 'nombre_d_etoiles'. À toi de voir comment les initialiser et comment les faire varier dans la boucle.
(On peut faire deux boucles, une pour la phase croissante du motif et une pour la phase décroissante. À moins de gérer le "retournement" de la progression arithmétique.)
Une première idée part du principe qu'on a afficher un triangle, un trait et «le même triangle» dans l'autre sens. On se dit aussi qu'on va utiliser des boucles …
Alors comment avec une boucle obtenir 4,3,2,1 ? 1,3,5,7 ?
First solve the problem. Then, write the code. ~ John Johnson
Je comprends ce que je dois faire mais je vois pas comment le formaliser algorithmiquement.
A chaque ligne, le nombre d'espaces diminue de 1 et le nombre d'etoiles de 2 mais pourtant je parviens pas à trouver la bonne boucle pour faire ça. J'arrive pas à trouver une boucle qui affiche le bon nombre d'espace ou d'étoiles.
Puisque tu as du mal à trouver les relations entre nombre de blancs et d'étoiles et numéro de ligne, je te conseille de faire une boucle sur les lignes plutôt que sur les blancs et les étoiles. L'avantage est que tu n'as pas besoin de calculer le nombre d'étoiles ou le nombre de blancs en fonction du numéro de la ligne, il suffit juste d'incrémenter ou décrémenter correctement ces nombres, et ça tu sais le faire (voir ton message plus haut). En fait, le calcul le plus difficile est celui du numéro de ligne qui correspond au plus grand nombre d'étoiles. C'est un calcul que je ferais a priori avant les deux boucles (celle-ci, puis la boucle pour la phase décroissante).
Ça ressemblerait à ça pour la phase croissante (le schéma de programme qui suit n'utilise que les remarques que tu viens de faire, en mettant un peu d'ordre et en te laissant plein de choses à remplir, donc je ne pense pas t'avoir mâché le boulot) :
int num_ligne ; // numéro de la ligne
int nb_etoiles ; // nombre d'étoiles
int nb_blancs ; // nombre de blancs
/* Initialisation */
/* À toi de voir à combien il faut initialiser nb_blancs et nb_etoiles */
/* Phase croissante */
for (num_ligne = 1 ; num_ligne < /* combien ? */ ; num_ligne++)
{
/* affichage des blancs et des étoiles */
nb_etoiles += 2 // « le nombre d'étoiles augmente de 2 » (je te cite)
nb_blanc -= 1 // « le nombre d'espaces diminue de 1 » (je te cite)
}
> je comprends pas comment indiquer de mettre x fois un caractère automatiquement.
Avec une boucle : pour i de 1 à x, afficher le caractère.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
J'ai plus qu'à renverser ça pour finir non?