Skip to content

L2 informatique – TP2

7 décembre 2012

Voici la série d’exercices du TP2 d’algorithmique (Pascal) pour les étudiants de 2e année licence informatique de la faculté des Sciences (Chetouane)


Les solutions que je proposerai pour ce TP et les suivants sont celles que j’ai réalisées sur mon PC.
Je travaille sous GNU/Linux et j’utilise le compilateur Free Pascal, qui est certainement le meilleur compilateur Pascal actuellement et le plus complet, toutes plateformes confondues. Il permet de compiler non seulement le Pascal standard, mais aussi le Pascal « étendu » de Borland (Turbo Pascal) et le Pascal Objet (compatible Delphi).
Pour chaque exercice de programmation, que ce soit en Pascal, en C ou en n’importe quel autre langage, il existe souvent de nombreuses solutions possibles. Ma solution n’est pas forcément la meilleure. Il arrive souvent que des étudiants étonnent leurs enseignants. Alors avant de la lire, prenez votre temps pour réfléchir à votre solution, l’essayer, la corriger, l’améliorer et ensuite la comparer avec la mienne.
Ceci est un blog. Il permet d’ajouter des commentaires. Profitez-en pour me donner votre avis, critiquer, poser des questions, demander des explications.

Exercice 1 : factorielle

Exercice classique, c’est une application directe de la définition récursive mathématique.
Voici ma solution :

program Factorielle;

uses crt;

var
    n : integer;

(* fact : calcule la factorielle d'un nombre
 * Parametre :
 *  -  n : le nombre
 * Resultat : factorielle du nombre, de type int64
 * (correct jusqu'a 20! seulement)
 *)
function fact(n : integer) : int64;
begin
    if n = 0 then
        fact := 1
    else
        fact := n * fact(n - 1)
end;

begin
    clrscr;
    writeln('.--== Factorielle d''un nombre ==--.');
    writeln;
    repeat
        write('Donnez le nombre : ');
        readln(n);
        writeln('La factorielle de ',n,' est ',n, '! = ',
                fact(n));
        if n>20 then
            writeln('Enfin, je ne suis pas certain...');
        writeln;
        writeln('Un autre [O/n] ?')
    until readkey = 'n'
end.

Seule remarque à faire : la croissance de la factorielle étant très rapide, le programme ne fonctionnera correctement que pour des valeurs allant jusqu’à 20. J’ai utilisé le type d’entiers qui permet les plus grandes valeurs : Int64. D’après la documentation de Free Pascal, ce type, codé sur 8 octets (d’où son nom) permet d’aller jusqu’à 9 223 372 036 854 775 807 alors que Integer (2 octets) ne va que jusqu’à 32767 par défaut.

Exercice 2 : puissances

Le principe récursif est :
a^0 = 1
{a^n = a \times a^{n-1}  } _{(n \in \mathbf{N^*})}

program Puissance;

uses crt;

var
    a : real;
    n : integer;

(* puiss : calcule une puissance positive d'un nombre reel
 * Parametre :
 *  -  a : le nombre reel
 *  -  n : l'exposant, entier positif
 * Resultat : puissance nieme de a
 *)
function puiss(a : real; n : integer) : extended;
begin
    if n = 0 then
        puiss := 1
    else
        puiss := a * puiss(a, n - 1)
end;

begin
    clrscr;
    writeln('.--== Puissance d''un nombre ==--.');
    writeln;
    repeat
        write('Donnez le nombre : ');
        readln(a);
        write('Donnez l''exposant : ');
        readln(n);
        writeln(a:0:2,' puissance ',n,' = ',
                puiss(a,n):0:2);
        writeln;
        writeln('Un autre [O/n] ?')
    until readkey = 'n'
end.

Remarque : Là aussi, le résultat croît assez rapidement, d’où le choix du type de réels extended qui a la meilleure précision (codé sur 10 octets).

Exercice 3 : suite de Léonard de Pise

Oui, c’est un des autres noms de Fibonacci. C’était le mathématicien occidental le plus talentueux du Moyen-Âge. Et savez-vous où il a fait ses études ? En Algérie, à Bejaïa ! Il a appris à utiliser les chiffres arabes développés par Al-Khwārizmī et a convaincu l’Occident de la supériorité de cette notation.

…à suivre…

Publicités
2 commentaires
  1. oussama_SICM2 permalink

    salut j’aime bien votre blog ^^ tu fait de beau travail même si je suis pas d’accord avec toi sur le fait que tu poste la solution complète !! c’est bien mais ca pousse les gens a ne pas réfléchir ni travailler ;) le fameux copier/coller hhhhhh

    J'aime

    • Merci Oussama, mais moi non plus je ne suis pas d’accord avec toi :)
      J’ai appris à programmer en tapant des programmes copiés de revues et de livres que j’essayais de comprendre et de modifier. Il n’y avait pas encore de copier-coller à l’époque mais je copiais des solutions complètes toutes faites…
      Mais bien sûr je recommande à mes lecteurs de chercher d’abord à résoudre les exercices seuls et de ne regarder ma solution que pour la comparer avec la leur, c’est beaucoup plus enrichissant. Il n’est pas rare de trouver une méthode différente qui peut même être meilleure !

      J'aime

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :