Ricerca di un valore nell array



Documenti analoghi
Ricerca di un valore nell array

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

Corso di Fondamenti di Informatica Algoritmi su array / 2

Algoritmi su array / 2

Corso di Fondamenti di Informatica Algoritmi su array / 1

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

10 - Programmare con gli Array

Introduzione al MATLAB c Parte 2

1) Dati in ingresso 2 numeri, l algoritmo calcola e stampa a video la loro somma

Complessità Computazionale

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

Algoritmi di Ricerca. Esempi di programmi Java

Laboratorio di Algoritmi e Strutture Dati

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

Esempi di algoritmi. Lezione III

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

Bontà dei dati in ingresso

Algoritmi di ordinamento

Esercitazione Informatica I AA Nicola Paoletti

L algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala

Sottoprogrammi: astrazione procedurale

Laboratorio di Fondamenti di Informatica anno accademico Esercizi proposti il

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Breve riepilogo della puntata precedente:

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};

Esercizi su. Funzioni

Monitor. Introduzione. Struttura di un TDA Monitor

Sottoprogrammi. Università degli Studi di Cassino. F. Tortorella Corso di Elementi di Informatica 2007/2008

Aritmetica dei Calcolatori 2

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

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

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

Realizzazione di una classe con un associazione

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

TSP con eliminazione di sottocicli

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

Laboratorio di Informatica Lezione 2

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Cicli. Cicli. Il ciclo for. Comandi per eseguire ripetutamente porzioni di codice Due tipi disponibili in Matlab: Cicli: For While Controllo

ESEMPIO 1: eseguire il complemento a 10 di 765

esercizi Esercizi / problemi

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Sospensione documenti

Elementi di informatica e Programmazione

Vettori Algoritmi elementari di ordinamento

x u v(p(x, fx) q(u, v)), e poi

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

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

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

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:

RICERCA DI UN ELEMENTO

TUTORIAL: COME USARE UN LM35 PER MISURARE UNA TEMPERATURA SU TUTTA LA SCALA CENTIGRADA

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web: Prof. G. Quarella prof@quarella.

Funzioni in C. Violetta Lonati

Corso di Informatica

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Ricerca di un valore nell array (già vista) Inserimento di un valore nell array Eliminazione di un elemento dall array

Ricerca di un valore nell array (già vista) Inserimento di un valore nell array Eliminazione di un elemento dall array

Alberi binari di ricerca

F. Tortorella Corso di Elementi di Informatica Università degli Studi di Cassino

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

Basi di Dati Relazionali

TENDER DUE s.a.s. di Giorgio Rosi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di INFORMATICA 2 (Matematica e Applicazioni)

Capitolo 5. Cercare informazioni sul Web

Esercizio: gestione di un conto corrente

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

Semantica Assiomatica

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Algoritmi e Strutture Dati II: Parte B Anno Accademico Lezione 11

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Classi Oggetti public private this static static

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

Piano di gestione della qualità

LISTE, INSIEMI, ALBERI E RICORSIONE

Elementi di Architettura e Sistemi Operativi. problema punti massimi i tuoi punti problema 1 6 problema 2 7 problema 3 7 problema 4 10 totale 30

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

Corso di Laurea in Matematica. Seminario C/C++ Lorenzo Dusty Costa. Università degli Studi di Milano Dipartimento di Matematica

GESTIONE REVISIONE AUTOVEICOLI (16)... 6 GESTIONE ORDINI CLIENTI...

INIZIO ANNO E/ Per evitare eventuali attese operative, è fortemente consigliato, procedere con le operazioni di seguito descritte

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Corso di Laurea in Matematica

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

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani

QUANTIZZAZIONE diverse fasi del processo di conversione da analogico a digitale quantizzazione

La somma. Esempio: Il prodotto. Esempio:

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Problem solving elementare su dati vettoriali

Test d ipotesi. Statistica e biometria. D. Bertacchi. Test d ipotesi

Tesi Di Laurea. Anno Accademico 2010/2011. relatore Ch.mo prof. Cinque Marcello. correlatore Ch.mo Ing. Catello Cacace

Appunti sulla Macchina di Turing. Macchina di Turing

Prestazioni Sociali Comuni

min 4x 1 +x 2 +x 3 2x 1 +x 2 +2x 3 = 4 3x 1 +3x 2 +x 3 = 3 x 1 +x 2 3x 3 = 5 Innanzitutto scriviamo il problema in forma standard: x 1 x 2 +3x 3 = 5

