Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Programmazione
 Ricerca binaria su un vettore di date
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

Stewie83
Utente medio

stewie83

Prov.: Brindisi
Città: Brindisi


Inserito il - 11/02/2006 : 18:30:28  Mostra Profilo  Visita l'Homepage di Stewie83 Invia a Stewie83 un Messaggio Privato  Rispondi Quotando
Ragà.......qualcuno ha fatto l'esercizio 5 dell'esercitazione del 20/12/2005 di programmazione in C di Lops???
Non riesco ad implementare l'algoritmo di ricerca binaria su un vettore di date nel formato gg/mm/aaaa.
Se qualcuno è così gentile da darmi una mano....ne sarò riconoscente!!

********a volte è meglio stare in silenzio e passare per deficienti che parlare e dare conferma************************************************

ekkekkazz
Utente innocuo



Inserito il - 12/02/2006 : 16:47:16  Mostra Profilo  Visita l'Homepage di ekkekkazz Invia a ekkekkazz un Messaggio Privato  Rispondi Quotando
questo è quello che sono riuscito a combinare...
Citazione:
gestione_date.c



#include <stdio.h>


typedef struct date{
int giorno;
int mese;
int anno;
}DATA;
const DATA null={0,0,0};

int isequal(DATA data1,DATA data2) /* se data1==data2, ritorna 1 */
{
if (data1.anno==data2.anno)
if (data1.mese==data2.mese)
if (data1.giorno==data2.giorno)
return 1;
return 0;
}


int cmp_date(DATA data1, DATA data2) /* 0 se data1>=data2, 1 se data1<=data2, -1 se data1==data2 */
{
if (isequal(data1,data2)==0)
{
if (data1.anno>data2.anno)
return 0;
else
{
if (data1.mese>data2.mese)
return 0;
else
{
if (data1.giorno>data2.giorno)
return 0;
}
}
return 1;

}
return -1;

}

DATA binary(int array_size,DATA data,DATA array[]) /* se data è nell'array, restituisce la data dell'array */
{ int i=0; /* per valore... */
int m=0;int inf=0;


while(inf<=array_size){ i++;
m=(inf+array_size)/2;
if (cmp_date(data,array[m])==0)
inf=m+1;
else
{ if (cmp_date(data,array[m])==1)
array_size=m-1;
else
{ printf("Trovata, e l'indirizzo e': %d\n",&array[m]);return array[m];} /* ritorna per valore */
}
}
return null;
}





int main()
{
/* test cmp_date
DATA data1={13,12,2005};
DATA data2={12,12,2005};
printf("Risultato di cmp_date: %d", cmp_date(data1,data2));
getchar();
*/

/* test binary search */
DATA data_trovata=null;
DATA data={23,12,2005} ;
DATA array={{10,12,2005},{11,12,2005},{12,12,2005},{13,12,2005},{14,12,2005},{15,12,2005},{16,12,2005},{17,12,2005}};//,{18,12,2005},{19,12,2005}};

data_trovata=binary(sizeof(array)/sizeof(DATA),data,array);
if (isequal(data_trovata,null)==0)
{
printf("Indirizzo data del main: %d\n",&data);
printf("Data trovata: %d/%d/%d\n",data_trovata.giorno,data_trovata.mese,data_trovata.anno);
}


getchar();


}



praticamente funziona a metà, cioè se inserisco una data minore del 10/12/2005, giustamente non me la trova, ma se inserisco una data maggiore del 17/12/2005, me la trova! oO Questo perchè va a considerare la variabile data della main, come dice la printf con gli indirizzi... mah!... forse bisogna fare un controllo sull'indice m, ma veramente non riesco a capire perchè fa così...

Modificato da - ekkekkazz in data
Torna all'inizio della Pagina

mrluglio
Utente Sempre in Vacanza

Max


Regione: Puglia
Prov.: Bari
Città: Terlizzi


Inserito il - 12/02/2006 : 17:09:56  Mostra Profilo  Visita l'Homepage di mrluglio  Clicca per vedere l'indirizzo MSN di mrluglio Invia a mrluglio un Messaggio Privato  Rispondi Quotando
molto semplicemente togli l'uguale alla condizione del while:

while(inf<=array_size){ i++;
m=(inf+array_size)/2;
...


deve diventare


while(inf<array_size){ i++;
m=(inf+array_size)/2;
...


Così dovrebbe funzionare!

Spazio agli inventori : "Questa cosa non funziona...funzionerebbe però se usassimo il RETROMOUSE"
by Anonimo

Torna all'inizio della Pagina

ekkekkazz
Utente innocuo



Inserito il - 12/02/2006 : 17:12:47  Mostra Profilo  Visita l'Homepage di ekkekkazz Invia a ekkekkazz un Messaggio Privato  Rispondi Quotando
facendo così non mi trova la prima data dell'array...

http://xoomer.virgilio.it/osource/data.c qui dovrebbe essere più ordinato

Modificato da - ekkekkazz in data
Torna all'inizio della Pagina

mrluglio
Utente Sempre in Vacanza

Max


Regione: Puglia
Prov.: Bari
Città: Terlizzi


Inserito il - 12/02/2006 : 17:46:33  Mostra Profilo  Visita l'Homepage di mrluglio  Clicca per vedere l'indirizzo MSN di mrluglio Invia a mrluglio un Messaggio Privato  Rispondi Quotando
togli il meno 1:

 { if (cmp_date(data,array[m])==1)
 array_size=m-1; 


e fallo diventare così:

 { if (cmp_date(data,array[m])==1)
 array_size=m; 



Spazio agli inventori : "Questa cosa non funziona...funzionerebbe però se usassimo il RETROMOUSE"
by Anonimo

Torna all'inizio della Pagina

ekkekkazz
Utente innocuo



Inserito il - 13/02/2006 : 09:52:16  Mostra Profilo  Visita l'Homepage di ekkekkazz Invia a ekkekkazz un Messaggio Privato  Rispondi Quotando
ok, adesso è perfetto
grazie
Torna all'inizio della Pagina

mrluglio
Utente Sempre in Vacanza

Max


Regione: Puglia
Prov.: Bari
Città: Terlizzi


Inserito il - 13/02/2006 : 10:44:55  Mostra Profilo  Visita l'Homepage di mrluglio  Clicca per vedere l'indirizzo MSN di mrluglio Invia a mrluglio un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da fran_

ok, adesso è perfetto
grazie



prego!

Spazio agli inventori : "Questa cosa non funziona...funzionerebbe però se usassimo il RETROMOUSE"
by Anonimo

Torna all'inizio della Pagina

computerizzato
Nuovo Utente


Regione: Calabria
Prov.: Cosenza
Città: rossano


Inserito il - 28/02/2006 : 21:31:22  Mostra Profilo  Visita l'Homepage di computerizzato Invia a computerizzato un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da Stewie83

Ragà.......qualcuno ha fatto l'esercizio 5 dell'esercitazione del 20/12/2005 di programmazione in C di Lops???
Non riesco ad implementare l'algoritmo di ricerca binaria su un vettore di date nel formato gg/mm/aaaa.
Se qualcuno è così gentile da darmi una mano....ne sarò riconoscente!!


ciao sono nuovo e non so bene kome funziona si possono fare degli esercizi?amo molto il computer e la programmazione,e da poco a scuola mi sono battuto nei vettori,mi potete aiutare,grazie,mi piace molto il mondo dell'informatica e della programmazione,grazie per il vostro eventuale aiuto
ciao...............

tedesco francesco
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,19 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000