CAPITOLO 11.

Slides:



Advertisements
Presentazioni simili
CALENDARIO FORMAZIONE LISEM 2004/2005 Labirinto, test sul potenziale imprenditoriale 01/10/2004 (ven) h – Tecniche creative e pensiero propositivo.
Advertisements

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Esercizio Usate il ciclo repeat until (controllo post condizionale) per simulare il prodotto N x M con M somme di N. Esempio: 5 x 3 equivale a fare 5 +5.
Informatica 22/03/2012.
CAPITOLO 2.
Dati strutturati A. Ferrari.
Array multidimensionali
3TC – Aprile 07 RIPASSOArray Procedure e Funzioni.
I dati: tipi e strutture U.D. 9 pag 334 L.S. Tron 4TC a.s. 2006/07.
LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.
PROGRAMMARE IN PASCAL (le basi)
Le funzioni UD. 8 – Lorganizzazione dei programmi p. 309 LS Tron 4TC 06/07.
I File di testo in Pascal
Universita di Camerino
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Esercitazione 2 Array, funzioni, form
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
numero rette n numero parti piano f(n) f(n -1)n -1 f(n -1) + nn numero parti piano f(n) numero rette n.
Anno accademico Array e puntatori in C.
Programmazione Procedurale in Linguaggio C++
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata al 4 Marzo 2013.
File.
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Corso di Informatica (Basi di Dati)
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Ricorsione e Debug.
Array Un array è una collezione in sequenza di variabili del medesimo tipo Riferimento con un nome comune Nome_studente1 Nome_studente2. Nome_studenteN.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
A cura prof. Giovanni Raho Per gli studenti di Scienze psicologiche 01/05/ © prof. Giovanni raho.
Array Struttura numerate di dati. Memorizzare molti dati In informatica cè spesso bisogno di memorizzare ed elaborare un insieme costituito da molti dati.
Esercitazioni sui File Nicola Fanizzi - DIB Corso (B) di Programmazione CdL in Informatica – I livello A.A. 2003/2004.
Organizzazione del corso
Algoritmi su Tipi Semplici
Struct, enum, Puntatori e Array dinamici
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
Progetto a.a ( Modulo A ) Un file di testo ARTICOLI.DAT contiene dei prodotti da vendere (max 10) con le seguenti caratteristiche: ::= descrizione.
Problema Ci sono 5 signore nel parco. Ognuna di loro ha 1 figlio. Ogni bambino ha 10 figurine di calciatori, per un totale quindi di 50 figurine. Questi.
OPERAZIONI CON STRINGHE Le operazioni più interessanti da fare, per ora, con le stringhe sono: determinare la lunghezza della stringa, cioè quanti caratteri.
CAPITOLO 7.
FILE TESTO OUTPUT INPUT + DATI PROGRAMMA OUTPUT INPUT PROGRAMMA CARICAMENTO DATI FILE DATI.
CAPITOLO 10.
RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO.
CAPITOLO 6.
Sistemi e Tecnologie Informatiche
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
XLS ESERCIZIO BASE EXCEL – ESERCIZIO BASE
lun mar mer gio ven SAB DOM FEBBRAIO.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
4/5/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
RossiUgo /8796 BianchiCarlo /8746 II I Sia dato un file di testo riguardante un insieme di studenti di cui è.
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
Informatica e Informatica di Base
Transcript della presentazione:

CAPITOLO 11

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.

Dichiarazione di ARRAY , ARRAY [ ] Type del sub-range OF Type TYPE Sub-range1=1..Max1 Sub-range2=1..Max2 NomeArray = ARRAY[Sub-range1,Sub-range2] OF real

NomeArray = ARRAY[Sub-range1,Sub-range2] OF real VAR Accesso all’array [ ] espressioni dei sub-range identificatore TYPE Sub-range1=1..Max1 Sub-range2=1..Max2 NomeArray = ARRAY[Sub-range1,Sub-range2] OF real VAR VotoStudente, Studente,Test : integer; Risultati: ArrayRisultati; BEGIN VotoStudente:=Risultati[Studente,Test]

