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[10][10] de Pascal probleme d'affichage et evolution


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Par défaut Tableau[10][10] de Pascal probleme d'affichage et evolution
    Bonjour je débute en info et donc en C et C++, poursuivant une formation TSAII.

    Je travaille actuellement sur le passage de l'algorithme au programme. L'un des exercices est sur l'affichage du triangle de Pascal.
    J'ai réussi à le faire mais l'affichage est loin d'être satisfaisant. Pourriez vous m'orienter svp. Voici le code:

    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
     
    #include <iostream>
    #include <stdio.h>
    #include <conio.h>
     
     
    int main (void)
    {
    //Title
        printf("\n ********** TRIANGLE DE PASCAL********** \n");
        //Declaration des Valeurs
        int Redo,i,j,N;
        int TabPas[10][10];
        //Execution
        Redo=0; //Initialisation de la boucle
        do
        {
            printf("\n Entrer un exposant N: ");
            scanf("%i",&N);
            for (i=0; i<=N-1; i++)
            {
                for (j=0; j<=N-1; j++)
                {
                    TabPas[i][j]=0;
                    TabPas[i][0]=1;
                }
            }
     
            for (i=1; i<=N-1; i++)
            {
                for (j=1; j<=N-1; j++)
                {
                    TabPas[i][j]=TabPas[i-1][j-1]+TabPas[i-1][j];
                }
            }
            for (i=0; i<=N-1; i++)
            {
                for (j=0; j<=N-1; j++)
                {
                    printf("%i",TabPas[i][j]);
     
                }
                printf("\n");
            }
     
            printf("\n Voulez vous recommencer? (1/0) \n");
            scanf("%i",&Redo);
        }
        while(Redo!=0);
        return 0;
    }
    J'ai aussi voulu optimiser le programme, en faisant en sorte que la taille du tableau soit variable pour entrer un entier N variable positif sans limite supérieur. Je me sert, du moins j'essaye de me servir du malloc mais là sa bloc. je crois que je ne le déclare pas correctement. voici le code:

    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
    #include <iostream>
    #include <stdio.h>
    #include <conio.h>
     
     
    int main (void)
    {
    //Title
        printf("\n ********** TRIANGLE DE PASCAL********** \n");
        //Declaration des Valeurs
        int Redo,i,j,N;
        int* TabPas[N]=NULL;
        //Execution
        Redo=0; //Initialisation de la boucle
        do
        {
            printf("\n Entrer un exposant N: ");
            scanf("%i",&N);
     
            TabPas[i][j]={malloc(N*sizeof(int))};
     
            for (i=0; i<=N-1; i++)
            {
                for (j=0; j<=N-1; j++)
                {
                    TabPas[i][j]=0;
                    TabPas[i][0]=1;
                }
            }
     
            for (i=1; i<=N-1; i++)
            {
                for (j=1; j<=N-1; j++)
                {
                    TabPas[i][j]=TabPas[i-1][j-1]+TabPas[i-1][j];
                }
            }
            for (i=0; i<=N-1; i++)
            {
                for (j=0; j<=N-1; j++)
                {
                    printf("%i",TabPas[i][j]);
     
                }
                printf("\n");
            }
     
            printf("\n Voulez vous recommencer? (1/0) \n");
            scanf("%i",&Redo);
        }
        while(Redo!=0);
        return 0;
    }
    Merci d'avance.
    MS

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Salut,

    Je ne suis pas vraiment certain de ce que tu cherches à faire.
    Toute fois, en regardant le premier morceau de code que tu fournis, je remarque ça:
    Tu déclares puis le programme effectue des boucles de N itérations sans que tu ne controle la valeur de N.

    Dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (i=0; i<=N-1; i++)
    {
       for (j=0; j<=N-1; j++)
       {
           TabPas[i][j]=0;
            TabPas[i][0]=1;
        }
    }
    L'instruction est effectué autant de fois que de j alors qu'une suffirait puisqu'elle ne dépend pas de j. Je pense donc que tu pourrais la déplacer pour la mettre dans le corps de la première boucle.

    Ensuite au premier tour de la boucle intérieur, le programme effectuera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TabPas[i][0]=0;
    TabPas[i][0]=1;
    Alors 0 ou 1? La seconde instruction annule la première.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Par défaut
    Bonsoir,
    Quand j'insère la ligne suivant:

    TabPas[i][0]=1;
    Dans la boucle primaire, sous le "do", le programme ne répond plus après avoir entré une valeur de N.

    En fait dans mon algorithme, cette ligne est le remplissage de la j=0 de 1, N-1 fois.

    La commande:

    est le remplissage du tableau de zéros sur chaque ligne après la diagonale de 1.

    Je ne suis pas sur de m'expliquer clairement... En fait, si je ne met pas cette commande j'obtiens un résultat complètement délirant.

    Le premier programme est pour faire un premier affichage du triangle avec N<=10, je n'est pas mi de condition sur N car la taille du tableau délimite par elle même le champ d'application de N. Ce n'est pas très pro, mais j'ai sauté l'étape étant donner que ce n'est qu'un affichage et remplissage de tableau. Je vais essayer. En fait j'aimerai bien ne pas avoir de 0 après la diagonale de 1 et avoir un alignement vertical des nombres dans le tableau.

    Enfin, dans le deuxième code, j'essaye de créer un tableau dynamique quelque soit la valeur de N...

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Concernant la ligne qui s'execute de multiple fois, je pensais plus à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (i=0; i<=N-1; i++)
    {
       for (j=0; j<=N-1; j++)
       {
           TabPas[i][j]=0;
       }
       TabPas[i][0]=1;
    }
    De cette façon, l'initialisation de la première colonne à 1 ne se fait qu'une fois par ligne (effaçant au passage la valeur 0 insérée par la boucle intérieure). Dans les faits, ça ne change rien au résultat que tu obtenais avant.

    Par contre là,
    est le remplissage du tableau de zéros sur chaque ligne après la diagonale de 1.
    je ne te suis plus.
    Avec la précédente construction, tu ne fais qu'initialiser la première colonne à 1, pas la diagonale.
    tu obtiens donc en fin de boucle quelque chose comme:
    1 0 0 0 ... 0
    1 0 0 0 ... 0
    ...
    1 0 0 0 ... 0
    Et si je lis bien (il est tard quand même...) la boucle suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (i=1; i<=N-1; i++)
    {
         for (j=1; j<=N-1; j++)
            {
                TabPas[i][j]=TabPas[i-1][j-1]+TabPas[i-1][j];
            }
    }
    va construire quelque chose comme ça:
    1 0 0 0 0 ... 0
    1 1 0 0 0 ... 0
    1 2 1 0 0 ... 0
    1 3 2 1 0 ... 0
    ...
    1 9 8 7 6 ... 1
    Est ce vraiment ce que tu obtiens? veux obtenir?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Par défaut
    Oui il se fait tard, merci de votre patience.

    Pour le première boucle, j'ai compris mon erreur d'interprétation de l'algorithme.

    Pour le résultat oui c'est ce que j'obtiens, sans alignement vertical des colonnes, car quand la valeur devient à deux chiffre puis trois, il y a un décalage du nombre par rapport à celui du dessus.

    En suite, j'aimerai ne pas avoir la suite de zéros après la diagonale de 1. mais là je crois qu'il faut que je revois mon algorithme de remplissage.

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    ok, je crois voir ce que tu veux obtenir:
    - Initilisation d'une matrice 10x10 à 0 mis à part la première colonne à 1
    - Remplissage de la matrice avec, à partir de x=1 et y=1, f(x,y)=f(x-1,y-1)+f(x-1,y)
    - Affichage du contenu de la matrice jusqu'à la diagonale

    Tout d'abord, tu devrais regarder sur google comment initialiser un tableau à plusieurs dimensions. Tu verras qu'il y a des moyens beaucoup plus simple qu'une boucle sur l'ensemble des valeurs. Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int TabPas[10][10]={0};
    suffit à initialiser l'intégralité de la matrice à 0. Mais regarde, tu trouveras surement un moyen d'initialiser la première colonne à 1 et le reste à 0 en une seule instruction

    Ensuite, tu dis ne pas te soucier de ce qui vient après la diagonale. En effet, il n'y a que des 0 et peu importe de toute façon. As tu remarqué que tous les éléments de la diagonale ont une propriété particulière qui permet de les reconnaitre?

    Pour ce qui est de l'affichage je pense que tu pourrais jouer avec les espaces d'autant plus que tu connais des le début le plus grand nombre présent dans la matrice.
    Peut être aussi, pour la lisibilité, tu gagnerais à élaborer un peu la séparation à l'affichage. Par exemple utiliser "|" plutot qu'un espace (l'alignement est plus facile à visualiser).

    Tu dis que tu débutes en la matière alors je ne veux pas te gacher le plaisir de la découverte mais si tu as besoin de plus de détails, pas de soucis.

Discussions similaires

  1. Probleme sur affichage d'un tableau
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/10/2006, 16h31
  2. [tableau] probleme d'affichage
    Par Nalido dans le forum C
    Réponses: 5
    Dernier message: 10/04/2006, 12h05
  3. Probleme d'affichage d'un element d'un tableau
    Par l_seringa dans le forum C
    Réponses: 17
    Dernier message: 05/04/2006, 15h12
  4. Problème d'affichage d'un tableau
    Par Sid ali dans le forum Langage
    Réponses: 14
    Dernier message: 28/02/2006, 00h24
  5. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46

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