Matematica generale CTF

STRUTTURE (O COSTRUTTI) DI CONTROLLO

Lezione 4 Le code. Informatica. 26 Aprile Le pizze devono essere preparate e consegnate seguendo l ordine di arrivo degli ordini

1. Sia dato un poliedro. Dire quali delle seguenti affermazioni sono corrette.

GIANLUIGI BALLARANI. I 10 Errori di Chi Non Riesce a Rendere Negli Esami Come Vorrebbe

FONDAMENTI di INFORMATICA L. Mezzalira

Transcript:

Algoritmi su array Quando si usano gli array, si eseguono frequentemente alcune operazioni tipiche : inizializzazione lettura stampa ricerca del minimo e del massimo ricerca di un valore eliminazione di un valore inserimento di un valore ordinamento del vettore Ricerca di un valore nell array Si voglia verificare se in un array è presente almeno un istanza di un certo valore. In caso positivo si fornisca l indice dell elemento. Quali costrutti usare? Come gestire l esito della ricerca? Soluzione 1 Soluzione 2 Soluzione 3

function main % lettura di un array e ricerca dell'occorrenza di un elemento % in un array % Soluzione 1: ricerca esaustiva con FOR % variabili utilizzate % v: array in input % i: indice per scorrere gli elementi dell'array % n: dimensione dell'array fornito in input % val: variabile contenente il valore da cercare % pos: variabile contenente la posizione del valore nell'array % input dimensione n=input('numero elementi: '); % dimensionamento array v=zeros(n,1); % ciclo di lettura fprintf('valore %d: ',i); v(i)=input(''); % input valore da cercare val=input('\nvalore da cercare: '); % ricerca dell'occorrenza pos=0; if(v(i)==val) pos=i;

% stampa dei risultati fprintf('\narray letto:\n'); fprintf('v(%d): %g\n',i,v(i)); % si verifica se è stata effettivamente trovata un'occorrenza if(pos==0) fprintf('\nnell''array non esistono occorrenze del valore %g\n',val); else fprintf('\nil valore %g si trova in posizione %d\n',val,pos);

function main % lettura di un array e ricerca dell'occorrenza di un elemento % in un array % Soluzione 2: ricerca con WHILE, uso di flag booleano % variabili utilizzate % v: array in input % i: indice per scorrere gli elementi dell'array % n: dimensione dell'array fornito in input % val: variabile contenente il valore da cercare % pos: variabile contenente la posizione del valore nell'array % trovato: flag booleano che riporta l'esito della ricerca % input dimensione n=input('numero elementi: '); % dimensionamento array v=zeros(n,1); % ciclo di lettura fprintf('valore %d: ',i); v(i)=input(''); % input valore da cercare val=input('\nvalore da cercare: ');

% ricerca dell'occorrenza pos=0; trovato=0; i=1; while(i<=n & ~trovato) if(v(i)==val) pos=i; trovato=1; i=i+1; % stampa dei risultati fprintf('\narray letto:\n'); fprintf('v(%d): %g\n',i,v(i)); % si verifica se è stata effettivamente trovata un'occorrenza if(~trovato) fprintf('\nnell''array non esistono occorrenze del valore %g\n',val); else fprintf('\nil valore %g si trova in posizione %d\n',val,pos);

function main % lettura di un array e ricerca dell'occorrenza di un elemento % in un array % Soluzione 3: ricerca con WHILE, uso di pos nella condizione % variabili utilizzate % v: array in input % i: indice per scorrere gli elementi dell'array % n: dimensione dell'array fornito in input % val: variabile contenente il valore da cercare % pos: variabile contenente la posizione del valore nell'array % input dimensione n=input('numero elementi: '); % dimensionamento array v=zeros(n,1); % ciclo di lettura fprintf('valore %d: ',i); v(i)=input(''); % input valore da cercare val=input('\nvalore da cercare: '); % ricerca dell'occorrenza pos=0; i=1; while(i<=n & pos==0) if(v(i)==val) pos=i; i=i+1;

% stampa dei risultati fprintf('\narray letto:\n'); fprintf('v(%d): %g\n',i,v(i)); % si verifica se è stata effettivamente trovata un'occorrenza if(pos==0) fprintf('\nnell''array non esistono occorrenze del valore %g\n',val); else fprintf('\nil valore %g si trova in posizione %d\n',val,pos);

