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 :

Taille tableau par utilisateur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut Taille tableau par utilisateur
    Comment faire pour que l'utilisateur entre la taille d'un tableau à 2 dimensions?

    Par exemple, dans le main():
    demande dimmension du tableau(longueur, largeur)
    Creation du tableau (par l'intermediaire d'une fonction)

    J'aurais penser, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    printf("Dimension (long, larg): ");
    scanf("%d", &long);
    scanf("%d", &larg);
    create_table(long, larg);
    Par exemple, mais je ne sais comment faire

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Je ne suis pas sûr de comprendre ce qui te poses problèmes, c'est juste la définition de l'"objet" tableau à deux dimensions, ou c'est ce qui est donné par l'utilisateur ?

    Pour un tableau en deux dimensions, tu peux faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    typedef struct 
    {
     int * _tab;
     size_t _largeur;
     size_t _hauteur;
    } Tableau2D;
     
    int tableauInit(Tableau2D*);
    int tableauGetValue(Tableau2D*, unsigned int posx, unsigned int posy);
    void tableauSetValue(Tableau2D*, unsigned int, unsigned int, int value);
    int tableauDelete(Tableau2D*);
    size_t tableauGetHeight(Tableau2D*);
    size_t tableauGetWidth(Tableau2D*);
    Enfin, un truc du genre (avec éventuellement des modifications sur les types, genre mettre la position en nombre signée pour vérifier des erreurs de saisi...)

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par nicodn02
    Comment faire pour que l'utilisateur entre la taille d'un tableau à 2 dimensions?

    Par exemple, dans le main():
    demande dimmension du tableau(longueur, largeur)
    Creation du tableau (par l'intermediaire d'une fonction)

    J'aurais penser, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    printf("Dimension (long, larg): ");
    scanf("%d", &long);
    scanf("%d", &larg);
    create_table(long, larg);
    Par exemple, mais je ne sais comment faire
    Bin pour scanf il faut faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    printf("Dimension (lignes, cols): ");
    fflush (stdout);
    scanf("%d %d", &lignes, &cols);
    create_table(lignes, cols);
    Mais attention, il n'y a aucun contrôle sur les données entrées par l'utilisateur. On recommande en générale d'utiliser plutôt fgets pour récupérer les saisies utilisateur ou autre.

    J'ai viré et adapté tes noms, surtout à cause de la variable long qui est un mot clé du jeu donc qui est réservé, faire attention à ca serait déjà un bon début !

    A lire : http://emmanuel-delahaye.developpez....tes.htm#saisie
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    Que veut tu dire par utiliser les fgets? ( je suis novice, 1ere année mathématiques informatique)
    Ce que j'aimerais faire précisement c'est :
    un utilisateur entre le nb_col et le nb_lig pour un tableau, et par la suite, il y a création de ce tableau...
    (projet pour un puissance4, initialiser par des '-', mais sa c'est OK pour l'initialisation, mais par contre, pour les nb_col et nb_lig, jali ai mis en #define)

    je n'est pas très bien compris aussi le code avec la structure

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Typiquement, c'est comme ça (j'espère ne pas faire d'erreur) :

    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
    72
    73
    typedef struct 
    {
     int * _tab;
     size_t _largeur;
     size_t _hauteur;
    } Tableau2D;
     
    void tableauInit(Tableau2D* tableau, size_t largeur, size_t hauteur)
    {
      int i;
     
      /*on suppose interdit la création d'un tableau de taille nul*/
      if(largeur<=0 || hauteur <=0) {
       fprintf(stderr, "Probleme taille tableau");
       exit(EXIT_FAILURE);  
     }
     
     tableau->_largeur = largeur;
     tableau->_hauteur = hauteur;
     
     tableau->_tab = malloc(largeur * hauteur * sizeof(int));
     if(tableau->_tab == NULL) {
       fprintf(stderr, "Probleme allocation memoire");
       exit(EXIT_FAILURE);  
     }
     
     /*on initialise tout à 0*/
      for(i=0; i<largeur*hauteur)
        tableau->_tab[i] = 0;
    }
     
    int tableauGetValue(Tableau2D* tableau, unsigned int posx, unsigned int posy)
    {
     /*on peut également tester les bornes si on souhaite*/
     return tableau->_tab[_largeur * posy + posx];
    }
    void tableauSetValue(Tableau2D* tableau, unsigned int posx, unsigned int posy, int value)
    {
     tableau->_tab[_largeur * posy + posx] = value;
    }
     
    void tableauDelete(Tableau2D* tableau)
    {
     free(tableau->_tableau);
    }
    size_t tableauGetHeight(Tableau2D* tableau)
    {
     return tableau->_hauteur;
    }
     
    size_t tableauGetWidth(Tableau2D* tableau)
    {
     return tableau->_largeur;
    }
     
     
    int main(void)
    {
      Tableau2D montab;
       tableauInit(&montab, 10, 10);
     
       tableausetValue(&montab, 0,0,1);
     
       unsigned int i;
       unsigned int j;
       for(j = 0; j< tableauGetHeight(&montab);j++)
        for(i = 0; i< tableauGetWidth(&montab);i++)
          printf("%d ", tableauGetValue(&montab, i,j));
     
     tableauDelete(&montab);
     
     return EXIT_SUCCESS;
    }

  6. #6
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    En voici mon programme(extrait):
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    #include <stdio.h>
    #define nb_lig 6
    #define nb_col 7
     
    /* Initialisation de la grille par '.' */
    void initialisation_grille(char grille[nb_lig][nb_col]){
         int i, j;
     
         for (i=0; i<nb_lig; i++){
     
            for (j=0 ; j<nb_col; j++){
                grille[i][j]='.';
            }
     
         }
    }
     
     
     
    /* Affichage de la grille */
    void draw_grille(char grille[nb_lig][nb_col]){
    (...)
    }
     
     
     
     
    /* Fonction permettant de placer un pion verticalement selon la colonne choisit */
    int placer_pion(char grille[nb_lig][nb_col], int col, char pion){
    (...)
    }
     
     
     
     
    /* Test puissance 4 en ligne */
    int ligne4(char grille[nb_lig][nb_col], int num_lig, int num_col, char pion){
    (...)
    }
     
    /* Test puissance 4 en ligne */
    int colonne4(char grille[nb_lig][nb_col], int num_lig, int num_col, char pion){
    (...)
    }
     
    /* Test puissance 4 en diagonale decroissante "\" */
    int diagonale4_decroissante(char grille[nb_lig][nb_col], int num_lig, int num_col, char pion){
    (...)
    }
     
    /* Test puissance 4 en diagonale croissante "/" */
    int diagonale4_croissante(char grille[nb_lig][nb_col], int num_lig, int num_col, char pion){
    (...)
    }
     
    /* Fonction permettant de verifier la présence d'un puissance 4 dans la grille */
    int verif_puissance4(char grille[nb_lig][nb_col], int num_lig, int num_col, char pion){
        return ligne4(grille, num_lig, num_col, pion) ||
               colonne4(grille, num_lig, num_col, pion) ||
               diagonale4_decroissante(grille, num_lig, num_col, pion) ||
               diagonale4_croissante(grille, num_lig, num_col, pion);
    }
     
     
     
     
    /* Main */
    int main (void){
        char grille[nb_lig][nb_col];
        char pion_joueur;
        int nb_coup, i, j;
        int choix_col, num_col, horiz_col;
        int victoire=0;
     
        initialisation_grille(grille);
     
        nb_coup=1;
     
        /*boucle principale*/
        do{
     
           if (nb_coup%2==1){
                              pion_joueur='O';
                              }
           else{
                pion_joueur='X';
                }
     
           system("cls");
           draw_grille(grille);
     
           do{
              printf("Colonne : ");
              scanf("%d", &choix_col);
              }while(choix_col<1 || choix_col>nb_col);
     
           /* placement du pion*/
           num_col=choix_col-1;
           horiz_col=placer_pion(grille, num_col, pion_joueur);
     
           victoire=verif_puissance4(grille, horiz_col, num_col, pion_joueur);// Test de victoire
     
           nb_coup++;
           }while(nb_coup<=42 && victoire==0);// Nbre de cases jouables: 7*6=42cases jouables
     
           draw_grille(grille);
     
           if(nb_coup==43)
                           printf("match nul\n\n");
           else
               printf("Partie terminee: \"%c\" gagne la partie\n\n", pion_joueur);
     
           system("pause");
     
           return 0;
    }

  7. #7
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    dur dur à comprendre, surtout les exit , les malloc ... je n'est pas encore vu tout cela
    D'une facon simple (ou avec explication )comment incorporer dans mon code le faite que l'utilisateur puisse lui-même mettre les longueur du tableau?

    De même, il faut que je rempalce alors mes scanf par des fflush? (puisque je pensais que le scanf etait pour les int (nbres) )

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    fflush ne s'utilise pas sur des flux entrant (genre stdin) :

    http://c.developpez.com/faq/c/?page=...N_fflush_stdin


    Mon code, tu peux retirer les mallocs en mettant des tableaux fixes (si tu es débutant).

    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
     
    #define MAXTAILLE 100
     
    typedef struct 
    {
     int  _tab[MAXTAILLE];
     size_t _largeur;
     size_t _hauteur;
    } Tableau2D;
     
    void tableauInit(Tableau2D* tableau, size_t largeur, size_t hauteur)
    {
      int i;
     
      /*on suppose interdit la création d'un tableau de taille nul*/
      if(largeur<=0 || hauteur <=0) {
       fprintf(stderr, "Probleme taille tableau");
       exit(EXIT_FAILURE);  
     }
     if(largeur*hauteur>= MAXTAILLE)
     {
       fprintf(stderr, "Taille trop grande");
       exit(EXIT_FAILURE);
     }
     tableau->_largeur = largeur;
     tableau->_hauteur = hauteur;
     
     
     /*on initialise tout à 0*/
      for(i=0; i<largeur*hauteur)
        tableau->_tab[i] = 0;
    }
     
     
    void tableauDelete(Tableau2D* tableau)
    {
    }

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/12/2013, 11h43
  2. [AIX ksh] Trouver la taille occupée par utilisateur
    Par Alqualonde dans le forum AIX
    Réponses: 3
    Dernier message: 17/05/2010, 09h50
  3. Rendre modifiable un tableau par l'utilisateur
    Par josalco dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/11/2008, 19h40
  4. Ajuster la taille d'un tableau par rapport à la défintion d'écran
    Par ilcocodrillo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/06/2008, 11h42
  5. Definir la taille d'un tableau par programmation
    Par Manix dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/06/2005, 11h37

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