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
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
A voir également:
- Ptit prog C
- Robot prog - Télécharger - Édition & Programmation
- Prog dvb - Télécharger - Télévision
- Problème avec mon p'tit prog! ✓ - Forum PHP
- Aide pr premier pas en prog ✓ - Forum Programmation
- Probleme prog installation Jdownloader - Forum Logiciels
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
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.
Je l'ai fait à la volée comme ça, mais ça devrait marcher :)
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 :)
désolé , interdiction d'utiliser fflush et stdin , seulement printf et scanf , et quelques explications seraient les bienvenues aussi , merci .
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
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 :)
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 :)
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
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 :
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
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
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
merci
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
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 :
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
#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
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
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
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
3 août 2006 à 04:01
Ben en fait tu avais dit quand je tape 32 il affiche :
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...
Ensuite on compile et on exécute, et hop c'est dans la poche ;-)
Bonne chance
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
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
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 :)
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 :)