IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

affichage des éléments d'un tableau


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut affichage des éléments d'un tableau
    j'ai ecrit un programme pour m'afficher des nombre aléatoire de 0 à Nb-1 sans double une meme valeur deja affiche .mais sur 2 execution j'ai une bonne reponse à une il me double une valeur est ce que quel voit ou je me suis trompé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include<>
    #
    int fonct(int *tab, int p, int Nb,int s)
    { int index,i,Nbo;
      Nbo=0; i=0;
      while((Nbo<=p) && (i<Nb)) {
      if(tab[i]==0) Nbo=Nbo+1;
      i=i+1;
      if(s==(Nb-1)) 
       index=i-1;
    }
    printf("index=%d\n",index);
    return index;
    }
    int main(int argc, char *argv[])
    { 
    int *ta;
    int i,r,vic,s,Nb;
    srand( time(NULL));
    Nb=atoi(argv[1]);
    ta=(int*)calloc(Nb, sizeof(int));
    r=rand()%Nb; printf("premiere vic=%d\n",r);
    ta[r]=1;
    s=0;
    r=rand()%(Nb-1);
    printf("le r est :%d\n",r);
    while(s!=(Nb-1))
    {
            vic=fonct(ta,r,Nb,s);
             if(vic==Nb) ta[vic-1]=1; 
              else
               ta[vic]=1;
         for(i=0;i<Nb;i++)
         printf("ta[%d]=%d\n",i,ta[i]);
         s=s+1;
         printf("%d\n",s);
         r=rand()%(Nb-s);
         printf("le r de la boucle est:%d\n",r);
     }
    return 0; 
    }

  2. #2
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Salut,

    Le code n'est pas compilable, on ne peut pas tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    -------------- Build: default in test ---------------
    Compiling: main.c
    /home/odsen/prog/c/test/main.c:1:11: error: empty filename in #include
    /home/odsen/prog/c/test/main.c: In function 'fonct':
    /home/odsen/prog/c/test/main.c:12: warning: implicit declaration of function 'printf'
    /home/odsen/prog/c/test/main.c:12: warning: incompatible implicit declaration of built-in function 'printf'
    /home/odsen/prog/c/test/main.c: In function 'main':
    /home/odsen/prog/c/test/main.c:19: warning: implicit declaration of function 'srand'
    /home/odsen/prog/c/test/main.c:19: warning: implicit declaration of function 'time'
    /home/odsen/prog/c/test/main.c:19: error: 'NULL' undeclared (first use in this function)
    /home/odsen/prog/c/test/main.c:19: error: (Each undeclared identifier is reported only once
    /home/odsen/prog/c/test/main.c:19: error: for each function it appears in.)
    /home/odsen/prog/c/test/main.c:20: warning: implicit declaration of function 'atoi'
    /home/odsen/prog/c/test/main.c:21: warning: implicit declaration of function 'calloc'
    /home/odsen/prog/c/test/main.c:21: warning: incompatible implicit declaration of built-in function 'calloc'
    /home/odsen/prog/c/test/main.c:22: warning: implicit declaration of function 'rand'
    /home/odsen/prog/c/test/main.c:22: warning: incompatible implicit declaration of built-in function 'printf'
    /home/odsen/prog/c/test/main.c:15: warning: unused parameter 'argc'
    Process terminated with status 1 (0 minutes, 0 seconds)
    4 errors, 10 warnings

  3. #3
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut
    Après ajout de unistd.h, une de mes premières remarques est que tu n'initialises pas index dans fonct.

    Ce qui fait que tu peux très bien renvoyer une valeur aléatoire, qui est au dessus des bornes de ton tableau.

    En effet, la seule modification d'index dans fonc est uniquement si s == Nb - 1, or ni s, ni Nb ne sont modifiés. Dans ce cas, tu plantes forcément ensuite si index n'a pas une valeur correcte.
    Je pense que cela peut par ailleurs résoudre ton problème, puisque tu remplis ton tableau à l'aide d'index, et que d'après ce que j'ai compris, c'est lui qui te sers à vérifier si une valeur n'est pas déjà prise.

  4. #4
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    Si c'est compilable essaie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    #include<stdio.h>
    #include<time.h>
    #include<math.h>
    #include<stdlib.h>
    int fonct(int *tab, int p, int Nb,int s)
    { int index,i,Nbo;
      Nbo=0; i=0;
      while((Nbo<=p) && (i<Nb)) {
      if(tab[i]==0) Nbo=Nbo+1;
      i=i+1;
      if(s==(Nb-1)) if(s==(Nb-1)) 
        {if(tab[i]==0) index=i;} 
       else
       index=i-1;
    }
    printf("index=%d\n",index);
    return index;
    }
    int main(int argc, char *argv[])
    { 
    int *ta;
    int i,r,vic,s,Nb;
    srand( time(NULL));
    Nb=atoi(argv[1]);
    ta=(int*)calloc(Nb, sizeof(int));
    r=rand()%Nb; printf("premiere vic=%d\n",r);
    ta[r]=1;
    s=0;
    r=rand()%(Nb-1);
    printf("le r est :%d\n",r);
    while(s!=(Nb-1))
    {
            vic=fonct(ta,r,Nb,s);
             if(vic==Nb) ta[vic-1]=1; 
              else
               ta[vic]=1;
         for(i=0;i<Nb;i++)
         printf("ta[%d]=%d\n",i,ta[i]);
         s=s+1;
         printf("%d\n",s);
         r=rand()%(Nb-s);
         printf("le r de la boucle est:%d\n",r);
     }
    return 0; 
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut
    C'est peut-être compilable mais ça donne pas envie d'y jeter un coup d'oeil.
    boula je te répète qu'il faut indenter ton code pour qu'il soit plus plaisant à lire.

  6. #6
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    Compris la remarque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    int fon(int *tab, int Nb)
    { int i,index;
     for(i=0;i<Nb;i++){
       if(tab[i]==0) index=i;
     }
     return index;
    }
    int fonct(int *tab, int p, int Nb,int s)
    { int index,i,Nbo;
     Nbo=0; i=0;
     while((Nbo<=p) && (i<Nb)) {
       if(tab[i]==0) Nbo=Nbo+1;
       i=i+1;
       if(s==(Nb-1)) {if(tab[i]==0) index=i;} 
       else if(tab[i]==1) index=fon(tab,Nb);
     
     index=i-1;
     }
     printf("index=%d\n",index);
     return index;
    }
    int main(int argc, char *argv[])
    { int *ta;
     int i,r,vic,s,Nb;
     srand( time(NULL));
     Nb=atoi(argv[1]);
     ta=(int*)calloc(Nb, sizeof(int));
     r=rand()%Nb; printf("premiere vic=%d\n",r);
     ta[r]=1;
     s=0;
     r=rand()%(Nb-1);
     printf("le r est :%d\n",r);
     
     while(s!=(Nb))
       {
         vic=fonct(ta,r,Nb,s);
         if(vic==Nb) ta[vic-1]=1; 
      else
        ta[vic]=1;
         for(i=0;i<Nb;i++)
           printf("ta[%d]=%d\n",i,ta[i]);
         s=s+1;
         printf("%d\n",s);
         r=rand()%(Nb-s);
         printf("le r de la boucle est:%d\n",r);
       }
     return 0; 
    }

  7. #7
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut
    Petit cadeau pour aider à la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    #include<stdio.h>
    #include<time.h>
    #include<math.h>
    #include<stdlib.h>
     
    int fon(int *tab, int Nb)
    { 
    	int i,index;
     
    	for (i = 0; i < Nb; i++)
    		if (tab[i] == 0)
    			index = i;
     return index;
    }
     
    int fonct(int *tab, int p, int Nb,int s)
    {
    	int index,i,Nbo;
     
    	Nbo = 0;
    	i = 0;
    	while ((Nbo <= p) && (i < Nb)) 
    	{
    		if (tab[i] == 0)
    			Nbo = Nbo + 1;
    		i = i + 1;
       if (s == (Nb - 1))
    	{
    		if (tab[i]==0)
    			index=i;
    	}
    	else if (tab[i] == 1)
    		index = fon(tab, Nb);
     
    	index = i - 1;
    	}
    	printf("index=%d\n", index);
    	return index;
    }
     
    int	main(int argc, char *argv[])
    {
    	int *ta;
    	int i,r,vic,s,Nb;
     
    	srand(time(NULL));
    	Nb = atoi(argv[1]);
    	ta = (int*)calloc(Nb, sizeof(int));
    	r = rand() % Nb;
    	printf("premiere vic=%d\n", r);
    	ta[r] = 1;
    	s = 0;
    	r = rand() % (Nb - 1);
    	printf("le r est :%d\n", r);
     
    	while (s != (Nb))
    	{
    		vic = fonct(ta, r, Nb, s);
    		if (vic == Nb)
    			ta[vic-1] = 1; 
    		else
    			ta[vic] = 1;
    		for (i = 0; i < Nb; i++)
    			printf("ta[%d]=%d\n", i, ta[i]);
    		s = s + 1;
    		printf("%d\n", s);
    		r = rand() % (Nb - s);
    		printf("le r de la boucle est:%d\n", r);
       }
     return 0; 
    }
    C'est pas parfait, mais après, je peux pas faire grand chose de plus (Sous Notepad++ ca rend pas mal ^^)

    Sinon, tu n'as répondu à ma remarque Boula.

  8. #8
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    Meme prog erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Program received signal SIGSEGV, Segmentation fault.
    0x08049fd6 in proc_vic (k=4, index=3) at rando.c:140

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par boula
    Compris la remarque
    Euh bof...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
     
    int fon (int *tab, int Nb)
    {
       int i, index;
       for (i = 0; i < Nb; i++)
       {
          if (tab[i] == 0)
             index = i;
       }
       return index;
    }
     
    int fonct (int *tab, int p, int Nb, int s)
    {
       int index, i, Nbo;
       Nbo = 0;
       i = 0;
       while ((Nbo <= p) && (i < Nb))
       {
          if (tab[i] == 0)
             Nbo = Nbo + 1;
          i = i + 1;
          if (s == (Nb - 1))
          {
             if (tab[i] == 0)
                index = i;
          }
          else if (tab[i] == 1)
             index = fon (tab, Nb);
     
          index = i - 1;
       }
       printf ("index=%d\n", index);
       return index;
    }
     
    int main (int argc, char *argv[])
    {
       int *ta;
       int i, r, vic, s, Nb;
       srand (time (NULL));
       Nb = atoi (argv[1]);
       ta = (int *) calloc (Nb, sizeof (int));
       r = rand () % Nb;
       printf ("premiere vic=%d\n", r);
       ta[r] = 1;
       s = 0;
       r = rand () % (Nb - 1);
       printf ("le r est :%d\n", r);
     
       while (s != (Nb))
       {
          vic = fonct (ta, r, Nb, s);
          if (vic == Nb)
             ta[vic - 1] = 1;
          else
             ta[vic] = 1;
          for (i = 0; i < Nb; i++)
             printf ("ta[%d]=%d\n", i, ta[i]);
          s = s + 1;
          printf ("%d\n", s);
          r = rand () % (Nb - s);
          printf ("le r de la boucle est:%d\n", r);
       }
       return 0;
    }
    Quand à 'compilable', visiblement, tu n'écoutes pas ce qu'on te dis...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `fon':
    main.c:8: warning: 'index' might be used uninitialized in this function
    main.c: In function `fonct':
    main.c:19: warning: 'index' might be used uninitialized in this function
    main.c: At top level:
    main.c:41: warning: unused parameter 'argc'
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 3 warnings

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage des éléments d'un tableau
    Par digger dans le forum Langage
    Réponses: 2
    Dernier message: 20/10/2014, 20h48
  2. Réponses: 4
    Dernier message: 09/08/2006, 11h05
  3. Eviter l'affichage des éléments d'une liste déroulante
    Par auriolbeach dans le forum Access
    Réponses: 1
    Dernier message: 28/02/2006, 07h50
  4. [dom je pense]accéder à des éléments d un tableau sans id
    Par luta dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 07/02/2006, 15h31
  5. [C#] Affichage des lignes dans un tableau.
    Par maldufleur dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/04/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo