Argomenti. Array. Stringhe. Merge sort

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

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Algoritmi di ordinamento: Array e ricorsione

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

Il linguaggio C. Puntatori e dintorni

STRINGHE: ARRAY DI CARATTERI! a p e \0

Gestione di stringhe. Le stringhe in C/C++

Esercitazione di Reti degli elaboratori

Dati aggregati. Violetta Lonati

Caratteri e stringhe

LE FUNZIONI RICORSIVE. Cosimo Laneve

PUNTATORI. Ivan Lanese

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

Esercizi. Stringhe. Stringhe Ricerca binaria

Esercizio 1: funzione con valore di ritorno di tipo puntatore

char* titolo= Libreria sulle stringhe Esempi: (strcpy) (strstr)... Laboratorio di Informatica L-A 1

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione I - Laboratorio

Lezione 8: Stringhe ed array multidimensionali

string.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 \ };

Lezione 8 Struct e qsort

C: panoramica. Violetta Lonati

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

Lezione 19 e Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe

char* titolo= { l, e,, s, t, r, i, n, g, h, e, \0 };

Lezione 6 Struct e qsort

Esercizi sulle stringhe

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

I tipi strutturati e i record in C++

Nota: Si consideri il valore di pi greco.

Il linguaggio C. Puntatori e dintorni

Implementazione dell albero binario in linguaggio C++

Algoritmi di Ricerca. Esempi di programmi Java

Transcript:

ARRAY Ivan Lanese

Argomenti Array Stringhe Merge sort

Array E' una struttura dati che contiene più elementi dello stesso tipo Normalmente su elementi diversi di uno stesso array si fanno operazioni simili Si usa un ciclo o una funzione ricorsiva Si usa un indice per individuare l'elemento specifico Gli array hanno dimensione costante Se la dimensione dell'array non è nota si usa una sovrastima L'array dei voti di uno studente non supererà i 50 elementi

Array: sintassi Gli array vengono dichiarati come le altre variabili, specificando il numero di elementi (costante) int array[20]; const int n=30; int voti[n]; Si accede ad un elemento di un array specificando l'indice dell'elemento array[2]=5; voto[i]=27; cout << voto[i]; Un array viene passato ad una funzione senza specificare il numero di elementi, che spesso è passato come parametro addizionale stampa(array, n); m=media(voti, n);

Array: esercizi Prendere in input numeri interi fino a quando l'utente non inserisce uno 0. Stampare la sequenza inserita al contrario. Prendere in input 10 numeri e stampare i prodotti di tutte le coppie Se i numeri fossero 1, 2,... 10 si otterrebbe la tabella delle tabelline Scrivere una funzione che dato un numero binario lo converte in decimale Scrivere una funzione che elimina tutti i duplicati da un array di interi

Stringhe Le stringhe sono particolari array di caratteri La lunghezza effettiva di una stringa è uno più del numero di caratteri significativi che contiene Dopo l'ultimo carattere significativo, c'è il carattere speciale '\0' usato come terminatore La stringa CIAO è composta da 5 caratteri: 'C' 'I' 'A' 'O' '\0' Una stringa deve essere contenuta in un array di caratteri di dimensione sufficiente Si usa una sovrastima, come per gli altri array Fare attenzione a non uscire dalla dimensione dell'array, in particolare effettuando l'input Il buffer overflow è una nota tecnica di attacco hacker

Lavorare con le stringhe Ci sono 2 modi per lavorare con le stringhe A basso livello, trattandole come array di caratteri Ad alto livello, usando le funzioni predefinite che lavorano sulle stringhe A basso livello Si elaborano i caratteri uno alla volta Quando si passa una stringa a una funzione, spesso non è necessario passarne la lunghezza E' sufficiente usare la posizione del '\0' Questo non vale quando è necessario estendere la stringa

Stringhe viste come array di caratteri: esercizi Scrivere una funzione che verifica se una stringa è palindroma Scrivere una funzione che calcola la lunghezza di una stringa Scrivere una funzione che copia una stringa in un array di caratteri dato Scrivere una funzione che concatena due stringhe Scrivere una funzione che elimina da una stringa tutti i caratteri dopo l'ennesimo

Stringhe: funzioni di libreria E' possibile prendere in input stringhe con >> e stamparle con << Il c++ fornisce diverse funzioni di libreria per manipolare le stringhe Occorre includere <cstring> Gli esercizi 2, 3, 4 di prima corrispondono alle funzioni strlen, strcpy e strcat int strlen(char []); void strcpy(char [], char []); void strcat(char [], char []); Gli operatori relazionali non funzionano sulle stringhe, per scrivere s1<s2 devo scrivere strcmp(s1,s2)<0 int strcmp(char [], char []);

Stringhe: esercizi Scrivere un programma che date tre stringhe stampa la più lunga Scrivere un programma che dati due nomi stampa il primo in ordine alfabetico

Ordinamenti Gli ordinamenti sono una parte fondamentale di molti programmi Perchè richiesto dalla specifica Per migliorarne la complessità Cfr. esercizio sull'eliminazione dei duplicati Esistono molti algoritmi di ordinamento, con caratteristiche diverse E' molto interessante la complessità, cioè come cambia il tempo di esecuzione alla variazione della dimensione dell'input Ordinamentio buoni hanno complessità che cresce come n log n

Merge sort E' un algoritmo di ordinamento ricorsivo, con complessità n log n Casi base: un array di 0 o 1 elemento è ordinato Caso induttivo: dividere l'array in 2 metà, ordinarle tramite chiamate ricorsive e poi farne la fusione ordinata

Mergesort void mergesort(int a[],int p,int r) { int q; if (p<r) { q=(p+r)/2; mergesort(a,p,q); mergesort(a,q+1,r); merge(a,p,q,r); } }

Merge void merge(int a[], int p, int q, int r) { int i, j, k, h, b[length]; i=p; k=p; j=q+1; while(i<=q && j<=r) { if(a[i]<=a[j]) { b[k]=a[i]; i=i+1; } else { b[k]=a[j]; j=j+1; } k=k+1; } if (i<=q) { for(h=q;h>=i;h=h 1) a[h+r q]=a[h]; } for(j=p;j<k;j=j+1) a[j]=b[j]; }