Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exeercices formes avec étoiles

30 octobre 2018 à 19:01:23

Bonjour, pour nos devoirs de vac on doit faire des formes avec des étoiles.

Je dois faire ça :

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

sa fais Longtemps que je bosse plus un truc que j'ai du faire en html, bref je commence a avoir du mal a réfléchir.

voici mon raisonnement est-il bon? (c'est pas du code hein juste le raisonnement)

x est un entier =0
n est un entier =10

Répeter :
/           { afficher x espaces puis n etoiles;
/
/ 
/           retour a la ligne
/            x=x+1
/             n=n-1 }
/           
/
/ J'usque a n= 0 et x = 10

c'est a dire  

donc int x=0;int n=10;

//(0)x espaces//********** afficher n  Etoiles(10)
//(1) x+1 esp // ********* afficher n-1 Etoiles(9)
//(2) x+2 esp //  ******** afficher n-2 Etoiles(8)
//(3) x+3 esp //   ******* afficher n-3 Etoiles(7)
//(4) x+4 esp //    ****** afficher n-4 Etoiles(6)
//(5) x+5 esp //     ***** afficher n-5 Etoiles(5)
//(6) x+6 esp //      **** afficher n-6 Etoiles(4)
//(7) x+7 esp //       *** afficher n-7 Etoiles(3)
//(8) x+8 esp //        ** afficher n-8 Etoiles(2)
//(9) x+9 esp //         * afficher n-9 Etoiles(1)

voila jsp si le raisonnement est bon mais en tout cas ça ne fonctionne pas.

Voila le code au cas ou:

void Pyra_Gauche(int x,int n){

    do{
for(int nbspace=0;nbspace>9;nbspace++){
    cout<<" ";


for(int nbetoile=10;nbetoile<1;nbetoile--){

    cout<<"*";


cout<<endl;
x++;
n--;
}
}
    }
        while((n!=0) && (x!=10));

}

Le code m'affiche rien du tout… 

Merci d'avance !





-
Edité par C# <3 30 octobre 2018 à 19:02:02

  • Partager sur Facebook
  • Partager sur Twitter

gbl

30 octobre 2018 à 19:50:46

Votre raisonnement est correct, mais votre implémentation n'a rien à voir avec votre raisonnement.
  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
31 octobre 2018 à 11:11:58

Hmm je vois, je galère vraiment j'ai un peu changer le code sa ne fonctionne toujours pas mais j'ai l'impression de me rapprocher de la solution.
void Pyra_Gauche(int x,int n){
int nbspace=0;
int decr =10;
int nbetoile=10;
int decrEtoile=0;
    do{

        while(nbspace<decr){
         cout<<" ";

         decr--;

         while(nbetoile>decrEtoile){
             cout<<"*";

             decrEtoile++;





        }
}
cout<<endl;
        x++;
        n--;

    }

        while((n!=0) && (x!=10));

}
Merci :)
  • Partager sur Facebook
  • Partager sur Twitter

gbl

31 octobre 2018 à 11:34:45

Petit conseil, moins vous utilisez de variable, plus c'est simple à gérer. ;)

(x+n est constant, on peut dont remplacer ces 2 variables par une constante et une variable, la constante pouvant être une variable locale mais qui ne change pas de valeur de son initialisation à la fin du processus, par exemple.)

Autre conseil, si l'indentation dans le forum n'est pas un "accident" de copier-coller, pensez à bien indenter votre code, ça fait des miracles pour la compréhension du code.

Pourquoi les 2 "while" sont-ils imbriqué ?

Vous avez fait largement le plus dur, le raisonnement.

L'implémentation, c'est juste un peu de rigueur.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
31 octobre 2018 à 14:54:46

Alors j'ai pas tout compris, x+n  sera toujours égal a 10 mais je vois pas  a quoi sert la constante je peu peut être garder une variable qui vaut 10 et faire répéter {les instructions,variable--;} tant que la variable!=0. Sa répéterai les instructions 10 fois normalement.

La raison pour laquelle j'ai imbriqué les 2 boucles c'est que le résultat a l'écran me paraissait plus proche de la solution(oui c'est un peu con).

et sa a été une manière de régler des soucis pour mes exo précédents : le carré par exemple.

