Solution 3/fr

From Free Pascal wiki

English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

Tutoriel de Pascal Objet : Structures de contrôle / Solutions des exercices

Suite de Fibonacci

(* Auteur:    Tao Yue
   Date:      19 July 1997
   Description:
      Trouver les dix premiers nombres de Fibonacci
   Version:
      1.0 - version originale
*)

program Fibonacci;

var
   Fibonacci1, Fibonacci2 : integer;
   temp : integer;
   count : integer;

begin    (* Main *)
   writeln ('Les 10 premiers nombres de Fibonacci sont:');
   count := 0;
   Fibonacci1 := 0;
   Fibonacci2 := 1;
   repeat
      write (Fibonacci2:7);
      temp := Fibonacci2;
      Fibonacci2 := Fibonacci1 + Fibonacci2;
      Fibonacci1 := Temp;
      count := count + 1
   until count = 10;
   writeln;

   (* Bien sûr, vous pouvez utiliser une boucle FOR ou une boucle WHILE
      pour résoudre le problème. *)

end.     (* Main *)

Puissances de deux

(* Auteur:    Tao Yue
   Date:      13 July 2000
   Description:
      Affiche toutes les puissances de deux jusqu'à 20000, 5 par ligne
   Version:
      1.0 - version originale
*)

program PowersofTwo;

const
   numperline = 5;
   maxnum = 20000;
   base = 2;

var
   number : longint;
   linecount : integer;

begin    (* Main *)
   writeln ('Puissances de ', base, ', 1 <= x <= ', maxnum, ':');
   (* initialisation de la boucle *)
   number := 1;
   linecount := 0;
   (* Boucle *)
   while number <= maxnum do
      begin
         linecount := linecount + 1;
         (* Imprime une virgule et un caractère d'espace sauf pour le premier
            nombre de la ligne *)
         if linecount > 1 then
            write (', ');
         (* Affiche le nombre *)
         write (number);
         (* Imprime une virgule et va à la prochaine ligne si c'est 
            le dernier nombre de la ligne sauf si c'est le dernier 
            de la série *)
         if (linecount = numperline) and not (number * base > maxnum) then
            begin
               writeln (',');
               linecount := 0
            end;
         (* Incrémente le nombre *)
         number := number * base;
      end;  (* while *)
   writeln;

   (* Ce programme peut aussi être écrit avec une boucle REPEAT..UNTIL. *)

end.     (* Main *)

Observez que j'ai utilisé trois constantes : la base, le nombre de puissances à afficher sur chaque ligne et la borne supérieure. Cela garantit que le programme sera facilement adaptable dans le futur.

Utiliser des constantes plutôt que des littéraux est une bonne habitude de programmation. Quand vous écrivez des programmes vraiment longs, vous ferez référence à certains nombres des milliers de fois. Si vous les codez en dur, vous aurez à les rechercher tous. Mais vous pouvez utiliser la même valeur dans un contexte différent, donc vous ne pouvez pas rechercher/remplacer globalement. L'emploi de constantes rend donc plus simple l'extension du programme.

Notez aussi que j'ai employé des types longint pour la variable number. C'est parce que pour faire échouer les tests number <= 20000, number doit atteindre 32768, la prochaine puissance de deux après 16384. Cela dépasse la plage du type entier : -32768 to 32767 (essayez sans longint et regardez ce qui se passe).

Sommaire