Le but des pointeurs est de pouvoir gérer dynamiquement la mémoire
de l'ordinateur. Prenons l'exemple de l'application suivante : on a deux
vecteurs
et
de taille n (avec n grand).
Selon le choix de l'utilisateur
on effectuera soit le produit scalaire
interne soit le produit
externe
. Dans le premier cas le résultat est un nombre
réel dans le deuxieme cas il s'agit d'une matrice
.
L'utilisation des pointeurs va nous permettre d'allouer la mémoire nécessaire
au stockage de la matrice seulement
si on en a besoin.
program allocation;
const n=1000;
type vecteur=array[1..n] of real;
pvecteur=^vecteur;
matrice=array[1..n, 1..n] of real;
pmatrice=^matrice;
var pv1, pv2 : pvecteur;
pm : pmatrice;
x : real;
choix : integer;
procedure produit_interne(v, w : vecteur; var p : real);
var i : integer;
begin
p:=0;
for i:=1 to n do p:=p+v[i]*w[i];
end;
procedure produit_externe(v, w : vecteur; var m : matrice);
var i, j : integer;
begin
for i:=1 to n do
for j:=1 to n do
m[i,j]:=v[i]*w[j];
end;
procedure saisie(var v : vecteur);
var i : integer;
begin
for i:=1 to n do
begin
writeln('entrez le coefficicent ',i:2);
readln(v[i]);
end;
end;
procedure affiche_matrice(m : matrice);
var i, j : integer;
begin
for i:=1 to n do
begin
writeln;
for j:=1 to n do
write(m[i,j]);
end;
end;
begin
new(pv1);
new(pv2);
saisie(pv1^);
saisie(pv2^);
writeln('Pour le produit interne entrez 1, pour le produit externe 2');
readln(choix);
while (choix<>1) and (choix<>2) do
begin
writeln('mauvais choix, recommencez');
readln(choix);
end;
if (choix=1) then
begin
produit_interne(pv1^, pv2^, x);
writeln('Le resultat du produit interne est ', x);
end
else
begin
new(pm);
produit_externe(pv1^, pv2^, pm^);
writeln('Le resultat du produit externe est');
affiche_matrice(pm^);
end;
end.