Le matrici

Precedentemente si è parlato dei vettori come una serie di celle una dietro l'altra in linea orizzontale, si possono immaginare le matrici come un rettangolo o un quadrato di celle. Per esempio si può immaginare questo come un vettore di 8 celle:

CELLA0

CELLA1

CELLA2

CELLA3

CELLA4

CELLA5

CELLA6

CELLA7

Mentre si può immaginare quanto segue come una matrice di 5x4 celle:

CELLA0,0

CELLA0,1

CELLA0,2

CELLA0,3

CELLA0,4

CELLA1,0

CELLA1,1

CELLA1,2

CELLA1,3

CELLA1,4

CELLA2,0

CELLA2,1

CELLA2,2

CELLA2,3

CELLA2,4

CELLA3,0

CELLA3,1

CELLA3,2

CELLA3,3

CELLA4,4

Le matrici infatti si possono chiamare anche array multidimensionali. Gli scopi di una matrice sono molteplici, immaginiamo ad esempio il gioco degli scacchi, la scacchiera può essere rappresentata semplicemente con una matrice. La dichiarazione di una matrice si definisce così: nomevariabile: array[Altezza,Larghezza] of tipodivariabile; vediamo un esempio, se volessimo dichiarare la matrice sopra riportata di 5x4 celle dovremmo procedere così: Matrice1: array[0..4,0..3] of integer;. Anche l'uso non è dissimile dai vettori monodimensionali, prendiamo come esempio la matrice di prima e vediamo di riempirla con dei numeri consecutivi.

program project1;


{$mode objfpc}{$H+}


uses

{$IFDEF UNIX}{$IFDEF UseCThreads}

cthreads,

{$ENDIF}{$ENDIF}

Classes, SysUtils, CustApp

{ you can add units after this };


type


{ TMyApplication }


TMyApplication = class(TCustomApplication)

protected

procedure DoRun; override;

public

end;


{ TMyApplication }


procedure TMyApplication.DoRun;

var

Matrice: array[0..4,0..3] of integer;

i,j, contatore: integer;

begin


{ add your program here }

contatore:=0;

for i:=0 to 4 do

begin

for j:=0 to 3 do

begin

Matrice[i,j]:=contatore;

contatore:=contatore+1;

end;

end;

for i:=0 to 4 do

begin

write('|');

for j:=0 to 3 do

begin

if (Matrice[i,j]<=9) then

begin

write('0',Matrice[i,j],'|');

end

else

write(Matrice[i,j],'|');

end;

writeln();

end;

// stop program loop

Terminate;

end;


var

Application: TMyApplication;


{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}


begin

Application:=TMyApplication.Create(nil);

Application.Title:='My Application';

Application.Run;

Application.Free;

end.


Se provate a compilare e ad eseguire il codice appena scritto vedrete il risultato del vostro lavoro.

Esattamente come per i vettori anche le matrici possono essere statiche o dinamiche, quelle appena dichiarate sono statiche, ora vediamo le dinamiche. Sostanzialmente cambia in fase di dichiarazione della variabile, ipotizziamo di voler rifare l'esempio di poco fa sulla matrice statica con una dinamica la dichiarazione della variabile di nome matrice verrebbe così modificata: Matrice: array of array of integer;. Dopodichè dobbiamo definire quanto è grossa la matrice, ma lo facciamo nella fase esecutiva in questa maniera SetLength(Matrice,5,4). Insomma se dovessimo riscrivere il programma con una matrice dinamica il codice sarebbe il seguente:

program project1;


{$mode objfpc}{$H+}


uses

{$IFDEF UNIX}{$IFDEF UseCThreads}

cthreads,

{$ENDIF}{$ENDIF}

Classes, SysUtils, CustApp

{ you can add units after this };


type


{ TMyApplication }


TMyApplication = class(TCustomApplication)

protected

procedure DoRun; override;

public

end;


{ TMyApplication }


procedure TMyApplication.DoRun;

var

Matrice: array of array of integer;

i,j, contatore: integer;

begin


{ add your program here }

SetLength(Matrice,5,4);

contatore:=0;

for i:=0 to 4 do

begin

for j:=0 to 3 do

begin

Matrice[i,j]:=contatore;

contatore:=contatore+1;

end;

end;

for i:=0 to 4 do

begin

write('|');

for j:=0 to 3 do

begin

if (Matrice[i,j]<=9) then

begin

write('0',Matrice[i,j],'|');

end

else

write(Matrice[i,j],'|');

end;

writeln();

end;

// stop program loop

Terminate;

end;


var

Application: TMyApplication;


{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}


begin

Application:=TMyApplication.Create(nil);

Application.Title:='My Application';

Application.Run;

Application.Free;

end.


Provate a compilare e ad eseguire il programma e capirete cosa abbiamo/avete fatto.



SMF 2.0.8 | SMF © 2011, Simple Machines
SMFAds for Free Forums
TinyPortal © 2005-2012

Go back to article