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 tableau


Sujet :

C

  1. #1
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut affichage tableau
    Bonjour,

    pour commencer je suis débutant. comme ça c'est clair, hehe
    j'ai essayé de faire un programme qui trie un tableau de trois valeurs diffèrentes de sorte a obtenir le drapeau hollandais.
    La compilation se passe bien, mais il ne se passe rien quand je lance le programme et je ne trouve pas l'erreur (ou ce qui manque) dans le programme.

    voici mon code:

    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
    #include <stdio.h>
     
     
    #define bleu 0
    #define blanc 1
    #define rouge 2
    #define n 20
     
     
    typedef struct stableau {int t[n]} tableau;
     
     
     
    void echanger (tableau p, int a, int b) /* je permute les cases a et b du tableau p */
    {
    	int c;
    	c = p.t[a];
    	p.t[a] = p.t[b];
    	p.t[b] = c;
    }
     
    int main ()
    {
    	int i;tableau p;int nb_b;int nb_r;int j;int k;
    	i = 0;nb_b = 0;nb_r = 0;
     
    	for (j=0;j<=n;j++)  /*ici je rempli mon tableau*/
    	{
    		p.t[j]=random() %3;
    	}
    	while(i<=n) /* ds le while je trie */
    	{
    		if (p.t[i] == bleu)
    		{
    			echanger (p,i,nb_b);
    			i++;
    			nb_b++;
    		}
    		if (p.t[i] == blanc)
    		{
    			i++;
    		}
    		if (p.t[i] == rouge)
    		{
    			echanger (p,i,(n-1)+nb_r);
    			i++;
    			nb_r;;
    		}
    	}
    	for (k = 0;k<=n;k++)  /* j'affiche mle tableau */
    	{
    		printf(" %d \n",p.t[k]);
    	}
    	return 0;
    }

    Quelqu'un peut-il me donner un tuyau ??

    Merci d'avance

  2. #2
    kap
    kap est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Par défaut
    il ne se passe rien quand je lance le programme
    peux-tu en dire d'avantage stp? l'echange n'a pas lieu ou tu ne vois pas à l'ecran tes printf?

  3. #3
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    je suis aussi debutant ...
    tout d'abord, je ne comprend pas l'interet d'utiliser une structure pour ton tableau ?
    ensuite, je pense que dans ta boucle while, s'il ne rencontre pas en premier element une des 3 couleurs, pas d'incrementation de i
    cela signifierais que ton tableau est mal rempli? (ou pas avec les valeurs attendu: 0 1 2)
    je te propose de commencer par sortir ton i++ des if, et de le mettre a la fin du while.
    tu peux en profiter pour afficher les 20 valeurs de ton tableau, histoire de controler.
    vois ce qu'il se passe

    note: j'ai fait l'année derniere un excercice similaire sur le tri de tableau, si je le retrouve, je le poste.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Dark_Ebola :
    tout d'abord, je ne comprend pas l'interet d'utiliser une structure pour ton tableau ?
    La raison probable , ou peut être inconsciente, est de passer ansi le tableau par copie, ce qui ici va lui poser des problèmes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void echanger (tableau p, int a, int b) /* je permute les cases a et b du tableau p */ 
    { 
       int c; 
       c = p.t[a]; 
       p.t[a] = p.t[b]; 
       p.t[b] = c; 
    }
    Ne fait... RIEN : p est une structure donc l'argument est passé par copie et tu as une copie du tableau que tu as enfouis dans la structure. Tu manipules la copie du tableau, pas l'original. Et la copie est détruite en sortie de fonction. L'original est inchangé!
    Donc deux solutions :
    La mauvaise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     la fonction renvoie p
    tableau echanger (tableau p, int a, int b) /* je permute les cases a et b du tableau p */ 
    { 
       int c; 
       c = p.t[a]; 
       p.t[a] = p.t[b]; 
       p.t[b] = c; 
       return p;
    }
     et à l'appel :
     p = echanger (p,i,nb_b);
    Ou mieux, tu passes l'adresse de la structure ou mieux encore tu désencapsule ton tableau de la structure (si tu n'as rien d'autre à mettre dedans) et tu passes le tableau directement

  5. #5
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    en effet, la fonction sert a rien (dans l'etat actuel)
    mais il dis:
    La compilation se passe bien, mais il ne se passe rien quand je lance le programme
    or, il devrais afficer le tableau non trié s'il n'y avait que ca ...
    je me demandais s'il n'y avait pas un probleme avec random ... ne doit il pas etre initialisé pour fonctionner correctement?

    je me souviens avoir eu un probleme du meme type suite a un ; vicieux glissé au milieu du code, qui faisait sauter l'initialisation de random.

    note: desolé de pourrir le topic avec mes questions, mais si ca peux faire avancer le schmlblik (et moi par la meme occasion).

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Dark_Ebola :
    mais il dis:
    La compilation se passe bien, mais il ne se passe rien quand je lance le programme
    On ne sait pas ce qu'il veut dire par là, mais je soupconne que la fenêtre " Dos" doit se refermer aussi sec.
    Dans ce cas, il lui faut ajouter en fin de main un getchar() ou un system("pause")
    Ceci ne change rien aux erreurs de programmation signalées.

Discussions similaires

  1. affichage tableau associatif
    Par Dargos dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/07/2006, 15h21
  2. [MySQL] Problème affichage tableau PHP avec données SQL
    Par akalaan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 14h34
  3. Affichage tableau
    Par lazzeroni dans le forum BIRT
    Réponses: 1
    Dernier message: 13/04/2006, 09h31
  4. affichage tableau
    Par rdams dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/02/2006, 11h15
  5. [Tableaux] affichage tableau
    Par klimero dans le forum Langage
    Réponses: 4
    Dernier message: 12/01/2006, 15h47

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