Post Page Advertisement [Top]

ASD3 TP

Solution de TP0 ASD3

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.

Bottom Ad [Post Page]