Table ASCII et langage c

Fermé
stark173 Messages postés 105 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 6 février 2015 - Modifié par blux le 16/12/2013 à 15:15
stark173 Messages postés 105 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 6 février 2015 - 16 déc. 2013 à 17:15
Bonjour, j'ai un problème en langage c.

J'ai créer un générateur de nombre aléatoire qui vient placer les nombres tirés dans une grille. Voici le code de ma fonction aléatoire:

int aleatoire()
{
printf("\n--------------------------------------------------------------------------------\n\n");
    printf("-------------------Bonjour et Bienvenue dans le jeux du Loto-------------------\n\n");
    printf("\n--------------------------------------------------------------------------------\n\n");
int tab[MAX]={0},i,numero_tire; //Je crée un tableau que j'initialise à zero, ainsi que deux entiers : i et numerotire//

int num[MAX]={0}; //J'initialise un deuxième tableau à zero, il permettra au numéro tiré de prendre la valeur 1//



int grillesymboles[90]={NULL}; //Je créer la grille qui va contenir les "0" de la grille en début de jeux//
int A, B; //Ces deux entiers représentent les lignes et les colonnes de la grille précédemment introduite//
srand(time(NULL)); //Je crée la fonction random permettant de créer des nombres aléatoires//

printf("Pour realiser un tirage appuyez sur une ENTREE\n\n"); // Je demande à l'utilisateur d'appuyer sur n'importe quelle touche affin de lancer le premier tirage//

for(i=0;i<MAX;i++)
   {getch();
numero_tire=(rand() % (MAX-MIN+1));// Pour i allant de zero à MAX(90), la fonction random va générer quatre vingt dix nombres aléatoires//



while(num[numero_tire]==1)   //Si jamais on avait déjà entrée cette valeur, on recommence//
         {int aleatoire();
   tab[i]=(rand() % (MAX - 1 +1));
   numero_tire=tab[i];
         }
grillesymboles[numero_tire]=numero_tire +1; // Affiche le numéro tiré danS la grille des symboles//

   printf("La boule qui est tiree est : la boule %d\n\n",numero_tire +1); // J'affiche le numéro tire//
   printf("\n--------------------------------------------------------------------------------\n\n");
   num[numero_tire]=1;//on entre 1 dans le 2eme tableau si c'est un nombre qu'on utilise pour la 1ere fois, si non il y a un zéro//

   int compteur = 0;
   for(B=0; B<9; B++)
   {
       for(A = 0; A<10; A++) //J'incrémente A et B afin de créer les lignes et les colonnes//
       {
           printf(" %3d",grillesymboles[compteur]); //J'affiche la grille initiale//
           compteur ++;
       }
       printf("\n\n");
   }
printf("\n--------------------------------------------------------------------------------\n\n");
printf("\n\nPour realiser un tirage appuyez sur une touche\n\n"); // Je demande à l'utilisateur d'appuyer sur n'importe quelle touche
printf("\n--------------------------------------------------------------------------------\n\n");
}
return numero_tire;
}




Cette fonction aléatoire marche parfaitement.

J'ai également créé une fonction pour écrire chaque chiffre avec une table ASCII. Voici par exemple comment je fais le zéro :

void chiffre0()
    { int i = 0, j = 0;
    char chiffre0[5][3];
    chiffre0[0][0] = 219;
    chiffre0[0][1] = 219;
    chiffre0[0][2] = 219;
    chiffre0[1][0] = 219;
    chiffre0[1][1] = 255;
    chiffre0[1][2] = 219;
    chiffre0[2][0] = 219;
    chiffre0[2][1] = 255;
    chiffre0[2][2] = 219;
    chiffre0[3][0] = 219;
    chiffre0[3][1] = 255;
    chiffre0[3][2] = 219;
    chiffre0[4][0] = 219;
    chiffre0[4][1] = 219;
    chiffre0[4][2] = 219;
    for (i = 0 ; i < 5 ; i++ )
        { printf("\n");

    for (j = 0 ; j < 3 ; j++)
        { printf("%c", chiffre0[i][j]); } }
    printf("\n");
    printf("%c",chiffre0[i][j]); }





Le problème que je rencontre est comment rentrer ce chiffre zéro dans la fonction aléatoire?

Je ne sais pas si je suis très clair?

Merci à tous ceux qui seront apporter une réponse à mon problème

3 réponses

stark173 Messages postés 105 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 6 février 2015
16 déc. 2013 à 15:54
Personne n'a de solution?
0
Utilisateur anonyme
16 déc. 2013 à 16:15
salut,

Ta question n'est pas claire ... mais si tu veux donner la valeur retourner par la fonction à chaque case du tableau il te suffit de faire


chiffre0[0][0] = aleatoire();
chiffre0[0][1] = aleatoire();
chiffre0[0][2] = aleatoire();
.
.
.


Ou alors c'est autre chose?

