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 :

Tableau à deux dimensions


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Tableau à deux dimensions
    es-ce que quelqu'un peut m’éclaircir cet question :

    Demander a l'utilisateur de saisir les dimensions d'un tableau a deux dimensions.

    ces dimensions pourront etre stockées dans deux pointeurs de type entier (int  *L et int  * C) que l'on passe en parametre de la fonction.

    j'ai essayer avec le code suivant,le compilateur ne détecte aucune faute ,mais le programme ne marche pas correctement.

    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
    #include<stdio.h>
    #include<conio.h>
     
    void saisie (int *l,int *c);
     
    int main()
    {
        int *ligne,*colonne;
     
        saisie(ligne,colonne);
        printf("%d\t%d\n",*ligne,*colonne);
        getch();
    }
     
     
    void saisie (int *l,int *c)
    {
         printf("Entrez le nombre de ligne:");
         scanf("%d",l);
         printf("Entrez le nombre de colonne:");
         scanf("%d",c);
    }

  2. #2
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    ces dimensions pourront etre stockées dans deux pointeurs de type entier (int  *L et int  * C) que l'on passe en parametre de la fonction.
    C'est du charabia : On ne peut stocker les dimensions dans des pointeurs qui sont des objets destinés à stocker uniquement des adresses.

    Proposition plus correcte :
    les dimensions pourront être stockées dans deux objets de type entier (int L et int C) dont on passera l'adresse à la fonction

    Conséquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(void)
    {
        int ligne,colonne;
     
        saisie(&ligne,&colonne);
        printf("%d\t%d\n",ligne,colonne);
        getch();
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Et puis après tu fais un malloc(sizeof(int)*taille_ligne*taille_colonne);

    Après tu cast ton pointeur et c'est bon.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    En gros :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void saisie(int *val,const char *nom);
     
    int main() {
      int ligne, colonne, i, j;
      int **mat;
      saisie(&ligne,"Ligne");
      saisie(&colonne,"Colonne");
     
      // Alloc mémoire et initialisation a zero
      mat = (int**)malloc(ligne * sizeof(int*));
      for (i = 0 ; i < ligne ; i++) {
        mat[i] = (int*)malloc(colonne * sizeof(int));
      }
     
      // Initialisation
      for (i = 0 ; i < ligne ; i++) {
        for (j = 0 ; j < colonne ; j++) {
          mat[i][j] = 0;
        }
      }
     
      // Affichage
      for (i = 0 ; i < ligne ; i++) {
        for (j = 0 ; j < colonne ; j++) {
          printf("%d\t", mat[i][j]);
        }
        printf("\n");
      }
      return 0;
    }
     
     
    void saisie(int *val,const char *nom) {
      printf("%s : ", nom);
      scanf("%d", val);
    }

    Après c'est un exemple simple, mais ça peut te donner une idée...

  5. #5
    Membre expérimenté Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Points : 1 372
    Points
    1 372
    Par défaut Code "bizarre" ?
    Citation Envoyé par lucci57 Voir le message

    j'ai essayer avec le code suivant,le compilateur ne détecte aucune faute ,mais le programme ne marche pas correctement.
    Je ne sais pas avec quelles options tu as compilé ton code, mais sans doute avec le minimum de contrôle, car une compilation avec gcc (ici, dans Code::Blocks) et l'option -Wall m'a fourni le commentaire suivant :

    ||=== test, Debug ===|
    test/main.c||In function ‘main’: |
    test/main.c|13|attention : contrôle a atteint la fin non void de la fonction [-Wreturn-type]|
    test/main.c|10|attention : ‘ligne’ is used uninitialized in this function [-Wuninitialized]|
    test/main.c|10|attention : ‘colonne’ is used uninitialized in this function [-Wuninitialized]|
    ||=== Build finished: 3 errors, 0 warnings ===|
    Ce qui est en soit l'indication d'un problème !

    Toutefois, il faut peut-être relativiser le terme charabia :

    En effet, il te suffit d'initialiser tes pointeurs, en leur attribuant une véritable adresse mémoire à même de stocker un ou plusieurs int, et il n'y aura plus de problème, par exemple en modifiant ton code a minima :

    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
    #include <stdio.h>
     
    void saisie (int *l,int *c);
     
    int main()
    {
        int ll,cc;
        int *ligne=&ll,*colonne=&cc;
     
        saisie(ligne,colonne);
        printf("%d\t%d\n",*ligne,*colonne);
        getchar();
     
        return 0;
    }
     
     
    void saisie (int *l,int *c)
    {
         printf("Entrez le nombre de ligne:");
         scanf("%d",l);
         printf("Entrez le nombre de colonne:");
         scanf("%d",c);
    }
    Donc ton code peut être correct si les deux pointeurs sont initialisés (tu peux aussi le faire avec deux malloc), mais c'est vraiment une idée bizarre de faire comme ça plutôt que passer directement les adresses des entiers à la fonction de saisie, ce qui est la méthode usuelle que t'expose simplement et fort justement diogene.
    Si ton idée "bizarre" se justifie par une raison cohérente (que je ne vois a priori pas), alors ce n'est pas du charabia, sinon, c'est que la notion de pointeur n'est peut-être pas ta spécialité et ton code est bien du charabia !

    Alors, qu'en est-il ?
    Charabia or not charabia ?

Discussions similaires

  1. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27
  2. Affichage d'un tableau à deux dimensions.
    Par Allan dans le forum C
    Réponses: 3
    Dernier message: 11/12/2005, 18h29
  3. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  4. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 21h38
  5. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50

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