TIPI DI DATO TIPI DEFINITI DALL UTENTE

Documenti analoghi
TIPI DI DATO. e quasi sempre anche collezioni di oggetti, mediante la definizione di tipi strutturati

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Definizione di nuovi tipi in C

Tipi di Dati Stutturati

I Dati Strutturati ed il Linguaggio C

TIPI DI DATO TIPI DI DATO

Tipi elementari. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Tipi user-defined. parte dichiarativa globale:

parte dichiarativa globale: dichiarazioni di costanti dichiarazioni di tipi dichiarazioni di variabili prototipi di funzioni/procedure

parte dichiarativa globale: dichiarazioni di costanti dichiarazioni di tipi dichiarazioni di variabili prototipi di funzioni/procedure

VARIABILE STRUTTURATA

DISPENSE DI PROGRAMMAZIONE LINGUAGGI A TIPIZZAZIONE FORTE: IL COSTRUTTO DI TIPO. TIPI SEMPLICI: TIPI PRE-DEFINITI E TIPI DEFINITI DAL PROGRAMMATORE.

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Linguaggi di programmazione

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio

Il linguaggio C Variabili e tipi di dato primitivi

Introduzione al linguaggio C Dati aggregati

Fondamenti di Informatica T-1

Dati aggregati. Violetta Lonati

Il linguaggio C. Istruzioni, funzioni, dati strutturati

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Algoritmi e Strutture Dati

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

INPUT/OUTPUT L'immissione dei dati di un programma e l uscita dei suoi risultati avvengono attraverso operazioni di lettura e scrittura.

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Tutorato Elementi di Informatica 2018

Espressione composta da: Operatori Operandi (costanti, variabili, )

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Struttura di un programma C++

Università di Roma Tor Vergata L12-1

Capitolo 2 GOCCE DI JAVA. Domande a risposte multiple

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

Tipi strutturati - struct

Quando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2;

Laboratorio di Informatica I

Il linguaggio C. Puntatori e dintorni

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Linguaggi e grammatiche. Esercizi. Linguaggi e grammatiche. Linguaggi e grammatiche

Tipi di dato primitivi

Tipi di dato semplici

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

LINGUAGGI DI PROGRAMMAZIONE

Tipi di dato semplici

Struttura di un. Struttura dei programmi C

Esercitazioni di Linguaggi e Traduttori

Università di Salerno Corso di FONDAMENTI DI INFORMATICA Corso di Laurea Ingegneria. Docente : Ing. Secondulfo Giovanni Anno Accademico

Stringhe e tipi di dati strutturati

Informatica 3. LEZIONE 5: Tipi di dati

Esercizi. Grammatiche, scoping. Univ. di Udine. Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Fondamenti di Informatica T-1. Selezione

Corso di Linguaggi di Programmazione

La sezione di dichiarazione delle costanti 1.2 I tipi elementari Classificazione dei tipi Il tipo integer Il tipo boolean

Laboratorio di Algoritmi

TIPI DI DATO. T = { D, {F 1,...,F n }, {P 1,...,P m } } Un tipo di dato T è definito come:

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

T = { D, {F 1,...,F n }, {P 1,...,P m } }

PASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth.

ISTRUZIONI ISTRUZIONI SEMPLICI

Fondamenti di Informatica

Lezione 6 Introduzione al C++ Mauro Piccolo

Introduzione alla programmazione. Alice Pavarani

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Il Linguaggio C. Caratteristiche. Caratteristiche. Esempio di programma in C. Tipi di dato primitivi in C. Dati

JAVA GENERICS. Angelo Di Iorio Università di Bologna

Informatica 7. appunti dalle lezioni del 20 e 22/10/2010

Esercizi C sui tipi definiti dall utente

Esercitazione 2. Variabili e Tipi Input e Output Assegnamenti Il comando if-else

Tipi definiti dall'utente

Linguaggi di programmazione

File. var nome: file of tipo; FILE *puntatore;

Informatica (A-K) 5. Algoritmi e pseudocodifica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Corso di Fondamenti di Informatica Tipi strutturati: Strutture typedef Anno Accademico 2008/2009 Francesco Tortorella

Almerico Murli - Le variabili strutturate (array) VARIABILI STRUTTURATE (ARRAY)

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

INFORMATICA. Dati sulla linea di comando. Dati sulla linea di comando. Dati sulla linea di comando. Dati sulla linea di comando

Variabili e assegnazione

Dati due punti sul piano calcolare la loro distanza

Semantiche dei linguaggi di programmazione

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Il linguaggio C. Notate che...

Programmazione Procedurale in Linguaggio C++

Strutture Dati. Nicu Sebe. Informatica Nicu Sebe 1 / 27

Puntatori. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Fondamenti di Informatica T-1

Corso di Programmazione Record e Insiemi. Record. Record. Dott. Pasquale Lops.

METODI in Java. Prof.Angela Bonifati. Metodi e Sottoprogrammi

Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

Analisi Lessicale. File

I tipi strutturati e i record in C++

Transcript:

