• Non ci sono risultati.

Array multidimensionali e stringhe

N/A
N/A
Protected

Academic year: 2021

Condividi "Array multidimensionali e stringhe"

Copied!
14
0
0

Testo completo

(1)

Andrea Marin

Universit`a Ca’ Foscari Venezia Laurea in Informatica Corso di Programmazione part-time

a.a. 2011/2012

(2)

Array uni-dimensionali (richiami)

I Dichiarazione:

int vet[100]; float x[50];

I Gli elementi sono indicizzati da 0 a N − 1 dove N `e la dimensione dell’array (N = 100 nei precedenti casi)

I vett[i] denota l’elemento in posizione i del vettore

I i deve essere un numero intero compreso tra 0 e N − 1

I x[i] `e una variabile di tipo float

I vet[i] `e uunidimensionalena variabile di tipo int

I Negli array multi-dimensionali possiamo usare pi`u indici per indicare un elemento

(3)

Esempio

I Si vogliono memorizzare i livelli di inquinamento in una citt`a mediante delle sonde

I Nella citt`a sono presente 100 sonde rilevatrici

I Ciascuna sonda rileva il livello di inquinamento ogni 15 minuti

I Come memorizzare le rilevazioni di una giornata?

I Una giornata ha 24 ore, quindi genera 24 × 4 = 96 rilevazioni

I Possiamo usare una tabella di 100 righe (una per ogni sonda) e 96 colonne (un per ogni rilevazione)

I Ci sono in totale 96 × 100 = 9600 dati misurati

I Per accedere ad una particolare rilevazione bisogna specificare

I L’indice i della sonda 0 ≤ i ≤ 99

I L’indice j della rilevazione desiderata 0 ≤ j ≤ 95

(4)

Dichiarazione in C

#d e f i n e NSONDE 100

#d e f i n e N R I L I E V I 96

f l o a t l i v e l l o i n q u i n a m e n t o [ NSONDE ] [ N R I L I E V I ] ;

I Ladirettiva #define pu`o essere usata per dichiarare costanti

I L’uso delle quadre pu`o essere esteso ad oltre 2 dimensioni. Ad esempio:

double molte dimensioni[100][20][23][50];

I Nel caso di due dimensione possiamo parlare di matrice

I Nell’esempio NSONDE `e convenzionalmente considerato il numero di righe e NRILIEVI il numero di colonne

(5)

Scorrere una matrice: esempio di stampa

#d e f i n e RIGHE 50

#d e f i n e COLONNE 60

f l o a t m a t r i c e [ RIGHE ] [ COLONNE ] ;

i n t main ( ) { i n t r , c ; . . .

f o r ( r =0; r<RIGHE ; r=r +1) { f o r ( c =0; c<COLONNE ; c=c +1) {

p r i n t f ( ‘ ‘ % f ’ ’ , m a t r i c e [ r ] [ c ] ) ; }

p r i n t f ( ‘ ‘ / n ’ ’ ) ; }

r e t u r n 0 ; }

(6)

Passaggio di un array multi-dimensionale ad una funzione

I Quando si dichiara una funzione che prende come parametro un array multi-dimensionale, solo la prima dimensione pu`o essere lasciata non specificata

I Esempio:

void stampa matrice(int mat[][COLONNE]);

I La dimensione specificata nel parametro formale deve coincidere con quella specificata nella dichiarazione del parametro attuale

I Approfondimenti. . .: come rappresentare un array bi-dimensionale con un array uni-dimensionale?

(7)

Esercizi

1. Scrivere una funzione che data una matrice di interi e un vettore di interi metta nella cella i del vettore la somma degli elementi pari della riga i della matrice:

void somma righe(int matrice[][COLONNE], int dim, int vett[]);

2. Scrivere una funzione che scambi le righe e le colonne di una matrice

3. Scrivere una funzione che decida se due matrici di interi se sono uguali

(8)

Le stringhe in C

Definizione (Stringa in C)

In C una stringa `e una sequenza contigua di caratteri che termina con il carattere ’\0’.

I Le stringhe sono implementate come array di caratteri char

I Come per gli array la dimensione `e decisa in fase di compilazione

I Il carattere di terminazione denota la porzione (inizale) dell’array che contiene i caratteri significativi della stringa

(9)

Dichiarazione di una stringa

I Stringa con al massimo 99 caratteri (posizioni 0 - 98):

c h a r s t r i n g a [ 1 0 0 ] ;

I Inizializzazione di una stringa

c h a r m i o s a l u t o [ 1 0 0 ] = ‘ ‘ H e l l o w o r l d ! ’ ’ ;

I Attenzione: l’operatore = pu`o essere usato in fase di inizializzazione ma non di assegnamento

(10)

Passaggio di una stringa ad una funzione

I Il passaggio di una stringa ad una funzione segue le regole dell’array

I Attenzione: non `e necessario passare la dimensione perch`e c’`e il carattere di fine stringa

I Esempio:

void stampa stringa(char str[]);

(11)

Esempio: Stampa di una stringa carattere per carattere

v o i d s t a m p a s t r i n g a ( c h a r s [ ] ) { i n t i =0;

w h i l e ( s [ i ] ! = ’ \0 ’ ) { p r i n t f ( ‘ ‘ % c ’ ’ , s [ i ] ) ; i = i +1;

} }

I Nota: normalmente si usa printf(‘‘%s’’, stringa);;

(12)

Calcolare la lunghezza di una stringa

i n t s t r l e n ( c h a r s [ ] ) { i n t l e n =0;

w h i l e ( s [ l e n ] != ’ \0 ’ ) { l e n = l e n + 1 ;

}

r e t u r n l e n ; }

(13)

Alcune note

I L’operatore == non pu`o essere usato per stabilire se due stringhe contengono gli stessi carattero

I L’operatore = non pu`o essere usato per copiare il contenuto di una stringa in un’altra

I Per facilitare queste operazioni si usa la librerira standard string.h

(14)

Esercizi

1. Scrivere una funzione che decida se due stringhe sono identiche

2. Scrivere una funzione che decida se una stringa contiene almeno una vocale minuscola

3. Scrivere una funzione che decida se una stringa ha pi`u di tre consonanti consecutive

Riferimenti

Documenti correlati

¨  L’espressione a[i] restituisce il valore della variabile con indice i, quindi il tipo di questa espressione è il tipo base dell'array. Accesso agli elementi di

Esercizio 1 (7 punti) Scrivere un metodo di classe che prende in ingresso (come parametro formale) un array di array di stringhe e che visualizza una stringa di tale array di array

I: il valore di ciascun elemento dello array bidimensionale Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array. U: l’array

Si scriva in C una procedura ricorsiva, con un parametro A di tipo array di interi, che modifica A spostando a sinistra (shift) di una posizione tutti gli elementi, eccetto il primo

Scrivere un metodo che, dato un array bidimensionale quadrato a di caratteri, restitui- sce la stringa ottenuta concatenando i caratteri presenti nel triangolo in alto a

Prima di chiamare la free sull'array chiamarla su ogni

– Soluzione: si passa alla funzione un ulteriore parametro di tipo array, che viene “riempito” con il risultato.. E i parametri di

● Se gli estremi degli scaglioni e/o le percentuali cambiano, devo cambiare solo l'array e non il programma che fa la ricerca!.. Algoritmi su