doc - CRIL - Université d'Artois

end. Même exercice mais en générant les paires {x,y}. Exemple : avec n=3. {1,2},
{1,3}, {2,3}. program paires ;. var n,i,j : integer ;. begin. write('Entrez la veleur de ...

Part of the document


Université d'Artois 2006/2007
L2MI


TD1 - Algorithmique et programmation

(PROG3 - révision - correction)



Exercice 1:
. Générer tout les couples (x,y), x (1..n, y(1..n, n étant saisie au
clavier.
Exemple : avec n=3
(1,1) (1,2), ....(3,1),(3,2), (3,3)

program couple ;
var n,i,j : integer ;

begin
write('Entrez la veleur de n : ') ; readln(n) ;
writeln(Affichage des couples de 1 à ',n) ;

for i := 1 to n do
for j := 1 to n do
write('( ',i,',', j, ' ) ' );
writeln ;
end.

. Même exercice mais en générant les paires {x,y}
Exemple : avec n=3
{1,2}, {1,3}, {2,3}

program paires ;
var n,i,j : integer ;

begin
write('Entrez la veleur de n : ') ; readln(n) ;
writeln(Affichage des couples de 1 à ',n) ;

for i := 1 to n do
for j := i+1 to n do
write('( ',i,',', j, ' ) ' );
writeln ;
readln ;
end.

















Exercice 2 :
Afficher à l'écran les lignes suivantes :
1
1 2
1 2 3
1 2 3 1
1 2 3 1 2
1 2 3 1 2 3
1 2 3 1 2 3 1
1 2 3 1 2 3 1 2
1 2 3 1 2 3 1 2 3
1 2 3 1 2 3 1 2 3 1
1 2 3 1 2 3 1 2 3 1 2
1 2 3 1 2 3 1 2 3 1 2 3

program lignes ;
const MaxChiffres = 4 ;
var nbLignes,i: integer ;

begin
write('Entrez le nombre de lignes : ') ; readln(nbLignes) ;
writeln(Affichage des couples de 1 à ',n) ;

for i := 1 to nbLignes
do begin
chiffre := 1 ;
for j := 1 to i
do begin
write(chiffre);
chiffre :=(chiffre mod 4)+1 ;
end ;
writeln ;
end ;
readln ;
end.

Problème :

Ecrire un programme Pascal permettant de construire et d'afficher le
triangle de pascal suivant :

| | | | | | | | | |1 | | | | | | | | | |
| | | | | | | | |1 | |1 | | | | | | | | |
| | | | | | | |1 | |2 | |1 | | | | | | | |
| | | | | | |1 | |3 | |3 | |1 | | | | | | |
| | | | | |1 | |4 | |6 | |4 | |1 | | | | | |
| | | | |1 | |5 | |10 | |10 | |5 | |1 | | | | |
| | | |1 | |6 | |15 | |20 | |15 | |6 | |1 | | | |
| | |1 | |7 | |21 | |35 | |35 | |21 | |7 | |1 | | |
| |1 | |8 | |28 | |56 | |70 | |56 | |28 | |8 | |1 | |


La ligne i est obtenue à partir de la ligne i-1 par :

Ligne i : ...a b c
Ligne i+1 : a+b b+c

La méthode consiste à utiliser deux tableaux t et s de taille MAX impair :
un qui représente la dernière ligne calculée (et affichée), et l'autre, la
nouvelle ligne à calculer et à afficher. Chaque tableau contient les
nombres de Pascal (coefficients d'un polynôme de Newton) centrés, séparés
et complétés par des 0, qui deviendront des esapces à l'affichage (c'est
l'astuce à utiliser pour obtenir un triangle isocèle).

1. Le triangle de Pascal affiché doit apparaître comme dans la figure
précédente.

2. Ecrire une autre version permettant d'afficher le triangle de Pascal
sous une autre forme, en faisant apparaître à la place des nombres pairs
une étoile « * » et à la place des nombres impairs un espace.

3. {bonus} que faire pour eviter des calcules inutiles ?

program Pascal ;
Const NbLignes = 9
type ligne = array[1.. 2*nbLignes+1] of integer ;

var t, s : ligne ;
i, j, k : integer ;
{question 1 : affichage du triangle avec des nombres}

procedure afficherLigneNombres (t : ligne) ;
begin
{a faire}

end ;
{question 1 : affichage du triangle avec des étoiles}
procedure afficherLigneEtoiles (t : ligne) ;
begin
{a faire}

end ;

begin
writeln(Affichage des ',nbLignes, 'du triangle de Pascal') ;

{Initialisation des deux tableaux}
for i := 1 to 2*nbLignes+1
do begin
t[i] :=0 ;
s[i] :=0 ;
end ;
t[nbLignes+1] :=1 ;

{affichage du triangle}
for i := 1 to nbLignes
do begin
afficherLignesNombres(t) ; {ou afficherLignesEtoiles(t) Q2}
for j := 2 to 2*nbLignes
do s[j] :=t[i-1]+t[i+1];
copier(s,t) ;
end ;
readln ;
end.