Ptit prog C

Fermé
marina - 31 juil. 2006 à 23:40
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 - 3 août 2006 à 09:15
Bonjour , voilà je voudrais faire un programme en C tt simple qui fait uniquement une chose :

si par exemple au clavier j'entre 32 , il doit m'afficher un ptit rectangle de 'o' de largeur 3 et de hauteur 2 , comme ceci :

ooo
ooo

est ce que c'est faisable avec printf et scanf ?

merci
A voir également:

9 réponses

Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
1 août 2006 à 09:12
Salut. C'est assez facile à faire, mais le plus simple c'est de rentrer chaque chiffre séparément.
int main()
{
   int a,b,i,j;
   printf("Largeur ?");
   fflush(stdin);
   scanf("%d",&a);
   printf("Longueur ?");
   fflush(stdin);
   scanf("%d",&b);
   for (i=0 ; i<b ; i++)
   {
      for (j=0 ; j<a ; j++)
         printf("o");
      printf("\n");
   }
   return 0;
}

Je l'ai fait à la volée comme ça, mais ça devrait marcher :)
0
désolé , interdiction d'utiliser fflush et stdin , seulement printf et scanf , et quelques explications seraient les bienvenues aussi , merci .
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
2 août 2006 à 09:25
Bah suffit de jarter fflshu(stdin); c'est juste une sécurité (ça vide le tampon, donc si on a tappé des trucs avant, ça ne sera pas pris en compte).

Quant aux explications ma foi, c'est assez bateau hein :
- un printf pour afficher à l'écran du texte (on demande la largeur, puis la longueur)
- un scanf pour récupérer le chiffre tappé et on le stocke dans a ou b (toujours mettre une adresse pour scanf, donc soit un pointeur vers un entier, soit l'adresse de l'entier avec &)
- ensuite on boucle sur la longueur (nombre de lignes)
- dans chaque ligne, on affiche autant de "o" que spécifié dans la largeur (la deuxième boucle for).
- le \n sert à passer à la ligne, une fois qu'on a atteint le bout chaque ligne (on sort de la deuxième boucle for pour rentrer dans l'itération suivante de la première boucle, qui compte le nombre de lignes affichées).

Voila, j'espère que ce sera plus clair. Le int main() et return 0; est juste la pour respecter la norme, on peut très bien faire void main() mais c'est pas conforme :)
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
2 août 2006 à 09:29
Tu peux supprimer l'instruction fflush qui ne sert qu'à améliorer la présentation et qui n'a pas de rôle crucial dans le fonctionnement. Je trouve un peu bizarre de dire interdiction d'utiliser stdin car en fait :
scanf("%d",&a) <=> fscanf(stdin,"%d",a)

donc de toutes façons tu l'utilises mais de manière transparente. Je t'invite à lire les pages de man :
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/fflush.3.html
http://www.linux-france.org/article/man-fr/man3/scanf-3.html

Dans le programme de Darshu celui-ci commence par demander la largeur (a) et la longueur (b) du rectangle. Ensuite il écrit 'a' fois 'o', revient à la ligne ce qui correspond à une ligne de ton rectangle. Puis il répète ca 'b' fois afin de reconstituer les 'b' lignes du rectangles. Au final tu obtiens bien un rectangle de dimension b*a.

Bonne chance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mais je ne comprends le printf(largeur ?) du départ , il ne sert à rien ? et pourquoi y a t'il 2 scanf ?

merci
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
3 août 2006 à 00:48
Il sert juste à écrire sur la console que l'utilisateur doit saisir la largeur. Mais informatiquement parlant c'est son unique rôle. Les scanf correspondent respectivement à la saisie des deux dimensions de ton rectangle (largeur hauteur). En fait il a écrit un programme plus générique que ce que tu as demandé. Dans ton cas on aurait pu faire :
#include <stdio.h>

int main(){
  int x;
  scanf("%d",&x);
  if(x==32) printf("ooo\nooo\n");
  return 0;
}

si on se limite strictement à l'énoncé. Mais si tu saisis 145 c'est un tableau 1x45 ou un tableau 14x5 ? Bref c'est pour ca qu'il fait deux scanf....

Bonne chance
0
je souhaite simplement un programme qui quand je rentre 2 chiffres à l'écran il m'affiche le rectangle correspondant , par exemple 85 me donnerait un rectangle de largeur 5 o sur 8 lignes.

int main(){
int x;
scanf("%d",&x);
if(x==32) printf("ooo\nooo\n");
return 0;
}

Alors tu définis une seule variable ok , ensuite le &x dans le scanf çà veut dire quoi , et le if( x==32) , que signifie le 32 ? et pour finir les ooo , nooo je ne vois absolument pas à quoi ils correspondent , je n'arrive pas du tout à comprendre une seule ligne ou logique de ton code , peux tu expliquer ton code ?

merci
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
3 août 2006 à 04:01
Ben en fait tu avais dit quand je tape 32 il affiche :
ooo
ooo

Donc c'est ce que ce programme fait :-) Car le caractère \n c'est en fait le retour à la ligne.

Voici le programme exactement tel que tu l'as demandé, j'ai essayé de le commenter au maximum donc j'espère que tu comprendras tout. Mais si ce n'est pas le cas n'hésite pas à poser tes questions...
#include <stdio.h>

int main(){
  unsigned int x,nb_ligne,nb_colonne,i,j;
  // Demander la valeur à l'utilisateur
  scanf("%d",&x);

  //Recuperer le chiffre des dizaine
  nb_colonne = (unsigned int) x/10;

  //Recuperer le chiffre des unités
  nb_ligne = x-10*nb_colonne;

  // Vérifier que les valeurs sont correctes
  if(nb_ligne <=0 || nb_ligne >=10){
    printf("Nombre de ligne invalide\n");
    return 1;
  }
  if(nb_colonne <=0 || nb_colonne >=10){
    printf("Nombre de colonne invalide\n");
    return 1;
  }

  // Dessiner le rectangle
  for(i=0;i<nb_ligne;++i){
    for(j=0;j<nb_colonne;++j){
      printf("o"); // On écrit au tant de 'o' qu'il y a de colonnes
    }
    printf("\n"); // Retour à la ligne
  } // Et ainsi de suite pour chaque ligne
  return 0;
}

Ensuite on compile et on exécute, et hop c'est dans la poche ;-)

Bonne chance
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
3 août 2006 à 09:15
Hum, le prend pas mal, mais dans quel contexte tu dois faire ce programme ? Parce que la c'est vraiment le basique du basique ... Le &var indique l'addresse de la variable var, au lieu de son contenu (que l'on appelle par 'var' tout simplement).

Et comme le faisait remarquer mamiemando, si tu tappes 145 ça veut dire 14*5 ou 1 * 45 ? Avec son programme, tu considères qu'il y a toujours moins de 10 lignes à afficher. En faisant la saisie séparée de la largeur et de la hauteur, tu évites cette confusion possible, notamment si tu veux plus de 10 lignes en hauteur.

Enfin bref, tout est fait la maintenant :)
0