SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono...
-
Upload
enrichetta-perego -
Category
Documents
-
view
217 -
download
0
Transcript of SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono...
![Page 1: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/1.jpg)
![Page 2: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/2.jpg)
SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI
Array Multidimensionale: un array per il quale sono necessarie piùespressioni per accedere ad uno dei suoi elementi
Dimensione di un Array: numero di espressioni di sub-range richieste per accedere ad un elemento dell’array.
![Page 3: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/3.jpg)
Dichiarazione di ARRAY
TYPE Sub-range1=1..Max1 Sub-range2=1..Max2
NomeArray = ARRAY[Sub-range1,Sub-range2] OF real
,
ARRAY [ ]Type del sub-range
OF Type
![Page 4: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/4.jpg)
TYPE Sub-range1=1..Max1 Sub-range2=1..Max2
NomeArray = ARRAY[Sub-range1,Sub-range2] OF real
VAR VotoStudente, Studente,Test : integer; Risultati: ArrayRisultati;
BEGINVotoStudente:=Risultati[Studente,Test]
,
Accesso all’array[ ]espressioni
dei sub-rangeidentificatore
![Page 5: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/5.jpg)
1 2 3 4 5 6 7 8 9 10TEST
STUDENTI 1
23
.
.
.
66
.
75
2122
25
28
26
27
21
18
30
30
27
21
TotaleStudenti=66TotaleTest=5
Le righe rappresentano gli studenti.Le colonne rappresentano i test.Nelle caselle ci sono i risultati che ogni studente ha conseguito neisingoli test.
9
26
![Page 6: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/6.jpg)
CONST MassimoStudenti=75; MasimoTest=10;TYPE TipoNumStud = 1.. MassimoStudenti; TipoNumTest = 1.. MasimoTest; ArrayRisultati = ARRAY[TipoNumStud , TipoNumTest ] OF integer;VAR TotaleStudenti, TotaleTest : integer; Risultati: ArrayRisultati;
Esempio:Risultati[3,2]=28lo studente 3 ha conseguito nel test 2 il risultato di 28.
![Page 7: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/7.jpg)
Notare che non tutti gli elementi dell’array possono essere necessariamente riempiti, per cui ad alcune caselle non è assegnatonessun valore.
Ogni riga e ogni colonna dell’array possono essere visti come arraymono-dimensionali. Ad essi può quindi essere attribuito un significatopreciso.
Esempio:Nel caso dell’array precedente considerando la sola riga i-esima essarappresenta i voti conseguiti dallo studente i-esimo nei test effettuati.Quindi ad esempio potremmo calcolare la media relativa allo studentei-esimo.Analogamente la colonna k-esima rappresenta i voti conseguiti datutti gli studenti nel test k. Anche in questo caso potremmo fare lamedia ottenuta dagli studenti per quel test.
![Page 8: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/8.jpg)
REGOLA 1Accedere ad un array bidimensionale con una espressione coerentecon l’ordine in cui l’array è stato definito.
Esempio: per sapere il voto che nel test 5 ha preso lo studente 3 bisogna consultare Risultati[3,5] e non Risultati[5,3]
REGOLA 2Assegnare sempre un valore alle variabili adoperate per accedereagli elementi di un array.
Esempio: se vogliamo scrivere i risultati in Risultati[X,Y] le variabili X e Y devono essere state preventivamente istanziate.
![Page 9: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/9.jpg)
FUNCTION MediaCorso(VAR Risultati: ArrayRisultati; NumTest, TotaleStudenti: integer): real;
{calcola la media dei voti degli studenti del corso dato il test}VAR StudenteNo, SommaVoti: integer;
BEGIN SommaVoti:=0; FOR StudenteNo=1 TO TotaleStudenti DO SommaVoti=SommaVoti+Risultati[StudenteNo,NumTest]; MediaCorso:=SommaVoti/ TotaleStudenti END;
![Page 10: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/10.jpg)
Così come avviene per gli array monodimensionali possiamo utilizzare subrange dei tipi più diversi purché ordinali.
Esempio Si vuole costruire un array in cui ogni colonna rappresenta un piccolopaese, massimo mille abitanti, e per ogni paese vogliamo registrare ilnome degli abitanti.L’array quindi è di tipo stringa per cui nelle caselle vuote ci sarà lastringa nulla ‘’.
CONSTMassimoAbitanti=1000;TYPETipoStringa=STRING[50];SubrangeAbitanti=1.. MassimoAbitanti;NomePaesi=(Nessuno, Acerra, Afragola, Capri, Casoria,
Ischia, Procida);NomeArray: ARRAY[SubrangeAbitanti,NomePaesi] OF TipoStringa;VAR Abitanti: NomeArray;
![Page 11: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/11.jpg)
Acerra Afragola Capri Ischia Procida
1
2
515
841
1000
.
...
.
...
.
.
.
...
.
...
.
.
.
.
.
.
Esposito A.Bianchi G.
Rossi A. Russo T.
Annibale T.Cesare G.
Tirchio F.
Ricco S. Orofino T.
Esca T.
Argento T.Diamante A.Orazio P.
Romeo A.
Rendina A.
![Page 12: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/12.jpg)
Si noti che i dati presenti nell’array potrebbero essere organizzati nelle maniere più diverse:• per età del cittadino• alfabetico• per importanza sociale • etc.
Noto il criterio con cui i dati sono inseriti si possono progettare opportuni algoritmi di ricerca e ordinamento.
![Page 13: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/13.jpg)
Altri esempi di array bidimensionali sono le scacchiere per il gioco degli scacchi o della dama.
T C A Q R A C T
P P P P P P P P
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
t c a q r a c t
p p p p p p p p
H
G
F
E
D
C
A
B
1 2 3 4 5 6 7 8
TYPE TipoScacchiera: ARRAY[‘A’,..’H’,’1’..’8’] OF char;VAR Scacchiera:TipoScacchiera;
![Page 14: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/14.jpg)
A B C D EProdotto
IndiceVend 18
12 21 28
30 3 28
3 22 28 28
21 26 3 30
26 3 26 26
1
23
.45.
.
100
2122
25
28
26
27
18
30
30
27
21
CONSTMaxVend=100;
TYPETipoVend=1..MaxVend;TipoProd=‘A’..’E’;ArrayVendite=ARRAY[TipoVend,TipoProd] OF integer;
VARVenduto:ArrayVendite;TotVenditori:TipoVend;
ALGORITMI PER L’ELABORAZIONE DI ARRAY BIDIMENSIONALI
![Page 15: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/15.jpg)
ELABORAZIONE RIGA PER COLONNA
FOR IndiceRiga PrimaRiga TO UltimaRiga DOFOR IndiceColonna PrimaColonna TO UltimaColonna DO
elabora UnArray[IndiceRiga,IndiceColonna]
ELABORAZIONE COLONNA PER RIGA
FOR IndiceColonna PrimaColonna TO UltimaColonna DOFOR IndiceRiga PrimaRiga TO UltimaRiga DO
elabora UnArray[IndiceRiga,IndiceColonna]
![Page 16: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/16.jpg)
ELABORAZIONE PER SINGOLA RIGA
Assegna un IndiceRigaFOR IndiceColonna PrimaColonna TO UltimaColonna DO
elabora UnArray[IndiceRiga,IndiceColonna]
ELABORAZIONE PER SINGOLA COLONNA
Assegna un IndiceColonnaFOR IndiceRiga PrimaRiga TO UltimaRiga DO
elabora UnArray[IndiceRiga,IndiceColonna]
![Page 17: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/17.jpg)
PROCEDURA DI LETTURA DA UN FILE E SCRITTURA IN UN ARRAY
PROCEDURE LeggiFile(VAR TotVenditori: TipoVend;VAR Venduto: ArrayVend; VAR VendFile: text);
VAR IndiceVend: TipoVend;Prodotto: TipoProd ;
BEGIN reset(VendFile); readln(VendFile,TotVenditori); FOR IndiceVend:=1 TO TotVenditori DO
BEGIN FOR Prodotto:=‘A’ TO ‘E’ DO
read(VendFile, Venduto[IndiceVend, Prodotto]); readln(VendFile)END
END;
CONSTMaxVend=100;
TYPETipoVend=1..MaxVend;TipoProd=‘A’..’E’;ArrayVendite=ARRAY[TipoVend,TipoProd] OF integer;
VARVenduto:ArrayVendite;TotVenditori:TipoVend;
1812 21 28
30 3 283 22 28 2821 26 3 3026 3 26 26
6
2122
25
28
26
27
18
30
30
27
21
![Page 18: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/18.jpg)
PROCEDURA DI ELABORAZIONE COLONNA PER RIGA DI UN ARRAY
PROCEDURE ElaboraPerRiga(VAR Venduto: ArrayVend; VAR TotVenditori: TipoVend;)
VAR IndiceVend: TipoVend;Prodotto: TipoProd ;Somma: integer;
BEGINFOR Prodotto:=‘A’ TO ‘E’ DO
BEGINSomma:=0; FOR IndiceVend:=1 TO TotVenditori DO
Somma:=Somma+ Venduto[IndiceVend, Prodotto]; writeln(‘Del prodotto ‘,Prodotto,’ si sono venduti ‘,Somma:1,’ pezzi.’)END
END;
1812 21 28
30 3 283 22 28 2821 26 3 3026 3 26 26
2122
25
28
26
27
18
30
30
27
21
Prodotto IndiceVend
CONSTMaxVend=100;
TYPETipoVend=1..MaxVend;TipoProd=‘A’..’E’;ArrayVendite=ARRAY[TipoVend,TipoProd] OF integer;
VARVenduto:ArrayVendite;TotVenditori:TipoVend;
![Page 19: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/19.jpg)
PROGRAM ElaboraBidi(output,VendFile);CONST
MaxVend=100;TYPE
TipoVend=1..MaxVend;TipoProd='A'..'E';ArrayVendite=ARRAY[TipoVend,TipoProd] OF integer;
VAR VendFile:text;
Venduto:ArrayVendite;TotVenditori:TipoVend;
PROCEDURE LeggiFile(VAR TotVenditori: TipoVend; VAR Venduto: ArrayVendite; VAR VendFile: text);
……………………………………….PROCEDURE ElaboraPerRiga(VAR Venduto: ArrayVendite; VAR
TotVenditori: TipoVend); ……………………………………….PROCEDURE Stampa(VAR Venduto: ArrayVendite; VAR TotVenditori:
TipoVend); ……………………………………….BEGIN LeggiFile(TotVenditori,Venduto,VendFile); Stampa(Venduto,TotVenditori); ElaboraPerRiga(Venduto,TotVenditori); readlnEND.
![Page 20: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/20.jpg)
Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International A B C D E1- 21 25 18 30 212- 22 12 18 21 283- 27 28 30 23 284- 23 26 22 28 285- 21 30 26 23 306- 26 30 26 27 26
Del prodotto A si sono venduti 140 pezzi.Del prodotto B si sono venduti 151 pezzi.Del prodotto C si sono venduti 140 pezzi.Del prodotto D si sono venduti 152 pezzi.Del prodotto E si sono venduti 161 pezzi.
![Page 21: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/21.jpg)
Un caso di studio
Gestione stipendi impiegati
Supponiamo di avere N impiegati.
Ogni impiegato ha una sua paga oraria.
Gli stipendi vengono pagati ogni settimana sulla base delle ore lavorate. Nel caso
l’impiegato lavori il Sabato o la Domenica la paga raddoppia.
I dati sono così strutturati.
File con la paga oraria degli impiegati.
File settimanale contenente nel primo rigo la data in formato stringa e il numero totale
di impiegati.
Dal secondo rigo in poi contiene:
Cognome^ e le ore lavorate nei 7 giorni. Es.
Rossi^ 0.0 8.0 8.0 7.0 9.0 6.0 2.0<eoln>
Calcolare per ogni impiegato la paga della settimana, le ore totali lavorate, le ore totali
lavorate ogni giorno da tutti gli impiegati, il totale complessivo delle ore e delle paghe.
![Page 22: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/22.jpg)
InputSettimana: 18-24/12/2000
OutputSettimana del 18-24/12/2000Rossi ha lavorato 24 ore. Totale busta paga : Lit. 320.000Bianchi ha lavorato 30 ore. Totale busta paga : Lit. 530.000……………………………Totale ore lavorate dalle 7 unità di personale: 870Totale costo personale: 5.334.000
File PagaOrar12000090000……………...
File Or18120018/12/2000^ 7Rossi^ 0.0 8.0 8.0 7.0 9.0 6.0 2.0
Bianchi^ 1.0 7.0 0.0 5.0 9.0 8.0 0.0
……………...
![Page 23: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/23.jpg)
Pseudo codice
AssegnaFileDati(FPaghe,FSett); {leggi e apri i File dati Orxxyyzz e PagOrar}
LeggiPaghe(FPaghe,POraria); {leggi PagOrar e metti dati nell'Array POraria}
LeggiPrimoRigo(FSett,Data,NImp); {leggi primo rigo di Orxxyyzz , Data, NImp}
LeggiSettimana(FSett,Settimana,Nomi,NImp);
{legge NImp righi di Orxxyyzz dopo il primo e mette i dati nell'Array Settimana}
CalcolaPagaSettimanale(POraria, Settimana, Nomi,NImp,Data);
{calcola le paghe e le stampa}
![Page 24: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/24.jpg)
Rappresentazione Grafica
AssegnaFileDati LeggiPaghe LeggiPrimoRigo LeggiSettimana
CalcolaPagheSettimanali
LeggiRigo LeggiRigo
FpagheFSett
Fpaghe
POraria
FSett
DataNImp
NImpFSett
SettimanaNomi
POrariaSettimanaNomiNimpData
FSett Data FSett Nome
![Page 25: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/25.jpg)
PROGRAM Paghe(input,output,FPaghe,FSett);{leggi dai File dati Orxxyyzz e PagOrar le ore lavorate e le paghe orariee calcola la paga per ogni impiegato}CONSTMaxImp=25;TYPETipoStringa=STRING[30];TipoGiorni=(Nessuno, Dom,Lun,Mar,Mer,Gio,Ven,Sab);TipoSett=ARRAY[1..MaxImp,Dom..Sab] OF real;TipoOrar=ARRAY[1..MaxImp] OF real;TipoNome=ARRAY[1..MaxImp] OF TipoStringa;VARFPaghe, FSett:text;Settimana:TipoSett;POraria:TipoOrar;NImp:integer;Data:TipoStringa;Nomi:TipoNome;PROCEDURE AssegnaFileDati(VAR FPaghe1,FSett1:text);BEGIN END;PROCEDURE LeggiStringa(VAR Fsett1:text;VAR Data1:TipoStringa);BEGIN END;PROCEDURE LeggiPrimoRigo(VAR FSett1:text;VAR Data1:TipoStringa; VAR NImp1:integer);BEGIN END;PROCEDURE LeggiPaghe(VAR FPaghe1:text;VAR POraria:TipoOrar);BEGIN END;PROCEDURE LeggiSettimana(VAR FSett2:text; VAR Settimana1:TipoSett; VAR Nomi1:TipoNome;NImp1:integer);{legge NImp righi di Orxxyyzz dopo il primo e mette i dati nell'Array Settimana}BEGIN END;PROCEDURE CalcolaPagaSettimanale(VAR POraria1:TipoOrar; VAR Settimana1:TipoSett;VAR Nomi1:TipoNome;NImp1:integer;Data1:TipoStringa);{calcola le paghe e le stampa}BEGIN END;
![Page 26: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/26.jpg)
{******************* BODY *******************************}
BEGIN
AssegnaFileDati(FPaghe,FSett); {leggi e apri i File dati Orxxyyzz e PagOrar}
LeggiPaghe(FPaghe,POraria); {legge PagOrar e metti dati nell'Array POraria}
LeggiPrimoRigo(FSett,Data,NImp); {legge primo rigo di Orxxyyzz , Data, NImp}
LeggiSettimana(FSett,Settimana,Nomi,NImp); {legge NImp righi di Orxxyyzz dopo il primo e mette i dati nell'Array Settimana}
CalcolaPagaSettimanale(POraria, Settimana, Nomi,NImp,Data); {calcola le paghe e le stampa}
readln
END.
![Page 27: SINTASSI E SEMANTICA DEGLI ARRAY BIDIMENSIONALI Array Multidimensionale: un array per il quale sono necessarie più espressioni per accedere ad uno dei.](https://reader031.fdocuments.us/reader031/viewer/2022013100/5542eb59497959361e8c4c14/html5/thumbnails/27.jpg)
ARRAY A TRE DIMENSIONI
99
1 2 ……………...…27…….………..52 9091Bari
Roma
Napoli
Venezia
31
Lotto:ARRAY[‘Bari’..’Venezia’,1..52,90..99] OF 1..90;