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 :

Triangle de Pascal avec pointeurs


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Triangle de Pascal avec pointeurs
    Bonsoir,

    Je voudrais savoir comment s'y prendre pour afficher les coefficients du binome de Pascal en utilisant des pointeurs, et non pas des tableaux.

    Voici mon code utilisant des tableaux:

    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
    int main()
    {
        int taille=10;
        int i,j,k, tab[taille][taille];
     
     
    printf("Rentrez le nombre de lignes : ");
    scanf("%d", &taille);
     
        if (taille>10)
        {
            printf("trop de lignes!");
            return 0;
        }
     
        for (i=0; i<=taille; i++) //calcul des coefficients
        {
            tab[i][0]=1; //initialisation de la 1ere colonne et de la diagonale
            tab[i][i]=1;
     
            for (j=1; j<i; j++)
            {
                tab[i][j]=tab[i-1][j-1]+tab[i-1][j];
            }
        }
     
        for (i=0; i<=taille; i++) //affichage des coefficients
        {
            for (k=0; k<taille-i; k++) //pyramide centrée
            {
                printf(" ");
            }
     
            for (j=0; j<=i; j++)
            {
                printf("%d",tab[i][j]);
                printf(" ");
            }
     
        printf("\n");
        }
     
        return 0;
    }
    On m'a dit d'utiliser des pointeurs du genre int **. Cependant, vu que je suis pas encore très à l'aise avec les pointeurs, j'ai du mal à les utiliser (où et quand).

    Pouvez-vous m'aider?

    Merci d'avance!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    salut, utiliser des tableaux du genre

    où manipuler des pointeurs du genre

    se manipulent de la même manière : tu utilises l'opérateur [] pour accéder au ieme élément.

    Maintenant, avec les pointeurs, tu vas devoir gérer toi même la mémoire. Regarde sur le net et cherche : malloc, calloc et free.

    Règle d'or : ton programme doit comporter autant de malloc() ou calloc() que de free().

    L'avantage des pointeurs par rapport aux "tableaux" est que tu pourras sans problème de mémoire manipuler des tableaux de grande taille

    Bonne soirée

  3. #3
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 944
    Points
    1 944
    Par défaut
    tu peux faire comme l'a dit ca marche bien . sinon tu peux faire comme moi avec un pointer unidimensionel mais avec le quel tu devras faire un petit calcul pour acceder a tes element ou si tu veux on va faire mieux, faire 2 fonctions pour faciliter la tache.

    main
    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
     
        int *mat = NULL;
        scanf("%d",&l);   //attentin scanf est a eviter.
        scanf("%d",&c);   //attentin scanf est a eviter.
     
        mat = (int*) malloc (sizeof(int)*n*c +1);
        if(mat==NULL)
        {
             puts("allocation failed, exiting...");
             return 0;
        }
        // on aura une fonction pour remplire la matrice que tu vas faire toi meme
        // si tu veux a l'aide de la fonction setElet() plus bas...
     
       //ici on va lire un element:
       printf("A[%d][%d] = %d",2,3,getElt(2,3,mat));
       //ici on modifi un element
       setElt(2,3,mat,55) // 
       //...
       //... le reste de ton programme
       //...
       return 0;
    la fonction setElt() prend les indices, ma matrices et la valeur a ajouter
    comme parametre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void setElt(int i, int j, int* a,int val)
    {
        *(a*j+i) = val;
    }
    //donc c'est comme ca que l'on accede a un element dans 
    //un pointeur qui est cense reprenseter une matrie bisdimensionnelle
    pour get:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int getElt(int i,int j, int* a)
    {
         return *(a*j+i);
    }
    bien entendu dans les deux cas tu dois tester si i,et j ne depasse pas les limites. pour empecher une lecture/ecriture hors limites. tu peux donc utiliser la fonction get pour lire toutes ta matrice je te laisse faire pour l'ecriture si ca t'interres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void affiche_mat(int maxi,int maxj,int *mat)
    {   
        int i,j;
        for(i=0;i<maxi;i++)
        {
            for(j=0;j<maxj;j++)
                 printf("%d  ",getElt(i,j,mat);
            printf("\n");
        }
    }
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponse à vous deux. Je vais plancher dessus et je vous dirai le résultat obtenu!

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Alors, j'ai essayé ceci, avec la méthode des int**, mais ca bug quand j'exécute le programme. Pourtant, ca m'a l'air bien, je ne vois pas d'erreurs;

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int taille;
        int i,j,k, **tab;
     
    tab=malloc(taille*sizeof(int*));
     
    printf("Rentrez le nombre de lignes : ");
    scanf("%d", &taille);
     
        /*if (taille>10)
        {
            printf("trop de lignes!");
            return 0;
        }*/
     
        for (i=0; i<=taille; i++) //calcul des coefficients
        {
            *(tab+i)=calloc((i+1),sizeof(int));
     
            *(*(tab+i)+i)=1; //initialisation de la 1ere colonne et de la diagonale
            *(*(tab+i)+0)=1;
     
            for (j=1; j<i; j++)
            {
                *(*(tab+i)+j)= *(*(tab+(i-1))+(j-1)) + *(*(tab+(i-1))+(j));
            }
        }
     
        for (i=0; i<=taille; i++) //affichage des coefficients
        {
            for (k=0; k<taille-i; k++) //pyramide centrée
            {
                printf(" ");
            }
     
            for (j=0; j<=i; j++)
            {
                printf("%d",*(*(tab+i)+j));
                printf(" ");
            }
     
        printf("\n");
        }
     
        free(tab);
     
        return 0;
    }

    Qu'est ce qui ne va pas dans mon code? Peut-etre des boucles qui ne servent à rien ici?

    Merci encore pour votre aide!

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Ah, j'ai trouvé mon erreur finalement: en fait il fallait mettre le malloc apres printf et scanf.
    C'est un peu logique d'ailleurs car on créer un tableau en fonction de la variable "taille" et si "taille" est défini après, ca ne marche pas!

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

Discussions similaires

  1. petit problème avec pointeurs
    Par Kerod dans le forum C
    Réponses: 12
    Dernier message: 09/12/2005, 15h48
  2. Problème de gestion de chaînes avec pointeur
    Par LorDjidane dans le forum C
    Réponses: 18
    Dernier message: 19/10/2005, 15h40
  3. Problème unit CRT pour Faire du Pascal avec Delphi
    Par alexmorel dans le forum Débuter
    Réponses: 4
    Dernier message: 01/06/2004, 17h13
  4. [LG]Listes chainées avec pointeur
    Par PaowZ dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2004, 19h49
  5. probleme avec pointeurs de structures
    Par remi77 dans le forum C
    Réponses: 2
    Dernier message: 20/10/2003, 13h19

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