Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354

    [c++] es funzione ricorsiva

    Il professore di programmazione ha dato questo esercizio:

    codice:
    Scrivere una funzione che dato un numero intero n 
    restituisce come risultato la cifra maggiore di n. 
    Ad esempio: se n= 3456 la funz deve restituire 6
    se n = 1342 deve restituire 4.
    Ora non voglio che per aiutarmi mi postiate il codice, è una cosa che devo risolvere da me! Ma io non capisco cosa deve fare la funzione??

    - non posso metterla su stringa e confrontarla, (o no?)
    - con n%10 isolo una cifra, ma questa devo confrontarla con le altre, come posso senza passare una var contatore alla funzione??

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Re: [c++] es funzione ricorsiva

    Originariamente inviato da unit1
    - non posso metterla su stringa e confrontarla, (o no?)
    Certo... una stringa è un insieme di caratteri... ciascuno con il proprio peso. Puoi prendere anche questa via.

    - con n%10 isolo una cifra, ma questa devo confrontarla con le altre, come posso senza passare una var contatore alla funzione??
    Un modo può essere quello di utilizzare la ricorsione... ma ci devi fare un bel ragionamento dietro.


    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. #3
    Utente di HTML.it L'avatar di ZannaZ
    Registrato dal
    May 2006
    Messaggi
    82

    Re: [c++] es funzione ricorsiva

    Originariamente inviato da unit1
    - con n%10 isolo una cifra, ma questa devo confrontarla con le altre, come posso senza passare una var contatore alla funzione??
    Non devi utilizzare un contatore: ti basta, alla chiamata ricorsiva, passare il numero di cui vuoi trovare la cifra più grande diviso per 10 (e naturalmente devi passare anche la cifra maggiore trovata).

  4. #4
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    Abbiamo fatto il cast ma con i numeri.. non so se per trasferire da numero a stringa si possa usarlo o si deve usare una funzione come in c.. se non erro!

    l'esercizio è sulla ricorzione.. ma me sembra impossibile!!

  5. #5
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354

    Re: Re: [c++] es funzione ricorsiva

    Originariamente inviato da ZannaZ
    Non devi utilizzare un contatore: ti basta, alla chiamata ricorsiva, passare il numero di cui vuoi trovare la cifra più grande diviso per 10 (e naturalmente devi passare anche la cifra maggiore trovata).

    giusto! non ci avevo pensato! adesso provo.. si può fare anche passando solo n alla funzione??

  6. #6
    Utente di HTML.it L'avatar di ZannaZ
    Registrato dal
    May 2006
    Messaggi
    82

    Re: Re: Re: [c++] es funzione ricorsiva

    Originariamente inviato da unit1
    giusto! non ci avevo pensato! adesso provo.. si può fare anche passando solo n alla funzione??
    Credo di no, se no come fai a salvare la cifra maggiore? A meno che non utilizzi una variabile globale, ma è sempre meglio di no. Comunque la chiamata nel programma pricipale dovrà essere fatta naturalmente passando zero come cifra (io l'ho appena fatto in python e lì non c'è bisogno perché si possono impostare gli argomenti di default).

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Re: Re: Re: Re: [c++] es funzione ricorsiva

    Originariamente inviato da ZannaZ
    Credo di no, se no come fai a salvare la cifra maggiore? A meno che non utilizzi una variabile globale, ma è sempre meglio di no. Comunque la chiamata nel programma pricipale dovrà essere fatta naturalmente passando zero come cifra (io l'ho appena fatto in python e lì non c'è bisogno perché si possono impostare gli argomenti di default).
    Dipende da come si pensa la funzione...
    Se voglio una funzione che, dato un numero, mi ritorna la cifra maggiore di quel numero non serve un secondo parametro:

    Pseudocodice:
    codice:
    int cifraMaggiore(int num) {
       var unita = (num MOD 10)
       var appoggio = 0;
    
       SE num < 10
          ritorna num;   // Caso base: banale!
       ALTRIMENTI
          appoggio = cifraMaggiore(num DIV 10)
          SE appoggio > unita
             ritorna appoggio
          ALTRIMENTI
             ritorna unita
    }
    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

  8. #8
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    codice:
    #include <iostream>
    
    using namespace std;
    
    int funz(int n){
        int unita=(n%10),appoggio;
        if(n<10)
          return n;
        else{
          appoggio=funz(n/10);
          //cout << appoggio << " " << unita << endl;
          if(appoggio<unita)
             return unita;
          else
             return appoggio;}}
    
    
    int main(){
        int n,x;
        cout << "inserire n: ";
        cin >> n;
        x = funz(n);
        cout << "la cifra maggiore di " << n << " e': " << x;
        int z;cin >> z; //c'è un modo più carino di aspettare?
        return 0;
    }
    Funziona!! ...però, se è difficile!!!

    Dopo posso trovar esercizi cosi? (ricorzione - funzioni - file)

  9. #9
    Utente di HTML.it L'avatar di ZannaZ
    Registrato dal
    May 2006
    Messaggi
    82
    Originariamente inviato da unit1
    Funziona!! ...però, se è difficile!!!
    Perché secondo me hai adottato una soluzione più complessa del dovuto; ti posto la mia in pseudocodice:
    codice:
    int cifraMaggiore(int n, int c){
       SE n==0:
            return c;
       SE c<n%10:
            c = n%10;
       return cifraMaggiore(n/10,c)
    }
    Per gli esercizi non lo so; puoi inventartene tu; per esempio problemi che possone essere risolti con la ricorsione sono la risoluzione di un sudoku (piuttosto difficile), la creazione di tutti gli anagrammi possibili di una parola,...

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da ZannaZ
    ti posto la mia in pseudocodice:
    codice:
    int cifraMaggiore(int n, int c){
       SE n==0:
            return c;
       SE c<n%10:
            c = n%10;
       return cifraMaggiore(n/10,c)
    }
    Specificatamente parlando, la differenza fra questa e quella mia è che questa è una ricorsione di coda, la mia è una ricorsione non di coda.


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