naga
0
stark173 Messages postés 105 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 6 février 2015
16 déc. 2013 à 16:18
Merci pour ta réponse, mais je pense que tu as mal compris (je me suis mal exprimé).
Je possède 10 fonctions (1 pour chaque chiffres comme celle que je t'ai montrée avec le zéro).
Ces fonctions me permettent de faire les chiffres de 0 à 9. Et donc je me suis dis que je pouvais faire également tous les nombres rien qu'avec ces 10 fonctions. Ce que je voudrai faire c'est, afficher les numéros qui ont étés tirés (à l'aide de la fonction aléatoire) avec ces dix fonctions.

Je ne sais pas si j'arrive à me faire comprendre.
0
donc pour chaque tableau d'entier (que tu nomme chiffreN), tu souhaiterai tirer un numéro ? j'avous avoir un peu de mal à tilter, et je vois pas trop la relation avec la table ascii (?)

De même, tua s 10 fonction, ce sont toutes les même ? Il n'y a pas de valeur renvoyé, je suppose donc que la sélection aléatoire se fera au sein de ces fonctions?

EDIT : Concernant ce que tu nomme 'table ascii', en fait, tu fais un tableau de char ou un tableau d'entier, la seule relation qu'il y ai c'est simplement qu'un caractère correspond à une valeur entier (et donc qu'une valeur entière représente un caractère), mais il n'y a pas de gestion de ta part à ce niveau là d'autant plus que tu déclare un tableau de caractère , que tu implémente avec des entier => pourquoi le 219 et 255? vu qu'ils ne représente pas de caractère numérique( '0','1', etc.)
0
stark173 Messages postés 105 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 6 février 2015
16 déc. 2013 à 16:45
Bon je vais essayer d'être plus clair, mais j'avoue que c'est pas facile à comprendre:
J'ai une fonction qui réalise 90 tirages de 90 numéros. Le problème viens de mon printf : "La boule tirée est....) En effet, je ne veux pas que le numéro affiché soit affiché "normalement" mais grace à la table ASCII. Dans cette dernière il y a deux carractères qui m'ont permis de faire le zéro ainsi que tous les autres chiffres. il s'agit du 219 qui colore un bloc et le 255 qui ne le colore pas. En fonction de si le bloque est coloré ou pas, j'arrive à faire tous les chiffres (c'est une sorte d'amas de blocs si tu veux). Cet amas de bloque forme le chiffre voulu.

Mon problème est que par exemple lorsque ma fonction aléatoire sort le chiffre 0, il ne me la sort pas de la façon que je voudrai: avec la fonction chiffre0.
En gros je souhaite changer l'affichage de chaque nombre tiré et faire un affichage qui ressemble à celui d'un réveil (de façon digital si tu préfère et non pas comme l'affichage du clavier d'un ordinateur). C'est pour ça que j'ai crée les 10 fonctions qui représentes les 10 chiffres de 0 à 9.

Voila, je ne sais pas si c'est plus clair
0
Utilisateur anonyme
16 déc. 2013 à 16:57
oui avec les explication de dal j'ai pigé =D

mais comme il a dit, la solution actuel ne te permet pas d'afficher


90


mais


9
0

en fait il faut que tu détermine si chaque chiffre de ton numéro "tiré" correspond à une dizaine, et le prendre en compte dans l'affichage (n'oublie pas qu'il sagit de console, tu ne peux pas, sauf preuve du contraire, "remonter" et éditer une ligne)
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 089
Modifié par [Dal] le 16/12/2013 à 16:41
Salut stark173,

Tu crées une fonction
void affiche(int numero_tire)
que tu appelles au lieu de ton
printf("La boule qui est tiree (...)
, où tu transformes numero_tire en une chaîne de caractères, par exemple avec sprintf, ou snprintf, puis tu boucles sur les caractères de la chaîne, pour les afficher à ta façon en appelant ta fonction correspondante.

void affiche(int numero_tire)
{
    char st[BUFSIZ];
    snprintf(st, BUFSIZ, "%d", numero_tire);

    int n = 0;
    while (st[n] != '\0')
    {
        switch (st[n])
        {
        case '0':
            chiffre0();
            break;
        case '1':
            chiffre1();
            break;
            /* etc. */
        default:
            /* cas impossible, gérer l'erreur */
            break;
        }
        n++;
    }
}


Mais il y a des chances que cela ne soit pas très beau, et tes numéros s'afficheront les uns en dessous des autres, vu comment tu as conçu
chiffre0();


Dal
0
Utilisateur anonyme
16 déc. 2013 à 16:44
mmmmh donc l'idée c'est qu'en fonction du numéro tiré, on affiche un tableau ... ? j'arrivais pas à comprendre x)
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 089
Modifié par [Dal] le 16/12/2013 à 16:50
je crois qu'il veut afficher le numéro tiré en gros, comme là pour le chiffre zéro, sauf qu'ici il fait autrement.

et je crois aussi qu'à 16:45, il n'a pas vu mon post de 16:40.
0
stark173 Messages postés 105 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 6 février 2015
16 déc. 2013 à 16:49
Merci Dal mais c'est quoi BUFSIZ?
0
Utilisateur anonyme
16 déc. 2013 à 16:51
ok je comprends, d'ou le 219.

J'étais pas partis dans le sens ou son "chiffre0" concerné uniquement un affichage mais en relisant c'est de ma faute ^^. Donc en effet un switch devrai lui convenr ^^
0
stark173 Messages postés 105 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 6 février 2015
16 déc. 2013 à 16:52
Oui mais je ne comprend pas très bien celui de DAL
0