Linguaggio C Array e puntatori (Parte 5)
|
|
- Gildo Bettini
- 7 anni fa
- Visualizzazioni
Transcript
1 Linguaggio C Array e puntatori (Parte 5) Prof. Aniello Castiglione castiglione@ieee.org 1
2 Sommario Gli array ed i puntatori Dichiarazione e memorizzazione di array L inizializzazione di array L aritmetica dei puntatori Il passaggio di puntatori come argomenti di funzione Gli algoritmi di ordinamento Le stringhe 2
3 Gli array ed i puntatori 3
4 Gli array Nel linguaggio C, un array è un insieme di variabili dello stesso tipo memorizzate consecutivamente Ogni variabile dell array, detta elemento, può essere acceduta mediante il nome dell array ed un indice (un espressione), con il primo elemento individuato dall indice di valore 0 Esempio: Memorizzare la temperatura media registrata per ogni giorno dell anno Si dichiara un array di 365 elementi (piuttosto che 365 variabili!), identificati con un solo nome, e che occupano posizioni di memoria consecutive Nota: Gli array contengono informazione correlata (le temperature di un anno, i voti di esame di uno studente, etc.) 4
5 La dichiarazione di array - 1 La sintassi della dichiarazione di array è: Specificatore di tipo Nome dell array [ Dimensione dell array ] = Valori iniziali } La dichiarazione viene effettuata inserendo una coppia di parentesi quadre dopo il nome dell array La dimensione dell array viene specificata inserendo il numero di elementi all interno delle parentesi quadre 5
6 Il riferimento ad un elemento dell array è invece l operazione di accesso al dato elemento ed avviene utilizzando il nome dell array seguito dall indice dell elemento (racchiuso fra parentesi quadre) Le istruzioni di dichiarazione di un array e di riferimento ad un elemento dell array sono molto simili nella forma, ma molto diverse nel significato La dichiarazione di array - 2 /* La seguente è una dichiarazione; * il valore 365 specifica il numero * di elementi dell array */ int daily_temp[365]; /* I seguenti sono riferimenti a elementi * dell array; i valori 0,1,2, * specificano gli elementi cui accedere */ daily_temp[0] = 2; daily_temp[1] = 5; daily_temp[2] = 3; 6
7 La dichiarazione di array - 3 Esempio: Calcolo della temperatura media annua #include <stdio.h> #include <stdlib.h> #define DAYS_IN_YEAR 365 main() int j, sum=0; int daily_temp[days_in_year]; /* si assegnano i valori a daily_temp[] */ } for (j=0; j<days_in_year; j++) sum += daily_temp[j]; printf( La temperatura media dell anno è %d.\n, sum/days_in_year); exit(0); 7
8 La memorizzazione di array Esempio 4 byte int ar[5]; /* dichiarazione */ ar[0] = 15; ar[1] = 17; ar[3] = 3; 0FFC C non definito 3 non definito ar[0] ar[1] ar[2] ar[3] ar[4] ar[2] e ar[4] sono indefiniti: il contenuto delle posizioni di memoria è quello rimasto da esecuzioni precedenti (garbage) 8
9 L inizializzazione di array - 1 La presenza di valori indefiniti in alcuni elementi dell array può provocare errori difficili da rilevare ð Occorre inizializzare l intero vettore Dichiarare l array static (vettore a durata fissa): gli elementi del vettore, non inizializzati esplicitamente, vengono posti a zero Valori diversi possono essere specificati, facendoli seguire alla dichiarazione dell array, racchiusi fra parentesi graffe: tali valori devono essere espressioni costanti che possano essere convertite automaticamente nel tipo dell array 9
10 L inizializzazione di array - 2 Esempio static int ar[5]; static int br[5]=1,2,3.5,4,5}; Nota: il valore floating-point 3.5 viene convertito nel valore intero 3 0FFC C byte non definito ar[0] ar[1] ar[2] ar[3] ar[4] br[0] br[1] br[2] br[3] C br[4]
11 L inizializzazione di array - 3 Specificare un numero maggiore di valori di inizializzazione, rispetto agli elementi dell array, costituisce un errore segnalato dal compilatore Se vengono specificati meno valori rispetto alla dimensione, gli elementi rimanenti vengono inizializzati a zero Esempio: La dichiarazione static int cr[5] = 1,2,3}; produce l inizializzazione cr[0] = 1 cr[1] = 2 cr[2] = 3 cr[3] = 0 cr[4] = 0 11
12 L inizializzazione di array - 4 Se vengono specificati i valori iniziali, può essere omessa la dimensione dell array: il compilatore calcola automaticamente il numero degli elementi sulla base del numero dei valori iniziali specificati Esempio: static char dr[] = a, b, c, d }; comporta la creazione di un array di quattro elementi, di tipo char, caratterizzati dai valori iniziali dr[0] = a dr[1] = b dr[2] = c dr[3] = d 12
13 Crittografia - 1 Poiché in formato elettronico viene memorizzato e trasmesso ogni tipo di informazione (anche personale, quindi coperta da privacy), viene posta attenzione alla sicurezza rispetto ad accessi indesiderati I file, nei sistemi multiutente, sono provvisti di vari livelli di protezione, il primo dei quali è costituito dall autenticazione al sistema tramite password Oltre ai tipi di protezione standard, il contenuto di un file riservato può essere codificato, utilizzando tecniche crittografiche che producono, a partire dal testo in chiaro, il cosiddetto crittogramma, o testo cifrato Il legittimo proprietario del file (e chi da lui autorizzato) è l unico depositario della chiave di decodifica ed è l unico in grado di operare l inversione da testo cifrato a testo in chiaro 13
14 Crittografia - 2 Inoltre, negli attuali sistemi informativi distribuiti, e più in generale nel settore delle telecomunicazioni, la crittografia ha assunto rilievo ed interesse crescenti nelle infrastrutture di sicurezza 14
15 Crittografia - 3 Se il sistema di cifra, o cifrario, è ben congegnato, l operazione di decifrazione o decifratura deve risultare semplice al legittimo proprietario (o al destinatario del messaggio), ma di complessità proibitiva alla spia ð possibile in quanto gli utenti legittimi possiedono un informazione che deve rimanere inaccessibile alla spia, la chiave del cifrario Occorre notare la distinzione tra decifrazione e decrittazione, l operazione illegittima in cui non ci si può avvalere della chiave 15
16 Crittografia - 4 /* Dato un carattere, ne fornisce un valore codificato */ #define ILLEGAL_VAL -1 char encode(ch) char ch; static unsigned char encoder[128] = 127,124,121,118,115,112, 109,106,103,100,97,94,91,88,85,82,79,76,73,70,67,64,61, 58,55,52,49,46,43,40,37,34,31,28,25,22,19,16,13,10,7,4, 1,126,123,120,117,114,111,108,105,102,99,96,93,90,87,84, 81,78,75,72,69,66,63,60,57,54,51,48,45,42,39,36,33,30, 27,24,21,18,15,12,9,6,3,0,125,122,119,116,113,110,107, 104,101,98,95,92,89,86,83,80,77,74,71,68,65,62,59,56,53, 50,47,44,41,38,35,32,29,26,23,20,17,14,11,8,5,2} 48= 0 ð 111= o Ciao 6D\5 /* Controlla la presenza di caratteri illeciti */ if (ch > 127) return ILLEGAL_VAL; else return encoder[ch]; /* Fornisce il carattere codificato */ } 16
17 Crittografia - 5 Il codice Shift Cypher con K=3 era utilizzato da Giulio Cesare A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Esercizio: Con K=11, si somma 11 al valore corrispondente alla lettera e, nel caso che la somma superi 25, si divide il numero per 26 e si considera il resto della divisione intera we will meet at midnight hphtwwxppelextoytrse 17
18 Esempio - 1 /* Dato un vettore, stabilisce se vi sono almeno due elementi uguali tra loro */ #define MAX_DIM 256 typedef int[max_dim] VECTOR; int TwinSearch (v) /* ricerca degli elementi gemelli */ VECTOR v; int c = 0; int k = 0; int found = -1; /* ricerca senza successo ritorna -1 */ for(c = 0; ((c < (MAX_DIM-1)) && (found == -1)); c++) for(k = (c+1); ((k < MAX_DIM) && (found == -1)); k++) if (v[c] == v[k]) found = 1; /* ricerca con successo */ } } } return found; 18
19 Esempio - 2 /* Inverte gli elementi di un vettore */ #include <stdio.h> int main() /*dichiarazioni*/ int a[10], b[10]; int i, dim=10; /*input elementi*/ return 0; for(i=0;i<dim;i++) } printf( inserire l elemento a[%d]:,i); scanf( %d, &a[i]); } /*inversione vettore*/ for(i=0;i<dim;i++) b[i]=a[dim-1-i]; /*stampa vettore invertito*/ printf( Il vettore invertito è:\n\n ); for(i=0;i<dim;i++) printf( b[%d] = %d\n, i, b[i]); /*stampa vettore*/ printf( \nil vettore è:\n\n ); for(i=0;i<dim;i++) printf( a[%d] = %d\n, i, a[i]); printf( \n ); 19
20 L aritmetica dei puntatori - 1 Il C permette l utilizzo degli operatori additivi in concomitanza con i puntatori Se p è un puntatore, l espressione p+3 è lecita ed individua il terzo oggetto che segue quello puntato da p Poiché p contiene un indirizzo, operazioni aritmetiche su p forniscono nuovi indirizzi Il compilatore non opera semplicemente una somma tra 3 e p, ma moltiplica 3 per la dimensione dell oggetto puntato da p: effettua cioè uno scaling Esempio: Se l indirizzo contenuto in p è 1000 e p è un puntatore a long int, allora p+3 identifica l indirizzo 1018 (8 byte per gli interi lunghi); se p è un puntatore a char, p+3 rappresenta l indirizzo
21 L aritmetica dei puntatori - 2 Nell ipotesi di puntatori che si riferiscono allo stesso tipo di dato, è lecito sottrarre il valore di un puntatore da un altro: l operazione fornisce un valore intero che rappresenta il numero di oggetti compresi fra i due puntatori Se il primo puntatore è relativo a un indirizzo inferiore al secondo, il risultato è un intero negativo &a[3]-&a[0] = 3 &a[0]-&a[3] = -3 È lecito anche sottrarre un valore intero da un puntatore: il risultato è un puntatore 21
22 L aritmetica dei puntatori - 3 Esempio long *p1, *p2, k; int j; char *p3; p1=&k; p2=p1+ 4; /* OK */ j=p2-p1; /* OK a j viene assegnato 4 */ j=p1-p2; /* OK a j viene assegnato -4 */ p1=p2-2; /* OK tipi dei puntatori compatibili */ p3=p1-1; /* NO tipi diversi di puntatori */ j=p1-p3; /* NO tipi diversi di puntatori */ 22
23 L aritmetica dei puntatori - 4 Il linguaggio C prevede la definizione di puntatori nulli, ovvero di puntatori che non puntano ad alcun oggetto valido Un puntatore nullo è un qualsiasi puntatore a cui sia assegnato il valore zero char *p; p=0; /* rende p un puntatore nullo */ In questo caso il compilatore non effettua la conversione esplicita dell espressione intera nel tipo del puntatore La definizione del puntatore nullo è utile all interno di istruzioni di controllo: il puntatore nullo è l unico puntatore cui è associato il valore FALSE; tutti i puntatori validi valgono TRUE 23
24 Il passaggio di puntatori come argomenti di funzione - 1 Il compilatore segnala i tentativi di utilizzo congiunto di puntatori di tipi diversi Un eccezione alla regola è costituita dall uso di puntatori come argomenti di funzione: in mancanza di un prototipo, il compilatore non effettua controlli per verificare la corrispondenza di tipo fra parametro attuale e parametro formale ð si possono produrre risultati inconsistenti nel caso di parametri di tipo disomogeneo Il prototipo di una funzione è una dichiarazione di funzione antecedente alla sua definizione: permette al compilatore di compiere il controllo sui tipi degli argomenti che vengono passati alla funzione 24
25 Il passaggio di puntatori come argomenti di funzione - 2 #include <stdio.h> #include <stdlib.h> void clr(p) int *p; *p = 0 /* Memorizza 0 alla locazione p */ } main() static short s[3] = 1,2,3}; } clr(&s[1]); /* Azzera l elemento 1 di s[] */ printf( s[0]=%d\ns[1]=%d\ns[2]=%d\n, s[0],s[1],s[2]); exit(0); s[0]=1 s[1]=2 s[2]=3 p è un puntatore a int ð vengono azzerati 4 byte, quindi sia s[1] che s[2] s[0]=1 s[1]=0 s[2]=0 25
26 L accesso agli elementi di array mediante puntatori - 1 È possibile accedere agli elementi di un array attraverso l uso del nome dell array con il relativo indice l uso dei puntatori Infatti vale la regola che Aggiungere un intero ad un puntatore all inizio di un array, ed accedere all indirizzo puntato dall espressione, equivale ad utilizzare l intero come indice dell array Inoltre, un nome di array non seguito da un indice viene interpretato come un puntatore all elemento iniziale dell array ar è equivalente a &ar[0] Se p=&ar[0] ð *(p+e) è equivalente a ar[e] 26
27 L accesso agli elementi di array mediante puntatori - 2 Combinando le due relazioni, si ottiene la regola generale ar[n] equivale a *(ar+n) Un nome di array viene trasformato dal compilatore C in un puntatore all elemento iniziale dell array e quindi gli indici vengono interpretati come spostamenti dalla posizione di indirizzo base In considerazione del meccanismo di scaling, lo spostamento determina il numero di elementi da oltrepassare Esempio: ar[2] *(ar+2) Sono equivalenti: in entrambi i casi, ar è un puntatore all elemento iniziale dell array e 2 è un fattore di spostamento che richiede al compilatore di aggiungere due al valore del puntatore 27
28 L accesso agli elementi di array mediante puntatori - 3 Tuttavia i valori delle variabili puntatore possono essere modificati i nomi di array non sono variabili, ma riferimenti a indirizzi delle variabili array e, come tali, non possono essere modificati Un nome di array non associato ad un indice o ad un operatore accesso all indirizzo di (*) non può apparire alla sinistra di un operatore di assegnamento float ar[7], *p; p=ar; /* OK equivale a p=&ar[0] */ ar=p; /* NO assegnamento su un indirizzo di array */ &p=ar; /* NO assegnamento su un indirizzo di puntatore */ ar++; /* NO: non è possibile incrementare un indirizzo di array */ ar[1]=*(p+5); /* OK ar[1] è una variabile */ p++; /* OK è possibile incrementare una variabile puntatore */ 28
29 Il passaggio di array come argomenti di funzione - 1 In C, un nome di array, utilizzato come argomento di funzione, viene interpretato come indirizzo del primo elemento dell array Esempio main() extern float func(); float x; static float farray[5]; x = func(farray) /* equivalente a: func(&farray[0]) */ Nella funzione chiamata è necessario dichiarare l argomento come un puntatore all elemento iniziale di un array func(ar) float *ar; } func(ar) float ar[]; } Non è specificata la dimensione perché non si alloca memoria 29
30 Il passaggio di array come argomenti di funzione - 2 Anche nel secondo caso, ciò che viene passato è un puntatore al primo elemento dell array ed il compilatore è in grado di convertire automaticamente ar in un puntatore a float In termini di leggibilità, la seconda versione è preferibile, poiché evidenzia che l oggetto passato è l indirizzo di base di un array e non un generico puntatore a una variabile float (scalare o composta?) La dichiarazione della dimensione dell array nella definizione dell argomento è comunque corretta: il compilatore può usare l informazione sulla dimensione per effettuare controlli sui valori limite 30
31 Il passaggio di array come argomenti di funzione - 3 Non è possibile ottenere la dimensione di un array all interno di una funzione cui viene passato come argomento, ma solo laddove l array è effettivamente dichiarato #include <stdio.h> #include <stdlib.h> void print_size(arg) float arg[]; printf( La dimensione di arg è: %d\n,sizeof(arg)); } main() void print_size(); static float f_array[10]; } printf( La dimensione di f_array è: %d\n,sizeof(f_array)); print_size(f_array); exit(0); Sulla macchina di riferimento, l esecuzione del programma fornisce: La dimensione di f_array è: 40 La dimensione di arg è: 4 31
32 Il compilatore, di solito, non controlla che l accesso agli elementi di un array venga effettuato rispettandone i limiti dimensionali ð È possibile accedere per errore ad elementi per i quali non è stata allocata memoria (aree di memoria riservate ad altre variabili, riservate ad altri processi, etc.) Esempio: main() int ar[10], j; } Uscita dal limite superiore di un array for(j=0; j<=10; j++) ar[j] = 0; Essendo ar un array di 10 elementi, quelli cui è possibile accedere in modo corretto hanno indice da 0 a 9: il ciclo for contiene un errore off-by-one Probabilmente verrebbe azzerata la variabile j ð il ciclo diventa infinito 32
33 Gli algoritmi di ordinamento - 1 L ordinamento di una sequenza di informazioni consiste nel disporre le stesse informazioni in modo da rispettare una qualche relazione d ordine; ad esempio, una relazione d ordine minore o uguale dispone le informazioni in modo non decrescente L ordinamento è un operazione molto importante perché permette di ridurre notevolmente i tempi di ricerca di un informazione, nell ambito di una sequenza di informazioni Nel caso in cui tale sequenza risulta ordinata, secondo una qualche relazione d ordine, è infatti possibile sfruttare la stessa relazione d ordine per effettuare la ricerca 33
34 Gli algoritmi di ordinamento - 2 Esistono due categorie di algoritmi di ordinamento: la classificazione è fatta in base alla complessità di calcolo e alla semplicità algoritmica La complessità di calcolo si riferisce al numero di operazioni necessarie all ordinamento; tali operazioni sono essenzialmente confronti e scambi tra gli elementi dell insieme da ordinare La semplicità algoritmica si riferisce alla lunghezza e alla comprensibilità del codice 34
35 Gli algoritmi di ordinamento - 3 Algoritmi semplici di ordinamento Algoritmi che presentano complessità O(n 2 ), dove n è il numero di informazioni da ordinare: sono caratterizzati da poche e semplici istruzioni, dunque si realizzano con poche linee di codice Algoritmi evoluti di ordinamento Algoritmi che presentano complessità computazionale O(n log 2 n): sono più complessi, fanno spesso uso di ricorsione; la convenienza del loro utilizzo si rileva quando il numero n di informazioni da ordinare è molto elevato 35
36 Bubblesort - 1 La strategia Bubblesort (ordinamento a bolla) prevede il confronto dei primi due elementi di un array, e lo scambio, se il primo è maggiore del secondo Dopo il primo confronto, si effettua un confronto fra il secondo ed il terzo elemento (con eventuale scambio), fra il terzo ed il quarto, etc. Gli elementi pesanti (grandi) tendono a scendere verso il fondo del vettore, mentre quelli leggeri (più piccoli) salgono (come bolle) in superficie 36
37 Bubblesort - 2 Il confronto fra tutte le coppie di elementi adiacenti viene detto passaggio Se, durante il primo passaggio, è stato effettuato almeno uno scambio, occorre procedere ad un ulteriore passaggio Ad ogni passaggio, almeno un elemento assume la sua posizione definitiva (l elemento più grande del sottoinsieme attualmente disordinato) Devono essere effettuati al più n-1 passaggi Al k-esimo passaggio vengono effettuati n-k confronti (con eventuali scambi): almeno k-1 elementi sono già ordinati Complessivamente, vengono effettuati n (n-1)/2 confronti ð La complessità computazionale del Bubblesort è O(n 2 ) 37
38 Bubblesort - 3 #define FALSE 0 #define TRUE 1 #include <stdio.h> void bubble_sort(list, list_size) int list[], list_size; int j, temp, sorted=false; while(!sorted) sorted = TRUE; /* assume che list sia ordinato */ for(j=0; j<list_size-1; j++) if(list[j]>list[j+1]) /* almeno un elemento non è in ordine */ sorted = FALSE; temp = list[j]; list[j] = list[j+1]; list[j+1] = temp; } } /* fine del ciclo for */ } /* fine del ciclo while */ } Nota Nel caso migliore, quando il vettore è già ordinato, si effettua un solo passaggio, con n-1 confronti e nessuno scambio ð La complessità scende a O(n) 38
39 Le stringhe 39
40 Definizione Una stringa è un array di caratteri terminato dal carattere nullo, corrispondente alla sequenza di escape \0 (con valore numerico associato zero) Una stringa costante (o letterale) è una serie di caratteri racchiusi fra doppi apici: tale stringa è di tipo array di caratteri, con ogni carattere che occupa un byte Ad ogni stringa viene aggiunto automaticamente dal compilatore un carattere nullo, ad indicarne la fine 40
41 Dichiarazione e inizializzazione - 1 Per memorizzare una stringa occorre dichiarare un array di char, che può essere inizializzato con una stringa costante static char str[]= testo ; L array ha dimensione maggiore di uno rispetto alla lunghezza della stringa, per consentire la memorizzazione del carattere nullo di terminazione (str ha lunghezza 6 byte) Il compilatore segnala un errore se si dichiara la lunghezza della stringa n, e si inizializza con una stringa costante di lunghezza >n static char str[3]= quattro ; /* SCORRETTO */ static char str1[3]= tre ; /* CORRETTO */ I compilatori ANSI, generalmente, consentono di specificare una dimensione di array che non includa il carattere terminatore 41
42 Dichiarazione e inizializzazione - 2 È possibile inizializzare un puntatore a char con una stringa costante: str 0FFF 1000 t a l char *ptr = altro testo ; si crea un array di caratteri, inizializzato ad altro testo, riservando però memoria anche per il puntatore Nel caso dell array, tutti i successivi accessi utilizzano il nome dell array come riferimento per l indirizzo dell elemento iniziale dell array: tale indirizzo non può essere modificato Il puntatore è una variabile e può essere modificato: l indirizzo relativo alla prima inizializzazione viene perso ptr e s t o \ A 100B 100C 100D 100E 100F t r o t e s t o \0 42
43 Gli assegnamenti a stringhe Un puntatore a char può essere inizializzato con una stringa costante, perché una stringa è un array di char Una stringa costante viene interpretata come un puntatore al primo carattere della stringa #include <stdlib.h> main() char array[10]; char *ptr1 = 10 spazi ; char *ptr2; array = not OK ; /* non è possibile assegnare un indirizzo */ array[5] = A ; /* OK */ *(ptr1+5) = B ; /* OK */ ptr1 = OK ; ptr1[5] = C ; /* opinabile a causa dell assegnamento precedente */ *ptr2 = not OK ;/* conflitto di tipi */ ptr2 = OK ; /* opinabile perché non c è inizializzazione */ exit(0); } 43
44 Stringhe e caratteri - 1 Occorre notare la differenza fra stringhe costanti e costanti di tipo carattere: char ch = a ; /* Per a è riservato un byte */ /* Vengono riservati due byte per a, oltre allo * spazio necessario alla memorizzazione di ps */ char *ps = a ; È possibile assegnare una costante carattere all indirizzo contenuto in un puntatore a char; è invece scorretto effettuare la stessa operazione relativamente ad una stringa char *p1; *p1 = a ; /* OK */ *p1 = a ; /* not OK */ char *p2; p2 = a ; /* not OK */ p2 = a ; /* OK */ Le stringhe sono interpretate come puntatori a carattere 44
45 Stringhe e caratteri - 2 Le inizializzazioni e gli assegnamenti non sono simmetrici; è infatti possibile scrivere Puntatore a carattere char *p = string ; ma non Carattere *p = string ; Nota: vale per inizializzazioni ed assegnamenti di tutti i tipi di dati float f; float *pf = &f; /*OK */ *pf = &f; /* SCORRETTO */ Float Puntatore a float 45
46 Lettura e scrittura di stringhe - 1 Le stringhe possono essere lette e scritte utilizzando le funzioni scanf() e printf(), con lo specificatore di formato %s L argomento della funzione scanf() deve essere un puntatore ad un array di caratteri di dimensioni sufficienti a contenere la stringa in ingresso, che si intende terminata da un qualsiasi carattere di spaziatura La funzione scanf(), dopo aver letto il dato in ingresso, aggiunge automaticamente il carattere \0 in fondo alla stringa L argomento della funzione printf() deve essere un puntatore ad un array di caratteri terminato dal carattere nullo (che non viene stampato) 46
47 Lettura e scrittura di stringhe - 2 Esempio: Scrivere un programma che legge una stringa dalla periferica d ingresso di default e la stampa dieci volte #include <stdio.h> #include <stdlib.h> #define MAX_CHAR 80 main() char str[max_char]; int i; È possibile utilizzare il nome dell array come argomento per le funzioni di I/O, in quanto puntatore all inizio dell array } printf( Introdurre una stringa: ); scanf( %s, str); for (i=0; i<10; i++) printf( %s\n, str); exit(0); 47
48 Le funzioni di libreria per le stringhe strlen() La funzione strlen(), restituisce il numero di caratteri che compongono una stringa (escluso il carattere nullo) Poiché nell espressione *str++ i due operatori hanno la stessa int strlen(str) precedenza ed associatività destra, l espressione viene analiz- char *str; zata dal compilatore nel modo int i; seguente: Valutazione dell operatore di incremento postfisso; il compilatore passa str all operatore successivo e lo incrementa solo al termine della valutazione dell espressione Valutazione dell operatore *, applicato a str Completamento dell espressione, con l incremento di str } for (i=0; *str++; i++) ; /* istruzione vuota */ return i; 48
49 Le funzioni di libreria per le stringhe strcpy() La funzione strcpy() copia una stringa in un altra Il risultato dell assegnamento costituisce la condizione di test per il ciclo while Se *s2 vale zero (per il carattere di terminazione), si ha l uscita dal ciclo void strcpy(s1, s2) char *s1, *s2; while(*s2++ = *s1++) ; /*istruzione vuota */ } L operatore di incremento postfisso è obbligatorio: un incremento prefisso non produrrebbe un risultato corretto, dato che il primo elemento non verrebbe copiato 49
50 Le funzioni di libreria per le stringhe strstr()- 1 La funzione strstr() effettua la ricerca di una sottostringa all interno di una stringa, operazione detta comunemente pattern matching La funzione prevede come argomenti due puntatori a stringhe di caratteri ed effettua la ricerca di un occorrenza della seconda stringa nella prima: se esiste un occorrenza, viene restituita la posizione d inizio nell array altrimenti, viene restituito -1 Nota: la maggior parte delle funzioni della libreria di run-time restituisce 0 o -1, come valore di errore (per strstr(), 0 corrisponde all occorrenza della seconda stringa all inizio della prima) 50
51 Le funzioni di libreria per le stringhe strstr()- 2 /* Restituisce la posizione di str2 in str1; restituisce -1 se non esiste occorrenza */ int strstr(str1, str2) char *str1, *str2; char *p, *q, *substr; /* Itera su ogni carattere di str1 */ for(substr=str1; *substr; substr++) p = substr; q = str2; /* Controlla se l occorrenza di str2 corrisponde alla posizione corrente */ while(*q) if(*q++!= *p++) goto no_match; /* serve per uscire dal while, ma restare nel for */ /* Si giunge qui solo se si è trovata un occorrenza di str2 */ return substr-str1; /* Si giunge qui se non è stata riscontrata un occorrenza di str2 (nel ciclo while) */ no_match: ; } /* Si giunge qui se non vi sono occorrenze di str2 in str1 */ return -1; } 51
52 Le funzioni di libreria in string.h strcpy() Copia una stringa in un array strncpy() Copia una parte di una stringa in un array strcat() Concatena due stringhe strncat() Concatena parte di una stringa ad un altra strcmp() Confronta due stringhe strncmp() Confronta due stringhe per una lunghezza data strchr() Cerca la prima occorrenza di un carattere specificato in una stringa strcoll() Confronta due stringhe sulla base di una sequenza di confronto definita strcspn() Calcola la lunghezza di una stringa che non contiene i caratteri specificati strerror() Fa corrispondere ad un numero di errore un messaggio di errore testuale strlen() Calcola la lunghezza di una stringa strpbrk() Cerca la prima occorrenza di uno tra i caratteri specificati all interno di una stringa strrchr() Cerca l ultima occorrenza di un carattere in una stringa strspn() Calcola la lunghezza di una stringa che contenga caratteri specificati strstr() Cerca la prima occorrenza di una stringa in un altra strtok() Divide una stringa in una sequenza di simboli strxfrm() Trasforma una stringa in modo che sia utilizzabile come argomento per strcmp() 52
53 Esempio: Calcolo dell età /* Esempio di conversione da stringa ad intero */ #include <stdio.h> #include <stdlib.h> main() char anno_nascita[5], anno_corrente[5]; int anni; printf( Inserire l anno di nascita: ); scanf( %s, anno_nascita); printf( Inserire l anno corrente: ); scanf( %s, anno_corrente); /* atoi() converte una stringa in un intero */ anni = atoi(anno_corrente) - atoi(anno_nascita); printf( Età: %d\n, anni); exit(0); } 53
54 Esempio: Parole nella stringa /* Conta il numero di parole in una stringa */ #include <ctype.h> int word_count(s) char *s; int count=0; while(*s!=`\0 ) while(isspace(*s)) /* salta la spaziatura */ ++s; if(*s!=`\0 ) /* trovata una parola */ ++count; while(!isspace(*s) && *s!=`\0 ) ++s; /* salta la parola */ } } return count; } 54
55 Esempio: Parole palindrome /* Letta in input una stringa, verifica se è palindroma */ #include <stdio.h> #include <stdlib.h> #include <string.h> main() char parola[32], i=0, n; printf( Inserisci una parola (lunga al max 31 caratteri): ); scanf( %s, parola); n = strlen(parola); while((i <= n/2) && (parola[i] = = parola[n-1-i])) i++; if(i > n/2) printf( La parola %s è palindroma.\n, parola); else printf( La parola %s non è palindroma.\n, parola); exit(0); } 55
56 Esempio: Da minuscole a maiuscole /* Letta una stringa alfabetica, la riscrive con solo lettere maiuscole*/ #include <stdlib.h> #include <stdio.h> #include <string.h> main() exit(0); } char s[100], t[100]; int i; printf( Inserisci una stringa: ); scanf( %s, s); for (i=0; i<strlen(s); i++) if (s[i] >= 97 && s[i] <= 122) t[i] = s[i] - 32; else t[i] = s[i]; } printf( Stringa maiuscola: %s\n, t); 56
! Array. n Mondimensionali n Multidimesionali (Matrici)! Preprocessore! Commenti
Linguaggio C ! Array n Mondimensionali n Multidimesionali (Matrici)! Preprocessore! Commenti 2 ! Nel linguaggio C, un array è un insieme di variabili dello stesso tipo memorizzate consecutivamente! Ogni
DettagliFunzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
DettagliUnità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
DettagliDispensa 13 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA. Laboratorio
CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA CORSO DI PROGRAMMAZIONE A.A. 2014-15 Dispensa 13 Laboratorio Dott. Mirko Ravaioli e-mail: mirko.ravaioli@unibo.it http://www.programmazione.info
DettagliTipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010
Tipi di dati scalari (casting e puntatori) Alessandra Giordani agiordani@disi.unitn.it Lunedì 10 maggio 2010 http://disi.unitn.it/~agiordani/ I tipi di dati scalari I tipi aritmetici, i tipi enumerativi
DettagliEsercizi. Stringhe. Stringhe Ricerca binaria
Politecnico di Milano Esercizi Stringhe Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaa[10], stringab[10]; strcpy(stringaa, stringab); Copia if (strcmp(stringaa, stringab)
DettagliStringhe in C. Alessandra Giordani Lunedì 23 aprile 2012
Stringhe in C Alessandra Giordani agiordani@disi.unitn.it Lunedì 23 aprile 2012 http://disi.unitn.it/~agiordani/ Stringhe Sono particolari array: Ogni elemento del vettore è di tipo char La stringa è terminata
DettagliI puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
DettagliVerso i puntatori: Cosa è una variabile?
Verso i puntatori: Cosa è una variabile? Quando si dichiara una variabile, ad es. int a; si rende noto il nome e il tipo della variabile. Il compilatore alloca l opportuno numero di byte di memoria per
DettagliDati aggregati. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliLinguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
DettagliEsercizio 1: funzione con valore di ritorno di tipo puntatore
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliOperazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliArgomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliUso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
DettagliLinguaggio C - Array. Array: tipo nome_array[num_elementi]
Linguaggio C - Array Array: Gli array o vettori sono delle strutture dati in grado di contenere un insieme di valori tutti dello stesso tipo. Un array lo possiamo immaginare come un contenitore suddiviso
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti
DettagliPuntatori. 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 1 Il puntatore Un tipo puntatore è un tipo scalare per
DettagliNon ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
DettagliPuntatori. Fondamenti di Programmazione
Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale
Dettagli4 GLI ARRAY E LE STRINGHE
13 4 GLI ARRAY E LE STRINGHE 4.1 Gli array monodimensionali Un array è un insieme di variabili dello stesso tipo, cui si fa riferimento mediante uno stesso nome. L accesso ad un determinato elemento si
DettagliUna stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0
STRINGHE: ARRAY DI CARATTERI Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliPuntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a
Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime
DettagliTipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.
Tipi di dati fondamentali Tipi di dati fondamentali Linguaggi di Programmazione I Ferdinando Cicalese caratteri: char signed char unsigned char interi short int long interi unsigned short unsigned unsigned
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliLezione 8 Struct e qsort
Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort
DettagliStringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
DettagliArray in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica
Array in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: array DIS - Dipartimento di informatica e sistemistica 1 / 25 Cosa vedremo
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali
DettagliInformatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi
Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi gianluca.rossi@uniroma2.it Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)
DettagliEsercizi Programmazione I
Esercizi Programmazione I 9 Novembre 201 Esercizio 1 Valutare e dare il tipo delle seguenti espressioni condizionali. 1 char a= a, b= b ; // a ha v a l o r e decimale 97 2 i n t i= 1, j= 2 ; 3 double x=
DettagliStringhe di caratteri
Linguaggio C Stringhe di caratteri 1 Variabili e costanti stringa! Una stringa letterale è una sequenza di caratteri racchiusa tra doppi apici! Può essere scritta su più righe utilizzando il backslash
DettagliTipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C
Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che
DettagliSi possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).
Operatori di incremento e decremento: ++ e -- ++ e -- sono operatori unari con la stessa priorità del meno unario e associatività da destra a sinistra. Si possono applicare solo a variabili (di tipi interi,
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
DettagliInput/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari
Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Linguaggio ANSI C Input/Output - 1 La libreria standard del
DettagliPuntatori in C Lucidi della Pof.ssa Pazienza
Puntatori in C Lucidi della Pof.ssa Pazienza http://www.uniroma2.it/didattica/foi2/ Puntatori L operatore di indirizzo & Indirizzi, puntatori Aritmetica dei puntatori L operatore di dereferenziazione *
DettagliIntroduzione ai puntatori in C Definizione
Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il
DettagliFondamenti di Informatica
Fondamenti di Informatica Prima prova intermedia - 11 Novembre 2009 Si risolvano i seguenti esercizi. Il compitino prevede un punteggio massimo di 15/14-esimi, cui andranno sommati i punti ottenuti nel
DettagliSoluzione/* PROGRAMMAZIONE IN C */ #include <stdio.h> #include <stdlib.h>
Ricerca di un elemento in vettore Scrivere un programma in linguaggio C che riceve in ingresso una sequenza di N numeri interi. I numeri sono memorizzati in un vettore. Il valore N è inserito dall utente,
DettagliIntroduzione al C. Unità 8 Stringhe
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 8 Stringhe D. Bloisi, A. Pennisi, S. Peluso, S. Salza Sommario Unità 8 Array di
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 12/12/2011. Prof. Raffaele Nicolussi
Laboratorio di Informatica Ingegneria Clinica Lezione 12/12/2011 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147-00161 Roma Docente Raffaele Nicolussi rnicolussi@fub.it Lezioni
DettagliI puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.
Puntatori I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. NOTA: quando un programma viene mandato in esecuzione, ad esso viene assegnata un area di memoria di lavoro
DettagliIntroduzione al linguaggio C
Introduzione al linguaggio C Abbiamo già visto come un programma non sia altro che un algoritmo codificato in un linguaggio di programmazione. Problema: quale linguaggio scegliere per la codifica di un
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
DettagliStruttura dei programmi C
Programmi C Struttura dei Programmi C Dichiarazione delle variabili Operazioni di Ingresso/Uscita Fondamenti di Informatica 1 Struttura dei programmi C Un programma C deve contenere, nell'ordine: una parte
DettagliProgrammazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto
DettagliStringhe. Concetti chiave
Concetti chiave Stringhe Variabili strutturate: array di caratteri Carattere di fine stringa Copiare, concatenare, confrontare e convertire stringhe Funzioni standard strcpy, strcat, strcat, strcmp, atoi,
DettagliInput/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
DettagliIntroduzione al C. Ancora puntatori, allocazione dinamica, e tipi derivati
Introduzione al C Ancora puntatori, allocazione dinamica, e tipi derivati 1 Array di caratteri Non esiste in C un tipo di dato predefinito per le stringhe Le stringhe sono rappresentate come array di caratteri.
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
DettagliSTRINGHE: ARRAY DI CARATTERI! a p e \0
STRINGHE: ARRAY DI CARATTERI! Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più
DettagliGESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliC: panoramica - I parte
C: panoramica - I parte Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010
DettagliInput/Output di numeri
Input/Output di numeri I/O di numeri Per utilizzare le funzioni di I/O occorre include il file di intestazione (o file header) stdio.h utilizzando all inizio del sorgente la direttiva #include
DettagliLinguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi
DettagliLaboratorio di informatica Ingegneria meccanica
Interi in complemento a 2 () Laboratorio di informatica Ingegneria meccanica Lezione 5 29 ottobre 2007 Con N bit sono rappresentabili tutti gli interi nell'intervallo [-2^(N-), 2^(N-)-] Esempio: 6 bit,
DettagliCorso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione
Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale
DettagliPOINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.
POINTERS Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. Es. Sia y una variabile intera di valore e sia yptr una variabile pointer avente come valore l indirizzo di y.
DettagliGli Operatori. Linguaggio C. Gli Operatori. Esempi sull uso dell Operatore di Assegnamento. L Operatore di Assegnamento
Linguaggio C Gli Operatori Gli Operatori Gli operatori sono simboli (sia singoli caratteri che loro combinazioni) specificano come devono essere manipolati gli operandi dell espressione Operatori aritmetici
DettagliI puntatori (richiamo)
I puntatori (richiamo) Puntatori Un puntatore è una variabile che assume come valore un indirizzo in memoria L uso dei puntatori permette di: mantenere riferimenti ad altre variabili (è un punto di accesso
DettagliElementi di Informatica A. A. 2016/2017
Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 2
DettagliSommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C
Sommario Introduzione... xv Organizzazione del volume... xv Argomenti...xvi Domande...xvi Verifiche...xvi Domande e risposte...xvi Esercizi...xvi Non è richiesta alcuna precedente esperienza di programmazione...
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliINTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
DettagliStringhe e tipi di dati strutturati
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!
Dettagli$QDOLVLGHOSURJUDPPDTXDGUDWR
$QDOLVLGHOSURJUDPPDTXDGUDWR /* */ calcolare l area del quadrato #include main(){ int lato, area; printf("lato "); scanf("%d", &lato); if(lato < 0) printf("errore nei dati \n"); else { area =
DettagliERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
DettagliCorso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica
Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare
DettagliAritmetica dei puntatori
Aritmetica dei puntatori Sui puntatori si possono anche effettuare operazioni aritmetiche, con opportune limitazioni somma o sottrazione di un intero sottrazione di un puntatore da un altro Somma e sottrazione
DettagliLinguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
Dettaglis r t i r n i g n. g h s r t c r p c y s r t c r a c t s r t c r m c p s r t c r h c r s r t s r t s r
char* titolo= l, e,, s, t, r, i, n, g, h, e, \0 ; 1 Libreria sulle stringhe La libreria string.h contiene una ricca serie di funzioni per operare sulle stringhe Esempi: copiare una stringa in un altra
DettagliLinguaggio C: Espressioni
Linguaggio C: Espressioni Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ 2 Ringraziamenti prof. Mirko Viroli, Università
DettagliArray k-dimensionali
Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per
DettagliEsercitazione 12. Esercizi di Ricapitolazione
Esercitazione 12 Esercizi di Ricapitolazione Esercizio Scrivere un programma che, dato un numero intero positivo, stampa la sua rappresentazione binaria. ALGORITMO Scriviamo una procedura stampa_bin che,
Dettaglichar* titolo= Libreria sulle stringhe Esempi: (strcpy) (strstr)... Laboratorio di Informatica L-A 1
char* titolo= l, e,, s, t, r, i, n, g, h, e, \0 ; 1 Libreria sulle stringhe La libreria string.h contiene una ricca serie di funzioni per operare sulle stringhe Esempi: copiare una stringa in un altra
DettagliEsercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
DettagliEsercizi di programmazione in linguaggio C English Dictionary
Esercizi di programmazione in linguaggio C English Dictionary Il file di testo wordnet.txt contiene un certo numero di parole (word) e il corrispondente significato (meaning) secondo il seguente formato:
Dettagli2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2) Fondamenti di Informatica.
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Le trappole del linguaggio C 2001 Pier Luca Montessoro - Davide Pierattoni
DettagliIl blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. Esempio:
Variabili locali Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. void leggivettore(int v[], int dim) int i; /* i E UNA VARIABILE LOCALE */ for (i
DettagliLezione 8. Sottoprogrammi
Lezione 8 Il linguaggio C: Sottoprogrammi e Funzioni I puntatori Input/Output su file Sottoprogrammi Per risolvere un problema si può scomporlo in problemi più semplici e comporre le loro soluzioni in
DettagliEsercizi C su array e matrici
Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza,, ordinamento, ricerca e merge, matrice simmetrica, puntatori Array Array o vettore Composto da una serie di celle int vett[4]
DettagliLibrerie Stringhe. Librerie e stringhe. Lezione 9. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. 2015/2016
e stringhe Lezione 9 Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2015/2016 Calendario delle lezioni Lezione 1 (7 e 9/10/2015) - Introduzione all ambiente Linux Lez. 2 (14 e 16/10/2015)
DettagliLinguaggio C: introduzione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi
DettagliStringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche
Fondamenti di Informatica T-1 modulo 2 Laboratorio 04: stringhe 1 Stringhe In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche terminatore
Dettaglistring.h strcpy strc strcat strcmp strcmp strchr strstr strstr i t r ; s r \0 int strlen(char* str) char pippo[]={ p, i, p, p, o, \0 \ };
char* titolo= l, e,, s, t, r, i, n, g, h, e, \0 ; Libreria sulle stringhe libreria i string.h contiene una ricca serie di funzioni per operare sulle stringhe Esempi: copiare una stringa in un altra (strcpy
DettagliGli array, le stringhe e le strutture
INFORMATICA B Ingegneria Elettrica Gli array, le stringhe e le strutture Limiti dei tipi di dato semplici Utilizzare solo i tipi di dato semplici può essere limitante e rendere il programma poco flessibile
DettagliArray. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali
MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono
DettagliLinguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin
Linguaggio C Tipi predefiniti Università degli Studi di Brescia Prof. Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Il concetto di tipo (reprise) Nome che indica
DettagliInformatica 1. Prova di recupero 21 Settembre 2001
Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo
Dettagli