Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 08-03-2014 18:36:11

okayassu
Membre
Inscription : 08-03-2014
Messages : 16

[AlgoBox] Affichage d'étoiles en pyramide

bonjour ,

dans le cadre de mes études je dois réaliser l'exercice suivant avec ALGOBOX :

"afficher une pyramide à n étages, n étant saisi par l'utilisateur,( ici avec 5 étages  )"

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

j'arrive à afficher les étoiles mais je n'arrive pas à afficher les espaces correctement car mes espaces ne diminuent pas à chaque ligne

***Algorithme lancé***
lignes pyramide?
Entrer nb : 5
1111*
1111***
1111*****
1111*******
1111*********
***Algorithme terminé***
mon algo:

1   VARIABLES
2     etoile EST_DU_TYPE NOMBRE
3     ligne EST_DU_TYPE NOMBRE
4     nb EST_DU_TYPE NOMBRE
5     espace EST_DU_TYPE NOMBRE
6   DEBUT_ALGORITHME
7     AFFICHER "lignes pyramide?"
8     LIRE nb
9     POUR ligne ALLANT_DE 1 A 2*nb
10      DEBUT_POUR
11      SI (ligne%2!=0) ALORS
12        DEBUT_SI
13        POUR espace ALLANT_DE 1 A nb-1
14          DEBUT_POUR
15          AFFICHER "1"
16          FIN_POUR
17        POUR etoile ALLANT_DE 1 A ligne
18          DEBUT_POUR
19          AFFICHER "*"
20          FIN_POUR
21        FIN_SI
22      AFFICHER " "
23      FIN_POUR
24  FIN_ALGORITHME

je n'arrive donc pas à faire ma boucle espace correctement

quelqu’un pourrait il m'aider à résoudre ce "léger" problème ? :))

merci d'avance

Hors ligne

#2 08-03-2014 20:43:20

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [AlgoBox] Affichage d'étoiles en pyramide

Bonsoir,

Bienvenue chez nous !
Qu'est-ce que tu cherches à obtenir exactement ?
L'affichage de quatre 1 ou ce qui est écrit au début :
    *
   ***
  *****
*******
*********
Si c'est bien cela que tu veux, alors voilà...
Les seuls espaces dont j'aie à me préoccuper sont ceux placés devant les étoiles.
Analyse.
Avec nb = 5 :
   A la 5e ligne, j'ai 0 espace et 9 étoiles. 9 = 2*5-1 soit 2*ligne-1 : 0 espace c'est 5 - 5 soit 5 - ligne ou encore nb-ligne
   A la 4e ligne, j'ai 1 espace et 7 étoiles. 7 = 2*4-1 soit 2*ligne-1 : 1 espace c'est 5 - 4 soit 5 - ligne ou encore nb-ligne
   A la 3e ligne, j'ai 2 espaces et 5 étoiles. 5 = 2*3-1 soit 2*ligne-1 : 2 espaces c'est 5 - 3 soit 5 - ligne ou encore nb-ligne
   A la 2e ligne, j'ai 3 espaces et 3 étoiles. 3 = 2*2-1 soit 2*ligne-1 : 3 espaces c'est 5 - 2 soit 5 - ligne ou encore nb-ligne
   A la 1ere ligne, j'ai 4 espaces et 1 étoile. 1 = 2*1-1 soit 2*ligne-1 : 4 espaces c'est 5 - 1 soit 5 - ligne ou encore nb-ligne

MAIS les boucles Algobox ne peuvent avoir un indice qui décroît : sur cet exemple de 4 à 1...
Effectivement, seule solution : contourner cette restriction...
Je propose déclarer une 5e variable de de type nombre, je l'ai appelée fin.
Je cplace une boucle qui compte le nombre de lignes de 1 à nb
A l'intérieur de cette boucle ligne et avant la boucle espace, je lui affecte la valeur nb - ligne :
fin PREND_LA_VALEUR nb-ligne
Je place ensuite la boucle espace allant de 0 à fin, pour afficher (sans cocher retour à ligne) une espace à la fois
J'enchaine avec une boucle étoile allant de 1 à 2*ligne-1 qui affiche (sans cocher retour à ligne) une étoile à chaque tour
Enfin après les étoiles, j'affiche (en cochant retour à ligne cette fois) encore une espace.

