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


Sujet :

Pascal

  1. #1
    Membre régulier
    Triangle de Pascal
    Salut Tout le monde
    et bien voila un exercice que j'ai passé une demie journée a le faire
    Je veux savoir si vous avez quelques suggestions,conseils ou même de remarques ...
    J'éspere que le programme marche correctement et qu'il n'y a pas des exceptions ...
    Bon voila l'ennoncé de l'exercice
    Saisir le degré du polynome n appartient [2..10] Calculer et afficher le polynome Ainsi que sa derivé par rapport à a .
    EX : (a+b) puissance 2 sera egal à: a puissance 2 + 2ab + b puissance 2
    et les derivé de a sont : 2a et 2
    Voila ce que j'ai pu faire
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    program exercice ;
    uses wincrt ;
    type
        mat=array[0..10,1..11] of integer ;
     
    var
       m : mat ;
       n : integer ;
     
    procedure saisie (var n : integer  );
     begin
      repeat
       writeln('Saisir le degré du polynome :');
       readln(n);
      until n in [2..10] ; 
     end;
     
    procedure remplir (var m : mat ; n : integer );
    var
    l,c : integer ;
     
    begin
     m[0,1]:=1 ;
     m[1,1]:=1 ;
     m[1,2]:=1 ;
      for l:= 2 to n do
        begin
         m[l,1]:=1 ;
         m[l,l+1]:=1 ;
          for c:= 2 to l do
           begin
            m[l,c]:=m[l-1,c-1]+m[l-1,c] ;
           end; 
        end;
      end;
     
    procedure affiche (m : mat ; n : integer ) ;
    var
    x,y,l,c : integer ;
    begin
     x:=n ;
     y:=0 ;
     writeln('le polynome est :');
     
     for c:= 1 to n+1 do
      begin
       write(m[n,c]) ;
        if x <> 0 then
         write('a',x);
          if y <> 0 then
           write('b',y);
            if c <> n+1 then
             begin
              write('+');
              x:=x-1 ;
              y:=y+1 ;
             end;
      end; 
    end;
     
    procedure deriver  (m : mat ; n : integer ) ;
    var
    x,y,l,c : integer ;
     
    begin
     x:=n ;
     y:=0 ;
     writeln;
     write('les derivés de a sont :');
     for c:= 1 to n+1 do
      begin
        if x <> 0 then
         begin
         writeln ;
         write(m[n,c]*x,'*a*',(x-1));
         end;
          if c <> n+1 then
           begin
            x:=x-1 ;
           end;
      end; 
    end;
    begin
    saisie(n);
    remplir(m,n);
    affiche(m,n);
    deriver (m,n);
    end.

  2. #2
    Candidat au Club
    plus joli
    Bonjour, juste une remarque
    pour rentrer dans ton programme il faudrait que je m'y plonge
    Perso je préfère les programmes commentés où les noms des variables sont expressifs où chaque procédure est précédée d'un chapeau ou d'un titre juste pour préparer la lecture ou pour inviter le lecteur à suivre la démarche du programmeur.
    D'entrée je n'aurais pas pris la mm structure de données que toi
    Alors rien ne me tente de me plonger dans ton programme
    A+

  3. #3
    Expert confirmé
    Bonjour,

    Je souscris à ce que dit hoelbihan

    Je ne suis pas allé bien loin pour lire ton code, car, presque dès le début, ça me gène de voir définie une procedure là ou une function serait nettement mieux adaptée:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure saisie (var n : integer  );
     begin
      repeat
       writeln('Saisir le degré du polynome :');
       readln(n);
      until n in [2..10] ; 
     end;

    serait avantageusement remplacée par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    { le nom de la fonction doit être suffisamment explicite }
     
    function saisieDegre : integer;
    var
      resultat : integer; { ici également, nom explicite }
    begin
      repeat
        { writeln remplacé par write : ainsi la lecture se fera sur la même ligne }
        write('Saisir le degré du polynome : ');
        readln(resultat);
      until resultat  in [2..10] ;
      saisieDegre :=  resultat;
    end;

    à quoi il faudrait ajouter des contrôles sur l'entrée (que se passera-t-il si tu entres des données qui ne correspondent pas à un entier, abe, par exemple ?), et le programme devrait prendre ne compte qu'on puisse entrer une valeur signifiant "je n'ai pas envie de continuer, sortir du progamme", 0 ou -1 seraient des valeurs appropriées.

    D'autre part, je n'ai pas lu la suite, mais pourquoi
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    type
        mat=array[0..10,1..11] of integer ;

    indices dimension 1 = 0..10, et pour dimension 2 = 1..11.

    Je ne vois pas l'intérêt de distinguer ainsi. C'est peut-être justifié par l'usage que tu en fais ensuite, mais je n'irais pas voir tout de suite, car ça manque d'explications (par exemple : à quoi correspondent les 2 dimensions de ton tableau ?).

    Il ne faut pas hésiter à mettre des commentaires, même pour toi, et encore plus quand tu veux que d'autres programmeurs lisent/corrigent/utilisent ton code, ce qui est le cas, puisque tu nous demandes notre avis.
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  4. #4
    Membre actif
    Bonjour,
    Excuse moi droggo mais une fonction qui contient un readln, c’est pas très catholique.
    Imagine :
    F(x)=x²
    F(2) te demande d’entrer une valeur.
    Je sais qu’en info ça pose pas de problèmes mais mon prof d’info nous rappelle souvent qu’une fonction qui demande une valeur c’est une procédure, donc qu’il faut le déclarer avec "procedure".

    Pour le reste je trouve que toi (Droggo) et hoelbihan, aviez tout à fait raison.

  5. #5
    Expert confirmé
    Hi,
    Citation Envoyé par Ultima
    Bonjour,
    Excuse moi droggo mais une fonction qui contient un readln, c’est pas très catholique.
    Imagine :
    F(x)=x²
    F(2) te demande d’entrer une valeur.
    Je sais qu’en info ça pose pas de problèmes mais mon prof d’info nous rappelle souvent qu’une fonction qui demande une valeur c’est une procédure, donc qu’il faut le déclarer avec "procedure".

    Pour le reste je trouve que toi (Droggo) et hoelbihan, aviez tout à fait raison.
    Désolé à mon tour, mais absolument rien n'interdit d'utiliser une fonction pour lire une donnée.

    Ici, on a besoin de lire une donnée entière, une fonction peut renvoyer un entier, on fait une fonction.

    Je pense que tu prends beaucoup trop "fonction" au sens mathématique.
    Leur utilisation en programmation, Pascal ou autre, ne se limite pas à cela :
    une fonction renvoie un résultat, rien ne lui interdit d'aller lire la valeur de ce résultat au clavier, ou dans un fichier, ou dans la mémoire d'un autre programme, pourquoi pas.

    Si ton prof dit ce que tu écris
    Je sais qu’en info ça pose pas de problèmes mais mon prof d’info nous rappelle souvent qu’une fonction qui demande une valeur c’est une procédure, donc qu’il faut le déclarer avec "procedure"
    il se trompe, pour la même raison que toi (logique) : il ne faut pas prendre "function" au sens purement mathématique, ni "procedure" d'ailleurs.

    Cela vous amène à confondre les termes "procedure" et "function" d'un langage de programmation avec leur signification en mathématiques ou plus générale, erreur classique concernant des noms "faux-amis".

    La seule chose qui distingue une function d'une procedure est que l'une renvoie une valeur, et l'autre non.
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  6. #6
    Membre régulier
    Salut les gars
    Merci pour vos remarques !! cette semaine est la semaine bolquée et demain j'ai un devoir de physique je viens de lire vos remarques et vos commentaires Aprés 2 jours je vais vous répondre (dsl j'ai des devoirs) donc je suis hyper occupé
    Allez A bientot