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

  1. #1
    Membre régulier 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
    Points : 97
    Points
    97
    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
    Points : 9 818
    Points
    9 818
    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...)
    Je ne répondrai à aucune question technique en privé

  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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    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 régulier 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
    Points : 97
    Points
    97
    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
    Points : 9 818
    Points
    9 818
    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;
    }
    Je ne répondrai à aucune question technique en privé

  6. #6
    Membre régulier 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
    Points : 97
    Points
    97
    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 régulier 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
    Points : 97
    Points
    97
    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
    Points : 9 818
    Points
    9 818
    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)
    {
    }
    Je ne répondrai à aucune question technique en privé

  9. #9
    Membre régulier 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
    Points : 97
    Points
    97
    Par défaut
    Le exit est pareil que un return , mais por un void ? (arret de la fonction, non?)

    Pourrais-tu m'expliquer :
    [ code ]
    fprintf(stderr, "Taille trop grande");

    le stderr??

    De plus, je n'est pas encore appris cette notation en ce qui concerne les struc :

    [ code ]
    tableau->_largeur = largeur;
    tableau->_hauteur = hauteur;

    la ->

    et sa fait quoi en faite ?

    Et sinon, coment faire apres, dans mon main, par exemple, je demande a l'utilisateur de entrez les valeurs, et apres, comment je l'ai envoy ? a la struc non?

  10. #10
    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
    Points : 9 818
    Points
    9 818
    Par défaut
    Je crois qu'il faut que tu lises quelques cours de C.

    stderr est le flux de sortie d'erreur, c'est un flux non bufferisé, cela signifie que l'instruction fprintf(stderr, "machin"); affichera tout de suite machin.

    Un flux de sortie peut être vidé dans 3 cas :
    - le buffer est plein, il se vide (pour stderr, il est toujours plein donc ça se vide tout de suite)
    - la présence du caractère de retour à la ligne \n
    - le forcage du vidage avec fflush

    Essaye ça et tu comprendras à quoi il sert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    printf("salut");
    /* ça, c'est une instruction de pro :aie:*/
    *((int*) 0) = 12;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tableau->_largeur = largeur;
    tableau->_hauteur = hauteur;
    Ca, ça permet d'accèder aux éléments de la structure, mais c'est la notation lorsque tableau correspond à un pointeur. C'est équivalent à : (*tableau)._hauteur
    Je ne répondrai à aucune question technique en privé

  11. #11
    Membre régulier 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
    Points : 97
    Points
    97
    Par défaut
    Je viens plus ou moins de comprendre
    Et sinon, comment faire, dans mon programme, pour que l'utilisateur puisse lui même entrer les longueur + largeur du tableau, en passant par une structure?

  12. #12
    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
    Points : 9 818
    Points
    9 818
    Par défaut
    Si tu tiens à utiliser scanf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct {
     int mavariable;
    } MonType;
     
    MonType montype;
    scanf("%d", &montype.mavariable);
    Je ne répondrai à aucune question technique en privé

  13. #13
    Membre régulier 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
    Points : 97
    Points
    97
    Par défaut
    merci
    alors si je créer une structure telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct taille_tableau{
    int nb_colonnes;
    int nb_lignes;
    }
    et dans mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    taille_tableau taille_grille;
    scanf("%d", &taille_grille.nb_colonnes);
    scanf("%d", &taille_grille.nb_lignes);
    Mais comment par la suite générer un tableau avec la taille que l'utilisateur à définit? (je suppose qu'il faut déclarer un tableau dans ma structure, mais je ne voit pas du tout)

  14. #14
    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
    Points : 9 818
    Points
    9 818
    Par défaut
    Non, fais comme ça et utilise le type que j'ai défini au dessus :

    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
     
    int largeur;
    int hauteur;
    Tableau2D tableau;
     
     
    scanf("Rentre la largeur : %d", &largeur);
    scanf("Rentre la largeur : %d", &hauteur);
     
    if(largeur<=0 || hauteur<=0) {
     fprintf(stderr, "Tu écris vraiment n'importe quoi !");
     exit(EXIT_FAILURE);
    }
     
    tableauInit(&tableau, largeur, hauteur);
     
    tableauSetValue(&tableau, 0,0,5);...
     
    tableauDelete(&tableau);
    Je ne répondrai à aucune question technique en privé

  15. #15
    Membre régulier 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
    Points : 97
    Points
    97
    Par défaut
    voici la fonction me permettant d'initialiser ma grille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /* 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]='.';
            }
     
         }
    }
    La structure serait alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct {
     int nb_col;
     int nb_lig;
    } taille_tableau;
    et dans mon main, je demande si il veut ou pas personnalisé les "distances" du tableau
    et si oui, je lui demande par lintermédiaire du scanf que j'envoy les données dans ma struct

    Mais apres??

    (Dur Dur de comprendre, surtout le jour de la reprise )

  16. #16
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Pourquoi pas faire directement une structure contenant les tailles des dimensions de celui-ci ET le tableau dynamique lui même ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct {
     int nb_col;
     int nb_lig;
     
     int ** tab;
    } s_tableau;
    C'est tellement plus simple et pratique de regrouper les données ainsi !

    En considérant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    tableau.tab = malloc (tableau.nb_lig * sizeof (* tableau.tab));
     
    if (tableau.tab != NULL)
    {
       int i = 0;
       for (i = 0; i < tableau.nb_lig; i++)
       {
          tableau.tab[i] = malloc (tableau.nb_col * sizeof (** tableau.tab));
       }
    }
    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 !

  17. #17
    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
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par Franck.H
    Pourquoi pas faire directement une structure contenant les tailles des dimensions de celui-ci ET le tableau dynamique lui même ?
    Tu as mal lu la première page C'est ce que j'ai essayé d'expliquer depuis le début en proposant même le code source d'un "objet" Tableau (avec ou sans malloc vu qu'il connaissait pas)
    Je ne répondrai à aucune question technique en privé

  18. #18
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Franck.H
    Pourquoi pas faire directement une structure [...] !
    Peut-être qu'il ne les a pas encore vu et qu'il essaye simplement de faire ce que vous lui dites. Si ce n'est pas encore vu en cours, il vaut mieux éviter nicodn02 de les utiliser.

    Vous ne devriez pas lui donner des longs morceaux de codes déjà écrit.
    Ça ne va pas aider nicodn02 à apprendre.

    En fait ce qui te pose problème c'est de le créer c'est ça ?
    Est ce que tu as vu l'allocation dynamique de mémoire ?
    Si oui, tu comprends que tu vas devoir utiliser malloc ?

    Tu recherches donc une fonction qui prendrait en paramètre
    la longueur, la largeur, mais aussi le pointeur du tableau puisque
    tu veux lui donner une nouvelle valeur (au pointeur).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void creer_nouveau_tableau(int longueur, int largeur, int **tab)
    { 
    ... 
    }
    Est-ce bien ça ?

    Donc maintenant ta question c'est : « qu'est ce que je met dans la fonction ? »

    Si j'ai bien compris, alors je commencerais par cette question :

    si tu n'avais pas à le mettre dans une fonction saurais-tu le faire ?
    C'est-à-dire, saurais tu remplacer la ligne « création du tableau » en utilisant malloc ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    const int longueur = XXXX;
    const int largeur = XXXX;
    int ** tableau ;
     
    // création du tableau
    Dis nous si ça va trop vite ou pas, ou si je suis complétement à côté de la plaque

  19. #19
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par millie
    Tu as mal lu la première page C'est ce que j'ai essayé d'expliquer depuis le début en proposant même le code source d'un "objet" Tableau (avec ou sans malloc vu qu'il connaissait pas)
    Et y'avait un problème particulier ? C'est du dynamique quoi qu'il en coûte alors je vois pas 36 solution et celle là c'est la meilleure ou du moins la plus logique comme tu avais montré avec le tableau statique

    S'il comprend pas qu'il dise ce qu'il comprend pas mais ce sont des concepts à maîtriser (tableaux dynamiques, pointeurs, alloc dynamique, etc...) donc il faut insister et non pas contourner le problème
    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 !

  20. #20
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Franck.H
    Et y'avait un problème particulier ? C'est du dynamque quoi qu'il en coûte alors je vois pas 36 solution et celle là c'est la meilleure ou du moins la plus logique comme tu avais montré avec le tableau statique

    S'il comprend pas qu'il dise ce qu'il comprend pas mais ce sont des concepts à maîtriser (tableaux dynamiques, pointeurs, alloc dynamique, etc...) donc il faut insister et non pas contourner le problème
    Non il ne faut pas forcément insister. Il y a un rythme à son cours. Et aller trop vite pour briser la cohérence de celui-ci. Donc il vaut mieux aller à sa vitesse, et ne surtout pas lui imposer des choses auquel il n'a eu aucune introduction.

    Soyons Zen : pour répondre à une question, posons une autre question !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

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