Ogni elaboratore è intrinsecamente capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti, mediante la definizione di tipi strutturati array, strutture TIPI DI DATO Altri tipi possono essere definiti dall utente TIPI DEFINITI DALL UTENTE In C, l utente può introdurre nuovi tipi tramite una definizione di tipo La definizione associa a un identificatore (nome del tipo) un tipo di dato aumenta la leggibilità del programma consente di ragionare per astrazioni Il C consente, in particolare, di: ridefinire tipi già esistenti definire dei nuovi tipi enumerativi definire dei nuovi tipi strutturati

TIPI RIDEFINITI Un nuovo identificatore di tipo viene dichiarato identico a un tipo già esistente Schema generale: typedef TipoEsistente NuovoTipo; Esempio typedef int MioIntero; MioIntero X,Y,Z; int W; TIPI ENUMERATIVI Un tipo enumerativo viene specificato tramite l elenco dei valori che i dati di quel tipo possono assumere Schema generale: a1, a2, a3,..., an } EnumType; Il compilatore associa a ciascun identificativo di valore a1,.., an un numero naturale (0,1,...), che viene usato nella valutazione di espressioni che coinvolgono il nuovo tipo

TIPI ENUMERATIVI Gli identificativi di valore a1,..., an sono a tutti gli effetti delle nuove costanti Esempi: cuori, picche, quadri, fiori} Carte; Carte C1, C2, C3, C4, C5; Giorni Giorno; if (Giorno == do) /* giorno festivo */ else /* giorno feriale */ TIPI ENUMERATIVI Un identificativo di valore può comparire una sola volta nella definizione di un solo tipo, altrimenti si ha ambiguità Esempio: lu, ma, me} PrimiGiorni; La definizione del secondo tipo enumerativo è scorretta, perché gli identificatori lu, ma, me sono già stati usati altrove

TIPI ENUMERATIVI Un tipo enumerativo è totalmente ordinato: vale l ordine con cui gli identificativi di valore sono stati elencati nella definizione Esempio: Data questa definizione, lu < ma è vera lu >= sa è falsa in quanto lu 0, ma 1, me 2, etc. TIPI ENUMERATIVI Poiché un tipo enumerativo è, per la macchina C, indistinguibile da un intero, è possibile in linea di principio mescolare interi e tipi enumerativi Esempio: Giorni g; g = 5; /* equivale a g = sa */ È una pratica da evitare ovunque possibile

TIPI ENUMERATIVI È anche possibile specificare esplicitamente i valori naturali cui associare i simboli a1,...,an qui, lu 0, ma 1, me 2, etc.: qui, invece, lu 1, ma 2, me 3, etc.: lu=1, ma, me, gi, ve, sa, do} Giorni; qui, infine, l associazione è data caso per caso: lu=1, ma, me=7, gi, ve, sa, do} Giorni; IL TIPO BOOLEAN Il boolean non esiste in C, ma si può facilmente definirlo: false, true } Boolean; così: false 0, true 1 false < true logica positiva

La possibilità di introdurre nuovi tipi pone il problema di stabilire se e quanto due tipi siano compatibili fra loro Due possibili scelte: EQUIVALENZA equivalenza strutturale tipi equivalenti se strutturalmente identici equivalenza nominale tipi equivalenti se definiti nella stessa definizione oppure se il nome dell uno è definito espressamente come identico all altro EQUIVALENZA STRUTTURALE Esempio di equivalenza strutturale typedef int MioIntero; typedef int NuovoIntero; MioIntero A; NuovoIntero B; I due tipi MioIntero e NuovoIntero sono equivalenti perché strutturalmente identici (sono entrambi int per la macchina C) Quindi, A=B è un assegnamento lecito

EQUIVALENZA NOMINALE Non è il caso del C, ma è il caso, per esempio, del Pascal Esempio di equivalenza nominale type MioIntero = integer; type NuovoIntero = integer; var A: MioIntero; var B: NuovoIntero; I due tipi MioIntero e NuovoIntero non sono equivalenti perché definiti in una diversa definizione (A:=B non è consentito) DEFINIZIONE DI TIPI STRUTTURATI Abbiamo visto a suo tempo come introdurre variabili di tipo array e struttura: char msg1[20], msg2[20]; struct persona {...} p,q; Non potendo però dare un nome al nuovo tipo, dovevamo ripetere la definizione per ogni nuova variabile per le strutture potevamo evitare di ripetere la parte fra {..}, ma struct persona andava ripetuto comunque

DEFINIZIONE DI TIPI STRUTTURATI Ora siamo in grado di definire un nuovo tipo array e struttura, come segue: typedef char string[20]; typedef struct {... } persona; Ciò consente di non dover più ripetere la definizione per esteso ogni volta che si definisce una nuova variabile: string s1, s2; /* due stringhe di 20 caratteri */ persona p1, p2; /* due strutture persona */ per le strutture, ciò rende quasi sempre inutile specificare etichetta dopo parola chiave struct DEFINIZIONE DI NUOVI TIPI Perché definire nuovi tipi è importante? Permette di progettare al nostro livello di astrazione, non a quello della macchina C Il mondo reale è fatto di giorni, temperature, colori, stringhe... non di int, char, operare su stringhe, matrici, vettori è ben diverso che operare su char x[20], Consente di prescindere dal dettaglio di implementazione delle cose temperature, colori, interi... saranno anche tutti int, alla fine... ma concettualmente sono diversi