Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500

    [C] - Problema Ricorsione

    Buonasera a tutti,
    ho un problema con questo programma non riesco a capire dove sbaglio la ricorsione.

    Ho un vettore di struct contentente tutti i libri a disposizione

    typedef struct libri{
    char *nome;
    float altezza;
    float spessore;
    float peso;
    int ripiano;
    int rtemp;
    }lb;

    e un altra in cui ho salvato il catalogo di una libreria

    typedef struct catalogo{
    char id[MAXC];
    float prezzo;
    int nripiani;
    int larghezza;
    int scartato;
    int altezza[MAXR];
    int nog[MAXR];
    }ct;

    di questa ne ho solo una di indice IC mentre le altre per delle questioni di esercizio sono state scartate.
    Nella funzione ricorsiva devo assegnare i ripiani ai vari libri in modo d'avere per il modello selezionato calcolare il BILANCIAMENTO MASSIMO in peso tra i vari ripiani (definito come la differenza tra il ripiano con carico maggiore e quello a carico minore) e il peso medio dei libri per ogni ripiano (peso totale per ripiano / numeor di libri messi in quel ripiano)

    il modello di libreria su cui devo inserire i libri è questa

    nome prezzo 4 100 25 25 30 35

    dove 4 è il numero di ripiani e 25 25 30 35 sono le altezze per ogni ripiano

    ho provato a fare due versioni della funzione ricorsiva

    1.
    In questa funzione mi calcolo s come carico corrente e ns come carico massimizzato utilizzo il vettore libri[nripiani] in modo da salvarmi per ogni ripiano il peso dei libri che metto.
    nel vettore nog mi salvo gli oggetti che metto per ogni ripiano.

    { int i;
    if(id==nl){
    if(s>ns){
    ns=s;
    for(i=0;i<nl;i++)
    l[i].ripiano=l[i].rtemp;
    }
    return ns;
    }
    //provo a piazzare un libro su un ripiano
    s=trovasbil(libri,c[ic].nripiani);
    if(c[ic].altezza[id2]>l[id].altezza){
    libri[id2]+=l[id].peso;
    l[id].rtemp=id2;
    c[ic].nog[id2]++;
    ns=cercasoluzione(c,l,nl,ic,id+1,libri,s,ns,id2);
    libri[id2]-=l[id].peso;
    l[id].rtemp=-1;
    c[ic].nog[id2]--;
    }
    //si prova a vedere cosa succede se il corrente non viene inserito si ricorre sul successivo
    ns=cercasoluzione(c,l,nl,ic,id+1,libri,s,ns,id2+1) ;
    return ns;
    }

    //in questa funzione effettuto la differenza per il carico massimo.
    float trovasbil(float *libri,int n)
    {
    int i,min=libri[0],max=libri[0];
    int cmin=0,cmax=0;
    for( i=1 ; i< n; i++ ){
    if( libri[i]>max ){
    max = libri[i] ;
    cmax = i ;}}
    for( i=1 ; i< n; i++ ){
    if( libri[i]<min ){
    min = libri[i] ;
    cmin = i ;}}
    return(libri[cmax]-libri[cmin]);
    }

    La funzione ricorsiva è sbagliata, ma non riesco a capire come farla.Accetto tutti i consigli
    grazie mille in anticipo.
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    possibile che nessuno sà dirmi dove sbaglio?
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Bè se seguissi il regolamento magari qualcuno leggerebbe quel codice.. in questo momento è illeggibile..

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.