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

Windows Discussion :

[C]Allocation d'un tableau à deux dimensions


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut [C]Allocation d'un tableau à deux dimensions
    Bonsoir,
    je vous explique mon problème, je suis entrain de réaliser un programme dans le quel l'opérateur va rentrer deux valeurs qui correspondent aux nombres de lignes du tableau et aux nombres de colonnes, aussi je dois reinitialiser le tableau en mettant des 0 partout.

    Je ne sais donc pas comment modifier la taille des lignes et des colonnes du tableau dans le programme en fonction de n et m...

    Actuellement j'ai ça :

    int **tab;

    tab = malloc(n*sizeof(int));
    for (i=0;i<n;i++)
    {
    _____tab[i] = malloc(m*sizeof(int));
    _____for (j=0;j<n;j++)
    _____{
    __________tab[i][j]=0;
    __________//printf("%d",tab[i][j]);
    _____}
    }

    si vous pouviez m'aider ça serait super !

    Merci beaucoup

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    tab[(tab*)malloc(n*sizeof(tab))][5];
    Euh... Ce n'est ni fait ni à faire, ça...

    Et pour l'instant, c'est du banal C (si on peut appeler ça du C), pas de la "Programmation Windows"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    bon ba excusez moi de vous avoir dérangé, je vais m'adresser à un autre forum un peu moin "pro" que le vôtre.
    peut être m'aideront ils...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ou bien, tu pourrais commencer par aller sur le forum C.

    Ensuite, ton code modifié est déjà plus potable.
    Il y a juste quelques remarques:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    int **tab;
    size_t i;
    size_t j;
    tab = malloc(n*sizeof(int*));
    /* Ici, il manque la vérification d'erreur */
    for (i=0;i<n;i++)
    {
    	tab[i] = malloc(m*sizeof(int));
    	/* ici aussi */
    	for (j=0;j<m;j++)
    	{
    		tab[i][j]=0;
    		/*printf("%d",tab[i][j]);*/
    	}
    }

    Enfin, pour l'allocation, j'ai toujours trouvé ces allocations en boucle un peu trop compliquées.
    Je conseille une allocation par dimension, pas plus.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    désolé je suis tout nouveau sur le forum... je n'avais pas vu cette section...
    merci pour l'info c'est bon mon programme fonctionne.

    bonne soirée

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    bon pour expliquer j'ai un projet à réaliser, le sujet est le suivant :
    j'ai une blatte qui se trouve sur du carrelage aux dimensions de n x m (défini par l'utilisateur).
    Le but est d'afficher lorsque la blatte est passée 3 fois sur chacun des carreaux. au bout de 50 000 déplacement la blatte s'arrete et on renvoi un message qui indique que les test n'a pas été réalisé.
    Voila ce que j'ai fait... cependant des erreurs subsistent...
    Pourriez vous m'aider ? Merci

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <conio.h>
    #include <time.h>

    int n,m,i,j,k,na,ma,ibug,jbug;
    int **count;
    int r,ok;
    int imove[8] = {-1,0,1,1,1,0,-1,-1};
    int jmove[8] = {1,1,1,0,-1,-1,-1,0};


    main()
    {

    // Nombre de lignes et colonnes rentré par l'utilisateur
    printf("Rentrez les valeurs de n (entre 2 et 40) puis m (entre 2 et 20)\n");
    scanf("%d%d",&n,&m);

    //Si les valeurs ne sont pas comprises dans l'intervalle l'utilisateur les resaisies jusqu'à ce qu'elles soient correctes
    while(n>40 || n<2 || m>20 || m<2)
    {
    printf("Erreur de saisie !!!\nRentrez une nouvelle valeur pour n puis pour n\n");
    scanf("%d%d",&n,&m);
    }

    //Réallocation du tableau juste sur une dimension en fonction de la valeur de n
    count = malloc(n*sizeof(int));
    for (i=0;i<n;i++)
    {
    //Réallocation du tableau sur la 2ème dimension en fonction de la valeur de m
    count[i] = malloc(m*sizeof(int));
    for (j=0;j<m;j++)
    {
    //Mise à 0 de tableau affichant le nombre de passages
    count[i][j]=0;
    }
    }

    // Ici va etre géré les conditions pour n=m=15, n=m=1 et si n et m ont une valeur quelconque
    if (n == 15 && m == 15)
    {
    ibug = 10;
    jbug = 10;
    }
    else
    {
    if (n == 39 && m == 19)
    {
    ibug = 1;
    jbug = 1;
    }
    else
    {
    ibug = n/2;
    jbug = m/2;
    }
    }
    printf("bug = %d",ibug);
    ok = 0;
    r=0;
    while((imove[r]+ibug<0) || (jmove[r]+jbug<0) || (imove[r]+ibug>=n) || (jmove[r]+jbug>=m))
    {
    srand(time(NULL));
    r = (rand() % 8);
    printf("rand = %d",r);
    }

    ibug = ibug + imove[r];
    jbug = jbug + jmove[r];
    count[ibug][jbug] = count[ibug][jbug] + 1;
    //printf("%d",count[ibug][jbug]);

    //Test sur toutes les valeurs du tableau count si 3 passages
    for (i=0;i<8;i++)
    {
    for (j=0;j<8;j++)
    {
    if (count[i][j] == 3)
    {
    ok = ok+1;
    }
    }
    }
    //printf("\n%d\n",ok);
    if (ok == (n*m))
    {
    printf("La blatte est passé trois fois sur chacune des cases");
    }
    else printf("La blate n'a pas fait tous les carreaux trois fois");

    getch();
    }

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