DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Process synchronization
Dati strutturati A. Ferrari.
Stringhe di caratteri In linguaggio C.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità G1 Dati strutturati.
Ripasso R1 Dati strutturati.
Array (vettori) In linguaggio C / C++.
Algoritmi e Programmazione
INFORMATICA Strutture iterative
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Caratteri e stringhe di caratteri
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Algebra di Boole ed elementi di logica
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 3 Ottobre 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 1 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata al 4 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3: 24 Ottobre 2011 Sadegh Astaneh – Marco D. Santambrogio –
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Array Un array è una collezione in sequenza di variabili del medesimo tipo Riferimento con un nome comune Nome_studente1 Nome_studente2. Nome_studenteN.
Array Struttura numerate di dati. Memorizzare molti dati In informatica cè spesso bisogno di memorizzare ed elaborare un insieme costituito da molti dati.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
I File.
Le funzioni.
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione X Ingresso/Uscita di Interi Programmazione di Calcolatori: Ingresso/Uscita 1.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Input/output 1 Marco D. Santambrogio – Ver. aggiornata al 2 Dicembre 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Ottobre 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Algoritmi e basi del C Struttura di un programma
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA Lab 2: 20 Aprile 2015 Marco D. Santambrogio – Gianluca Durelli –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
Algoritmi e basi del C Struttura di un programma
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 L Aprile 2015 Marco D. Santambrogio – Gianluca Durelli -
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Recap su: array e puntatori Marco D. Santambrogio – Ver. aggiornata al 20 Aprile.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Stringhe In linguaggio C. Stringhe  Un insieme di caratteri in sequenza forma una stringa.  Alcuni linguaggi definiscono per le stringhe uno specifico.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Matteo Ferroni –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 4 – Info B Marco D. Santambrogio – Matteo Ferroni –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 4 – Info B Marco D. Santambrogio – Matteo Ferroni –
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Matteo Ferroni –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array n-dimensionali e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 22 Marzo 2016.
Process synchronization
Process synchronization
Process synchronization
Array e Stringhe Linguaggio C.
Transcript della presentazione:

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Torniamo a ieri… 2

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il maggiore tra N numeri Problema  Trovare il maggiore tra N numeri interi inseriti da tastiera Soluzione  Conoscere N  Richiedere l’inserimento degli N valori  Ricerca del maggiore tra gli N valori 3

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Soluzione “semplice” 4

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Soluzione “semplice” 5

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Soluzione “semplice” 6

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Soluzione più complessa 7

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Soluzione più complessa 8

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Torniamo ad oggi… 9

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Frase… insieme di caratteri Che cosa è una frase?  Un insieme di caratteri Come la rappresento?  Un insieme, di tante variabili carattere?  Una variabile, insieme di caratteri? supercali fragili stiche spiralidoso 10

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Gli array, questi sconosciuti Gli array in C Array particolari: le stringhe 11

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 12 Gruppi di celle consecutive  Rappresentano gruppi di variabili con lo stesso nome e lo stesso tipo Per riferirsi a un elemento, si specificano:  Il nome dell’array  La posizione dell’elemento (indice) Sintassi: [ ]  Il primo elemento ha indice 0  L’n° elemento dell’array v è v[n-1] v[6] dichiarazione v[0] v[1] v[2] v[3] v[11] v[10] v[9] v[8] v[7] v[5] v[4] posizione elemento int v[12]; nome array Gli array

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 13 Gli elementi di un array sono normali variabili: vett[0]  3; printf("%d", vett[0]); > 3 scanf("%d", &vett[1]); > 17vett[1] assume valore 17 Si possono usare espressioni come indici: se x  3 vett[5  2] è equivalente a vett[3] ed è equivalente a vett[x] Gli array

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La gara di nuoto: con salvataggio Problema  Si hanno10 giudici 1 giudice = 1 voto  Si vogliono memorizzare i 10 voti, per poterli rileggere  Ogni voto è nell’itervallo 0-10  Dato un tuffo, calcolare La media dei voti Il voto massimo ed il voto minimo 14

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... La dichiarazione 15

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento Problema 1: devo salvare i dati nel mio array (int voto[0];) Problema 2: devo definire un ciclo che mi permetta di scorrere N elementi 16

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento Problema 1: devo salvare i dati nel mio array (int voto[0];) scanf(&voto[posix]); 17 *pseudo-codice

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento Problema 2: devo definire un ciclo che mi permetta di scorrere N elementi for(index = 0, index < N, index++){ } 18 *pseudo-codice

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento Problema 1 + Problema 2 for(index = 0, index < N, index++){ scanf(&voto[posix]); } 19 Non va bene!!! 1)Scrivo sempre in voto[posix] 2)Quanto vale posix??? *pseudo-codice

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento Problema 1 + Problema 2 posix = 0; for(index = 0, index < N, index++){ scanf(&voto[posix]); posix++; } 20 Come crescono index e posix? *pseudo-codice

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento Problema 1 + Problema 2 for(index = 0, index < N, index++){ scanf(&voto[index]); } 21 *pseudo-codice

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento 22

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... La stampa 23

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Mettiamo tutto insieme 24

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Un primo incontro con gli array Array: collezione di dati omogenei  Dichiare il tipo dei suoi dati  Dichiarare la sua dimensione Come si accede ai dati di un array?  Come a normali variabili Esempio di scrittura Esempio di lettura 25

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 26 Sintassi compatta: int n[5]  {1, 2, 3, 4, 5};  Inizializzazione parziale: gli elementi più a destra sono posti a 0 int n[5]  {13}; tutti gli altri elementi sono posti a 0  Specificare troppi elementi tra le graffe è un errore di sintassi Se la lunghezza dell’array è omessa, gli inizializzatori la determinano: int n[]  {5, 47,  2, 0, 24}; è equivalente a: int n[5]  {5, 47,  2, 0, 24};  In tal caso la dimensione è inferita automaticamente, e si avranno 5 elementi nell’array Inizializzazione di un array

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 27 Si opera sui singoli elementi, uno per volta Non è possibile operare sull’intero array, agendo su tutti gli elementi simultaneamente /  come ricopiare array1 in array2  / int array1[10], array2[10]; int i;... array2  array1;/  ERRATO  /... for( i  0; i  10; i  )  array2[i]  array1[i];/  CORRETTO  /  Operazioni sugli array

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 28 Problema: sequenza di interi Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dall’utente  Con un array?... ora  Senza array?... Provateci voi ;)

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza: possibile soluzione 29

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza: possibile soluzione 30 E se ora volessi 100 numeri?

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza: possibile soluzione 31 E se ora volessi 100 numeri?

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 32 In testa al programma: #defineLUNG_SEQ 100 Così possiamo adattare la lunghezza del vettore alle eventuali mutate esigenze senza riscrivere la costante 100 in molti i punti del programma  Il preprocessore sostituisce nel codice LUNG_SEQ con 100 prima della compilazione La lunghezza dell’array, quindi, anche in questo caso è decisa al momento della compilazione del programma Nella dichiarazione degli array non si usano mai variabili per specificarne la dimensione "Generalizziamo" con la direttiva #define

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza con define 33

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza con define 34 E se ora volessi 17 numeri?

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza con define 35 E se ora volessi 17 numeri?

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Pausa 10’ 36

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 37 Array di caratteri: spesso chiamati stringhe  Quando rappresentano “ caratteri da leggersi in fila ” Dichiarazione+inizializzazione di una stringa: char stringa[]  "word"; Il carattere nullo '\0' termina le stringhe Perciò l’array stringa ha 5 elementi (non 4): Dichiarazione equivalente: char stringa[]  {'w', 'o', 'r', 'd', '\0'}; drow \0 Le stringhe

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problema: inserisci nome 38

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 39 Stringhe e caratteri Qual è la differenza tra 'x' e "x"? 'x' è una costante di tipo char, rappresentata in memoria da un intero "x" è una stringa costante, rappresentata in memoria da un array che contiene i caratteri: 'x' e '\0' ATTENZIONE Le stringhe non sono propriamente un tipo di dato (non sono un tipo base!) Non hanno operatori nativi, ma una serie di funzioni nella libreria standard che permettono di manipolarle

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 40 char str1[32]; /  str1 ha spazio per 32 char.  / char str2[64]; /  str2 ha spazio per 64 char.  / /  inizializza str1 con la stringa "alfa"  / strcpy(str1, "alfa"); /  str1 contiene "alfa"  / /  copia str1 in str2  / strcpy(str2, str1); /  str2 contiene "alfa"  / /  lunghezza di str1  / x = strlen(str1); /  x assume valore 4  / /  scrivi str1 su standard output  / printf("%s", str1); /  scrive str1 su stdout  / /  leggi str1 da standard input  / scanf("%s", str1); /  str1 “ riceve ” da stdin  / Operazioni su stringhe

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 41 char str1[32]; char str2[64]; scanf("%s", str1); > ciao  /  ora str1 contiene "ciao"  / strcpy(str2, str1);/  str2 riceve "ciao"  / val = strlen(str2); /  val = 4  / printf("%s\n", str2); > ciao/  stampa "ciao"  / Attenzione: strlen("") vale 0 ! Operazioni su stringhe

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problema: copia stringhe 42

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Particolarità delle stringhe Il nome dell’array rappresenta l’indirizzo del suo primo elemento, perciò quando ci si vuole riferire all’intero array nella scanf non si mette il simbolo &! scanf("%s", stringa); Questa scanf legge in input i caratteri fino a quando trova il carattere “ blank ” (lo spazio), o l’invio  NOTA: se nel buffer si trova una stringa “troppo lunga”, essa è memorizzata oltre la fine dell ’ array !!! Ed è un errore grave !!! 43

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 44 Una funzione apposita: strcmp(s1,s2)  restituisce un intero  confronta le due stringhe fino al ‘\0’ char str1[32], str2[64]; int diverse; /*... acquisizione di valori per le stringhe... (codice omesso)*/ diverse = strcmp(str1, str2); if( diverse == 0 ) printf("UGUALI\n"); else if( diverse < 0 ) printf("%s PRECEDE %s\n", str1, str2); else printf("%s SEGUE %s\n", str1, str2); Confrontare due stringhe

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 45 Problema: ???

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 * Output del programma

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits Fonti per lo studio  Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill Capitolo 5 Credits  Daniele Braga