next up previous
Next: Une nouvelle version du Up: Les pointeurs Previous: Les pointeurs

Allocation dynamique de la mémoire

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 tex2html_wrap_inline1388 et tex2html_wrap_inline1390 de taille n (avec n grand). Selon le choix de l'utilisateur on effectuera soit le produit scalaire tex2html_wrap_inline1396 interne soit le produit externe tex2html_wrap_inline1398 . Dans le premier cas le résultat est un nombre réel dans le deuxieme cas il s'agit d'une matrice tex2html_wrap_inline1400 . 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.



Frederic Mesnard
mardi, 15 décembre 1998, 16:13:24 GMT+4