Besoin d'aide pour un escalier

Besoin d'aide pour un escalier - C - Programmation

Marsh Posté le 02-12-2009 à 13:28:34    

Voila je débute en C et j'aimerais construire un escalier de cette forme :
 
*****
       *****
               *****
                       *****
                               **********
                                               *****
                                                       *****      
                                                               *****
                                                                       *****
 
explications : l'utilisateur peut choisir le nombre de marche voulu par  d'étage voulu (nombre de marche par étage) le nombre d'étoile par marche ainsi que le nombre d'étage .
A chaque fin d'étage se trouve un palier qui fait 2 fois la longueur d'une marche. j'ai pratiquement reussi sauf que arrivé aux autres étages le décalage n'y est plus et mon second étage revient au début . Voici mon code :
 
#include <stdio.h>
#include <stdlib.h>
int l,cptl,esp,cptesp,h,cpth,cptet,et,cptpal,pal,es,cptes;
int main()
{
  printf("%s","entrez la valeur de la largeur d'une marche et la hauteur d'un etage et le nombre d'etage souhaite" );
  scanf("%d%d%d",&l,&h,&es);
   
  /*répétition d'un étage*/
  cptes=0;
  while(cptes<es){
  /*Faire un étage*/
  cpth=1;
  while(cpth<h+1){
  esp=(cpth*(l-1));
  /*largeur d'une marche*/
  cptl=0;
  while(cptl<l){
  printf("%s","*" );
  cptl=cptl+1;
  }
  printf("\n" );
   
  cptesp=0;
  while(cptesp<esp){
  printf("%s"," " );
  cptesp=cptesp+1;
  }
  cpth=cpth+1;
  }
  /*fin de l'étage*/
  /*palier*/
  pal=(l*2);
  cptpal=0;
  while(cptpal<pal){
  printf("%s","*" );
  cptpal=cptpal+1;
  /*fin palier*/
}
cptes=cptes+1;
}                
  printf("\n" );
  system("PAUSE" );  
  return 0;
}
 
 
je travail avec dev c++ et programme en c.
 
Merci d'avance de votre aide.
 

Reply

Marsh Posté le 02-12-2009 à 13:28:34   

Reply

Marsh Posté le 02-12-2009 à 13:32:15    

désolé le code posé ce dessus était incomplet il manqué une ligne voici le bon code :
 
#include <stdio.h>
#include <stdlib.h>
int l,cptl,esp,cptesp,h,cpth,cptet,et,cptpal,pal,es,cptes;
int main()
{
  printf("%s","entrez la valeur de la largeur d'une marche et la hauteur d'un etage et le nombre d'etage souhaite" );
  scanf("%d%d%d",&l,&h,&es);
   
  cptes=0;
  while(cptes<es){
  /*Faire un étage*/
  cpth=1;
  while(cpth<h+1){
  esp=(cpth*(l-1));
  /*largeur d'une marche*/
  cptl=0;
  while(cptl<l){
  printf("%s","*" );
  cptl=cptl+1;
  }
  printf("\n" );
   
  cptesp=0;
  while(cptesp<esp){
  printf("%s"," " );
  cptesp=cptesp+1;
  }
  cpth=cpth+1;
  }
  /*fin de l'étage*/
  /*palier*/
  pal=(l*2);
  cptpal=0;
  while(cptpal<pal){
  printf("%s","*" );
  cptpal=cptpal+1;
  /*fin palier*/
}
  printf("\n" );
  cptes=cptes+1;
}                
  printf("\n" );
  system("PAUSE" );  
  return 0;
}

Reply

Marsh Posté le 02-12-2009 à 16:39:17    

Salut
 
en vrac:
utilise les balises code

Code :
  1. printf("%s","*" );

est equivalent à

Code :
  1. printf("*" );


Code :
  1. cptesp=0;
  2.   while(cptesp<esp){
  3.   printf("%s"," " );
  4.   cptesp=cptesp+1;
  5.   }

est equivalent à

Code :
  1. for (cptesp = 0; cptesp<esp; cptesp++)
  2.     printf(" " );


Quels profs te font utiliser des variables globales?

Code :
  1. system("PAUSE" );

berk, voici le résultat chez moi:

Citation :

sh: PAUSE: command not found


 
Bon pour répondre au problème, moi je stockerais dans une variable (locale ;) ) appelée nbEspaces (par ex) le nombre d'espaces à afficher avant une marche/palier. A chaque marche j'ajouterais largeurMarche à cette variable et à chaque palier je lui ajouterais 2*largeurMarche.
Puis avant chaque affichage de marche/palier, j'aficherais nbEspaces espaces
En gros je pense que cela correspond à ta variable esp sauf qu'il faut en conserver sa valeur et simplement l'augmenter à chaque marche.
 


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 02-12-2009 à 17:41:03    

je dois donc sourtir la valeur espace de la boucle?

Reply

Marsh Posté le 02-12-2009 à 17:48:03    

ptitchep a écrit :

Code :
  1. printf("%s","*" );

est equivalent à

Code :
  1. printf("*" );



 
tant qu'à faire, autant utiliser puts, dans ce genre de cas, ou même putchar


---------------
last.fm
Reply

Marsh Posté le 02-12-2009 à 19:09:23    

putchar oui, mais puts ajoute un retour à la ligne.
 
Oui tu dois la "sortir de la boucle", elle ne doit pas être réinitialisée mais sa valeur doit augmenter constamment.


---------------
deluser --remove-home ptitchep
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed