Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Documenti analoghi
Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin

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

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

Tutorato Elementi di Informatica 2018

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

Linguaggio C: Variabili e assegnamento e semplici comandi di I/O

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Gli array, le stringhe e le strutture

I Dati Strutturati ed il Linguaggio C

Esercitazioni di Fondamenti di Informatica - Lez. 4 23/10/2018

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Lezione di Laboratorio di Prgrammazione: /04/2019 a.a. 2018/2019 R.Prevete

Esercizio 1: media di numeri reali (uso funzioni e struct)

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C e diagrammi a blocchi. Preparazione prima prova intermedia

Introduzione al linguaggio C Dati aggregati

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Informatica (A-K) 19. Linguaggio C -6

Il linguaggio C. Notate che...

Esercizi. Filtraggio

Informatica B Allievi Meccanici con cognome da Cl a L Recupero della I prova intermedia 26/02/01 Prof. Elisabetta Di Nitto. Cognome Nome Matricola

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Tutorato Elementi di Informatica 2018

Struttura dei programmi C

I tipi strutturati e i record in C++

Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)

Dati aggregati. Violetta Lonati

Ingresso ed Uscita in C. Informatica 1 / 15

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018

Esercizio 1: parole nel testo

ESERCIZIO: SHIFT ARRAY (1)

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

Linguaggio C: Array Valeria Cardellini

Dati strutturati in C

Informatica 1. Prova di recupero 21 Settembre 2001

Strutture di Controllo Iterative: Istruzioni While e Do

Prof. Massimiliano Giacomin 19 dicembre NOME: COGNOME: MATR: Scrivere nome, cognome e matricola chiaramente in caratteri maiuscoli

Per definire un array è necessario fornire: Nome Tipo Dimensione. int v [5]; Gli array. Come per le altre variabili

Tipi di Dati Stutturati

Esercitazione 11. Liste semplici

PROGRAMMAZIONE: ESERCITAZIONE N. 9

ESERCIZIO: Analisi di un programma. Dato il seguente programma C:

Tipi user-defined. parte dichiarativa globale:

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

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Il linguaggio C. Notate che...

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

Strutture dati. Operatori di incremento e decremento. Strutture di dati. Strutture di dati. ++ e -- Esempi. Vettori e matrici.

Tipi definiti dall'utente

Linguaggio C: PUNTATORI

IEIM Esercitazione II Elementi di programmazione C. Alessandro A. Nacci -

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

ESERCIZI DI PROGRAMMAZIONE DA TEMI D ESAME - vettori -

Università degli Studi di Ferrara

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

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

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2007/2008

Ingresso ed Uscita in C. Luca Abeni

Esercitazione 6. Array

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

Cicli annidati ed Array multidimensionali

Strutture Dati. Luca Abeni

Informatica (A-K) 14. Linguaggio C -4

Array k-dimensionali

Introduzione al linguaggio C Puntatori

C array. Problema: scrivere un programma che, ricevuto in input un intero n ed n interi positivi, li stampi in ordine inverso.

Linguaggio C. Condizioni composte (operatori logici)

PROGRAMMAZIONE: ESERCITAZIONE N. 6

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 26 Novembre 2014 COGNOME E NOME RIGA COLONNA MATRICOLA

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Il linguaggio C. Puntatori e dintorni

Fondamenti di Informatica 2

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

Università di Roma Tor Vergata L12-1

Elementi di Informatica A. A. 2016/2017

Esercizi C sui tipi definiti dall utente

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 26 Novembre 2014 COGNOME E NOME RIGA COLONNA MATRICOLA

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Scrittura formattata - printf

Stringhe e tipi di dati strutturati

ESERCIZI DI PROGRAMMAZIONE DA SVOLGERE INDIVIDUALMENTE - parte 2 -

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

STRUCT - ESERCIZIO 1

Dichiarazioni e tipi predefiniti nel linguaggio C

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 26 Novembre 2014 COGNOME E NOME RIGA COLONNA MATRICOLA

Linguaggio C - sezione dichiarativa: costanti e variabili

Programmare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World!

IEIM Esercitazione 1I Array. Alessandro A. Nacci -

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008

Laboratorio di Informatica I

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);

Introduzione al linguaggio C Puntatori

Transcript:

Linguaggio C tipi di dati definiti dall utente Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1

Tipi di dati in C Predefiniti Definiti dall utente Semplici char, int, float, double Ridefinizione, enum Strutturati - definiti con: array, struct, pointer Istruzione chiave : typedef Elementi di Informatica e Programmazione Università di Brescia 2

