Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

RICERCA COMPLETA - SOTTOPROGRAMMA COMPLETA

informatica



RICERCA COMPLETA


SOTTOPROGRAMMA COMPLETA

FUNZIONE: richiede l'elemento da ricercare ed effettua la ricerca in un vettore non ordinato

DATI IN INGRESSO: numero di elementi del vettore, vettore

DATI IN USCITA: elemento da ricercare

trovato: vero se l'elemento è contenuto nel vettore, falso altrimenti

prima posizione (pos) dell'elemento da cercare se esiste


leggi l'elemento da cercare con il formato F3



i (indicatore elemento in esame)

finché i< n° elementi e non si 757b13h è trovato l'elemento da ricercare

i i+1  (passa all'elemento successivo)

fine finché

se i = numero di elementi

allora

trovato falso

altrimenti

trovato vero

pos i

fine se


PROTOTIPO:

int  completa(int num[],int n,int *numero,int *pos);


CHIAMATA AL SOTTOPROGRAMMA:

esiste=completa(num,n,&numero,&pos);


DEFINIZIONE di FUNZIONE:

int  completa(int num[],int n,int *numero,int *pos)


return trovato;



RICERCA CON SENTINELLA

rispetto al metodo della ricerca completa il numero dei confronti è dimezzato


SOTTOPROGRAMMA SENTINELLA

FUNZIONE: effettua la ricerca in un vettore non ordinato

DATI IN INGRESSO: numero di elementi del vettore, vettore, valore da cercare

DATI IN USCITA: trovato: vero se l'elemento è contenuto nel vettore, falso altrimenti

prima posizione (pos) dell'elemento da cercare se esiste


posiziona il valore da cercare come sentinella nella posizione immediatamente successiva a quella dell'ultimo elemento del vettore

i 0 (indicatore elemento in esame)

finchè non si è trovato l'elemento

i i+1 (passa all'elemento successivo)

fine finché

se i < numero di elementi

allora

trovato vero

pos i

altrimenti

trovato falso

fine se



PROTOTIPO:

int  sentinella(int num[],int n,int numero,int *pos);


CHIAMATA al SOTTOPROGRAMMA:

esiste=sentinella(num,n,numero,&pos);


DEFINIZIONE di FUNZIONE:

int  sentinella(int num[],int n,int numero,int *pos)



RICERCA SEQUENZIALE


SOTTOPROGRAMMA SEQUENZIALE

FUNZIONE: effettua la ricerca in un vettore ordinato

DATI IN INGRESSO: numero di elementi del vettore, vettore, valore da cercare

DATI IN USCITA: trovato: vero se l'elemento è contenuto nel vettore, falso altrimenti

prima posizione (pos) dell'elemento da cercare se esiste


trovato falso

i 0 (indicatore elemento in esame)

finché i < numero di elementi e non si è trovato l'elemento cercato e l'elemento corrente è del valore da cercare

se l'elemento in posizione i è l'elemento cercato

allora

trovato vero

pos i

altrimenti

i i+1 (passa all'elemento successivo)

fine se

fine finché

il codice della ricerca è presentato in due versioni

PROTOTIPO:

int  sequenziale(int num[],int n,int numero,int *pos);


CHIAMATA:

esiste=sequenziale(num,n,numero,&pos);

prima versione della ricerca sequenziale

DEFINIZIONE di FUNZIONE:

int  sequenziale1(int num[],int n,int numero,int *pos)


else

++i;

return trovato;


seconda versione della ricerca sequenziale

DEFINIZIONE di FUNZIONE:

int  sequenziale2(int num[],int n,int numero,int *pos)


return trovato;


RICERCA BINARIA


SOTTOPROGRAMMA BINARIA

FUNZIONE: effettua la ricerca in un vettore ordinato

DATI IN INGRESSO: numero di elementi del vettore, vettore, valore da cercare

DATI IN USCITA: trovato: vero se l'elemento è contenuto nel vettore, falso altrimenti

prima posizione (pos) dell'elemento da cercare se esiste


inf 0 (indicatore limite inferiore dell'array)

sup numero elementi dell'array-1 (indicatore limite superiore dell'array)

finché inf<sup

calcola la posizione centrale del rimanente segmento di array da esaminare

se il valore cercato è > del valore centrale corrente

allora

aggiorna in conseguenza il limite inferiore

altrimenti

aggiorna in conseguenza il limite superiore

fine se

fine finché

se l'elemento dell'array in posizione inf è uguale al valore cercato

allora

trovato vero

pos inf

altrimenti

trovato falso

fine se


PROTOTIPO:

int  binaria(int num[],int n,int numero,int *pos);


CHIAMATA:

esiste=binaria(num,n,numero,&pos);


DEFINIZIONE di FUNZIONE:

int  binaria(int num[],int n,int numero,int *pos)


trovato=(num[inf]==numero);

*pos=inf;

return trovato;









ORDINAMENTO PER SELEZIONE


N.B. il sort per selezione è uno dei migliori poiché riduce al minimo il numero degli scambi eseguiti.


SOTTOPROGRAMMA SELECTION

FUNZIONE: ordina l'array in modo non decrescente

DATI IN INGRESSO: numero di elementi del vettore

vettore

DATI IN USCITA: vettore ordinato


finché vi sono ancora elementi nella parte non ordinata dell'array

individua il minimo (min) e la sua posizione nella parte non ordinata dell'array

scambia il minimo (min) nella parte non ordinata dell'array con il primo elemento dell'array non ordinato

fine finché


PROTOTIPO:

void selection(int num[],int n);


CHIAMATA:

selection(num,n);


DEFINIZIONE di FUNZIONE:

void selection(int num[],int n)


num[p]=num[i];

num[i]=min;



ORDINAMENTO PER SCAMBIO O BUBBLE SORT


N.B. l'algoritmo si basa su interscambi più pesantemente della maggior parte degli altri metodi. Poiché tali scambi sono abbastanza dispendiosi in termini di tempo, questa caratteristica rende il metodo molto costoso per ordinare GROSSI insiemi di dati casuali. Se i dati hanno solo una piccola percentuale di elementi fuori posto allora questo metodo risulta efficiente.


SOTTOPROGRAMMA BUBBLESORT

FUNZIONE: ordina l'array in modo non decrescente

DATI IN INGRESSO: numero di elementi del vettore

vettore

DATI IN USCITA: vettore ordinato


finché l'array non è ancora ordinato

sorted vero

per tutte le coppie contigue di elementi nella parte di array non ancora ordinata

se la coppia corrente di elementi non è in ordine non decrescente

allora

scambia gli elementi della coppia

poni l'indicatore trovato al valore falso

fine se

fine per

fine finché


PROTOTIPO:

void bubblesort(int num[],int n);


CHIAMATA:

bubblesort(num,n);


DEFINIZIONE di FUNZIONE:

void bubblesort(int num[],int n)




ORDINAMENTO PER INSERZIONE


SOTTOPROGRAMMA INSERTION

FUNZIONE: ordina l'array in modo non decrescente

DATI IN INGRESSO: numero di elementi del vettore

vettore

DATI IN USCITA: vettore ordinato


trova il minimo e posizionalo con funzione di sentinella

finché ci sono ancora elementi da inserire nella parte ordinata

preleva il prossimo elemento (elem) da inserire

finché elem è inferiore all'elemento precedente

sposta in avanti di una posizione l'elemento precedente

estendi la ricerca all'indietro di un altro elemento ancora

fine finché

inserisci elem nella posizione corrente

fine finché


PROTOTIPO:

void insertion(int num[],int n);


CHIAMATA:

insertion(num,n);


DEFINIZIONE di FUNZIONE:

void insertion(int num[],int n)


num[p]=num[0];

num[0]=min;

for (i=2;i<n;i++)


/*inserisce elemento in modo ordinato */

num[j]=elem;









FUSIONE DI DUE VETTORI ORDINATI


STRUTTURE DATI


num1: contiene la prima sequenza da fondere. Array di massimo 10 elementi di tipo intero

num2: contiene la seconda sequenza da fondere. Array di massimo 10 elementi di tipo intero

unione: contiene la sequenza finale. Array di massimo 20 elementi di tipo intero


SOTTOPROGRAMMA MERGE

FUNZIONE: fonde due sequenze ordinate in modo non decrescente in un'unica sequenza ordinata

DATI IN INGRESSO: i due vettori (num1,num2),dimensione dei due vettori(n1,n2)

DATI IN USCITA: vettore contenente le due sequenze (unione), dimensione del vettore unione (n)


i1 (indice del primo vettore)

i2 (indice del secondo vettore)

iun (indice del vettore unione)

ripeti

se il valore corrente di num1 < del valore corrente di num2

allora

poni nella componente corrente del vettore unione il valore di num1

i1 i1+1

altrimenti

poni nella componente corrente del vettore unione il valore di num2

i2 i2+1

fine se

iun iun+1

finché uno dei due vettori non è terminato

se è terminato num1

allora

trasferisci gli elementi rimasti di num2 in unione

altrimenti

trasferisci gli elementi rimasti di num1 in unione

fine se

n n1+n2


DICHIARAZIONE STRUTTURE DATI:

#define max 10


int num1[max],num2[max],unione[2*max],

n1,  /*numero elementi del vettore num1 */

n2, /*numero elementi del vettore num2 */

n,    /*numero elementi del vettore unione */

i; /*indice del ciclo */


PROTOTIPO:

void merge(int num1[],int n1,int num2[],int n2,int unione[],int *n);


CHIAMATA:

merge(num1,n1,num2,n2,unione,&n);


DEFINIZIONE di FUNZIONE:

void merge(int num1[],int n1,int num2[],int n2,int unione[],int *n)


while (i1<n1 && i2<n2);

/*trasferisce gli elementi rimasti del vettore non terminato nel vettore unione */

if (i1==n1)

for(;i2<n2;unione[iun++]=num2[i2++]);

else

for(;i1<n1;unione[iun++]=num1[i1++]);

/*calcolo dimensione globale del vettore unione */

*n=n1+n2;






Privacy




Articolo informazione


Hits: 3187
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024