Written by xinyiman Ottobre 20, 2011, 10:15:00 am22147 ViewsRating: (1 Rates)Print
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.
About the author
xinyiman registered at Italian community of Lazarus and Free Pascal on Ottobre 14, 2011, 10:56:28 pm and has posted 3271 posts in the boards since then. Last visit was Oggi alle 08:25:59 am.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.