scusa. si vede che aggiornando la pagina non ho visto quello che avevi già postato!
Pardon...!![]()
![]()
scusa. si vede che aggiornando la pagina non ho visto quello che avevi già postato!
Pardon...!![]()
![]()
http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!
Può essere che sia così... osservando gli orari dei post c'è lo scarto di un solo minuto: quindi può essere questione di secondi.Originariamente inviato da Trusty
scusa. si vede che aggiornando la pagina non ho visto quello che avevi già postato!
Pardon...!![]()
![]()
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
riposto il mio programma per vedere cosa non funziona:
codice:#include <stdio.h> int carica(int v[], int n){ int i; for (i=0; i<=n-1; i++){ printf("Inserire %d numero:", i+1); scanf("%d", &v[i]); } printf("\n"); } void stampa (int v[], int n){ int i; printf("Vettore: "); for (i=0; i<n; i++) printf("%2d", v[i]); printf("\n"); } int dispari(int v[], int inf, int sup) { int cont=0; if ((sup-inf) == 1) { cont = v[inf] % 2; } else { cont=dispari(v, inf, inf + ((sup-inf) / 2)) + dispari(v, inf + ((sup-inf) / 2), sup); } return cont; } int main(){ int n,i,disp; int v[100],inf,sup; do{ printf("Inserire un numero: "); scanf("%d", &n); }while((n<=0)||(n>=100)); carica(v,n); stampa(v,n); inf=0; sup=n-1; disp=dispari(v,inf,sup); printf("I numeri dispari nel vettore sono:%d\n", disp); return 0; }
http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!
Hai mischiato alcuni pezzi miei, e alcuni di LeleFT
Qui:
Correggi concodice:sup=n-1;
codice:sup=n;
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
Trovato l'inghippo: per come l'ho progettata io la funzione ricorsiva, il secondo parametro deve puntare alla posizione successiva all'ultima (in modo da avere la dimensione con una differenza e senza dover pasticciare con problemi riguardanti lunghezze pari o dispari). La linra in grassetto è quella da correggere.Originariamente inviato da Trusty
riposto il mio programma per vedere cosa non funziona:
codice:#include <stdio.h> int carica(int v[], int n){ int i; for (i=0; i<=n-1; i++){ printf("Inserire %d numero:", i+1); scanf("%d", &v[i]); } printf("\n"); } void stampa (int v[], int n){ int i; printf("Vettore: "); for (i=0; i<n; i++) printf("%2d", v[i]); printf("\n"); } int dispari(int v[], int inf, int sup) { int cont=0; if ((sup-inf) == 1) { cont = v[inf] % 2; } else { cont=dispari(v, inf, inf + ((sup-inf) / 2)) + dispari(v, inf + ((sup-inf) / 2), sup); } return cont; } int main(){ int n,i,disp; int v[100],inf,sup; do{ printf("Inserire un numero: "); scanf("%d", &n); }while((n<=0)||(n>=100)); carica(v,n); stampa(v,n); inf=0; sup=n-1; // correggi così: sup = n; disp=dispari(v,inf,sup); printf("I numeri dispari nel vettore sono:%d\n", disp); return 0; }
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Ok... abbiamo scoperto entrambi il problema
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
ok allora :
1-Intanto, vi devo mille grazie (anche di più).....
2-Ancora grazie...
3-Chi di voi sarebbe cosi gentile da spiegarmi perchè nel caso base fate (sup-inf) ==1 ????
4- perchè fate somma= v[inf]%2 ???????????
![]()
![]()
![]()
http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!
Un numero x e' dispari se il resto della divisione per due (x%2) e' pari ad uno.perchè fate somma= v[inf]%2
Equivale a dire:
Capisci che tanto vale porre somma = v[inf]%2codice:if (v[inf]%2 == 1) somma = 1; // Ho trovato un numero dispari else somma = 0; // Ho trovato un numero pari
Per l'altra domanda, io in effetti avevo posto come base ricorsiva inf == sup (con la conseguenza che bisognava porre sup=n-1 all'inizio) pero' in questo modo diventa piu' difficile scrivere la routine.
Sono entrambe soluzioni possibili...
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.