Table de multiplication

Résolu/Fermé
elhit
Messages postés
9
Date d'inscription
samedi 15 novembre 2014
Statut
Membre
Dernière intervention
5 janvier 2015
- 15 nov. 2014 à 23:39
sambia39
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
- 16 nov. 2014 à 15:22
bonsoir tout le monde je suis débutante en C j'ai écrit un programme qui affiche la table de multiplication de 6 7 8 9 avec la mise en forme suivante:
I 1 2 3 4 5 6 7 8 9 10
------------------------------------------
6 I 6 12 18 24 30 36 42 48 54 60
7 I 7 14 21 28 35 42 49 56 63 70
8 I 8 16 24 32 40 48 56 64 72 80
9 I 9 18 27 36 45 54 63 72 81 90
voilà le programme je sais pas ou se trouve le problème :
#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,j;
char I;
printf(" I 1 2 3 4 5 6 7 8 9 10");
printf("--------------------------------");

printf("6789");
printf("IIII");

for(i=1; i<=10;i++)

{for(j=6; j<=9; j++)

{printf("%d%d",i*j);}

}

return 0;
}
et merci d'avance.
A voir également:

4 réponses

Lerendra
Messages postés
408
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
28 mai 2018
296
16 nov. 2014 à 01:02
Coucou jeune aventurière !
Je pense que tu devrais d'abord commencer par l'algo puis ensuite faire le programme en c.

Exemple ALGO
Programme Multiplication

var:
	entier i <- 1
	entier j <- 6
	entier k <- 1
	entier l <- 1

debut
	Afficher ("I 1 2 3 4 5 6 7 8 9 10\n")
	Afficher ("--------------------------------\n")
	Tant que (j <= 9) faire
		Tant que (i <= 10) faire
			si (l <> 2) alors
				Afficher ("{}  ", j)
				incr l
			finsi
			k <- j*i
			Afficher ("{} ", k)
			incr i
		Fintantque
		Afficher ("\n")
		i <- 1
		l <- 1
		incr j
	Fintantque

fin


Puis ensuite, une fois que celà te semble correct, code le en langage c


int main ( int argc, char *argv[] )
{
	long i = 1 ;
	long j = 6 ;
	long k = 1 ;
	long l = 1 ;
 
	printf ( "I 1 2 3 4 5 6 7 8 9 10\n" ) ; 
	printf ( "--------------------------------\n" ) ; 
	while ( j <= 9 ) 
	{
		while ( i <= 10 ) 
		{
			if ( l != 2 ) 
			{
				printf ( "%d  " , j ) ; 
				l++ ;
			}
			k = j * i ;
			printf ( "%d " , k ) ; 
			i++ ;
		}
		printf ( "\n" ) ; 
		i = 1 ;
		l = 1 ;
		j++ ;
	}
 

	pause ( ) ;

	return 1 ;
 }


Voilà, si tu as des question, n'hésites pas !
0
elhit
Messages postés
9
Date d'inscription
samedi 15 novembre 2014
Statut
Membre
Dernière intervention
5 janvier 2015

16 nov. 2014 à 02:06
a quoi sert main ( int argc, char *argv[] ) et quelle différence avec main()?
0
Lerendra
Messages postés
408
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
28 mai 2018
296
16 nov. 2014 à 02:14
C'est pour plus tard (récupérer des valeurs et autre) ! Tu peux utiliser juste main() pour l'instant ! :)
0
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 808
16 nov. 2014 à 12:21
Dans ce genre de code, il vaut mieux utiliser des boucles for qui sont plus lisibles.
Sinon, au niveau du code :
printf ( "%d " , j ) ;
Si j est un long, il faut mettre %ld pour afficher
De même pour les autres printf().

return 1 ;
Plutôt return 0; pour signaler que tout s'est bien déroulé.
0
elhit
Messages postés
9
Date d'inscription
samedi 15 novembre 2014
Statut
Membre
Dernière intervention
5 janvier 2015

16 nov. 2014 à 01:56
bonjour Lerendra ,
notre prof nous dit tjrs que les algorithmes ne sont pas uniques et j'ai essayé de faire la même démarche qui ma conduit au programme que j'ai postulé je l'ai corrigé et ça marche et avec votre programme aussi merci infiniment .
0
Lerendra
Messages postés
408
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
28 mai 2018
296
16 nov. 2014 à 02:15
Ah je ne dit pas le contraire, c'est quoi j'ai marqué : "Exemple ALGO " pour dire qu'il n'y a pas que celui-la !
0
Lerendra
Messages postés
408
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
28 mai 2018
296
16 nov. 2014 à 02:17
Mais tu es sur d'avoir compris mon code, car c'est vrai que quand je vois ton code de départ... :s Si tu as besoins d'autre chose! :) N'hesite pas !
0
elhit
Messages postés
9
Date d'inscription
samedi 15 novembre 2014
Statut
Membre
Dernière intervention
5 janvier 2015

16 nov. 2014 à 02:56
vraiment j'ai pas compris cette étape
if ( l != 2 )
{
printf ( "%d " , j ) ;
l++ ;
}
0
Lerendra
Messages postés
408
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
28 mai 2018
296
16 nov. 2014 à 03:22
Alors c'est pour le coefficient multiplicateur 6 7 8 !

6 I 6 12 18 24 30 36 42 48 54 60
7 I 7 14 21 28 35 42 49 56 63 70
8 I 8 16 24 32 40 48 56 64 72 80
9 I 9 18 27 36 45 54 63 72 81 90

J'ai mis une condition pour qu'il apparaît qu'une fois !
Sinon, sa donnerait :

