Bonsoir à tous
J'ai un exercice de langage C. Voici l'énoncé
Ecrire un algorithme appelé Table qui permet d'afficher la table de multiplication d'un nombre entier supérieur ou égal à 1 donné par l'utilisateur.
L'utilisateur doit pouvoir recommencer plusieurs fois s'il le désire.
Voici ma méthode
# include < stdio.h >
int main( )
{
int a, n , i , rep;
rep ='0';
while (rep == '0')
{
printf( " Donnez un entier dont vous voulez afficher la table " ) ;
scanf( "%d" , &a ) ;
for ( i = 1 ; i <= n ; i = i + 1 )
n = a * i
printf( " voulez vous afficher la table de multiplication d'un autre nombre O/N " ) ;
scanf( "%c" , &reponse ) ;
fflush (stdin);
rep = getchar ();
{
fflush (stdin);
getchar ()
return 0;
{
je voudrais savoir est ce que c'est bien fait. Sinon qu'est ce qui ne va pas.
Il y a des erreurs d'accolades (parfois inversées ou inexistantes),
Tu calcule n mais tu n'en fais rien.
Il faut rajouter des commentaires de temps en temps, par exemple pour expliquer les parametres.
essais ce bout de programme car je n'ai pas de compilateur.
# include < stdio.h >
# include < conio.h >
int main( ) {
int Nombre, Produit , i, Imax, Choix;
Imax = 10;
do {
clrscr() ;
printf( " Donnez un entier dont vous voulez afficher la table " ) ;
scanf( "%d" , &Nombre) ;
printf(“ Table de multiplication du nombre %d\n“) ;
for ( i = 1 ; i <= Imax; i = i + 1 ) {
Produit = Nombre * i;
printf("%d * %d = %d\n", Nombre, i, Produit);
} /* Fin boucle de multiplication*/
printf("Tapez ‘Q' ou ‘q' pour quitter ou une autre touche pour continuer.\n" ) ;
Choix = getchar ();
} while (Choix <>'Q' && Choix <>'q');
exit(0);
}
Merci, j'ai testé le programme mais y a un problème à ce niveau: while (Choix <>'Q' && Choix <>'q');
#include <stdio.h>
#include <conio.h>
main( ) {
int Nombre, Produit , i, Imax, Choix;
Imax = 10;
do {
clrscr() ;
printf( " Donnez un entier dont vous voulez afficher la table " ) ;
scanf( "%d" , &Nombre) ;
printf(“ Table de multiplication du nombre %d\n“) ;
for ( i = 1 ; i <= Imax; i = i + 1 ) {
Produit = Nombre * i;
printf("%d * %d = %d\n", Nombre, i, Produit);
}; /* Fin boucle FOR de multiplication*/
printf("Tapez ‘Q' ou ‘q' pour quitter ou une autre touche pour continuer.\n" ) ;
Choix = getchar();
} while (Choix !='Q' && Choix !='q'); /* Fin Boucle DO-WHILE*/
return(0);
}
Bonjour,
Avant de rédiger un programme dans n'importe quel langage, il est préférable de faire un brouillon à l'aide d'un algorithme ! Algobox permet ce genre de travail avec l'immense avantage de tester l'algo pour vérifier qu'on obtient bien ce qu'on veut
puis on a le loisir de choisir une autre table ou de taper 0 pour arrêter le programme !
2 variables , un minimum de lignes difficile de faire plus minimaliste et moins gourmand en mémoire !
@jeveuxbientaider
Pour la boucle, vaut mieux utiliser l'instruction:
FAIRE
.....
TANT-QUE
Qui ne figure pas dans Algobox.
Pourrais-tu tester le bout de programme, car je n'ai pas de compilateur. Merci
#include <stdio.h>
#include <conio.h>
main( )
{
int Nombre, Produit , i, Imax, Choix;
Imax = 10;
do {
/*clrscr() ;*/
printf( " Donnez un entier dont vous voulez afficher la table " ) ;
scanf( "%d" , &Nombre) ;
printf("Table de multiplication du nombre %d\n", Nombre) ;
for ( i = 1 ; i <= Imax; i = i + 1 ) {
Produit = Nombre * i;
printf("%d * %d = %d\n", Nombre, i, Produit);
}; /* Fin boucle FOR de multiplication*/
printf("Tapez ‘Q' ou ‘q' pour quitter ou une autre touche pour continuer.\n" ) ;
Choix = getchar();
} while (Choix !='Q' && Choix !='q'); /* Fin Boucle DO-WHILE*/
return(0);
}
Il me semble que l'algo que j'ai donné utilise les boucles
Pour ....
Fin pour
et
Tant que ....
Fin de Tant que ....
Je ne comprends pas ta question !
Et je n'ai pas téléchargé de compilateur de langage C alors je ne peux pas te dire ! ...
Il était demandé un algo ... pas un programme en C :
@jeveuxbientaider
Effectivement l'algo utilise bien sûr la boucle TANT-QUE ...FAIRE et je trouve algobox bien et didactique, mais semble limité en fonctionnalité car pour cet exemple, je préfère utiliser la boucle FAIRE ... TANT-QUE car le test se fait en fin de boucle alors que pour TANT-QUE ...FAIRE, le test se fait en début de boucle.
La programmation en c offre plusieurs types de boucles
Boucle while correspond à
Tant que CONDITION FAIRE
....
FIN TANT QUE
Boucle [i]do{ ... }while( ... );[/i] correspond à
FAIRE
....
TANT QUE CONDITION
Si j'ai écris un programme, c'est parce que smir en a écrit un avec des erreurs, donc je suppose qu'il a un algorithme et qu'il est passé au stade programmation.
En ce qui concerne la longueur du programme, je préfère documenter le programme de façon qu'il soit didactique et compréhensible par autrui. Car il y a des programmeurs qui trouvent des difficultés à relire leur propre programme car il n'est pas documenté.
En ce qui concerne ton algorithme, il est très bien et tu peux constater qu'il calque sur le programme (car moi aussi j'ai fait un algorithme basé sur les fonctionnalité qu'offre le langage C.
Faisons avancer le Schmilblick
Pour moi, écrire un programme sans avoir fait un algo (documenté ou pas) est une aberration ! Comme taper un calcul sur sa calculatrice sans l'avoir formulé de façon précise sur son brouillon ! On voit combien de collégiens se jeter sur leur calculatrice pour obtenir un résultat ! Et quand on leur demande de rédiger sur papier le calcul qu'ils font faire , 9 fois sur 10 c'est un calcul qui va arriver à une réponse fausse !
Bonjour
si je peux me permettre de chicaner
pour moi une table de multiplication n'est pas une succession de multiples
j'aurais préféré un affichage de la forme
La page 4 de couverture des cahiers de brouillons ! j'en ai gardé pour faire des photocopies pour que les gamins que j'aide puissent faire un effort de mémoire !
j'ai toujours mes "cahiers mensuels" de l'école primaire .... certains problèmes de calcul qu'on nous donnait à faire au CE2 donneraient des cheveux blancs à bien des collégiens (et peut-être même à certains de nos récents bacheliers avec "menssion", comme ils sont allés s'en vanter sur twitter ...)
On ne va pas faire du HS ... mais cet affichage est possible dans tous les langages, il suffit juste de traduire correctement l'algorithme !
Bonjour, Razes le programme marche bien. Mais si on me demande d'entrer un nombre si je met 0 il m'affiche la table de multiplication de 0. Or l'énoncé précise ceci:la table de multiplication d'un nombre entier supérieur ou égal à 1 donné par l'utilisateur
Dans un algo , on commencerait par faire un test sur la validité de ce sui et saisi ... un entier , > 1 (si n >1 et partie entère de n = n ...)
Avec mon algo , si on saisit 0 au début , il s'arrête tout de suite puisqu'il commence par tant que n 0
Avec mon algo , si on saisit 0 à la première demande alors, on ne rentre pas pas dans la boucle Tant que ... donc le programme s'arrête !
Pour vérifier que le nombre n saisi est bien un entier supérieur à 1
Il faudrait vérifier que n > 1 et que la partie entière de n soit égale à n .... Je te laisse le soin de placer ces tests dans mon algo !
I y a du monde!!
Je n'ai jamais dit que je n'ai pas écrit l'algorithme, car le b.a.-ba dela programmation et c'est de mon algorithme que j'ai ces quelques lignes de programme
@smir
Si tu veux limiter la saisie, remplace la ligne scanf avec ce qui suit:
scanf("%n%*[1-10]", &Nombre);
I y a du monde!!
Je n'ai jamais dit que je n'ai pas écrit l'algorithme, car c'est le b.a.-ba de la programmation et c'est de mon algorithme que j'ai écris ces quelques lignes de programme
@smir
Si tu veux limiter la saisie, remplace la ligne scanf avec ce qui suit:
scanf("%n%*[1-10]", &Nombre);
Moi y'en avoir déjà dit : moi y'en pas avoir de compilateur de C ... Toi te débrouiller à faire la bonne traduction de mon algo !
je n'ai jamais programmé en C et je ne sais pas où il faut mettre les bon trucs au bon endroit !
Ce que tu as faire, c'est juste de la traduction mot à mot pas trop difficile.
Je ne te demande pas de conjuguer en espagnol le verbe faire à l'imparfait du subjonctif !
@jeveuxbientaider
Désolé de t'avoir demandé quoi que ce soit, je pensais que ce site constitue un endroit d'échange et de propositions afin d'aider ceux qui en ont besoin et pas un endroit où on essais d'imposer coute que coute sa vision.
Je t'avais dis sincèrement que ton algorithme était très bon, mais ceci ne diminue pas pour autant la qualité du mien et je ne suis pas intéressé par l'utilisation du tien. On peut avoir des divergences, des idées différentes et c'est là la richesse en confrontant les points de vues.
Dans mon algorithme, j'avais utilisé la boucle FAIRE ou REPETER ... TANT-QUE qui ne figure pas sur le site algobox, comme je l'avais posté à 14h15, au lieu de la boucle TANT-QUE ... FAIRE. La différence est la suivante.
Tu n'a jamais programmé en C. Avec ma modeste expérience (C, C++, BASIC, FORMS, DBASE, DBVISTA, PASCAL, FORTRAN, SMALLTALK, ADA, LISP, PROLOG, VISUAL BASIC, COBOL, ...) sur différents systèmes (VAX, UNIX, DOS et WINDOWS) je pense que j'ai une raison de défendre mon opinion sans minimiser la tienne.
Je t'ai juste répondu que je ne connaissais rien à la syntaxe de C , je ne sais pas où il faut mettre des { ou des } ou des , ou des ; ou d'autre trucs.
Si ton programme suit cet algo, il devrait répondre à tes questions ! Je n'ai rien jugé ni critiqué .... Même s'il semble que cet algo sort d'un site dont tu ne serais pas l'auteur ..... Mais bon ... bénéfice du doute ou de présomption d'innocence .... on est en démocratie !
Cet algo trouvé, quelque part sur le web, ne correspond pas vraiment à ta question : donner les tables de multiplication d'un nombre n saisi qui soit un entier supérieur à 1 ....
Alors à toi de modifier l'algo pour y répondre .... A plus quand tu auras réfléchi !
Jouer à la carte au trésor n'est plus de mon âge ...
La boucle Répéter .... je n'en ai jamais entendu parler ! depuis 50 ans que je suis dedans ! ....
C'est juste une autre façon d'écrire une boucle Tant que ....
Quelle que soit la forme .... il faut se demander ce qu'on obtient à la sortie de la boucle ...
Merci à vous deux, en tous cas moi j'ai bien bénéficié de vos différentes interventions.Et c'est ça l'objectif du site c'est de nous aider à avoir plusieurs méthodes et d'en choisir celles que nous sentons plus à l'aise.
Je reviens à Razes j'ai bien modifié le scanf comme indiqué dans ton message de 19h10? mais j'obtiens toujours le même résultat
@smir
Voici le programme rectifié pour éliminer le 0 et restreindre l'intervalle à
#include <stdio.h>
#include <conio.h>
main( )
{
int Nombre, Produit , i, Imax, Choix;
Imax = 10;
do {
/*clrscr() ;*/
printf( " Donnez un entier dont vous voulez afficher la table " ) ;
do {
scanf( "%d" , &Nombre) ;
} while ( Nombre<1 || Nombre >10) ; /* Fin Boucle DO-WHILE*/
printf("Table de multiplication du nombre %d\n", Nombre) ;
for ( i = 1 ; i <= Imax; i = i + 1 ) {
Produit = Nombre * i;
printf("%d * %d = %d\n", Nombre, i, Produit);
}; /* Fin boucle FOR de multiplication*/
printf("Tapez \'Q\' ou \'q\' pour quitter ou une autre touche pour continuer.\n" ) ;
Choix = getchar();
} while (Choix != 'Q' && Choix != 'q'); /* Fin Boucle DO-WHILE*/
return(0);
}
Citation en gras.
"Jouer à la carte au trésor n'est plus de mon âge ..." tu te dégonfle, présente alors tes excuses.
La boucle Répéter .... je n'en ai jamais entendu parler ! depuis 50 ans que je suis dedans ! ....
C'est juste une autre façon d'écrire une boucle Tant que .... Dans ce cas il te reste beaucoup à apprendre et pour t'aider voici quelques liens intéressants:
http://www.developpez.net/forums/d831846/autres-langages/algorithmes/c-quoi-difference-entre-tant-repeter-tant/
http://perso.limsi.fr/cecile/Enseignement/coursAlgo_V1.pdf
http://davsi.free.fr/algorithme.pdf
http://informatique.unidentified-one.net/documents/enseignantinfo/Ch.3_Les_structures_repetitives.pdf
Quelle que soit la forme .... il faut se demander ce qu'on obtient à la sortie de la boucle ... l'algorithme est afficher, tu peux le faire tourner à la main.
J'ai du respect pour les gens âgés, un peu comme moi, mais je n'ai pas de pitié pour la diffamation gratuite.
C'est juste la suite de l'image postée avec Comparaison de boucles ... qui m'a fait douté ...
C'est vrai que je connais la boucle Répéter ... tant que ...
Mais comme je n'aime pas l'utiliser, je l'avais rayé de mes connaissances ! Pourquoi rentrer au moins une fois dans une boucle quand on peut faire autrement ! Chacun a le droit de ses favoris !
@jeveuxbientaider
Bonsoir, la comparaison des boucles avec test avant ou test après existent partout et d'ailleurs, je t'ai envoyé des liens dont celui où la comparaison citée apparait clairement.
En algorithmique, il faut connaitre les deux. Parfois on est obligé de faire un traitement des données avant de les tester (Dans ce cas on utilise test après càd FAIRE...TANT-QUE) et parfois on teste les données avant de les traiter (Dans ce cas on utilise test avant càd TANT-QUE...FAIRE)
Pour moi, ce n'est pas question de favoris mais plutôt question de situation. Ils sont dans tous les langages:
Langage Pascal : http://pascal.developpez.com/cours/ptrau/?page=page_8
En ce qui concerne l'algorithme, c'est moi qui l'ai fait avec ses imperfections.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :