Stringhe e tipi di dati strutturati

Documenti analoghi
Esercizi C sui tipi definiti dall utente

Caratteri e stringhe

Algoritmi e basi del C Struttura di un programma

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

STRINGHE: ARRAY DI CARATTERI! a p e \0

Esercizio 1: funzione con valore di ritorno di tipo puntatore

C: panoramica. Violetta Lonati

Stringhe e allocazione dinamica della memoria

Esercitazione 11. Liste semplici

Esercizi. La funzione swapint() primo tentativo

Dati aggregati. Violetta Lonati

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

Codifica binaria dell informazione

Gestione delle stringhe in C

Scrittura formattata - printf

Esercitazione 6. Array

Lezione 8 Struct e qsort

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

RICERCA DI UN ELEMENTO

Algoritmi e basi del C

Esercizi. Stringhe. Stringhe Ricerca binaria

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Le stringhe. Le stringhe

Ripasso R1. Dati strutturati. Esempi. Array. Dichiarazione di un array. Dichiarazione di un array in C

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Esame del 3 febbraio 2010

Programmazione Procedurale in Linguaggio C++

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

ESERCIZIO 1 ESERCIZIO 2

Programmazione I - Laboratorio

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

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Costanti e Variabili

Uso avanzato dei puntatori Allocazione dinamica della memoria

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

Formattazione avanzata. I/O Avanzato e File. Formattazione dell output. Formattazione avanzata. Forma completa degli specificatori

I CARATTERI E LE STRINGHE

4 GLI ARRAY E LE STRINGHE

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

Struttura dei programmi C

File e puntatori a file

Lezione 6 programmazione in Java

Algebra di Boole ed elementi di logica

Caratteri e stringhe

Introduzione al linguaggio C Puntatori

Lezione 5 Sottoarray di somma massima

Esercizi C su array e matrici

Caratteri e stringhe. Vettori di caratteri. Il tipo stringa Terminatore nullo Input/output di stringhe Politecnico di Torino 1

Linguaggio C: puntatori

Definizione di nuovi tipi in C

Array multidimensionali e stringhe

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Transcript:

Stringhe e tipi di dati strutturati Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 21 Marzo 2013

Info sui Labs http://tinyurl.com/ieimlabextra Ricordate di portare un adattatore! Gli esercizi, tolto il primo lab, saranno diversi tra il Lunedì ed il Giovedì Dove: EG 7 Quando Lunedì: 15.30 18.30 Giovedì: 13.00 16.00 2

Immagini 17 11 28 07 09 12 100 100 100 Come si rappresenta? Creiamo una griglia (aka matrice) Ma cosa contiene la matrice? I punti rappresentati, ad esempio, come int Osservazioni 57 Come aumento la risoluzione? Come rappresento i colori? Lo vedremo dopo STRUCT 3

Array a più dimensioni Gli array a 1D realizzano i vettori, quelli a 2D realizzano le matrici, e così via Dichiarazione: int A[20][30]; A è una matrice di 20 30 elementi interi (600 variabili distinte) float F[20][20][30]; F è una matrice 3D di 20 20 30 variabili di tipo float (12.000!) Oppure a quattro dimensioni, ecc 4

Prodotto di matrici 0 1 2 3 0 1 2 3 4 0 3 7 10 0 2 1 0 4 3 1 1 3 11 2 * 7 9 6 1 2 2 5 8 9 24 5 1 2 5 0 11 0 3 8 7 0 1 2 3 c[1][2] = (a[1][k]*b[k][2]), con k = 0,..., 3 #define N 3 #define M 4 #define L 5... for (i=0; i<n; i++){ for (j=0; j<l; j++){ c[i][j] = 0; for (k=0; k<m; k++) } c[i][j] = c[i][j]+(a[i][k]*b[k][j]); printf( %d, c[i][j]); } printf( \n ); 0 1 2 0 1 2 3 4 18+ 22+6 5

Obiettivi Array particolari: le stringhe Dichiarazione di nuovi tipi di dato Dato strutturati 6

Le stringhe 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): w o r d \0 Dichiarazione equivalente: char stringa[] = {'w', 'o', 'r', 'd', '\0'}; 7

Problema: inserisci nome 8

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 9

Operazioni su stringhe 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 */ 10

Operazioni su stringhe 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! 11

Problema: copia stringhe 12

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 Perciò se nel buffer si trova una stringa troppo lunga, essa è memorizzata oltre la fine dell array!!! Ed è un errore grave!!! 13

Problema: non esiste strcpy! 14

strcpy(s1, s2) E se non ci fosse la funzione strcpy()? Assegneremmo sempre un carattere alla volta! char s1[n], s2[m]; /* assegnamento di s2, omesso */ int i = 0; while( i <= strlen(s2) && i < N ) { } s1[i] = s2[i]; ++i; N.B. funziona correttamente se s2 è una stringa ben formata (cioè terminata da '\0') e se s1 è sufficientemente grande da contenere i caratteri di s2 (N >= strlen(s2)) 15

Confrontare due stringhe 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); 16

Pausa 15 17

Come rappresento un pixel? Il pixel è Il colore Come ottengo il verde? Con il formato RGB R: 91 G: 191 B: 33 PIXEL = {R, G, B} 18

Tipi di dati strutturati struct miastruttura { char campo1; float campo2; int campo3[2]; }; miastruttura???? campo1 campo2 campo3 19

Definire un nuovo tipo " Sinonimi: typedef int Intero; Intero a; int b; typedef char Stringa[10]; Stringa c; char d[10]; " Tipi enumerativi: typedef enum {lun,mar,mer,gio,ven,sab,dom} Settimana; Settimana giorno; giorno = lun; giorno = 3; /* 3 equivale a gio */ Non funziona con scanf() e printf(). 20

Definire un nuovo tipo " Tipi strutturati: typedef struct { char campo1; float campo2; int campo3[2]; } Record; ilmiorecord? A? 24.56? 23? 45 campo1 campo2 campo3 Record ilmiorecord; ilmiorecord.campo1 = 'A'; ilmiorecord.campo2 = 24.56; ilmiorecord.campo3[0] = 23; ilmiorecord.campo3[1] = 45; 21

Numeri complessi: problema L utente inserisce due numeri complessi (parte reale e parte immaginaria) e l elaboratore esegue l operazione di somma Es: 3+4i + 5-6i = 8-2i Il programma chiede all utente se vuole calcolare un altra somma. Se l utente inserisce il carattere q il programma termina, altrimenti ricomincia daccapo. 22

Numeri complessi 23

Numeri complessi: note " "%f" stampa un numero float con il segno - se è negativo, senza segno se è positivo " "%+f" stampa un numero float con il segno - se è negativo, con il segno + se è positivo " "i" non fa parte degli specificatori di formato 24

Schedine: problema Il programma, partendo da un array di dimensione prefissata che contiene in ogni cella: data della giocata colonna con i tredici segni Copia in un altro vettore solo le giocate dell anno 2012 Quindi, visualizza queste giocate. 25

Schedine: dati 26

Schedine: inserimento dati 27

Schedine: copia valori 28

Schedine: stampa dei risultati 29

Squadra di calcio: problema Il programma, partendo da un array che contiene i dati personali dei calciatori di una squadra, permette di calcolare: totale goal fatti dalla squadra goal fatti dagli attaccanti goal fatti dai centrocampisti goal fatti dai difensori totale goal subiti dalla squadra Il programma inoltre visualizza i dati personali di tutti i giocatori Per ogni giocatore, il programma memorizza: numero di maglia ruolo goal fatti (subiti, se è un portiere). 30

Fonti per lo studio + Credits Fonti per lo studio Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill Capitolo 5 (No: 5.5.3, 5.5.4 e 5.6) Credits Vito Perrone, Daniele Braga 31