Problema ricorsione

di il
5 risposte

Problema ricorsione

Buongiorno a tutti, ho un problema con un sottoprogramma che deve, dato un valore del resto calcolato da un altro sottoprogramma, restituire banconote fino a che il resto non si azzera. Il resto deve essere dato in maniera ricorsiva e inoltre deve essere aggiornato un array contenente la disponibilità per ogni banconota utilizzata. Il mio problema è che non riesco proprio a scriverlo, quello che ho fatto è una schifezza e me ne rendo purtroppo conto.. avrei bisogno di questo programma il prima possibile, lo devo consegnare via mail entro domani pomeriggio. Grazie a tutti :

double RestoRicorsivo (int disp[], double resto, double tagli[]) {

    int i;
    double restoricorsivo;


        if (resto == 0) {
            restoricorsivo=0;
            printf("Non sono necessarie ulteriori banconote per il resto");}
        if (resto==tagli[0]) {
            printf("Viene usata una banconota da 500");
            disp[14]=disp[14]-1;
            restoricorsivo=0;}
        if (resto==tagli[1]) {
            printf("Viene usata una banconota da 200");
            disp[13]=disp[13]-1;
            restoricorsivo=0;}
        if (resto==tagli[2]){
            printf("Viene usata una banconota da 100");
            disp[12]=disp[12]-1;
            restoricorsivo=0;}
        if (resto==tagli[3]) {
            printf("Viene usata una banconota da 50");
            restoricorsivo=0;
            disp[11]=disp[11]-1;}
        if (resto==tagli[4]) {
            printf("Viene usata una banconota da 20");
            disp[10]=disp[10]-1;
            restoricorsivo=0;}
        if (resto==tagli[5]){
            printf("Viene usata una banconota da 10");
            disp[9]=disp[9]-1;
            restoricorsivo=0;}
        if (resto==tagli[6]) {
            printf("Viene usata una banconota da 5");
            restoricorsivo=0;
            disp[8]=disp[8]-1;}
        if (resto==tagli[7]) {
            printf("Viene usata una banconota da 2");
            disp[7]=disp[7]-1;
            restoricorsivo=0;}
        if (resto==tagli[8]) {
            printf("Viene usata una banconota da 1");
            restoricorsivo=0;
            disp[6]=disp[6]-1;}
        if (resto==tagli[9]) {
            printf("Viene usata una banconota da 0.50");
            restoricorsivo=0;
            disp[5]=disp[5]-1;}
        if (resto==tagli[10]) {
            printf("Viene usata una banconota da 0.20");
            restoricorsivo=0;
            disp[4]=disp[4]-1;}
        if (resto==tagli[11]) {
            printf("Viene usata una banconota da 0.10");
            restoricorsivo=0;
            disp[3]=disp[3]-1;}
        if (resto==tagli[12]) {
            printf("Viene usata una banconota da 0.05");
            disp[2]=disp[2]-1;
            restoricorsivo=0;}
        if (resto==tagli[13]){
            printf("Viene usata una banconota da 0.02");
            disp[1]=disp[1]-1;
            restoricorsivo=0;}
        if (resto==tagli[14]) {
            printf("Viene usata una banconota da 0.01");
            restoricorsivo=0;
            disp[0]=disp[0]-1;}

        else
            for (i=0;i<15;i++) {
                    if(tagli[i]<=resto) {
                        if (disp[14-i]>0) {
                            printf("Viene usata 1 banconota da %.2lf\n\n",tagli[i]);
                            disp[14-i]=disp[14-i]-1;
                            resto=resto-tagli[i];
                            printf("Resto:%.2lf\n", resto);
                            restoricorsivo=resto;
                            restoricorsivo=RestoRicorsivo(disp, resto, tagli);}}
}
    return(restoricorsivo);
}

5 Risposte

  • Re: Problema ricorsione

    Purtroppo il forum non fornisce programmi pronti per fare la consegna scolastica al posto tuo.
  • Re: Problema ricorsione

    Invece di una risposta cattiva sarebbe bastato un input, va bene non fornire un programma pronto ma segnalare gli errori ecc non pensavo potesse essere un problema.
  • Re: Problema ricorsione

    La tua soluzione sembra abbastanza arziogogolata.

    Prova a ragionare così:
    
    double RestoRicorsivo (int disp[], double resto, double tagli[]) {
       
       se ho dato il resto richiesto ho finito // passo terminale
       
       calcolo una moneta da dare e ricorro // passo ricorsivo qui devo passare il vettore disp[] aggiornato
    }
    
  • Re: Problema ricorsione

    Considera questo:

    supponi che qualcuno ti scriva il programma.

    Ovviamente lo scrive in base alle sue conoscenze.
    Supponi, quindi, che chi te lo scrive usi tecniche di programmazione sofisticate.

    Ora, tu presenti un lavoro realizzato utilizzando delle conoscenze che il tuo professore/docente sa perfettamente che tu non puoi conoscere. E lo puo' dimostrare in modo banalissimo:

    facendoti delle domante che richiedono la padronanaza delle tecniche utilizzate.

    Ovviamenti non saprai rispondere.

    Quindi, immagina, a questo punto, il risultato
  • Re: Problema ricorsione

    E comunque le regole si rispettano. Se qui non si può fare, quello che scatta subito è la protesta e non le scuse. Tipico italiano.
Devi accedere o registrarti per scrivere nel forum
5 risposte