Voilà ce que ça donne :

***Algorithme lancé***
Nombre de lignes de la Pyramide ?
Entrer nb : 8
        *
       ***
      *****
     *******
    *********
   ***********
  *************
***************

***Algorithme terminé***

A l'intérieur de laquelle, j'ai 2 boucles consécutives :

J'espère avoir été clair...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 08-03-2014 21:02:06

okayassu
Membre
Inscription : 08-03-2014
Messages : 16

Re : [AlgoBox] Affichage d'étoiles en pyramide

bonjour et merci beaucoup pour l'explication :)

je n'aurai donc pas besoin de placer un modulo dans mon algo afin de n'afficher uniquement les lignes impaires?

je ne sais pas pourquoi mais j'arrive a comprendre plus facilement lorsque je n'afficherai que les lignes impaires ( va savoir pourquoi^^)

Dernière modification par okayassu (08-03-2014 21:04:47)

Hors ligne

#4 08-03-2014 21:10:22

okayassu
Membre
Inscription : 08-03-2014
Messages : 16

Re : [AlgoBox] Affichage d'étoiles en pyramide

et si avec mon algo il me sort toujours le même nombre d"espaces" ( correspondants aux 1 qui s'affichent) n'est il pas possible de juste diminuer le compteur des espaces de 1  à chaque ligne?

Hors ligne

#5 08-03-2014 21:45:00

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [AlgoBox] Affichage d'étoiles en pyramide

Re,

Mon code :

VARIABLES
   etoile EST_DU_TYPE NOMBRE
   ligne EST_DU_TYPE NOMBRE
   nb EST_DU_TYPE NOMBRE
   espace EST_DU_TYPE NOMBRE
   nb_fin EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
    AFFICHER "Nombre de lignes de la Pyramide ?"
    LIRE nb
    POUR ligne ALLANT_DE 1 A nb
        DEBUT_POUR
        nb_fin PREND_LA_VALEUR nb-ligne
        POUR espace ALLANT_DE 0 A nb_fin
            DEBUT_POUR
            AFFICHER " "
            FIN_POUR
        POUR etoile ALLANT_DE 1 A 2*ligne-1
            DEBUT_POUR
            AFFICHER "*"
           FIN_POUR
        AFFICHER " "
        FIN_POUR
FIN_ALGORITHME

Commence par faire fonctionner ce code.
Confronte ce qui est écrit avec mes explications et demande-toi pourquoi ton code ne donne par le résultat attendu...

Il y a des choses curieuses dans ton code :
- pourquoi doubler nb ?
- Pourquoi afficher des 1 ? (pas demandé)
- pourquoi ne traiter que les lignes impaires ?
Quel intérêt ? Mon code ne s'en occupe pas !

Si tu veux  que le nombre d'espaces soit décroissant il faut que ta boucle
POUR espace ALLANT_DE 1 A nb-1
ait un indice de fin variable...
Ici, ce n'est pas le cas : tu demandes d'afficher invariablement, quel que soit le n° de ligne un nombre d'espaces égal à nb-1...
Et tu t'étonnes que le nombre d'espaces que tu vois affiché soit toujours le même ?
C'est le nb-1 qui est faux.
Ta boucle doit avoir un indice de fin dégressif...

Rideau pour moi pour ce soir...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#6 08-03-2014 23:19:04

okayassu
Membre
Inscription : 08-03-2014
Messages : 16

Re : [AlgoBox] Affichage d'étoiles en pyramide

dans ma tête je  devais afficher uniquement les lignes impaires car :

ligne 1 = 1 étoile
ligne 2 = 2 étoiles
ligne 3=  3 étoiles
ligne 4=  4 étoiles
ligne 5=  5 étoiles

or la pyramide ne présente que les lignes 1,3,5 et pour avoir le nombre de lignes demandées puisque ne s'affiche qu'une ligne sur deux  je devais doubler nb afin d afficher le nb de base ( j’espère que je suis claire ^^) sinon je n'affiche que la moitié des lignes.

les "1" représentent les espaces pour que je puisse bien les compter et me repérer lors de l'affichage, je les aurais changés en " " en rendant mon exo :)

mais en voyant ton code je comprends m’être bien compliqué la vie ^^

je te remercie sincèrement pour ton explication qui a su me faire comprendre qu'il est complètement inutile d'aller chercher midi à 14h !!
encore merci et excellente soirée à toi :))