Tipi definiti dall utente: l idea di base Sono tipi non previsti direttamente dal linguaggio C: possono essere definiti dall utente mediante l istruzione typedef: typedef <definizione di tipo> - mediante opportuni costruttori di tipo - per ogni nuovo tipo viene definito un nome (del tipo) Una volta definito un nuovo tipo, ad es. voto, la dichiarazione di una variabile viene effettuata nel solito modo: voto votoinformatica; tipo variabile Elementi di Informatica e Programmazione Università di Brescia 3

Tipi definiti dall utente: categorie Tipi semplici - ridefinizione - enumerazione esplicita di valori Tipi strutturati - array - struct Ne esistono anche altri, ma noi descriveremo solo quelli indicati Elementi di Informatica e Programmazione Università di Brescia 4

Ridefinizione di tipo Un nuovo tipo può essere definito uguale ad un altro tipo: typedef <tipoesistente> <nometipo> Esempio: typedef int numeromaglia; typedef float mediagoal; e poi si possono dichiarare variabili come numeromaglia magliaboriello, magliapato; mediagoal mgboriello, mgpato; e usarle, per esempio magliaboriello = 22; mgpato=0.35; Elementi di Informatica e Programmazione Università di Brescia 5

Enumerazione esplicita dei valori Un nuovo tipo può essere definito elencandone i possibili valori: typedef enum {,, } <nometipo> Esempio: typedef enum {Inter, Juventus, Milan} squadre; typedef enum {Giovanni, Luca, Paolo, Matteo} nomi; squadre squadrina=inter, squadrona=milan, squadraforte; if(squadrona>squadrina) squadraforte=squadrona; // questa condizione risulta vera else squadraforte=squadrina; In realtà, il C tratta i tipi definiti in questo modo come una ridefinizione di int: al primo valore è associato 0, al secondo 1, ecc. In tal modo, sono disponibili gli operatori ==,!=, <, ecc. ecc. Elementi di Informatica e Programmazione Università di Brescia 6

Tipi di dati in C Predefiniti Definiti dall utente Semplici char, int, float, double Ridefinizione, enum Strutturati - definiti con: array, struct, pointer Elementi di Informatica e Programmazione Università di Brescia 7

Definizione di vettori (array) Un esempio typedef int tipoarray[20]; tipoarray vettore1; tipoarray vettore2; Tipo che definisce una sequenza di valori dello stesso tipo (int) vettore1 0 1 2 19 vettore2 0 1 2 19 Elementi di Informatica e Programmazione Università di Brescia 8

Definizione di vettori (array) Un esempio typedef int tipoarray[20]; tipoarray vettore1; tipoarray vettore2; Tipo che definisce una sequenza di valori dello stesso tipo (int) vettore1 0 1 2 19 vettore2 0 1 2 19 vettore1[0]=5; vettore2[19]=-6; Elementi di Informatica e Programmazione Università di Brescia 9

Definizione di vettori (array) Un esempio typedef int tipoarray[20]; tipoarray vettore1; tipoarray vettore2; Tipo che definisce una sequenza di valori dello stesso tipo (int) vettore1 0 1 2... 19 5 vettore2 0 1 2... 19-6 vettore1[0]=5; vettore2[19]=-6; Elementi di Informatica e Programmazione Università di Brescia 10

Definizione di vettori (array) Un esempio typedef int tipoarray[20]; tipoarray vettore1; tipoarray vettore2; Tipo che definisce una sequenza di valori dello stesso tipo (int) vettore1 0 1 2... 19 5 vettore2 0 1 2... 19-6 a = vettore1[0]; a 5 Elementi di Informatica e Programmazione Università di Brescia 11

In generale Vettore: lista ordinata di elementi dello stesso tipo Definizione di un tipo vettore : typedef <tipo_elemento><nometipo>[<dimensione>]; Data una variabile v di tipo <nometipo>, i suoi elementi: - sono variabili di tipo <tipo_elemento> - sono identificati dalla posizione, da 0 a dimensione-1 - sono denotati come v[i] dove i corrisponde alla posizione (questa operazione si dice indicizzazione del vettore) La dimensione di un vettore è fissa: è compito del programmatore fare in modo di riferirsi a celle che compongono il vettore (ovvero, fare in modo che 0 i dimensione-1) E possibile dichiarare il tipo array implicitamente nella definizione di una variabile: <tipoelemento> <nomevariabile>[<dimensione>]; Esempio: int vettore1[20]; Elementi di Informatica e Programmazione Università di Brescia 12

Note Quando un vettore viene definito, i valori dei suoi elementi sono indefiniti Per definire e inizializzare un vettore con valori costanti, si può usare: int vett[]={-10, 11, 4, 3}; /* equivale a int vett[4]; vett[0]=-10; vett[1]=11; vett[2]=4; vett[3]=3; */ int vett[10]={-10, 11, 4, 3}; /* equivale a int vett[10]; vett[0]=-10; vett[1]=11; vett[2]=4; vett[3]=3; */ Il costruttore array non definisce alcun operatore specifico sul tipo di dato, ad eccezione dell indicizzazione []: - sugli elementi del vettore sono definiti tutti gli operatori disponibili per il relativo tipo (es. int: assegnamento, confronto, ecc.) - sul vettore non sono disponibili operatori di assegnamento e confronto vett1=vett2; //scorretto se vett1 e vett2 sono vettori Elementi di Informatica e Programmazione Università di Brescia 13

