Multiplication d'une matrice par un scalaire

skrime Messages postés 4 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 12 janvier 2005 - 30 oct. 2004 à 18:26
Babilys Messages postés 1 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 16 juin 2005 - 16 juin 2005 à 13:45
Bonjour, j'ai un exercice à faire qui consiste à multiplier une matrice par un scalaire en C (la prof ne veut pas qu'on se serve des boucles FOR), je viens d'écrire ce programme qui m'a l'air bon, mais qui bug une fois que j'ai saisi la matrice et le scalaire !
Merci d'avance pour votre aide !
Voici le programme

// EXERCICE 2 : MULTIPLICATION D'UNE MATRICE PAR UN SCALAIRE //
#include <stdio.h>
#define nb_ligne 4
#define nb_colonne 4
typedef int TAB_BASE[nb_ligne][nb_colonne];
typedef int TAB_MULTI[nb_ligne][nb_colonne];

//Sous-programme de saisie de la matrice///////////////////////////////////
void saisie_matrice(TAB_BASE t)
{
int i = 0;
printf("Saisissez la matrice que vous souhaitez multplier par un scalaire\n");
while(i<nb_ligne)
{
int j = 0;
while(j<nb_colonne)
{
printf("Saisissez le champ [%d][%d] : ",i,j);
scanf("%d",&t[i][j]);
j = j+1;
}
i=i+1;
}
return;
}
/////////////////////////////////////////////////////////////////////////

//Sous-programme de saisie du scalaire///////////////////////////////////
int saisie_scalaire(int scalaire)
{
printf("Saisissez le scalaire que vous souhaitez multiplier par la matrice : ");
scanf("%d",scalaire);
return scalaire;
}
////////////////////////////////////////////////////////////////////////

//Sous-programme de multiplication de la matrice de base par le scalaire////
void multiplication(TAB_BASE t,int scalaire,TAB_MULTI m)
{
int i = 0;
while(i<nb_ligne)
{
int j = 0;
while(j<nb_colonne)
{
m[i][j]=t[i][j]*scalaire;
}
i=i+1;
}
return;
}
/////////////////////////////////////////////////////////////////////////

int main(void)
{
TAB_BASE t;
TAB_MULTI m;
int i,j,scalaire;
saisie_matrice(t);
saisie_scalaire(scalaire);
multiplication(t,scalaire,m);

//Affichage du produit scalaire//
printf("Le produit scalaire choisi est : %d",scalaire);
/////////////////////////////////

// Affichage de la matrice de base//
printf("La matrice de base est : \n");
i = 0;
while(i<nb_ligne)
{
j = 0;
while(j<nb_colonne)
{
printf("%d ",t[i][j]);
}
printf("\n");
i=i+1;
}
////////////////////////////////////

//Affichage de la matrice obtenue//
printf("La matrice obtenue est : \n");
i = 0;
while(i<nb_ligne)
{
j = 0;
while(j<nb_colonne)
{
printf("%d ",m[i][j]);
}
printf("\n");
i=i+1;
}
////////////////////////////////////

}
A voir également:

2 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
30 oct. 2004 à 22:51
Regarde, tu as un problème de portée de variable. Tu fais ceci:
multiplication(t,scalaire,m);

Ta variable m n'est pas modifié lors de la fonction multiplication.

Il faut déclarer ta fonction multiplication de la facon suivante. Tu as juste a changer:

void multiplication(TAB_BASE t,int scalaire,TAB_MULTI m)
{
int i = 0;
...

en

void multiplication(TAB_BASE t,int scalaire)
{
int i = 0;
...

Je pense que la, ca devrait marcher.
Personnellement, je trouve l'exercice d'une débilité :)
Puisqu'une boucle for, on peut très bien la faire avec un while.
0
Babilys Messages postés 1 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 16 juin 2005
16 juin 2005 à 13:45
Même en faisant ce que tu as dit Luthor (c'est à dire d'enlever le TAB_MULTI m)

cela ne marche pas; il me retourne 4 erreurs.

Ce que je ne comprend pas c'est qu'il faut bien retourné la table m
dans fonction vu qu'on l'appelle dans la fonction multiplication :/
0
Rejoignez-nous