Unità Insiemi

Analisi

Unità

{************************************************************************}
Unit Insiemi;
{************************************************************************}
INTERFACE
{************************************************************************}
Const MaxIns   = 20;
Type  Elemento = 1..MaxIns;
      Insieme  = Array[Elemento] Of Boolean;

Procedure AggiungiE    (Var I: Insieme; e: Elemento     );
Procedure TogliE       (Var I: Insieme; e: Elemento     );
 Function AppartieneE  (    I: Insieme; e: Elemento     ): Boolean;

Procedure VuoToI       (Var I: Insieme                  );
Procedure ComplemenToI (Var I: Insieme                  );

Procedure UnioneI      (i1, i2: Insieme; Var i3: Insieme);
Procedure IntersezioneI(i1, i2: Insieme; Var i3: Insieme);
Procedure DifferenzaI  (i1, i2: Insieme; Var i3: Insieme);

{
 sono ancora da fare le operazioni:

 Function InclusoUgI   (i1, i2: Insieme): Boolean;
 Function IncludeUgI   (i1, i2: Insieme): Boolean;
 Function UgualiI      (i1, i2: Insieme): Boolean;
 Function DiversiI     (i1, i2: Insieme): Boolean;
}

{************************************************************************}
IMPLEMENTATION
{************************************************************************}

{********************* incapsulamenTo dei dati ... **********************}
Procedure AggiungiE(Var I: Insieme; e: Elemento);
Begin
   I[e]:=True;
End;
Procedure TogliE(Var I: Insieme; e: Elemento);
Begin
   I[e]:=False;
End;
Function AppartieneE(I: Insieme; e: Elemento): Boolean;
Begin
   AppartieneE:=(I[e]);
End;
{************************************************************************}
Procedure VuoToI(Var I: Insieme);
Var
   e: Elemento;
Begin
   For e:=1 To maxIns Do
      TogliE(I, e);
End;
Procedure ComplemenToI(Var I: Insieme);
Var
   e: Elemento;
Begin
   For e:=1 To maxIns Do
      if(AppartieneE(I, e)) Then
         TogliE(I, e)
      else
         AggiungiE(I, e);
End;
Procedure UnioneI(i1, i2: Insieme; Var i3: Insieme);
Var
   e: Elemento;
Begin
   VuoToI(i3);
   For e:=1 To maxIns Do
      if(AppartieneE(i1, e) Or AppartieneE(i2, e)) Then
         AggiungiE(i3, e);
End;

Procedure IntersezioneI(i1, i2: Insieme; Var i3: Insieme);
Var
   e: Elemento;
Begin
   VuoToI(i3);
   For e:=1 To maxIns Do
      if(AppartieneE(i1, e) And AppartieneE(i2, e)) Then
         AggiungiE(i3, e);
End;

Procedure DifferenzaI(i1, i2: Insieme; Var i3: Insieme);
Var
   e: Elemento;
Begin
   VuoToI(i3);
   For e:=1 To maxIns Do
      if(AppartieneE(i1, e) And Not AppartieneE(i2, e)) Then
         AggiungiE(i3, e);
End;

{************************************************************************}
Begin
   writeln('Unit Insiemi 20/11/2000...');
   readln;
End.
{************************************************************************}

oppure, senza incapsulare …

Procedure VuoToI(Var I: Insieme);
Var
   e: Elemento;
Begin
   For e:=1 To maxIns Do
      I[e]:=False;
End;

Procedure ComplemenToI(Var I: Insieme);
Var
   e: Elemento;
Begin
   For e:=1 To maxIns Do
      I[e]:=(Not I[e]);
End;

Procedure UnioneI(i1, i2: Insieme; Var i3: Insieme);
Var
   e: Elemento;
Begin
   For e:=1 To maxIns Do
      i3[e]:=(i1[e] Or i2[e]);
End;

Procedure IntersezioneI(i1, i2: Insieme; Var i3: Insieme);
Var
   e: Elemento;
Begin
   For e:=1 To maxIns Do
      i3[e]:=(i1[e] And i2[e]);
End;

Procedure DifferenzaI(i1, i2: Insieme; Var i3: Insieme);
Var
   e: Elemento;
Begin
   For e:=1 To maxIns Do
      i3[e]:=(i1[e] And Not i2[e]);    {!!!}
End;