Hors ligne

#7 09-03-2014 09:43:46

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [AlgoBox] Affichage d'étoiles en pyramide

Bonjour,

Mon code souffre d'une petite imperfection : sur chaque ligne, il y a un espace supplémentaire.
Ainsi avec mon exemple de nb = 8 on peut voir que la ligne 8 commence par un espace...
Pour le rendre plus visible je remplace les espaces à afficher avant les étoiles par "!" :

***Algorithme lancé***
Nombre de lignes de la Pyramide ?
Entrer nb : 8
!!!!!!!!*
!!!!!!!***
!!!!!!*****
!!!!!*******
!!!!*********
!!!***********
!!*************
!***************

***Algorithme terminé***

Pour corriger cela, si on souhaite que la dernière ligne d'étoiles soit collée à la marge de gauche, alors
après la ligne nb_fin PREND-LA_VALEUR nb-ligne
il faut introduire un SI ALORS et placer la boucle espace dedans, comme montré par le code qui suit :

VARIABLES
    etoile EST_DU_TYPE NOMBRE
    ligne EST_DU_TYPE NOMBRE
    nb EST_DU_TYPE NOMBRE
    espace EST_DU_TYPE NOMBRE
    nb_fin EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
    AFFICHER "Nombre de lignes de la Pyramide ?"
    LIRE nb
    POUR ligne ALLANT_DE 1 A nb
        DEBUT_POUR
        nb_fin PREND_LA_VALEUR nb-ligne
        SI (ligne<nb) ALORS
            DEBUT_SI
            POUR espace ALLANT_DE 0 A nb_fin
                 DEBUT_POUR
                 AFFICHER " "
                 FIN_POUR
            FIN_SI
        POUR etoile ALLANT_DE 1 A 2*ligne-1
            DEBUT_POUR
            AFFICHER "*"
            FIN_POUR
        AFFICHER " "
    FIN_POUR
FIN_ALGORITHME
 

Ainsi je n'exécute la boucle espace que si le nombre d'espaces est supérieur à 0.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#8 09-03-2014 14:01:17

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [AlgoBox] Affichage d'étoiles en pyramide

Re,

Autre méthode avec manipulation de chaînes de caractères.
Je vais construire complètement chaque ligne : espaces + caractères avant de l'afficher :

VARIABLES
    n EST_DU_TYPE NOMBRE
    l EST_DU_TYPE NOMBRE
    ch_esp EST_DU_TYPE CHAINE
    ch_et EST_DU_TYPE CHAINE
    car EST_DU_TYPE CHAINE
DEBUT_ALGORITHME
    AFFICHER "Nombre de lignes de la Pyramide ?"
    LIRE n
    POUR ligne ALLANT_DE 1 A 2*n-1
        DEBUT_POUR
        ch_esp PREND_LA_VALEUR ch_esp+" "
        ch_et PREND_LA_VALEUR ch_et+"*"
        FIN_POUR
    POUR ligne ALLANT_DE 1 A n
        DEBUT_POUR
        car PREND_LA_VALEUR ch_esp.substr(0,n-l)+ch_et.substr(0,2*l-1)
        AFFICHER car
        FIN_POUR
FIN_ALGORITHME

n à la place de nb, l pour ligne, ch_esp pour chaîne d'espaces et ch_et pour chaîne d'étoiles
Lignes 10 à 14 :
* je construis une chaîne de 2*nb-1 espaces (il y en trop, mais ça n'a pas d'importance)
* je construis une chaîne de 2*nb-1 étoiles

Ligne 17 et 18
* dans la variable car je stocke, pour chaque ligne dégressivement, de nb-1 à 0 espaces suivies de 1 à 2*l-1 étoiles
* j'affiche la variable car et je coche Renvoi à la ligne
str est l'abréviation de l'anglais informatique string qui se traduit par chaîne.