Le righe rappresentano gli studenti. Le colonne rappresentano i test. 1 2 3 4 5 6 7 8 9 10 STUDENTI 1 21 25 30 21  2 22 18 3 27 28 26 26 . 30 TotaleStudenti=66 TotaleTest=5 27 . vuoto . 21 9 66 . vuoto 75 Le righe rappresentano gli studenti. Le colonne rappresentano i test. Nelle caselle ci sono i risultati che ogni studente ha conseguito nei singoli test.

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]=28 lo studente 3 ha conseguito nel test 2 il risultato di 28.

Notare che non tutti gli elementi dell’array possono essere necessariamente riempiti, per cui ad alcune caselle non è assegnato nessun valore. Ogni riga e ogni colonna dell’array possono essere visti come array mono-dimensionali. Ad essi può quindi essere attribuito un significato preciso. Esempio: Nel caso dell’array precedente considerando la sola riga i-esima essa rappresenta i voti conseguiti dallo studente i-esimo nei test effettuati. Quindi ad esempio potremmo calcolare la media relativa allo studente i-esimo. Analogamente la colonna k-esima rappresenta i voti conseguiti da tutti gli studenti nel test k. Anche in questo caso potremmo fare la media ottenuta dagli studenti per quel test.

REGOLA 1 Accedere ad un array bidimensionale con una espressione coerente con 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 2 Assegnare sempre un valore alle variabili adoperate per accedere agli elementi di un array. Esempio: se vogliamo scrivere i risultati in Risultati[X,Y] le variabili X e Y devono essere state preventivamente istanziate.

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;

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 piccolo paese, massimo mille abitanti, e per ogni paese vogliamo registrare il nome degli abitanti. L’array quindi è di tipo stringa per cui nelle caselle vuote ci sarà la stringa nulla ‘’. CONST MassimoAbitanti=1000; TYPE TipoStringa=STRING[50]; SubrangeAbitanti=1.. MassimoAbitanti; NomePaesi=(Nessuno, Acerra, Afragola, Capri, Casoria, Ischia, Procida); NomeArray: ARRAY[SubrangeAbitanti,NomePaesi] OF TipoStringa; VAR Abitanti: NomeArray;

Esposito A. Rossi A. Russo T. Tirchio F. Esca T. Bianchi G. Cesare G. Acerra Afragola Capri Ischia Procida 1 Esposito A. Rossi A. Russo T. Tirchio F. Esca T. 2 Bianchi G. Cesare G. Annibale T. Ricco S. Orofino T. . . . . . 515 . . . . . . Orazio P. Diamante A. Argento T. . 841 Romeo A. Rendina A. 1000

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.

Altri esempi di array bidimensionali sono le scacchiere per il gioco degli scacchi o della dama. T C A Q R P X t c a q r p H G F E D B 1 2 3 4 5 6 7 8 TYPE TipoScacchiera: ARRAY[‘A’,..’H’,’1’..’8’] OF char; VAR Scacchiera:TipoScacchiera;

ALGORITMI PER L’ELABORAZIONE DI ARRAY BIDIMENSIONALI Prodotto  A B C D E IndiceVend 1 21 25 18 30 21  2 22 12 18 21 28 3 27 28 30 3 28 3 26 22 28 28 . 21 30 26 3 30 45. 26 3 26 27 26 vuoto . CONST MaxVend=100; TYPE TipoVend=1..MaxVend; TipoProd=‘A’..’E’; ArrayVendite=ARRAY[TipoVend,TipoProd] OF integer; VAR Venduto:ArrayVendite; TotVenditori:TipoVend; 100

ELABORAZIONE RIGA PER COLONNA FOR IndiceRiga  PrimaRiga TO UltimaRiga DO FOR IndiceColonna  PrimaColonna TO UltimaColonna DO elabora UnArray[IndiceRiga,IndiceColonna] ELABORAZIONE COLONNA PER RIGA FOR IndiceColonna  PrimaColonna TO UltimaColonna DO FOR IndiceRiga  PrimaRiga TO UltimaRiga DO elabora UnArray[IndiceRiga,IndiceColonna]

