Correction des exercices▲
Ex ex_puiss▲
Sélectionnez
PROGRAM puissances (input, output);
VAR
n, max : integer;
BEGIN
writeln('Nombre maxi ? ');
readln(max);
n := 2;
while n <= max do begin
writeln(n);
n := n * 2
end;
writeln('C''est fini')
END.Ex ex_jeu▲
Sélectionnez
PROGRAM jeu (input, output);
VAR
choix, rep, nb : integer;
BEGIN
nb := 0;
choix := random(11);
repeat
nb := nb + 1;
writeln('Choix ndeg. ',nb,' ? ');
readln(rep)
until rep = choix;
writeln('Trouvé en ',nb,' coups')
END.Ex ex_moy▲
Sélectionnez
PROGRAM moyenne (input, output);
VAR
n, i : integer;
note, total, moyenne : real;
BEGIN
writeln('Nombre notes à entrer ?');
readln(n);
total := 0;
for i := 1 to n do begin
writeln(i,'ième note ? ');
readln(note);
total := total + note
end;
moyenne := total / n;
writeln('La moyenne est : ',moyenne)
END.Ex ex_jeu_bis▲
Sélectionnez
PROGRAM jeu_ameliore (input, output);
VAR
choix, rep, nb : integer;
BEGIN
nb := 0;
choix := random(11);
repeat
nb := nb + 1;
writeln('Choix ndeg. ',nb,' ? ');
readln(rep);
if rep < choix then
writeln('c''est plus')
else if rep > choix then
writeln('c''est moins')
{ le 2ème if empêche d'écrire si juste }
until rep = choix;
writeln('Juste en ',nb,' coups')
END.Ex ex_calc▲
Sélectionnez
PROGRAM calculatrice (input, output);
VAR
val1, val2, resultat : real;
operation : char;
BEGIN
writeln('Première valeur ?');
readln(val1);
writeln('Opération (+ - * /) ? ');
readln(operation)
writeln('Deuxième valeur ? ');
readln(val2);
case operation of
'+' : resultat := val1 + val2;
'-' : resultat := val1 - val2;
'*' : resultat := val1 * val2;
'/' : resultat :=v al1 / val2
end;
writeln('Résultat : ',resultat)
END.Ex moy_a▲
Sélectionnez
PROGRAM moyenne (input,output);
VAR
n, compteur : integer;
somme, moy, ecart : real;
note : array [1..100] of real;
BEGIN
repeat
writeln('nb notes (100 maxi)?');
readln(n)
until (n > 0) and (n <= 100);
{entrée notes et calcul de la somme}
somme := 0;
for compteur := 1 to n do
begin
writeln(compteur,'è note ?');
readln(note[compteur]);
somme := somme + note[compteur]
end;
{calcul et affichage de la moyenne}
moy := somme / n;
writeln('Moyenne : ',moy);
{calcul et affichage des écarts}
writeln('Ecarts :');
for compteur := 1 to n do
begin
ecart := note[compteur] - moy;
writeln(compteur,'ième note (',note[compteur],') : écart : ',ecart)
end
END.Ex rot_b▲
Sélectionnez
PROGRAM rotation (input,output);
VAR
index, n : integer;
prem : real;
tableau : array [1..100] of real;
BEGIN
repeat
writeln('Nb valeurs (100 maxi) ?');
readln(n)
until (n > 0) and (n <= 100);
{ entrée des valeurs }
for index := 1 to n do
begin
writeln(index,'ième valeur ?');
readln(tableau[index]);
end;
writeln('On décale vers le haut');
prem := tableau[1]; { ne pas écraser ! }
for index := 2 to n do
tableau[index - 1] := tableau[index];
tableau[n] := prem;
for index := 1 to n do
writeln(tableau[index]);
writeln('on re-décale vers le bas');
prem := tableau[n];
for index := n downto 2 do
tableau[index] := tableau[index - 1];
tableau[1] := prem;
for index := 1 to n do
writeln(tableau[index])
END.Ex clas_c▲
Sélectionnez
PROGRAM classer (input,output);
VAR
n, i, index, petit, indexpetit : integer;
avant, apres : array [1..100] of integer;
pris : array [1..100] of boolean;
{ pour noter ceux déjà pris }
BEGIN
repeat
writeln('Nb valeurs (100 maxi) ?');
readln(n)
until (n > 0) and (n <= 100);
{ entrée valeurs - initialisation de pris }
for index := 1 to n do
begin
writeln(index,'ième valeur ? ');
readln(avant[index]);
pris[index] := false
end;
{ ordre croissant,on cherche N valeurs }
for i := 1 to n do
begin
petit := maxint; { plus grand possible }
{ recherche du plus petit non pris }
for index := 1 to n do
if (not pris[index]) and (avant[index] <= petit) then
begin
petit := avant[index];
indexpetit := index
end;
{ sauvegarde dans le tableau APRES et mise à jour de PRIS }
apres[i] := petit;
pris[indexpetit] := true
end; { passage au prochain i }
{ affichage du tableau APRES }
writeln('Par ordre croissant : ');
for i := 1 to N do writeln(apres[i]);
{ classement par ordre décroissant }
writeln('Par ordre décroissant : ');
for i := n downto 1 do writeln(apres[i])
{ n'auriez-vous pas tout refait ? }
END.Ex ex_str▲
Sélectionnez
PROGRAM position (input,output);
VAR
ch, sch : string [255];
i, j, n, l, ls : integer;
BEGIN
writeln('Chaîne à tester ? ');
readln(ch);
writeln('Sous-chaîne à trouver ?');
readln(sch);
l := length(ch);
ls := length(sch);
n := 0;
for i := 1 to l - ls do
begin
j := 1;
while (j <= l) and (ch[i + j - 1] = sch[j]) do
j := j + 1;
if j > ls then
begin
writeln('Trouvé position ',i);
n := n + 1
end
end;
writeln(n,' fois ',sch,' dans ',ch)
END.Ex mat▲
Sélectionnez
PROGRAM produit_mat (input,output);
VAR
m1, m2, m3 : array [1..10,1..10] of real;
l, m, n, jl, jm, jn : integer;
BEGIN
writeln('Nb lignes 1ère matrice ?');
readln(m);
writeln('Nb colonnes 1è matrice ?');
readln(l);
writeln('Nb colonnes 2è matrice ?');
readln(n);
{ entrée de m1 }
writeln('Première matrice');
for jm := 1 to m do
for jl := 1 to l do
begin
writeln('lig',jm,', col',jl,'?');
readln(m1[jm,jl])
end;
{ entrée de m2 }
writeln('2ième matrice');
for jl := 1 to l do
for jn := 1 to n do
begin
writeln('lig',jl,', col',jn,'?');
readln(m2[jl,jn])
end;
{ calcul du produit }
for jm := 1 to m do
for jn := 1 to n do
begin {calcul composante m,n de m2}
m3[jm,jn] := 0;
for jl := 1 to l do
m3[jm,jn] := m3[jm,jn] + (m1[jm,jl] * m2[jl,jn]);
end;
{ affichage du résultat }
writeln('Résultat');
for jm := 1 to m do
for jn := 1 to n do
writeln('m[',jm,',',jn,']=',m3[jm,jn])
END.Ex tel▲
Sélectionnez
PROGRAM annuaire (input,output);
{ version simplifiée }
TYPE
ligne = string [40];
typepersonne = record
nom : ligne;
num_tel : ligne
{ integer malheureusement < 32635 }
end;
VAR
pers : array [1..100] of typepersonne;
nb, i : 1..100;
rep : char;
imprimer : boolean;
texte : ligne;
BEGIN
{ on suppose avoir ici les instructions permettant de lire sur fichier disque NB et le tableau PERS }
repeat
writeln('Recherche suivant : ');
writeln(' N : nom');
writeln(' T : numéro téléphone');
writeln(' Q : quitter le prog');
writeln('Quel est votre choix ?');
readln(rep);
if rep <> 'Q' then begin
writeln('Texte à chercher ? ');
readln(texte)
for i := 1 to nb do with pers[i] do
begin
case rep of
'N' : imprimer := nom = texte;
'T' : imprimer := num_tel = texte;
end;
if imprimer then begin
writeln('Nom : ',nom);
writeln('Tel : ',num_tel)
end
end
end
until rep = 'Q'
END.Ex rec▲
Sélectionnez
PROGRAM determ (input,output);
{ on se limite à 10x10, ce qui fait 7h de calcul et 6.235.314 appels à DETN }
TYPE
tmat = array [1..10,1..10] of real;
VAR
dim : integer; { dimension matrice à calculer }
det : real; { résultat désiré }
mat : tmat; { matrice à calculer }
appel : real; { nb d'appels }
procedure entree;
var lig, col : integer;
begin
writeln('Dimension de la matrice ?');
readln(dim); { DIM variable globale }
writeln('Entrez les composantes :');
for lig := 1 to dim do begin
writeln('pour la ligne ndeg. ',lig);
for col := 1 to dim do begin
writeln('colonne ',col,' ?');
readln(mat[lig,col])
end
end
end;
procedure sous_mat (mdeb : tmat; var mfin : tmat; ind, dim : integer);
{ on supprime la colonne 1 et la ligne ind pour avoir la s/mat de dim-1 }
var col, lig, l : integer;
begin
l := 0;
for lig := 1 to dim do begin
if lig <> ind then begin
l := l + 1;
for col := 2 to dim do
mfin[l,col - 1] := mdeb[lig,col]
end
end
end;
function detn (m : tmat; d : integer) : real;
{ dét ordre d en fonction ordre d-1 }
var result : real;
mprim : tmat; { matrice intermédiaire }
lig, signe : integer;
begin
appel := appel + 1;
if d = 1 then detn := m[1,1]
{ fin de récursivité }
else begin
result := 0;
signe := -1;
for lig := 1 to d do begin
sous_mat(m,mprim,lig,d);
signe := -signe;
{ changer de signe à chaque ligne }
result := result + (signe * m[lig,1] * detn(mprim,d - 1))
end;
detn := result
end
end;
BEGIN { programme principal }
entree;
appel := 0;
det := detn(mat,dim);
writeln('résultat : ',det);
writeln('nb appels DETN : ',appel)
END.Ex fichier▲
Sélectionnez
procedure lirefic;
var i : 1..100;
f : file of typepersonne;
{ variables globales : NB et le tableau PERS }
begin
assign(f,'annuaire'); {non standard}
reset(f);
nb := 0;
while not EOF(f) do begin
nb := nb+1;
read(f,pers[nb)
end;
close(f)
end;
{Ã vous de faire la suite}Ex pointeurs▲
Sélectionnez
PROGRAM liste(input,output);
TYPE
tpoint = ^tval;
tval = record
valeur : integer;
suivant : tpoint
end;
VAR
prem : tpoint; { variable globale }
n:integer;
c:char;
procedure lire;
{ modifie N et PREM }
var precedent, point : tpoint;
i : integer;
begin
write('Combien d''éléments?');
readln(n);
new(prem);
write('1ère valeur ? ');
readln(prem^.valeur);
precedent := prem;
for i := 2 to n do begin
new(point);
write(i,'ième valeur ? ');
readln(point^.valeur);
precedent^.suivant := point;
precedent := point
end;
precedent^.suivant := NIL
{ le dernier ne pointe sur rien }
end;
procedure afficher;
var point : tpoint;
i : integer;
begin
point := prem;
for i := 1 to n do begin
writeln(point^.valeur);
point := point^.suivant
end
end;
procedure supprimer;
var point, prec : tpoint;
rep : char;
begin
point := prem;
repeat
write(point^.valeur,' à ôter ?');
readln(rep);
if rep = 'O' then begin
n := n-1;
if point <> prem then begin
prec^.suivant := point^.suivant;
dispose(point);
point := prec^.suivant
{ se préparer pour la suite }
end
else begin
prem := prem^.suivant;
dispose(point);
{ ancien premier }
point := prem
end
end
else begin
{ pointer sur le suivant }
prec := point;
point := point^.suivant
end
until point = nil
end;
procedure rajouter;
var p1, p2, prec : tpoint;
rep : char;
begin
p1 := prem;
repeat
write(p1^.valeur,'Rajouter un élément avant (O/N) ? ');
readln(rep);
if rep = 'O' then begin
n := n + 1;
if p1 <> prem then begin
new(p2);
write('Valeur ? ');
readln(p2^.valeur);
prec^.suivant := p2;
p2^.suivant := p1;
prec := p2;
end
else begin
new(p1);
write('Valeur ? ');
readln(p1^.valeur);
p1^.suivant := prem;
prem := p1
end
end
else begin
{ pointer sur le suivant }
prec := p1;
p1 := p1^.suivant
end
until p1=nil;
p1 := prec;
repeat
write('Ajouter un élément en fin de liste (O/N) ? ');
readln(rep);
if rep = 'O' then begin
n := n + 1;
new(p2);
write('Valeur ? ');
readln(p2^.valeur);
p1^.suivant := p2;
p2^.suivant := nil;
p1 := p2
end
until rep<>'O'
end;
BEGIN { programme principal }
lire;
repeat
writeln('A:afficher, S:supprimer R:rajouter, F:fin');
write('Votre choix ? ');
readln(c);
case c of
'A' : afficher;
'S' : supprimer;
'R' : rajouter
end
until c = 'F'
END.
