Probleme tableau en C

Résolu/Fermé
Coucou1504 Messages postés 60 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 12 février 2010 - 16 mai 2008 à 17:42
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 16 mai 2008 à 20:23
Bonjour,
j'ai un petit probleme avec les tableau en C
je m'explique mieux alors tout d'abord je dois programmer une fonction d'evaluation de polynome avec l'aide d'Hörner mais g des soucis de programmation en C. En effect je saisis mes nombres dans un tableau ( les coeff de mon polynome) mais comment faire pour les recupérer pour que je puisse les utilisé (faire des calculs!!)
voici mon code :
#include <stdio.h>
#include <stdlib.h>
#define k 10
int tab [k][k];

void saisir(int a,int b)
{
int* tableau = (int*)malloc(a * sizeof(int));


int i,c;
printf ("Veuillez saisir le degré du polynome (nbre compris entre 0 et 5!!:");
scanf("%d",&a);
getchar();
printf ("Veuillez choisir la valeur :");
scanf("%d",&c);
getchar();
if (a>5)
{
printf ("IMPOSSIBLE");
}
else
{
a=a+1;
for (i=0;i<a;i++)
{

printf ("Veuillez saisir les coeff de votre polynome!");
scanf("%d",tableau+i);
getchar();
}
}
for (i=0;i<a;i++)
printf("%d",tableau[i]);
printf("\n\n%d",tab[0][2]);
getchar();
}

int main()
{saisir(3,3);}
Je veux juste qu'on me reponde à ma questio je ne cherche pas la solution, la solution je la trouverai seule mais je bloque sur cet question!!!
Merci d'avance
Bonne soiréee!!

1 réponse

Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
16 mai 2008 à 20:23
Bonjour,


Je crois que j'ai compris la question...

Le problème serait de récupérer le tableau en dehors de la fonction de saisie ?

On pourrait envisager deux possibilités, la deuxième est souvent celle adoptée. (pour sa propreté et son extensibilité)

1)
On alloue un tableau dans lequel on stoque également la taille du tableau et la fonction retourne l'adresse du tableau :
int * saisir(...)

2)
On passe en argument les adresses de variables afin que la fonction puisse les remplir.

void saisir( int a, int b, int **ppiCoef, unsigned int *puTaille )
{
    ...

    *puTaille = 2;
    *ppiCoef = (int *) malloc( (*puTaille) * sizeof(int) );

    if ( *ppiCoef != NULL )
    {
        ...
    }
    else
    {// Memory allocation failed
        *puTaille = 0;
    }
    ...
}


int *tab;
unsigned int taille;

saisir( 3, 3, &tab, &taille );

...

if ( tab != NULL )
{
    free( tab );
}

En C les paramètres des fonctions sont des copies, si la fonction modifie son paramètre, elle ne modifie que sa copie personnelle. Ainsi on donne en paramètre l'adresse d'une variable. L'adresse elle même est une copie, mais la fonction peut écrire des données à cette adresse. (donc dans la variable dont l'adresse lui est donnée)

Juste deux petites remarques:
A chaque malloc doit correspondre un free
Saisir alloue un tableau de 3 (son paramètre) puis saisit une taille, puis écrit taille valeurs (jusqu'à 5) dans le tableau de taille 3

M.
0