ELABORAZIONE PER SINGOLA RIGA Assegna un IndiceRiga FOR IndiceColonna  PrimaColonna TO UltimaColonna DO elabora UnArray[IndiceRiga,IndiceColonna] ELABORAZIONE PER SINGOLA COLONNA Assegna un IndiceColonna FOR IndiceRiga  PrimaRiga TO UltimaRiga DO elabora UnArray[IndiceRiga,IndiceColonna]

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 FOR Prodotto:=‘A’ TO ‘E’ DO read(VendFile, Venduto[IndiceVend, Prodotto]); readln(VendFile) END END; 18 12 21 28 30 3 22 26 6 25 27 CONST MaxVend=100; TYPE TipoVend=1..MaxVend; TipoProd=‘A’..’E’; ArrayVendite=ARRAY[TipoVend,TipoProd] OF integer; VAR Venduto:ArrayVendite; TotVenditori:TipoVend;

PROCEDURA DI ELABORAZIONE COLONNA PER RIGA DI UN ARRAY PROCEDURE ElaboraPerRiga(VAR Venduto: ArrayVend; VAR TotVenditori: TipoVend;) VAR IndiceVend: TipoVend; Prodotto: TipoProd ; Somma: integer; BEGIN FOR Prodotto:=‘A’ TO ‘E’ DO Somma:=0; FOR IndiceVend:=1 TO TotVenditori DO Somma:=Somma+ Venduto[IndiceVend, Prodotto]; writeln(‘Del prodotto ‘,Prodotto,’ si sono venduti ‘,Somma:1,’ pezzi.’) END END; 18 12 21 28 30 3 22 26 25 27 Prodotto  IndiceVend  CONST MaxVend=100; TYPE TipoVend=1..MaxVend; TipoProd=‘A’..’E’; ArrayVendite=ARRAY[TipoVend,TipoProd] OF integer; VAR Venduto:ArrayVendite; TotVenditori:TipoVend;

END. 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); readln END.

Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International A B C D E 1- 21 25 18 30 21 2- 22 12 18 21 28 3- 27 28 30 23 28 4- 23 26 22 28 28 5- 21 30 26 23 30 6- 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.

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.

Input Settimana: 18-24/12/2000 Output Settimana del 18-24/12/2000 Rossi ha lavorato 24 ore. Totale busta paga : Lit. 320.000 Bianchi ha lavorato 30 ore. Totale busta paga : Lit. 530.000 …………………………… Totale ore lavorate dalle 7 unità di personale: 870 Totale costo personale: 5.334.000 File PagaOrar 120000 90000 ……………... File Or181200 18/12/2000^ 7 Rossi^ 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 ……………...

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}

Rappresentazione Grafica AssegnaFileDati LeggiPaghe LeggiPrimoRigo LeggiSettimana CalcolaPagheSettimanali LeggiRigo Fpaghe FSett POraria Data NImp Settimana Nomi Nimp Nome

PROGRAM Paghe(input,output,FPaghe,FSett); {leggi dai File dati Orxxyyzz e PagOrar le ore lavorate e le paghe orarie e calcola la paga per ogni impiegato} CONST MaxImp=25; TYPE TipoStringa=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; VAR FPaghe, 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); PROCEDURE LeggiPrimoRigo(VAR FSett1:text;VAR Data1:TipoStringa; VAR NImp1:integer); PROCEDURE LeggiPaghe(VAR FPaghe1:text;VAR POraria:TipoOrar); 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} PROCEDURE CalcolaPagaSettimanale(VAR POraria1:TipoOrar; VAR Settimana1:TipoSett;VAR Nomi1:TipoNome;NImp1:integer;Data1:TipoStringa); {calcola le paghe e le stampa}

{******************* 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.

ARRAY A TRE DIMENSIONI 99 1 2 ……………...…27…….………..52 90 91 Bari Roma Napoli Venezia 31 Lotto:ARRAY[‘Bari’..’Venezia’,1..52,90..99] OF 1..90;