substr est donc une sous-chaine extraite de la chaîne de référence ch_esp ou ch_et avec la syntaxe ch_esp.substr(position,longueur) et
ch_et.substr(position,longueur).

Sortie :

***Algorithme lancé***
Nombre de lignes de la Pyramide ?
Entrer n : 11
          *
         ***
        *****
       *******
      *********
     ***********
    *************
   ***************
  *****************
 *******************
*********************
 
***Algorithme terminé***

Ne pas se fier (en tout cas chez moi) à l'affichage AlgoBox :
De la ligne 1 à la ligne 3, les étoiles blanches, après elles sont jaunes et plus épaisses, ce qui donne l'impression qu'il manque une espace à chaque ligne de 1 à 3.

@+

Dernière modification par yoshi (09-03-2014 15:32:21)


Arx Tarpeia Capitoli proxima...

Hors ligne

#9 19-11-2015 23:13:37

kevh35
Invité

Re : [AlgoBox] Affichage d'étoiles en pyramide

Ce code est faussé le bon est :

exemple Création Pyramide  -  19.11.2015



1   VARIABLES
2     X EST_DU_TYPE NOMBRE
3     O EST_DU_TYPE NOMBRE
4     ligne EST_DU_TYPE NOMBRE
5     nb EST_DU_TYPE NOMBRE
6     nb_fin EST_DU_TYPE NOMBRE
7   DEBUT_ALGORITHME
8     AFFICHER "Hauteur de la pyramide (en ligne) ?"
9     LIRE nb
10    POUR ligne ALLANT_DE 0 A nb
11      DEBUT_POUR
12      nb_fin PREND_LA_VALEUR nb-ligne
13      POUR O ALLANT_DE 0 A nb_fin
14        DEBUT_POUR
15        AFFICHER "O"
16        FIN_POUR
17      POUR X ALLANT_DE 0 A 2*ligne-1
18        DEBUT_POUR
19        AFFICHER "X"
20        FIN_POUR
21      POUR O ALLANT_DE 0 A nb_fin
22        DEBUT_POUR
23        AFFICHER "O"
24        FIN_POUR
25      AFFICHER "O"
26      FIN_POUR
27  FIN_ALGORITHME
***Algorithme lancé***
Hauteur de la pyramide (en ligne) ?
Entrer nb : 10
OOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOXXOOOOOOOOOOO
OOOOOOOOOXXXXOOOOOOOOOO
OOOOOOOOXXXXXXOOOOOOOOO
OOOOOOOXXXXXXXXOOOOOOOO
OOOOOOXXXXXXXXXXOOOOOOO
OOOOOXXXXXXXXXXXXOOOOOO
OOOOXXXXXXXXXXXXXXOOOOO
OOOXXXXXXXXXXXXXXXXOOOO
OOXXXXXXXXXXXXXXXXXXOOO
OXXXXXXXXXXXXXXXXXXXXOO
***Algorithme terminé***

sa ne fais pas de déformation mais bien un carré quand on lance l'algorithme

#10 20-11-2015 14:44:34

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [AlgoBox] Affichage d'étoiles en pyramide

Bonjour cher invité,


kevh35 a écrit :

Ce code est faussé, le bon est :

Ah bon ???
Pourtant tu as écrit :

sa ne fais pas de déformation mais bien un carré quand on lance l'algorithme

Et l'énoncé demande :

"afficher une pyramide à n étages, n étant saisi par l'utilisateur,( ici avec 5 étages  )"

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

Une pyramide, pas un carré !"
"Ce code :  "ce" désigne quel code ? celui proposé par  l'auteur de la discussion ? Le mien ?
Celui de l'auteur de la discussion : il le savait, c'est pour ça qu'il a demandé de l'aide. Okayassu attendait aussi qu'on lui explique pourquoi son code ne fonctionnait pas comme attendu...
D'autre part, il ne fallait afficher que des étoiles...
Mon code ? Dans ce cas, les bras m'en tombent...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#11 15-01-2017 07:43:16

halal229
Invité

Re : [AlgoBox] Affichage d'étoiles en pyramide