Utilizzo dei vettori Variabili capaci di memorizzare un singolo valore non sono sufficienti per tutti gli scopi Esempio: acquisire al più 50 valori da tastiera e stamparli in ordine inverso rispetto all ordine con cui sono stati immessi - non è possibile usare 50 variabili v1, v2, v50 - infatti, dato che può essere stato inserito un numero n di valori, occorre un modo per riferire la variabile i (per i=1 n) - la soluzione è l uso di un vettore: int vett[50]; Elementi di Informatica e Programmazione Università di Brescia 14

Esempio 1 Definire un vettore v capace di memorizzare 10 interi. Memorizzare quindi nel vettore gli interi da 0 a 9. Elementi di Informatica e Programmazione Università di Brescia 15

Esempio 1 Definire un vettore v capace di memorizzare 10 interi. Memorizzare quindi nel vettore gli interi da 0 a 9. int v[10]; for(i=0; i<10; i++) v[i]=i; Elementi di Informatica e Programmazione Università di Brescia 16

Esempio 2 Definire un vettore v capace di memorizzare 10 interi. Memorizzare quindi nel vettore gli interi da 1 a 10. Elementi di Informatica e Programmazione Università di Brescia 17

Esempio 2 Definire un vettore v capace di memorizzare 10 interi. Memorizzare quindi nel vettore gli interi da 1 a 10. int v[10]; for(i=0; i<10; i++) v[i]=i+1; Elementi di Informatica e Programmazione Università di Brescia 18

Esempio 3 Sviluppare un programma che acquisisca dall utente un vettore di 10 interi. Successivamente, ne calcoli il massimo e il minimo. Elementi di Informatica e Programmazione Università di Brescia 19

Esempio 3 Sviluppare un programma che acquisisca dall utente un vettore di 10 interi. Successivamente, ne calcoli il massimo e il minimo. Idea ACQUISIZIONE: userò un ciclo per acquisire i 10 numeri (indice i da 0 a 9) CALCOLO massimo e minimo: userò un ciclo per confrontare due variabili max e min con tutti gli elementi del vettore. Problema: con quali valori inizializzo max e min Posso inizializzarli con vettore[0] Elementi di Informatica e Programmazione Università di Brescia 20

Esempio 3 Sviluppare un programma che acquisisca dall utente un vettore di 10 interi. Successivamente, ne calcoli il massimo e il minimo. Possiamo sviluppare direttamente il codice int v[10], i, max, min; for(i=0; i<10; i++) scanf( %d, &v[i]); max=v[0]; min=v[0]; for(i=1; i<10; i++){ } if(v[i]>max) max=v[i]; if(v[i]<min) min=v[i]; Elementi di Informatica e Programmazione Università di Brescia 21

Un caso particolare di vettori: le stringhe Le stringhe vengono memorizzate in C in array di caratteri, il cui ultimo elemento è il carattere \0 (carattere il cui codice ASCII è 0) che indica la fine della stringa printf e scanf possono stampare e acquisire stringhe, mediante il carattere di conversione %s Esempio: int i; char stringa[20]; scanf( %s, stringa); // non si usa & né [] printf( %s, stringa); // non si usa & né [] for(i=0; i<20 && stringa[i]!= \0 ; i++); //calcola la lunghezza della parola inserita Elementi di Informatica e Programmazione Università di Brescia 22

Un caso particolare di vettori: le stringhe Le stringhe vengono memorizzate in C in array di caratteri, il cui ultimo elemento è il carattere \0 (carattere il cui codice ASCII è 0) che indica la fine della stringa printf e scanf possono stampare e acquisire stringhe, mediante il carattere di conversione %s Esempio: 0 è lo stesso! int i; char stringa[20]; scanf( %s, stringa); // non si usa & né [] printf( %s, stringa); // non si usa & né [] for(i=0; i<20 && stringa[i]!= \0 ; i++); //calcola la lunghezza della parola inserita Elementi di Informatica e Programmazione Università di Brescia 23

Un caso particolare di vettori: le stringhe Le stringhe vengono memorizzate in C in array di caratteri, il cui ultimo elemento è il carattere \0 (carattere il cui codice ASCII è 0) che indica la fine della stringa printf e scanf possono stampare e acquisire stringhe, mediante il carattere di conversione %s Esempio: 0 è lo stesso! int i; char stringa[20]; scanf( %s, stringa); // non si usa & né [] printf( %s, stringa); // non si usa & né [] for(i=0; i<20 && stringa[i]!= \0 ; i++); //calcola la lunghezza della parola inserita ( /0 escluso!) Per inizializzare un vettore con una stringa: char stringa[30]= Nel mezzo del cammin ; //21 caratteri, /0 incluso Elementi di Informatica e Programmazione Università di Brescia 24

