melange des caracters dans un tableau en c

a marqué ce sujet comme résolu.

Bonjour, je voudrais avoir d’aide consernant mon programme en c jai fais un programme qui affiche un tableau de 208 elements doublé, je voudrais melanger lordre du tableau et stocker le resultat dans fichier. voici mon code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdarg.h>       
#include <string.h>
int main()
{
char *res[208], *tab[10],element[2];
    int    j=0,k=0,i;

    for(char c ='A';c<='Z'; c++)
    {
            for(char cc = 'A'; cc<='H';cc++)
            {
               element[0] = c;
               element[1] = cc;
               res[j] = element;
               printf("%s\n",res[j]);
               j++;

           }
   }
//printf("Nb éléments: %u\n", sizeof(res)/sizeof(*res));
    return 0;
    }

Édit modération : ajout du tag « c » et ajout des balises de code.

+0 -0

Bonjour,

Ton code est mal présenté.

Il y a forcément un problème de type dans ton code.

1
res[j] = element;

element, est un tableau de char. Ce n’est même pas un chaine puisque il n’y a pas de ’\0’ final. res est également un tableau de char. Donc res[j] est un … caractère. Soit sur 8bit. Donc le type ne colle pas.

Ligne suivante :

1
printf("%s\n",res[j]);

Ici tu utilises le format "%s" qui indique que tu veux afficher une chaine de caractère. Sauf que tu lui passes un caractère. Dans lequel tu as stocker un tableau de caractère (qui je le rappel, n’est pas une chaine valide …). En sommes, il n’y a aucun type qui colle.

Tes variables tab, i et k ne sont pas utilisées.

Ton main n’est pas un main standard du c, utilise plutôt celui-ci :

1
2
3
int main(void) {
    return EXIT_SUCCESS; // Tant qu'à faire, autant être propre
}

Je t’invite à re décrire ton problème en l’expliquant un peu plus clairement en soignant ta présentation.

+1 -0

je m’excuse, au faite les variable i et k ne font partis du code cest une erreur:si non le code affiche les 208 caracteres du tableau; cest la fonction me permetant de melanger le resultat que je cherche:

 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
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>       
#include <string.h>


int main()
{
char *res[208], element[2];
    int    j=0;

    for(char c ='A';c<='Z'; c++)
    {
            for(char cc = 'A'; cc<='H';cc++)
            {
               element[0] = c;
               element[1] = cc;
               res[j] = element;
               printf("%s\n",res[j]);
               j++;

           }
   }
//printf("Nb éléments: %u\n", sizeof(res)/sizeof(*res));
    return 0;
    }

et voici le resultat que sa donne: AA AB AC AD AE AF AG AH BA BB BC BD BE BF....ZA ZB..ZH

Édit modération : ajout des balises de code.

+0 -0

Ton code est tjrs mal présenté.

Apprendre à présenter ton post

Tu as un bouton pour pouvoir poster du code. Il suffit également de l’indenter un peu pour qu’il soit correctement afficher. Une troisième option est de rajouter :

1
2
3
4
5
~~~c
int main(void) {

}
~~~

Ici, tu remarqueras que j’ai rajouter ~~~c au début du code et ~~~ à la fin. Le code est alors bien présenté. Le résultat :

1
2
3
int main(void) {

}

Sache également, que tu as une option pour éditer tes postes, de manière à corriger justement ce type d’erreur ^^


Je réitère ma remarque. Ici, tu as donc bien char *res[208]. Le type est déjà un peu mieux. Mais tu n’affiches pas une chaîne de caractères. Et donc le printf ne fonctionne que par ta chance. element n’étant pas une chaîne de caractère mais un tableau de 2 caractères, tu ne devrais pas l’afficher avec printf.

De plus, …

1
res[j] = element;

Pour chaque ’j’.
Ainsi, chaque valeur de j contient l’adresse de element. C’est à dire quel contienne toutes la même adresse.

Pour t’en convaincre, à la fin de ton code, rajoute :

1
2
for(int i = 0; i < 208; i++)
   printf("%s\n", res[i]);

Par chance tu obtiendras une liste de ’ZH’. Ce qui indique que chaque case de res contient la même adresse.


Bref, l’algorithme pour mélanger un tableau se nomme algorithme P ou le mélange de Knuth (ou mélange de Fisher-Yates) …

Il est très simple et intuitif. Je te laisse chercher sur le net. (ou wikipédia)

Tu ne pourras l’utiliser que lorsque tu auras corriger ton problème de tableau (res). Profite s’en pour corriger ton problème de chaîne de caractère également … ;)

Bon courage.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte