Probleme compilateur en C

Fermé
Moustiquet Messages postés 212 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 27 juin 2011 - 18 nov. 2009 à 00:03
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 nov. 2009 à 06:30
Bonjour,
#include <stdio.h>
#include <stdlib.h> /*librairie standard en C*/
#include <time.h>/* pour la fonction time*/

/*Cette fontionne retourne un nombre choisi au hasard entre 2 bornes*/

int aleatoire (int borneInf, int borneSup) {
    return  rand()%  (borneSup - borneInf +1) - borneInf;
}
void afficher (int tableau [], int nbElem, int debut, int fin)
{  
     int i;
     printf ("liste des %d premiers et %d derniers elements:\n",debut, fin);
     for (i=0; i<nbElem; i++)
       if( i<debut || i >= nbElem-fin)
       printf("%4d)  %10d\n", i, tableau[i]);
       else
       if (i==debut)
       printf("%4d) ect...\n", i);
       printf("\n\n");
       }
       void determinerMinMax(int tableau[], int nbElem)
       {
            int i;
            int mini, maxi;
            mini= maxi= tableau[0];
            for (i-0;i<nbElem; i++)
            {
                if(tableau [i]<mini)
                mini=tableau[i];
                if (tableau[i]>maxi)
                  maxi=tableau[i];
                  }
            printf("Valeur la plus petite: %6d\n",mini);
            printf("Valeur la plus grande : %6\n", maxi);
            printf ("\n\n");
            }
            void trier  (int tableau[], int nbElem)
            {
                 int i, j, indMin;
                 int tempo;
                 for (i=0;i< nbElem - 1 ; i++)
                 {
       
                     indMin=1;
                     for(j=i + 1;j < nbElem;j++)
                     if(tableau[j]< tableau [indMin])
                     indMin=j;
              if (indMin != i){
              tempo =tableau[i];
              tableau[i]= tableau  [indMin];
              tableau [indMin]= tempo;
              }
              }
              }
              int main()
              {
       #define BORNE1   10000/*taillle du tableau*/
       const int BORNE2 = 9000,
              VAL_MIN=500,
              VAL_MAX = 30000;
              
       int valeur[BORNE1];
       int nbElem;/*nombre d'element du tableau*/
       int i;
       strans(time(0));
       nbElem=aleatoire(BORNE2,BORNE1);
       
       for(i=0;i< nbElem; i++)
       valeur[i]=aleatoire (VAL_MIN,VAL_MAX);
       
       afficher (valeur, nbElem, 5, 10);
       determinerMinMax(valeur, nbElem);
       trier (valeur, nbElem);
       afficher (valeur, nbElem, 7,3);
       printf("\n");
       system("pause");
       return 0;
       }


Dans ce programme le compilateur me renvoie ce message, mais je ne comprend pas ce qu'il veut dire

C:\DOCUME~1\Claude\LOCALS~1\Temp\ccSwaaaa.o(.text+0x28e) In function `main':
[Linker error] undefined reference to `strans' C:\DOCUME~1\Claude\LOCALS~1\Temp\ccSwaaaa.o(.text+0x28e) ld returned 1 exit status
Merci
A voir également:

3 réponses

Hello

Il semblerait que ton compilateur digère mal cet appel à une fonction strans(time(0)) au debut de main()
on a l'impression qu'il ne la connait pas.
je connais pas cette fonction et quand j'interroge ggogle, il semble pas la connaître
0
Une petite remarque en passant. Maintenant que tu commences à t'aguerrir en C, penses donc aux gens qui ne sont pas plongés dans ton code depuis des heures : essaies de le mettre en forme car ça leur facilite énormément la lecture.
Évidemment, les pro du C n'ont pas forcément besoin de cette présentation pour trouver le bug, mais comme des non-pro peuvent aussi chercher à te répondre, ça serait vraiment sympa d'avoir une petite pensée pour eux.

exemple de mise en forme:
#include <stdio.h>
#include <stdlib.h> /*librairie standard en C*/
#include <time.h>/* pour la fonction time*/
#define BORNE1   10000/*taillle du tableau*/

/*Cette fontionne retourne un nombre choisi au hasard entre 2 bornes*/

int aleatoire (int borneInf, int borneSup)
{
  return  rand()%  (borneSup - borneInf +1) - borneInf;
}

void afficher (int tableau [], int nbElem, int debut, int fin)
{  
  int i;
  printf ("liste des %d premiers et %d derniers elements:\n",debut, fin);
  for (i=0; i<nbElem; i++)
    if( i<debut || i >= nbElem-fin)
      printf("%4d)  %10d\n", i, tableau[i]);
    else
     if (i==debut)
       printf("%4d) ect...\n", i);
  printf("\n\n");
}

void determinerMinMax(int tableau[], int nbElem)
{
  int i;
  int mini, maxi;
  mini= maxi= tableau[0];
  for (i-0;i<nbElem; i++)
  {
    if(tableau [i]<mini)
      mini=tableau[i];
    if (tableau[i]>maxi)
      maxi=tableau[i];
  }
  printf("Valeur la plus petite: %6d\n",mini);
  printf("Valeur la plus grande : %6\n", maxi);
  printf ("\n\n");
}

void trier  (int tableau[], int nbElem)
{
  int i, j, indMin;
  int tempo;
  for (i=0;i< nbElem - 1 ; i++)
  {
    indMin=1;
    for(j=i + 1;j < nbElem;j++)
      if(tableau[j]< tableau [indMin])
        indMin=j;
    if (indMin != i)
    {
      tempo =tableau[i];
      tableau[i]= tableau  [indMin];
      tableau [indMin]= tempo;
    }
  }
}

int main()
{
  const int BORNE2  =  9000,
             VAL_MIN =   500,
             VAL_MAX = 30000;
  int valeur[BORNE1];
  int nbElem;/*nombre d'element du tableau*/
  int i;
  strans(time(0));
  nbElem=aleatoire(BORNE2,BORNE1);
  for(i=0;i< nbElem; i++)
  valeur[i]=aleatoire (VAL_MIN,VAL_MAX);
  afficher (valeur, nbElem, 5, 10);
  determinerMinMax(valeur, nbElem);
  trier (valeur, nbElem);
  afficher (valeur, nbElem, 7,3);
  printf("\n");
  system("pause");
  return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 nov. 2009 à 06:30
Salut,
Il suffit de lire le message même s'il n'est pas agréable à lire : [Linker error] undefined reference to `strans' On cherche donc à quelle ligne, cette fonction est utilisée.
Et là on trouve en début de main : strans(time(0)); fonction non standard.
Il s'agit de la fonction srand. Donc remplace strans(time(0)) par srand(time(NULL));

Cdlt
0