Algoritmi su array / 2



Похожие документы
Corso di Fondamenti di Informatica Algoritmi su array / 2

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Vettori Algoritmi elementari di ordinamento

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Ricerca di un valore nell array

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Fondamenti di Informatica 2

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

dall argomento argomento della malloc()

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

10 - Programmare con gli Array

Laboratorio di Algoritmi e Strutture Dati

Semplici Algoritmi di Ordinamento

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Algoritmi di ordinamento

Laboratorio di Fondamenti di Informatica anno accademico Esercizi proposti il

GESTIONE INFORMATICA DEI DATI AZIENDALI

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Prova Scritta del 19/07/10

obiettivi di questa seconda metà del corso fare un passo avanti rispetto a :... meccanismi di composizione dei dati

1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/ III Informatica Serale I.T.I.S.

Corso di Informatica

Sistemi Operativi mod. B. Sistemi Operativi mod. B A B C A B C P P P P P P < P 1, >

Monitor. Introduzione. Struttura di un TDA Monitor

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

3. La sintassi di Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

MODULO 5 ACCESS Basi di dati. Lezione 4

Ricorsione. (da lucidi di Marco Benedetti)

Il tipo di dato astratto Pila

Introduzione a ROOT. 1. Informazioni generali

Ricerca sequenziale di un elemento in un vettore

Laboratorio di Algoritmi e Strutture Dati

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Le stringhe. Le stringhe

Realizzazione di una classe con un associazione

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

Funzioni in C. Violetta Lonati

Algoritmo di ordinamento per sostituzione. Esempio : dato l array :

Introduzione al MATLAB c Parte 2

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Lab 11 Gestione file di testo"

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Linguaggio C - Stringhe

I tipi di dato astratti

Algoritmo di ordinamento per scambio (a bolle o bubble sort)

Breve riepilogo della puntata precedente:

Corso di Tecniche di Programmazione

Laboratorio di programmazione

Ricerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?

IL MARKETING E QUELLA FUNZIONE D IMPRESA CHE:

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Scheda operativa Versione rif c00. Libro Inventari

LISTE, INSIEMI, ALBERI E RICORSIONE

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Algoritmi di Ricerca. Esempi di programmi Java

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Maschere. Microsoft Access. Maschere. Maschere. Maschere. Aprire una maschere. In visualizzazione foglio dati: Maschere

Politecnico di Torino

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

SIMPLY JOB. Progetto per il corso di Programmazione III e Laboratorio A.A Realizzato da: Massimo Buonocore

Sottoprogrammi: astrazione procedurale

Programmazione I - Laboratorio

Programmazione 1 A.A. 2015/2016

Gestione dei processi

La struttura dati ad albero binario

2. Simulazione discreta: approcci alla simulazione

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

Supermarket Progetto di Programmazione Febbraio 2010

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Mon Ami 3000 Conto Lavoro Gestione del C/Lavoro attivo e passivo

Inizializzazione, Assegnamento e Distruzione di Classi


Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Programmazione dinamica

Modellazione dei dati in UML

APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL

Corso di Fondamenti di Informatica

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Транскрипт:

Corso di Informatica Algoritmi su array / Anno Accademico / Francesco Tortorella

Algoritmi su array Operazioni tipiche sugli array: inizializzazione lettura stampa ricerca del minimo e del massimo ricerca di un valore inserimento di un valore eliminazione di un valore ordinamento del vettore Informatica /

Inserimento ed eliminazione A volte è utile considerare gli array come insiemi dinamici di dati [la cui composizione, cioè, può variare dinamicamente]. A questo scopo è necessario realizzare operazioni quali: Inserimento di un valore nell array Eliminazione di un elemento dall array Informatica /

Inserimento di un valore nell array Per poter inserire un nuovo valore nell array, è necessario che questo disponga di spazio sufficiente per accogliere il nuovo elemento L inserimento va realizzato diversamente per Array non ordinato Array ordinato Informatica /

Inserimento in array non ordinato Se l array non è ordinato, non esiste una posizione precisa in cui il valore va inserito La scelta più conveniente è di inserire il nuovo valore in coda all array Informatica /

Inserimento in array ordinato L inserimento di un valore in un array ordinato deve mantenere l ordine degli elementi. Per questo motivo, non è possibile il semplice accodamento del nuovo valore a quelli già presenti, ma è necessario modificare la disposizione degli elementi già presenti per fare in modo che il nuovo valore possa essere inserito nella giusta posizione. Informatica /

Inserimento in array ordinato L inserimento si realizza in due passi: individuare la posizione che deve assumere il nuovo valore all interno dell array per mantenere l ordine dell insieme dei valori rendere disponibile quella posizione facendo scorrere tutti gli elementi da quella posizione in poi di un posto in basso e infine scrivere il nuovo valore nella posizione resa disponibile Informatica /

Informatica / Inserimento in array ordinato

