V I S U A L I Z Z A D I S C U S S I O N E |
Stewie83 |
Inserito il - 11/02/2006 : 18:30:28 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!! |
7 U L T I M E R I S P O S T E (in alto le più recenti) |
computerizzato |
Inserito il - 28/02/2006 : 21:31:22 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............... |
mrluglio |
Inserito il - 13/02/2006 : 10:44:55 Citazione: Messaggio inserito da fran_
ok, adesso è perfetto  grazie
prego!
 |
ekkekkazz |
Inserito il - 13/02/2006 : 09:52:16 ok, adesso è perfetto  grazie |
mrluglio |
Inserito il - 12/02/2006 : 17:46:33 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;
|
ekkekkazz |
Inserito il - 12/02/2006 : 17:12:47 facendo così non mi trova la prima data dell'array...
http://xoomer.virgilio.it/osource/data.c qui dovrebbe essere più ordinato |
mrluglio |
Inserito il - 12/02/2006 : 17:09:56 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!
 |
ekkekkazz |
Inserito il - 12/02/2006 : 16:47:16 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ì... |
|
|