J'ai besoin d'aide pour rédiger le code source pour un programme sapin. Est ce que vous pouvez m'aider? je sais c'est la boucle for qu'il faut utiliser mais l'affiche des étoiles je n'y comprends rien.
Relis-toi un peu avant de poster tes sujets, il y a très peu de médiums, de télépathes et de dieux omniscients sur ce forum. Un programme sapin ? L'affichage des étoiles ? À quand les grilles-pain cosmiques et les micro-ondes à voyager dans le temps ?
Mais tu as de la chance, ma boule de cristal est enfin réparée et j'arrive à peu près à voir ce dont tu veux nous parler. Elle me dit que tu es débutant et tu souhaite réaliser une fonction qui écrit sur la sortie standard quelque chose de la forme suivante:
*
***
*****
*******
*********
Du coup, pour résoudre ton problème il faut se poser les questions suivantes: En connaissant \(h\) la hauteur (le nombre total de lignes) et \(n\) la ligne actuelle,
Combien il y a-t-il d'espaces au début de la ligne \(n\) ?
Combien il y a-t-il d'étoiles à la fin de la ligne \(n\) ?
EDIT: Ton problème est en C ou en C++ ?
- Edité par Mad scientist 12 février 2017 à 15:20:06
Ce que j'aimerai savoir, c'est à quoi doit servir le nombre entré...
le nombre entier c'est pour faire la boucle de for qui aidera à afficher les étoiles qui formeront le sapin de noël, c'est la où moi je suis bloqué. Au début la limite n'était pas précise d'après ma compréhension quand on a dit entrer un nombre entier n compris entre 2 et 10 qui doit tester que tant que n est compris entre 2 et 10 afficher tous les nombre compris entre (2 et 10) 2 et 10 étant pris.
Puis on a précisé par exemple le nombre n=6 qui représente la hauteur des lignes pour faire les boucles for,c'est la je m'en sors pas
Ok, donc si je comprends bien, n représente le nombre de ligne à dessiner ?
oui je pense si je dis pas de bêtises parce que avec le for le nombre de répétition est connu par exemple pour n=6 ecrire une ou des instruction for qui afficheront un sapin de noël
Très bien, as-tu lu les questions que je t'ai donné ? À ton avis, quelle est la suite de la séquence de paires suivante et comment as-tu fait pour l'obtenir ?
8, 1
7, 3
6, 5
5, 7
4, 9
MatDan a écrit:
merci Mad scientist je suis débutant en programmation langage C++ plus précisément.
Dans ce cas-ci tu devrais poster sur le forum C++. C et C++ sont deux langages différents et il faut éviter de les confondre. Quand tu post du code sur le forum, il faut utiliser les balises de code pour avoir une mise en page correcte et de la coloration syntaxique.
MatDan a écrit:
#include <iostream>
using namespace std;
void main (void)
{
int compteur (0) , n;
cout << "taper un nombre entier : ";
cin >> n;
while (compteur>=3 && <=10)
{
cout << compteur<<endl;
compteur++;
}
for
c'est la où je me suis arrêté
Si tu suis le cours de C++ de ce site, change de cours. Tu trouveras plus d'explications là-dessus sur le forum C++;
Le prototype de la fonction main est int main(void) en C et int main() en C++;
using namespace au début d'un fichier est une pratique absurde et obsolète;
Ta boucle while est inutile pour l'exercice donné.
- Edité par Mad scientist 13 février 2017 à 0:59:45
J'assimile le nombre de caractères dans une ligne à une suite arithmétique de raison deux : on part de la première ligne et, à chaque ligne que tu descend, tu rajoutes deux étoiles. Ainsi, à la dernière ligne tu auras \(x\) étoiles. J'ai écris la suite comme ceci : \(u_n = u_1 + (n - 1) \times 2\). Ici \(2\) est la raison de ta suite. Tu peux donc stocker le résultat de dans la variable charactersNumber.
Ensuite, a chaque ligne, tu auras \(1 + i \times r\) étoiles avec \( r \) la raison de ta suite (si tu as suivi, ça devrait aller). Je pense qu'avec ça tu peux deviner la suite.
EDIT : Si tu cherches à apprendre le C++, tout le monde sur ce forum est d'accord sur le fait qu'il est obsolète ou du moins à ne pas suivre. De plus, si tu te demandes pourquoi le using namespace est absurde, c'est assez simple : si tu as besoin d'une fonction qui a le même nom, il n'y a pas de conflit grâce au namespace (si je ne suis pas clair, ça se trouve facilement sur internet et je peux t'ajouter un ou deux exemples). Et j'avoue que la boucle while m'a un peu gêné pour comprendre ton exercice.
- Edité par Alexandre Gérault 13 février 2017 à 1:07:11
C'est noté pour les remarques ! mais moi je n'ai même pu afficher ça parce que je n'ai pas encore écrit les instructions surtout les conditions sur les boucles For qui me serviront d'affichage. Ok je suis ton raisonnement ensuite??
Mad scientist a écrit:
Très bien, tu as lu les questions que je t'ai donné ? À ton avis, quelle est la suite de la séquence de paires suivante et comment as-tu fait pour l'obtenir ?
8, 1
7, 3
6, 5
5, 7
4, 9
MatDan a écrit:
merci Mad scientist je suis débutant en programmation langage C++ plus précisément.
Dans ce cas-ci tu devrais poster sur le forum C++. C et C++ sont deux langages différents et il faut éviter de les confondre. Quand tu post du code sur le forum, il faut utiliser les balises de code pour avoir une mise en page correcte et de la coloration syntaxique.
MatDan a écrit:
#include <iostream>
using namespace std;
void main (void)
{
int compteur (0) , n;
cout << "taper un nombre entier : ";
cin >> n;
while (compteur>=3 && <=10)
{
cout << compteur<<endl;
compteur++;
}
for
c'est la où je me suis arrêté
Le prototype de la fonction main est int main(void) en C et int main() en C++;
using namespace au début d'un fichier est une pratique absurde et obsolète;
Si tu suis le cours de C++ de ce site, change de cours. Tu trouveras plus d'explications là-dessus sur le forum C++.
S'il te plait, fait juste un effort sur la présentation de tes messages. Je ne vais pas jouer au vieux rabat-joie sur l'orthographe mais juste sur le fait que tu utilises n'importe comment les balises (tu as tout écris en gras notamment et tu ne dis rien après avoir cité un message => que veux-tu dire ?).
S'il te plait, fait juste un effort sur la présentation de tes messages. Je ne vais pas jouer au vieux rabat-joie sur l'orthographe mais juste sur le fait que tu utilises n'importe comment les balises (tu as tout écris en gras notamment et tu ne dis rien après avoir cité un message => que veux-tu dire ?).
Merci
je t'ai bien lu j'arrive j’essaie de comprendre un peu ton raisonnement. Ne t'occupes pas trop de gras je répondais à une autre personne. En lisant vos remarques j'ai l'impression que je dois changer de forum??
Maintenant que tu as une meilleure idée du fonctionnement de ce que tu veux écrire, tu peux écrire un algorithme:
fonction sapin(n: entier)
{
pour i variant de 0 à n
{
afficher_n(" ", n - i - 1)
afficher_n("*", 1 + 2 * i)
afficher("\n")
}
}
Avec la fonction afficher_n une fonction qui affiche n fois la chaine s, s étant son premier argument et n son second. Il te suffit ensuite de traduire ça dans le langage cible (ici C++).
- Edité par Mad scientist 13 février 2017 à 1:55:54
En lisant vos remarques j'ai l'impression que je dois changer de forum??
- Edité par MatDan il y a 14 minutes
Pourquoi donc ?
Tu as l'impression qu'il s'agit d'un problème mathématiques ? En effet, pour résoudre ce problème, il faut mélanger mathématiques et programmation mais je pense que cela arrive très souvent. Après, tu nous as bien présenté un code C++ et un problème assez usuel. Je vais me coucher mais j'ai déjà le code si tu en as besoin. Ça ne me ferait pas plaisir de te le passer sans que tu ne le trouves car cela voudrait dire que je ne suis pas bon pédagogue.
Je vais donc te refaire un topo avant de te laisser. Pour résoudre ton problème, tu dois :
savoir combien il y aura d'étoile au maximum ; (sers-toi de ma suite arithmétique si tu as le niveau mathématiques suffisant, sinon fais une recherche à ce sujet car je pense que c'est compréhensible dès la 4° si on est vraiment intéressé)
définir le nombre d'étoiles puis d'espaces à chaque ligne ;
dessiner les lignes une à une.
Bonne nuit
- Edité par Alexandre Gérault 13 février 2017 à 1:51:18
Je vais vous proposer de résoudre le problème de manière mathématique (un peu comme a pu le faire @alexan14 en utilisant une suite).
On va tout d'abord se poser la question, "Mais que veut-on ?" :
*
***
*****
*******
*********
On peut déjà voir deux axes. Le premier que l'on va noter : \(base\), et le second que l'on va noter : \(hauteur\). De plus on sait que la limite de \(base\) sera \(base\), de plus la limite de \(hauteur\) sera \(hauteur\) (Ohhh comme le monde est bien fait :ange:).
On est en droit de se poser la question, (et on va y répondre !) \(\forall x \in hauteur\), que vaut x (on part également du principe que \(x \in \mathbb{N}\)) ? Pour se faire j'ai fait une petite fonction : \(espace_{n} : base \to base - 2hauteur_{n}\) (celà marche aussi bien pour une base pair que pour une base impaire). Maintenant on connait la distance entre \(hauteur(x)\) et l'étoile la plus proche.
Mais avant ça, voici quelques calculs qui ne te seront pas utiles dans l'absolu, mais on ne sait jamais. Pour connaître le nombre d'étoiles : \(\sum_{n = 0}^{hauteur} base_{n}\) (où \(base_{0} = base, base_{n} = base - 2hauteur_{n}\)). Et pour connaître le la place que vaut ton étoile la plus haut dans la base : \(mid = \frac{base}{2}+1\)(division euclidienne, ne marche que pour une base impaire, et pour une base paire : ) \(mid = \frac{base}{2} \& \frac{base}{2} + 1\) .
De plus, je comprends pourquoi on te demande que \(n > 2\), par contre tu n'auras aucun problème pour \(n \geq 10\) (sauf si tu le fais en console, au bout d'un moment \(n\) débordera et ce sera un bon gros bordel ).
Voilà, voilà ^^' normalement maintenant vous avez vraiment tout les outils pour vous lancer dans la résolution du sapin, n'hésitez pas à vous aidez également des réponses ci dessus !.
Ps : Désolé je ne sais pas trop comment marche le système de notification d'utilisateur, j'ai pensé que c'était quelque peu comme twitter . Et de plus j'espère ne pas m'être trompé (lorsque j'ai recopié mes calculs :-°) .
En lisant vos remarques j'ai l'impression que je dois changer de forum??
- Edité par MatDan il y a 14 minutes
Pourquoi donc ?
Tu as l'impression qu'il s'agit d'un problème mathématiques ? En effet, pour résoudre ce problème, il faut mélanger mathématiques et programmation mais je pense que cela arrive très souvent. Après, tu nous as bien présenté un code C++ et un problème assez usuel. Je vais me coucher mais j'ai déjà le code si tu en as besoin. Ça ne me ferait pas plaisir de te le passer sans que tu ne le trouves car cela voudrait dire que je ne suis pas bon pédagogue.
Je vais donc te refaire un topo avant de te laisser. Pour résoudre ton problème, tu dois :
savoir combien il y aura d'étoile au maximum ; (sers-toi de ma suite arithmétique si tu as le niveau mathématiques suffisant, sinon fais une recherche à ce sujet car je pense que c'est compréhensible dès la 4° si on est vraiment intéressé)
définir le nombre d'étoiles puis d'espaces à chaque ligne ;
dessiner les lignes une à une.
Bonne nuit
- Edité par alexan14 hier à 1:51
Unk's a écrit:
Bonjour !
Je vais vous proposer de résoudre le problème de manière mathématique (un peu comme a pu le faire @alexan14 en utilisant une suite).
On va tout d'abord se poser la question, "Mais que veut-on ?" :
*
***
*****
*******
*********
On peut déjà voir deux axes. Le premier que l'on va noter : \(base\), et le second que l'on va noter : \(hauteur\). De plus on sait que la limite de \(base\) sera \(base\), de plus la limite de \(hauteur\) sera \(hauteur\) (Ohhh comme le monde est bien fait :ange:).
On est en droit de se poser la question, (et on va y répondre !) \(\forall x \in hauteur\), que vaut x (on part également du principe que \(x \in \mathbb{N}\)) ? Pour se faire j'ai fait une petite fonction : \(espace_{n} : base \to base - 2hauteur_{n}\) (celà marche aussi bien pour une base pair que pour une base impaire). Maintenant on connait la distance entre \(hauteur(x)\) et l'étoile la plus proche.
Mais avant ça, voici quelques calculs qui ne te seront pas utiles dans l'absolu, mais on ne sait jamais. Pour connaître le nombre d'étoiles : \(\sum_{n = 0}^{hauteur} base_{n}\) (où \(base_{0} = base, base_{n} = base - 2hauteur_{n}\)). Et pour connaître le la place que vaut ton étoile la plus haut dans la base : \(mid = \frac{base}{2}+1\)(division euclidienne, ne marche que pour une base impaire, et pour une base paire : ) \(mid = \frac{base}{2} \& \frac{base}{2} + 1\) .
De plus, je comprends pourquoi on te demande que \(n > 2\), par contre tu n'auras aucun problème pour \(n \geq 10\) (sauf si tu le fais en console, au bout d'un moment \(n\) débordera et ce sera un bon gros bordel ).
Voilà, voilà ^^' normalement maintenant vous avez vraiment tout les outils pour vous lancer dans la résolution du sapin, n'hésitez pas à vous aidez également des réponses ci dessus !.
Ps : Désolé je ne sais pas trop comment marche le système de notification d'utilisateur, j'ai pensé que c'était quelque peu comme twitter . Et de plus j'espère ne pas m'être trompé (lorsque j'ai recopié mes calculs :-°) .
@Unk: Il serait plus intéressant d'aller « du haut vers le bas ». Ainsi on aurait le nombre total d'étoiles pour une figure de \(n\) lignes qui vaudrait \(n ^ 2\), le nombre d'espace qui précédent l'étoile la plus haute qui vaudrait \(n - 1\), …
- Edité par Mad scientist 14 février 2017 à 10:03:55
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Blog - GitHub
Blog - GitHub
Blog - GitHub
Blog - GitHub
Blog - GitHub
Blog - GitHub
Blog - GitHub
Blog - GitHub
Blog - GitHub
Blog - GitHub