Conteggio numero di occorrenze di un valore nell array Si voglia verificare se in un array è presente almeno un certo valore. In caso positivo si fornisca il numero delle istanze presenti. Soluzione Ricerca posizioni delle occorrenze di un valore nell array Si voglia verificare se in un array è presente un certo valore. In caso positivo si forniscano le posizioni delle istanze presenti. Soluzione

function main % lettura di un array e conteggio del numero di occorrenze % di un elemento in un array % variabili utilizzate % v: array in input % i: indice per scorrere gli elementi dell'array % n: dimensione dell'array fornito in input % val: variabile contenente il valore da cercare % cont: variabile contenente il numero di occorrenze trovate % input dimensione n=input('numero elementi: '); % dimensionamento array v=zeros(n,1); % ciclo di lettura fprintf('valore %d: ',i); v(i)=input(''); % input valore da cercare val=input('\nvalore da cercare: '); % ricerca dell'occorrenza cont=0; if(v(i)==val) cont=cont+1; % stampa dei risultati fprintf('\narray letto:\n'); fprintf('v(%d): %g\n',i,v(i)); % si verifica se è stata effettivamente trovata un'occorrenza if(cont==0) fprintf('\nnell''array non esistono occorrenze del valore %g\n',val); else fprintf('\nil valore %g è presente %d volte nell''array\n',val,cont);

function main % lettura di un array e ricerca delle posizioni delle occorrenze % di un elemento in un array % variabili utilizzate % v: array in input % i: indice per scorrere gli elementi dell'array % n: dimensione dell'array fornito in input % val: variabile contenente il valore da cercare % pos: array contenente gli indici delle occorrenze % cont: variabile contenente il numero di occorrenze trovate % input dimensione n=input('numero elementi: '); % dimensionamento array v=zeros(n,1); pos=zeros(n,1); % ciclo di lettura fprintf('valore %d: ',i); v(i)=input(''); % input valore da cercare val=input('\nvalore da cercare: '); % ricerca dell'occorrenza cont=0; if(v(i)==val) cont=cont+1; pos(cont)=i;

% stampa dei risultati fprintf('\narray letto:\n'); fprintf('v(%d): %g\n',i,v(i)); % si verifica se è stata effettivamente trovata un'occorrenza if(cont==0) fprintf('\nnell''array non esistono occorrenze del valore %g\n',val); else fprintf('\nil valore %g è presente %d volte nell''array\n',val,cont); fprintf('in queste posizioni: '); for i=1:cont fprintf('%d ',pos(i)); fprintf('\n');

Ricerca posizioni delle occorrenze del minimo nell array Si voglia cercare il valore minimo in un array insieme con le posizioni delle varie occorrenze. Soluzione

function main % lettura di un array, ricerca del minimo e ricerca % delle posizioni delle occorrenze del minimo % variabili utilizzate % v: array in input % i: indice per scorrere gli elementi dell'array % n: dimensione dell'array fornito in input % min: variabile contenente il valore da cercare % pos: array contenente gli indici delle occorrenze % cont: variabile contenente il numero di occorrenze trovate % input dimensione n=input('numero elementi: '); % dimensionamento array v=zeros(n,1); pos=zeros(n,1); % ciclo di lettura fprintf('valore %d: ',i); v(i)=input('');

% ricerca del minimo cont=1; pos(1)=1; min=v(1); for i=2:n if(v(i)<min) % trovato nuovo minimo % si reinizializza il minimo corrente % ed il vettore delle occorrenze cont=1; pos(1)=i; min=v(i); elseif(v(i)==min) % trovata nuova occorrenza del minimo corrente % si aggiorna il vettore delle occorrenze cont=cont+1; pos(cont)=i; % stampa dei risultati fprintf('\narray letto:\n'); fprintf('v(%d): %g\n',i,v(i)); % stampa del minimo e delle occorrenze fprintf('\nil valore minimo nell''array è %g.\n',min); fprintf('e'' presente %d volte nelle seguenti posizioni: ',cont); for i=1:cont fprintf('%d ',pos(i)); fprintf('\n');

Ricerca di un valore in un array ordinato Si voglia verificare se in un array ordinato è presente almeno un istanza di un certo valore. In caso positivo si fornisca l indice dell elemento. Quali costrutti usare? Come gestire l esito della ricerca? Come sfruttare l ordinamento dell array? Soluzione

