Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 28 su 28
  1. #21
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    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!

  2. #22
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Trusty
    scusa. si vede che aggiornando la pagina non ho visto quello che avevi già postato!

    Pardon...!
    Può essere che sia così... osservando gli orari dei post c'è lo scarto di un solo minuto: quindi può essere questione di secondi.


    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

  3. #23
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    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!

  4. #24
    Hai mischiato alcuni pezzi miei, e alcuni di LeleFT

    Qui:

    codice:
    sup=n-1;
    Correggi con

    codice:
    sup=n;
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  5. #25
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    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;
    }
    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.

    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

  6. #26
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    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

  7. #27
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    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!

  8. #28
    perchè fate somma= v[inf]%2
    Un numero x e' dispari se il resto della divisione per due (x%2) e' pari ad uno.
    Equivale a dire:

    codice:
    if (v[inf]%2 == 1)
       somma = 1; // Ho trovato un numero dispari
    else
       somma = 0; // Ho trovato un numero pari
    Capisci che tanto vale porre somma = v[inf]%2

    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.