bonjour! je voudrais savoir comment insérer des vides dans un algorithme  de pyramide

#12 15-01-2017 09:33:51

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [AlgoBox] Affichage d'étoiles en pyramide

Bonjour,


Par exemple pour le code du post #8 (aller y voir explications) :

VARIABLES
    n EST_DU_TYPE NOMBRE
    l EST_DU_TYPE NOMBRE
    ch_esp EST_DU_TYPE CHAINE
    ch_et EST_DU_TYPE CHAINE
    car EST_DU_TYPE CHAINE
DEBUT_ALGORITHME
    AFFICHER "Nombre de lignes de la Pyramide ?"
    LIRE n
    POUR ligne ALLANT_DE 1 A 2*n-1
        DEBUT_POUR
        ch_esp PREND_LA_VALEUR ch_esp+" "
        ch_et PREND_LA_VALEUR ch_et+"* "
        FIN_POUR
    POUR l ALLANT_DE 1 A n
        DEBUT_POUR
        car PREND_LA_VALEUR ch_esp.substr(0,n-l)+ch_et.substr(0,2*l-1)
        AFFICHER car
        FIN_POUR
FIN_ALGORITHME

Lignes 8 et 18 : cocher la case Retour à la ligne.
Je n'ai modifié que la ligne 13 :
ch_et PREND_LA_VALEUR ch_et+"*"  est devenue  ch_et PREND_LA_VALEUR ch_et+"* ".
J'ai ajouté une espace après l'étoile.

Sortie pour 8 lignes :

***Algorithme lancé***
Nombre de lignes de la Pyramide ?
       *
      * *
     * * *
    * * * *
   * * * * *
  * * * * * *
* * * * * * *
* * * * * * * *

***Algorithme terminé***

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#13 18-09-2020 20:55:35

sarahschm
Membre
Inscription : 18-09-2020
Messages : 1

Re : [AlgoBox] Affichage d'étoiles en pyramide

Bonjour,
comment est-ce que je fais la demi-pyramide
*
**
***
****
*****
******
*******
********
*********
**********

Hors ligne

#14 19-09-2020 10:53:48

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [AlgoBox] Affichage d'étoiles en pyramide

Bonjour,

Une demi-pyramide c'est deux fois plus simple qu'une pyramide entière.
Ligne 1 -> 1 étoile
Ligne 2 -> 2 étoiles
Ligne 3 -> 3 étoiles
......
Ligne n -> n étoiles

VERSION ALGOBOX
Demander le nb de lignes (nb_lignes)
Initialiser la chaîne de caractères etoiles comme une chaîne
Déclarer le compteur i du numéro du tour de la noucle
Ecrire une boucle allant de i =1 à nb_lignes
A chaque itération rajouter une étoile à ta chaîne
Imprimer la chaîne etoiles obtenue (ne pas oublier de cocher le retour à la ligne)

Ce qui donne avec AlgoBox :

VARIABLES
    nb_lignes EST_DU_TYPE NOMBRE
    etoiles EST_DU_TYPE CHAINE
    i EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
    AFFICHER "Nombre de lignes souhaité : "
    LIRE nb_lignes
    AFFICHER nb_lignes
    POUR ligne ALLANT_DE 1 A nb_lignes
        DEBUT_POUR
        etoiles PREND_LA_VALEUR etoiles+"*"
        AFFICHER etoiles
        FIN_POUR
FIN_ALGORITHME

Attention
AFFICHER "Nombre de lignes souhaité : " --> ne pas cocher la case retour à la ligne
AFFICHER nb_lignes --> cocher la case retour à la ligne
AFFICHER etoiles --> cocher la case retour à la ligne

Sortie

***Algorithme lancé***
Nombre de lignes souhaité : 12
*
**
***
****
*****
******
*******
********
*********
**********
***********
************

***Algorithme terminé***

VERSION Python :

etoiles=""
nb_lignes=int(input("Nombre de lignes souhaité : "))

for i in range(nb_lignes):
    etoiles += "*"
    print(etoiles)

Sortie

Nombre de lignes souhaité : 12
*
**
***
****
*****
******
*******
********
*********
**********
***********
************

Tu as tout compris ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

Pied de page des forums