Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642

    [C] Ricorsione e numeri dispari

    Ciao raga, devo fare una f.ne ricorsiva che restituisce il totale dei numeri dispari in un array di interi. Potete darci un occhiata visto che non funge (come la maggior parte dei miei programmi RICORSIVI)??

    codice:
    int dispari(int v[],int inf, int sup){
      int med,c1,c2,cont;
      if (inf==sup){
       if ((v[inf]%2)==0)
         return 1;
       return 0;  
      }
      else{
        med=((inf+sup)/2);   
        return c1=dispari(v,inf,med);
        return c2=dispari(v,med+1,sup);
        return cont=c1+c2;   
      }
    }
    Grassie raga!!!
    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  2. #2
    Io avrei fatto cosi':
    codice:
    #include <stdio.h>
    
    int dispari(int [], int );
    int ndispari = 0;
    
    int main(){
    int v[10]={1,2,3,4,5,6,7,8,9,10};
    
    printf("Il numero dei NUMERI DISPARI nel vettore e' %d \n\n", dispari(v, 9));
    
    return 0;
    }
    
    int dispari(int v[], int lungv){
    
    if (lungv >= 0){
        if ( v[lungv]%2 != 0 ){
         ndispari++;
        }  
        return dispari(v, lungv=lungv-1);
    }
    else
    return ndispari;
    
    
    }
    ciaooo
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se ti serviva la somma dei numeri dispari e non il conteggio:
    codice:
    #include <stdio.h>
    
    int sommaDispari(int array[], int dim) {
       int somma = 0;
       if (dim > 0) {
          somma = ((array[dim] % 2) ? array[dim] : 0) + sommaDispari(array, dim-1);
       } else {
          somma = (array[dim] % 2) ? array[dim] : 0;
       }
       return somma;
    }
    
    int main() {
       int numeri[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
       printf("La somma vale: %d", sommaDispari(numeri, 9));
       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

  4. #4
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    si ma purtroppo devo farlo con il divide et impera e non lo conosco molto bene.... puoi aiutarmi anche in questo?? Grassie!
    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  5. #5
    una f.ne ricorsiva che restituisce il totale dei numeri dispari in un array di interi
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da dekdek
    Lo so che c'è scritto totale... il problema è che in Italiano la parola "totale" ha vari significati. Può voler dire "conteggio delle occorrenze" come l'hai interpretata tu, ma anche il risultato dell'operazione di somma si chiama "totale" (ed è come l'ho inteso io)... poi sarà l'autore del thread a decidere quale dei due significati voleva dare...


    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. #7
    No, no, io mi sono incupito per il fatto che la funzione deve essere ricorsiva!!! Non mi pare abbia senso.
    Secondo me, cosi' si cresce una schiera di programmatori che odiano la ricorsione e non la utilizzano nemmeno nei (rarissimi) casi in cui serve davvero!!!
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Eccola col DIVIDE ET IMPERA:
    codice:
    #include <stdio.h>
    
    int sommaDispari(int v[], int min, int sup) {
       int somma = 0;
       if ((sup - min) == 1) {
          somma = (v[min] % 2) ? v[min] : 0;
       } else {
          somma = sommaDispari(v, min, min + ((sup-min) / 2)) + sommaDispari(v, min + ((sup-min) / 2), sup);
       }
       return somma;
    }
    
    int main() {
       int numeri[10] = {1,2,3,4,5,6,7,8,9,10};
       printf("Somma: %d", sommaDispari(numeri, 0, 10));
       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

  9. #9
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    il fatto è che devo contare il numero dei dispari in questo vettore...

    ah poi non ho mai usato somma = (v[min] % 2) ? v[min] : 0

    il ? : intendo...non ho mai usato questo tipo di costrutto (credo che sia..)
    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ok... allora se li devi contare basta modificare un po'.
    L'operatore ? (punto di domanda) è un operatore ternario che sostituisce un istruzione if. In pratica, le seguenti sono equivalenti:
    codice:
    // Con l'operatore ?
    somma = v[dim] ? v[dim] : 0;
    
    
    // Senza l'operatore ?
    if (v[dim])
       somma = v[dim];
    else
       somma = 0;
    Vediamo di modificare il programma:
    codice:
    // Questa linea:
    somma = (v[min] % 2) v[min] : 0;
    
    // va modificata così:
    somma = (v[min] % 2) 1 : 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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.