Je vois vraiment pas quoi changer pour que ça marche la ce qui es étrange c'est qu'il y a bien un espace et 9 etoiles mais il n'y a pas de retour a la ligne . sa m'affiche juste ça :  **********

  • Partager sur Facebook
  • Partager sur Twitter

gbl

31 octobre 2018 à 15:19:55

le do while est un mauvais choix

un for se construit comme ceci

for(index = x; index condition limite; increment de index)

nous voyons donc dans ce for

  index est le nb d'espaces

  limite le nombre d'étoiles

les autres boucles pour l'affichage

  le nb espace c'est toujours index

  le nb etoiles c'est limite - index

bien positionner le retour à la ligne

  • Partager sur Facebook
  • Partager sur Twitter
31 octobre 2018 à 15:29:36

Vous ne devez pas faire une implémentation "au pif".

Votre raisonnement est correct, implémentez le, from scratch, sans copier-coller d'exemples précédent qui n'ont potentiellement rien à voir.

Vous utilisez des "while" et "do/while" alors que de simples boucles "for" seraient plus lisible :

int size=9;

for(int line = 0; line < size; line++)
{
    for( int col = 0; col < size ; col++)
    {
        if(col<line)
        {
            std::cout<<" ";
        }
        else
        {
            std::cout<<"*";
        }
    }
    std::cout<<std::endl;
}


C'est un peu différent de votre raisonnement. Avec le vôtre, vous devez avoir une boucle "for" qui contient 2 autres boucles "for", l'une à la suite de l'autre.

int size=9;

for(int line = 0; line < size; line++)
{
    for( int col1 = 0; col1 < line ; col1++)
    {
....
    }

    for( int col2 = line; col2 < size ; col2++)
    {
....
    }

    std::cout<<std::endl;
}



-
Edité par bacelar 31 octobre 2018 à 15:30:11

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
31 octobre 2018 à 15:53:03

Ou si tu t'embrouilles, aère le travail :

void printSpace(int nbr)
{
	for (int i = 0; i < nbr; i++)
		std::cout << " ";
}

void printStars(int nbr)
{
	for (int i = 0; i < nbr; i++)
		std::cout << "*";

	std::cout << std::endl;
}

int main()
{
	int spc = 0;
	int stars;

	std::cout << "Stars ?" << std::endl;
	std::cin >> stars;

	do
	{
		printSpace(spc);
		printStars(stars);

		spc++; 
		stars--;
	} while (stars != 0);
         return 0;
}



  • Partager sur Facebook
  • Partager sur Twitter
31 octobre 2018 à 16:00:29

Merci beaucoup ! hmmm je vois l'implémentation est vraiment compliqué, en effet notre prof d'info nous conseille de faire plus de for mais j'ai du mal a suivre ce conseil psk je comprend moins le "concept" do/while c'est facile a comprendre ça veux dire "faire... tant que(condition)alors que le for me parait plus abstrait.

A quoi sert le std ? j'ai pas encore vu ça.

Merci encore :)

  • Partager sur Facebook
  • Partager sur Twitter

gbl

31 octobre 2018 à 16:14:15

>A quoi sert le std ? j'ai pas encore vu ça.

Bon, vous avez vu "cout" sans "std::", ça sent le prof. qui n'a pas ouvert un bouquin de C++ depuis 20 ans ça.

Il doit vous avoir collé un bon vieux "using namespace std" bien sale en haut de vos fichiers.

En fait "cout", "cin" etc..., n'existent pas, c'est "std::cout", "std::cin" etc... qui existent.

Demandez à votre prof. soit d'expliquer correctement l'usage (que je trouve complètement abusé) de "using namespace std" soit de se mettre un peu à jours et ne pas sortir du code qui n'est que potentiellement compatible qu'avec des compilateurs sortis avant la première normalisation du C++, en 1998.

"std", c'est l'espace de nom contenant l'ensemble des choses (fonctions, classes, objets, etc...) offertes par la librairie standard du C++.

Prenez l'habitude d'utiliser le nom "pleinement qualifier" (avec les espaces de noms avant) plutôt que d'abuser des "using namespace ma_mamie_en_sky".

Vous pouvez très bien remplacer chaque "for" par une boucle "while" dans les codes que j'ai fourni, faut juste faire attention aux conditions et à la gestion des variables de boucle.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.