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

Pascal Discussion :

Triangle de Pascal et factorielle


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut Triangle de Pascal et factorielle
    Bonjour,

    J'ai tenté ce programme pour répondre à l'exercice , pourriez vous me dire mes erreurs?
    Je vous remercie de votre aide précieuse!
    voici l'énoncé:

    Écrire un programme qui affiche les n premières lignes du triangle de Pascal (calcul des
    coefficients binomiaux) de la façon suivante (ici : n = 5) :
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    Pour rappel, l'élément qui se trouve à la ligne i et la colonne j représente le coefficient
    binomial : Ci= i!/(j! (i -j)!)

    N.B. : On pourra supposer, dans un premier temps, que l’on dispose d’une fonction
    factorielle(k) permettant de calculer k! On écrira ensuite cette fonction

    et voici mon programme.

    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
    Program Triangle ;
     
    Var
      factdif,facti, temp,factj,c,n,i,j : integer ;            //fact di est la fact de i-j//
     
    Begin
       writeln('entrez la taille du triangle');
       read(n);
     
       facti:=1;
       factj:=1;
       factdif:=1;
       for i:=1 to n do
          begin
              write('1');
                 for j:=2 to n do
                           begin
                            if (i>j) then
                              begin
                                for i:=i downto 1  do
                                 facti:=facti*i;
                                for j:=j downto 1 do
                                   factj:=factj*j;
                                for temp:=(i-j)downto 1 do
                                   factdif:= factdif*temp  ;
                                c:=(facti)/(factj*factdif);
                             end;
                            if i=j then
                                  write('1');
     
                          end;
     
                 for j=n-1 to 1 do
                    begin
                         write(' ');
                    end;
              writeln;
              readln;
          end;
    end.

  2. #2
    Membre chevronné

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Par défaut
    Sans porter de jugement sur l'algorithme lui-même, il me semble que le compilateur vous fournit déjà les informations nécessaires quant aux erreurs de syntaxe:

    Free Pascal Compiler version 3.0.0 [2016/02/14] for i386
    Copyright (c) 1993-2015 by Florian Klaempfl and others
    Target OS: Win32 for i386
    Compiling triangle.pas
    triangle.pas(20,34) Error: Illegal assignment to for-loop variable "i"
    triangle.pas(22,34) Error: Illegal assignment to for-loop variable "j"
    triangle.pas(26,39) Error: Incompatible types: got "Extended" expected "SmallInt"
    triangle.pas(33,19) Fatal: Syntax error, ":=" expected but "=" found
    Fatal: Compilation aborted

    Ce qui suit n'est pas autorisé (2 premières erreurs): vous n'avez pas le droit de modifier le compteur d'une boucle dans la boucle elle-même. Utilisez une autre variable intermédiaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i:=i downto 1 do     // Dejà dans la boucle for "i:=1 to n do"
    Le symbole "/" s'applique par définition à des nombres décimaux (3ième erreur). Pour une division concernant des entiers (et si le résultat attendu est entier aussi), utilisez l'instruction "div " (exemple: z := x div y ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:=(facti)/(factj*factdif);
    Erreur évidente (4ième erreur): "=" au lieu de ":=":
    Accessoirement pour cette dernière instruction, si vous voulez faire une boucle dégressive, il faut utiliser l'instruction "for ... downto ...", plutôt que "for ... to ...".

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Je vous remercie pour votre réponse, j' ai modifié mon programme en prenant en compte vos remarques et j'ai ainsi réussi à le tester mais il ne m'affiche pas le triangle voulu.
    C'est surtout la partie algorithmique qui me pose problème. Mon programme me semble aussi bien compliqué... Pourriez vous m'aiguiller pour trouver un algorithme plus convenable?

    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
    Program Triangle ;
     
    Var
      factdif,facti, temp,factj,c,n,i,j : integer ;            //fact di est la fact de i-j//
     
    Begin
       writeln('entrez la taille du triangle');
       read(n);
     
       facti:=1;
       factj:=1;
       factdif:=1;
       for i:=1 to n do
          begin
              write('1');
                 for j:=2 to n do
                           begin
                            if (i>j) then
                              begin
                                while i>0 do
                                  begin
                                   facti:=facti*i;
                                   i:=i-1;
                                  end;
                                while j>0 do
                                  begin
                                    factj:=factj*j;
                                     j:=j-1;
                                   end;
                                while(i-j)>0 do
                                  begin
                                   factdif:= factdif*temp  ;
                                   temp:=(i-j)-1;
                                   end;
                                c:=(facti)div(factj*factdif);
                             end;
                            if i=j then
                                  write('1');
     
                          end;
     
                 for j:=n-1 to 1 do
                    begin
                         write(' ');
                    end;
              writeln;
              readln;
          end;
    end.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Je m'excuse, j'avais testé sur le compilateur dev pascal justement mais je ne retrouvais pas mon erreur... Je suis débutante en programmation. Mais je tient compte de votre remarque .

  5. #5
    Membre chevronné
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Par défaut
    Re-bonjour.

    Tout d'abord, il est INDISPENSABLE d'utiliser les balises [code] et [/code] pour afficher le code source lorsqu'il y a plus de deux ou trois lignes.
    En effet l'utilisation de ces deux balises permet de conserver l'indentation du code et en facilite la lecture.
    Sinon, votre code est indigeste et on n'a pas envie de le lire pour trouver les erreurs, comme c'est le cas dans votre post ci-dessus.

    Ensuite, l'énoncé demande d'utiliser dans un premier temps une fonction qui retourne la factorielle, puis de définir cette fonction.
    Il faut respecter l'énoncé et donc construire cette fonction.
    Si vous n'y arrivez pas, on peut vous aider.

  6. #6
    Membre chevronné

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Par défaut
    Comme indiqué précédemment par Prof, dans un premier temps et pour ne pas compliquer les choses commencez d'abord par décomposer votre problème en éléments simples:

    • construisez d'abord une fonction qui calcule la factorielle de la valeur n,
    • puis construisez une fonction qui calcule le coefficient binomial (ou nombre de combinaisons) des valeurs n et k; cette fonction utilisera votre fonction factorielle précédente.

    Une fois cela réalisé et opérationnel, la résolution de votre problème devient très simple: 2 boucles imbriquées, l'appel à votre fonction de calcul du coefficient binomial, quelques instructions "write"/"writeln", et le tour est joué.

    Note: sur un plan purement didactique (c'est une autre histoire sur un plan pragmatique), votre fonction de calcul de factorielle pourra être écrite sous forme d'une fonction récursive; mais ce n'est bien évident pas une obligation.


    **Edit**

    L'utilisation d'une fonction factorielle implique implicitement un nombre maximal de lignes très réduit pour le triangle de Pascal (compte tenu des limitations de la taille des variables numériques). L'obtention d'un plus grand nombre de lignes nécessite ainsi "l'optimisation" de la fonction de calcul du coefficient binomial; ce qui pourrait être une seconde étape ...

  7. #7
    Membre chevronné
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Par défaut
    Bonjour.

    Apprendre la programmation sur le papier, c'est particulièrement difficile.
    Comme il faut nécessairement contrôler ce qu'on écrit, on a besoin d'un accès à quelque chose ou quelqu'un qui puisse faire ce contrôle.

    Le quelqu'un peut se trouver sur un forum, par exemple celui-ci.
    Mais la démarche a ses limites, car il n'est pas possible de demander constamment de l'aide.
    Surtout quand il s'agit de corriger des erreurs de débutant et qu'elles sont nombreuses dans le programme source.

    Le quelque chose s'appelle un compilateur.
    On le télécharge sur Internet, on l'installe sur son ordinateur, puis on le sollicite à chaque fois qu'on écrit un programme.
    Il est disponible jour et nuit et signale inlassablement les erreurs d'écriture dans le programme.
    Quand le programme s'exécute et qu'il ne fait pas ce qu'on souhaitait qu'il fasse, alors il est possible de demander de l'aide sur le forum.
    Comme cela, celui qui apportera son aide n'aura pas à perdre son temps sur des bêtises du style
    for i:=i downto 1 do
    D'où mon conseil : télécharger Free Pascal et utilisez-le pour corriger vos programmes.
    Puis revenez nous demander conseil si l'un d'eux n'a pas le comportement voulu.

Discussions similaires

  1. Affichage du Triangle de Pascal
    Par jrosenzw dans le forum C++
    Réponses: 11
    Dernier message: 14/03/2009, 03h10
  2. Triangle de pascal
    Par koko03 dans le forum Mathématiques
    Réponses: 3
    Dernier message: 26/01/2009, 17h52
  3. triangle de pascal
    Par chouuc dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 20/01/2009, 01h36
  4. Triangle de Pascal
    Par WhiteTigerZ dans le forum Pascal
    Réponses: 5
    Dernier message: 09/03/2007, 19h47
  5. Triangle de Pascal
    Par yushkoya dans le forum VBScript
    Réponses: 6
    Dernier message: 11/07/2006, 14h18

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