Errore comune nell uso di vettori Dimenticare che le posizioni sono numerate da 0 a dimensione-1: int i; int vett[10]; for(i=1; i<=10; i++) //vett[0] non è utilizzato, vett[10] non esiste vett[i]=i; Il codice corretto è: int i; int vett[10]; for(i=0; i<10; i++) vett[i]=i; Elementi di Informatica e Programmazione Università di Brescia 25

Definizione di tipi struct Nei vettori: gli elementi sono tutti dello stesso tipo Si supponga che per ogni elemento si vogliano però memorizzare dati di tipo diverso Ad esempio: per ogni studente si vuole memorizzare numero di matricola, nome, cognome, numero degli esami sostenuti Elementi di Informatica e Programmazione Università di Brescia 26

Un esempio typedef struct{ int matricola; char nome[30]; char cognome[30]; int num_esami; } studente; Definizione del tipo studente studente matricola nome cognome num_esami studente stud1; studente stud2; Dichiarazione delle variabili stud1 e stud2 Elementi di Informatica e Programmazione Università di Brescia 27

Un esempio typedef struct{ int matricola; char nome[30]; char cognome[30]; int num_esami; } studente; Definizione del tipo studente studente matricola nome cognome num_esami studente stud1; studente stud2; stud1.matricola = 25891; stud1.num_esami = stud2.num_esami + 1; Dichiarazione delle variabili stud1 e stud2 Assegnamenti Elementi di Informatica e Programmazione Università di Brescia 28

Definizione di tipi struct Struttura definita da: - insieme finito di elementi, detti campi - ogni campo: > ha un tipo specifico > è identificato da un nome Il costruttore di tipo utilizzato è struct L unica operazione definita da struct è la selezione: identificazione di un elemento nella forma nome-variabile.nome-campo I campi si comportano come normali variabili secondo il loro rispettivo tipo (e sono quindi disponibili i relativi operatori) Elementi di Informatica e Programmazione Università di Brescia 29

Esempio Definire una opportuna struttura dati per memorizzare una persona, identificata dal nome, dal cognome e dall età. Creare un vettore che contiene i dati di 5 persone, acquisendoli da tastiera. Quindi, stampare la somma delle età delle 5 persone. Elementi di Informatica e Programmazione Università di Brescia 30

Definizione del tipo persona e del vettore typedef struct{ char nome[20]; char cognome[20]; int eta; } persona; persona vett[5]; Elementi di Informatica e Programmazione Università di Brescia 31

Acquisizione dati da tastiera for(i=0; i<5; i++){ printf("persona %d:\n", i+1); printf("inserisci nome: "); scanf("%s",vett[i].nome); printf("inserisci cognome: "); scanf("%s",vett[i].cognome); printf("inserisci età: "); scanf("%d", &(vett[i].eta)); } Elementi di Informatica e Programmazione Università di Brescia 32

Calcolo e stampa delle età somma=0; for(i=0; i<5; i++) somma+=vett[i].eta; printf("somma delle età = %d\n", somma); Elementi di Informatica e Programmazione Università di Brescia 33

#include <stdio.h> main(){ IL CODICE COMPLETO typedef struct{ char nome[20]; char cognome[20]; int eta; } persona; persona vett[5]; int i, somma; for(i=0; i<5; i++){ printf("persona %d:\n", i+1); printf("inserisci nome: "); scanf("%s",vett[i].nome); printf("inserisci cognome: "); scanf("%s",vett[i].cognome); somma=0; for(i=0; i<5; i++) somma+=vett[i].eta; printf("somma delle età = %d\n", somma); printf("inserisci età: "); scanf("%d", &(vett[i].eta)); } } system("pause"); return 0; Elementi di Informatica e Programmazione Università di Brescia 34

Esercizi proposti 1) Scrivere un programma che riceva in ingresso 5 interi e li memorizza in un vettore vet_1. Successivamente, il programma stampa i numeri in ordine inverso (p.es. se ha acquisito 3 6 9 12 1 stampa 1 12 9 6 3). 2) Scrivere un programma che memorizza in un vettore i dati di 5 squadre di calcio, ciascuna identificata dal nome, campionato (es. serie a o serie b ecc.) e dal numero di punti in classifica. Stampare quindi la squadra che ha totalizzato più punti. Cosa succede se più squadre hanno lo stesso numero di punti Pensarci Elementi di Informatica e Programmazione Università di Brescia 35