function main % lettura di un array ordinato e ricerca dell'occorrenza % di un elemento % variabili utilizzate % v: array in input % i: indice per scorrere gli elementi dell'array % j: indice per scorrere gli elementi dell'array % n: dimensione dell'array fornito in input % val: variabile contenente il valore da cercare % pos: variabile contenente la posizione del valore nell'array % trovato: flag booleano che riporta l'esito della ricerca % input dimensione n=input('numero elementi: '); % dimensionamento array v=zeros(n,1); % ciclo di lettura fprintf('valore %d: ',i); v(i)=input(''); % input valore da cercare val=input('\nvalore da cercare: ');

% ricerca dell'occorrenza pos=0; trovato=0; i=1; while(i<=n & v(i)<=val & ~trovato) if(v(i)==val) pos=i; trovato=1; i=i+1; % stampa dei risultati fprintf('\narray letto:\n'); for j=1:n fprintf('v(%d): %g\n',i,v(j)); % si verifica se è stata effettivamente trovata un'occorrenza if(~trovato) fprintf('\nnell''array non esistono occorrenze del valore %g\n',val); fprintf('ultimo indice considerato: %d\n',i); else fprintf('\nil valore %g si trova in posizione %d\n',val,pos);

Ricerca di un valore in un array ordinato Quanti confronti si eseguono con l algoritmo appena visto? E possibile organizzare opportunamente la ricerca per ridurre i confronti? Ricerca di un valore in un array ordinato Si supponga di dover cercare il valore 15 Si confronti inizialmente il valore con l elemento centrale Siccome 15>9 possiamo trascurare la prima metà dell array perché sicuramente non conterrà il valore cercato 1 2 3 4 5 6 7 8 9 1 3 4 6 9 10 13 14 18

Ricerca di un valore in un array ordinato Concentriamo l attenzione 2 3 sulla parte superiore e nuovamente confrontiamo 3 4 il valore con l elemento 4 6 centrale della parte 5 9 superstite dell array 6 10 Siccome 15>13, possiamo 7 13 trascurare la metà inferiore della parte di array che 8 14 stiamo considerando 9 18 1 1 Ricerca di un valore in un array ordinato Anche questa volta l elemento centrale della parte di array in esame è minore di 15, per cui si considera la parte di array successiva all elemento centrale 1 2 3 4 5 6 7 8 9 1 3 4 6 9 10 13 14 18

Ricerca di un valore in un array ordinato Questa volta la parte di array è costituita da un solo elemento, diverso dal valore cercato. Non ci sono più altre parti di array da esplorare e quindi la ricerca è finita con esito negativo. Quanti confronti abbiamo fatto in tutto? 1 2 3 4 5 6 7 8 9 1 3 4 6 9 10 13 14 18 Ricerca binaria L algoritmo descritto si definisce di ricerca binaria o dicotomica. Come implementarlo? Quali costrutti utilizzare? Soluzione

function main % lettura di un array ordinato e ricerca dell'occorrenza % di un elemento % variabili utilizzate % v: array in input % n: dimensione dell'array fornito in input % val: variabile contenente il valore da cercare % posin: variabile contenente la posizione dell'estremo inferiore della % parte di array in esame % posfin: variabile contenente la posizione dell'estremo inferiore della % parte di array in esame % posmed: variabile contenente la posizione dell'elemento centrale nella % parte di array in esame % trovato: flag booleano che riporta l'esito della ricerca % input dimensione n=input('numero elementi: '); % dimensionamento array v=zeros(n,1); % ciclo di lettura fprintf('valore %d: ',i); v(i)=input(''); % input valore da cercare val=input('\nvalore da cercare: ');

% ricerca dell'occorrenza posin=1; posfin=n; trovato=0; while(~trovato & posin<=posfin) % si determina l'elemento centrale posmed=floor((posin+posfin)/2); % si confronta con il valore da cercare if(v(posmed)>val) % si considera la metà inferiore posfin=posmed-1; elseif(v(posmed)<val) % si considera la metà superiore posin=posmed+1; else % trovato il valore trovato=1; pos=posmed; % stampa dei risultati fprintf('\narray letto:\n'); for j=1:n fprintf('v(%d): %g\n',i,v(j)); % si verifica se è stata effettivamente trovata un'occorrenza if(~trovato) fprintf('\nnell''array non esistono occorrenze del valore %g\n',val); else fprintf('\nil valore %g si trova in posizione %d\n',val,pos);