Inserimento in array ordinato int cerca_pos(int v[], int n, int x){ // cerca la posizione // del primo elemento >= x nell'array v int i; i = ; while(i<n && v[i] <= x) i++; Che succede se: x < min[v]? (inserimento in testa) x > max[v]? (inserimento in coda) return(i); void crea_spazio(int v[], int n, int pos) { // crea una posizione libera nell'array v // in corrispondenza dell'indice index // si assume ci sia spazio disponibile nell'array for(int i = n-; i >= pos; i--) v[i+] = v[i]; Informatica /

#include <iostream> #include "InsExtr.h" void stampa_array(int vet[], int riemp); using namespace std; int main(int argc, char** argv) { int vet[] = {,,,,,,, ; int n =, int x, index; cout << "array prima dell'inserimento:\n "; stampa_array(vet, n); cout << "\nx: "; cin >> x; index = cerca_pos(vet, n, x); crea_spazio(vet, n, index); // inserimento e aggiornamento riempimento vet[index] = x; n++; cout << "\narray dopo l'inserimento:\n "; stampa_array(vet, n); return (EXIT_SUCCESS); Informatica /

Informatica / Eliminazione di un valore Nel caso si debba eliminare un certo valore da un array, i passi da compiere sono: ricerca nell array per identificare la posizione del valore [se presente] cancellazione logica tramite scorrimento di una posizione verso l alto dei successivi elementi dell array

Eliminazione di un valore void elimina_pos(int v[], int n, int pos) { // elimina l'elemento in posizione pos for (int i = pos; i < n - ; i++)

Ordinamento di un array L operazione di ordinamento consiste in una permutazione degli elementi nell array in modo che, al termine dell ordinamento, la disposizione degli elementi nell array rispetti un ordine specifico [p.es. crescente]. Lo scopo dell ordinamento è di facilitare successive ricerche di elementi nell array che è stato ordinato. Sono stati proposti numerosi algoritmi di ordinamento, con caratteristiche diverse. Non esiste l algoritmo di ordinamento ottimo. Informatica /

Ordinamento per selezione [select sort] Questo algoritmo si basa sul seguente principio: dato un array vet di N elementi, si determina l elemento minimo tra vet[], vet[],, vet[n-] e lo si scambia con il primo elemento Le operazioni vengono poi ripetute su N- elementi a partire da vet[], poi su N- elementi a partire da vet[],, su elementi a partire da vet[n-]. for (int i=; i < N-; i++){ determina l elemento minimo in vet[i],,vet[n-] e scrivi in k la sua posizione scambia vet[i] e vet[k] Informatica /

int cercaposmin(int v[], int n, int start){ int min,pos; pos = start; min = v[start]; for(int i = start+; i < n; i++) if (v[i] < min){ min = v[i]; pos = i; return(pos); void selectsort(int v[], int n){ int k; for(int i = ; i < n-; i++){ k = cercaposmin(v,n,i); if(k!= i) swap(v[i],v[k]); Informatica /

Problema Scrivere una funzione che restituisca i primi tre elementi in ordine crescente di un array di interi. Informatica /

Ordinamento per gorgogliamento [bubble sort] Questo algoritmo si basa sul seguente principio: dato un array vet di N elementi, si verifica se la coppia (vet[n-],vet[n-]) sia ordinata; se non lo è, si scambiano i due elementi si ripete lo stesso con le coppie (vet[n-], vet[n- ]), (vet[n-],vet[n-]),, (vet[],vet[]) al termine, in prima posizione ci sarà l elemento minimo Le operazioni vengono poi ripetute altre N- volte per completare l ordinamento Informatica /

Ordinamento per gorgogliamento [bubble sort] void bubblesort(int v[], int n){ for(int t = ; t < n; t++) for(int i = n-; i > ; i--) if(v[i] < v[i-]) swap(v[i], v[i-]); Possibile migliorare l algoritmo? Che cosa resta invariato durante il ciclo esterno? Informatica /

Ordinamento per gorgogliamento [bubble sort] void bubblesort(int v[], int n){ for(int t = ; t < n; t++) for(int i = n-; i > t; i--) if(v[i] < v[i-]) swap(v[i], v[i-]); Si possono sfruttare i risultati delle verifiche di ordinamento delle coppie di elementi successivi? Informatica /

Ordinamento per gorgogliamento [bubble sort] void bubblesort(int v[], int n) { int last=,end; for (int t = ; t < n; t++) { end = last; for (int i = n - ; i > end; i--) if (v[i] < v[i - ]) { swap(v[i], v[i - ]); last = i; È possibile verificare se l array abbia completato l ordinamento prima del termine del for esterno? Informatica /

Ordinamento per gorgogliamento [bubble sort] void bubblesort(int v[], int n) { int last=,end; bool fattoswap; do{ fattoswap = false; end = last; for (int i = n - ; i > end; i--) if (v[i] < v[i - ]) { swap(v[i], v[i - ]); last = i; fattoswap = true; while(fattoswap); Informatica /

Confronto tra select sort e bubble sort Quale dei due algoritmi è più conveniente? In termini di confronti? In termini di scambi? Informatica /