6 I 6 6 6 12 6 18 6 24 6 30 6 36 6 42 6 48 6 54 6 60
7 I 7 7 7 14 7 217 28 7 35 7 42 7 49 7 56 7 63 7 70
8 I 8 8 8 16 8 24 8 32 8 40 8 48 8 56 8 64 8 72 8 80
9 I 9 9 9 18 9 27 9 36 9 45 9 54 9 63 9 72 9 81 9 90

Donc :
 if ( l != 2 ) 
{ 
printf ( "%d " , j ) ; 
l++ ; 
}

Sa donne en francais :
Je donne un entier l. Pour éviter que mon 6 (multiplicateur) se répète, je me une condition en sorte qu'il apparaisse qu'une fois. Une fois la condition passé, j'augmente l'entier l avec
 l++ ;
. Du coup, l devient égale à 2, il ne va donc pas rentrer dans la condition et donc plus afficher le 6 (multiplicateur) Une fois que la boucle est fini, il ne faut pas oublier de remettre l à 1,
l = 1 ;
pour qu'il puisse revenir dans la condition est afficher le 7 (multiplicateur). Et ainsi de suite.

Voilà ! :)
0
Lerendra
Messages postés
408
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
28 mai 2018
296
16 nov. 2014 à 03:26
Les profs sont pas très performant ! Des fois, ils ont du mal a expliquer, voir même, ils savent même pas ou il y a une erreurs. Les Bases sont EXTREMEMENT important en C. Donc si jamais tu as un doute, un truc que tu comprend, un exo.
Tu es en quoi ? BTS ?
0
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 808
16 nov. 2014 à 12:17
Bonjour,

printf("6789");
printf("IIII");

L'erreur vient de là principalement. Tu affiches 6789 puis IIII sans aller à la ligne.
Il faut prendre l'affichage ligne par ligne. Donc, 6 I 6 12 18 ...
Etc.

Attention, tu as mélangé les boucles for i et j. Il faut d'abord traiter les lignes (donc i=6 jusqu'à i=9) puis les colonnes (j=1 jusqu'à j=10).

{printf("%d%d",i*j);}
Tu peux faire for i=0 (au lieu de i=1).
Ensuite, dans le for j=6..., tu peux faire un if (i==0), on affiche "j" puis "I" sinon i*j.
Attention, ce n'est pas %d%d qu'il faut afficher mais simplement %d (i*j donne un int, donc %d).

Note : char I;
Ca ne sert à rien.

Ce qui donnerait après plusieurs corrections :
#include <stdio.h>

int main(void) {
    int i;

    printf("   I");
    for (i=1; i<=10; i++) {
        printf(" %2d", i);
    }
    printf("\n----------------------------------\n");

    for(i=6; i<=9;i++) {
        int j;
        printf("%2d I", i);
        for(j=1; j<=10; j++) {
            printf(" %2d",i*j);
        }
        putchar('\n');
    }

    return 0;
}
0
elhit
Messages postés
9
Date d'inscription
samedi 15 novembre 2014
Statut
Membre
Dernière intervention
5 janvier 2015

16 nov. 2014 à 13:33
salut fiddy je vois que mon code nécessite beaucoup de correction merci beaucoup
mais pourquoi vous avez met putchar('\n'); au lieu de printf("\n")?
0
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 808
16 nov. 2014 à 13:35
putchar('\n') fait la même chose que printf("\n"); c'est juste un peu plus performant. Mais si tu connais pas, ne t'embête pas et utilise printf("\n"); ;-)
0
elhit
Messages postés
9
Date d'inscription
samedi 15 novembre 2014
Statut
Membre
Dernière intervention
5 janvier 2015

16 nov. 2014 à 13:57
merci beaucoup maintenant j'ai bien compris
0
Lerendra
Messages postés
408
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
28 mai 2018
296
16 nov. 2014 à 15:06
J'avoue que son code est mieux. J'ai toujours eut un petit recule sur les boucles for (Même si elles sont extrêmement utilisé XD) J'ai voulu simplifier au maximum, vu qu'elle débute.
0
sambia39
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
47
16 nov. 2014 à 15:22
Oui, je te l'accorde for pour ce genre d'exercice est un peu extrême, de plus je me demande pas si avec mon exemple "pointeur" je n'ai pas compliqué les choses, enfin juste qu'elle comprenne c'est déjà ça
0
sambia39
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
47
16 nov. 2014 à 14:42
Bonjour
Moi je dirais qu'il est trop lourd comme algorithme ( celui de @Lerendra ) de plus deux boucles "Tant que" suffis pour réaliser le programme.
Dont une qui parcourra un tableau contenant les multiples
et la seconde qui se charge de faire la multiplication.
En plus claire cela donnerais le codes ci-dessous comme exemple ( attention en peut mieux faire en évitant l'utilisation des pointeurs )de plus j'ai volontairement opté pour cette démo en plus et mis les variables dans un tableau de façon à ne pas modifier le bloc d'instructions finales.
Mais j'ai une préférence pour le code de @fiddy qui est mieux conçu que le mien (+1)
à bientôt
#include <stdio.h>

int main( void ){

	//Variables
	unsigned int i = 0;
	unsigned int *p = NULL;
	unsigned int iTab[] = { 1, 6, 1, 1, 2 , 1, 2, 7 };
	p = iTab;	//Alias

	//
	printf( "NB\t|\t1 \t\t2 \t\t3 \t\t4 \t\t5 \t\t6 \t\t7 \t\t8 \t\t9 \t\t10\n" );
	printf( "\n" );

	while( *p ){

		printf( "[ %d ]\t", *p );
		while( (i++) != 10 ){
			printf( "\t%d\t", (i *(*p) ) );
		}

		i = 0;
		printf("\n");
		p++;
	}

	return( 0 );
}


à bientôt
0