Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    15

    [c] aiuto programma in c ricorsione

    ciao a tutti, mi han dato come esercizio un programma in cui gestisco una pasticceria e da un file estrapolo gli ingredienti che ho nel mio laboratorio e nell'altro le varie ricette delle torte con gli ingredienti necessari (è strutturato così il secondo file "nomericetta prezzo n.ingredienti" e poi gli n righe(che coincide a n.igredienti) che elenca gli ingredienti necessari per la preparazione. Il programma dice di trovare la combinazione di torte(es 3 torte al cioccolato 1 e 1 alla crema) che mi offre maggior guadagno dagli ingredienti che ho a disposizione. Ora io sono riuscito solamente a trovare tutte le soluzioni possibili che posso produrre dagli ingredienti che ho a disposizione,ma non riesco a printare la solo la soluzione migliore.Vi posto il codice
    codice:
    #include <stdio.h>#include <stdlib.h>
    #include <string.h>
    #define MAX 100
    
    
    typedef struct
    {
        char ingredient[21];
        int disp;
    } warehouse;
    typedef struct
    {
        int ind;
        int gr;
    } cakeingredients;
    typedef struct
    {
        char cake[21];
        int prize;
        int numberingredients;
    cakeingredients *p;
    } recipe;
    void buddy(warehouse *bakery,recipe *recipes,int pos,int numberrecipe,int k[numberrecipe],int numberbakeryitem,int temp1[numberrecipe],int moneymax);
    int main(int argc,char *argv[])
    {
        warehouse *bakery;
    recipe *recipes;
        int i=0,j=0,z;
        int numberbakeryitem;
        int numberrecipe;
        FILE *f,*f2;
        f=fopen(argv[1],"r");
        fscanf(f,"%d",&numberbakeryitem);
        bakery=malloc(numberbakeryitem*(sizeof(recipe)));
        while(!feof(f))
        {
            fscanf(f,"%s %d",bakery[i].ingredient,&bakery[i].disp);
            i++;
        }
        i=0;
        fclose(f);
        f2=fopen(argv[2],"r");
        fscanf(f2,"%d",&numberrecipe);
        recipes=malloc(numberrecipe*sizeof(recipe));
        j=0;
    char temp[31];
        while(!feof(f2))
        {
            fscanf(f2,"%s %d %d",recipes[j].cake,&recipes[j].prize,&recipes[j].numberingredients);
          recipes[j].p=malloc(recipes[j].numberingredients*sizeof(cakeingredients));
            for(i=0; i<recipes[j].numberingredients; i++)
            {
                fscanf(f2,"%s %d",temp,&recipes[j].p[i].gr);
    
    
    for(z=0;z<numberbakeryitem;z++)
    {
        if(strcmp(temp,bakery[z].ingredient)==0)
        {
            recipes[j].p[i].ind=z;
        }
    }
            }
            j++;
        }
    
    
    int k[numberrecipe];
     for(i=0;i<numberrecipe;i++)
     {
         k[i]=0;
     }
     int temp1[numberrecipe];
     for(i=0;i<numberrecipe;i++)
     {
         temp1[i]=0;
     }int moneymax=0;
     buddy(bakery,recipes,0, numberrecipe, k, numberbakeryitem,temp1,moneymax);
        return 0;
    }
    void buddy(warehouse *bakery,recipe *recipes,int pos,int numberrecipe,int k[numberrecipe],int numberbakeryitem,int temp1[numberrecipe],int moneymax)
    {
        int i,j;
    int money=0;
        int INDEX;
        for(i=pos;i<numberrecipe;i++)
       {
    
    
            int cando = 1;
            for(j=0;j<recipes[i].numberingredients;j++)
            {
               INDEX=recipes[i].p[j].ind;
               if( bakery[INDEX].disp - recipes[i].p[j].gr<0)
               {
    
    
                    cando=0;
                    break;
               }
            }
            if (cando)
            {
    
    
    
    
            for(j=0;j<recipes[i].numberingredients;j++)
            {
               INDEX=recipes[i].p[j].ind;
                bakery[INDEX].disp-=recipes[i].p[j].gr;
    
    
            } k[i]++;
            buddy(bakery,recipes,i, numberrecipe, k, numberbakeryitem,temp1,moneymax);
            k[i]--;
    
    
            for(j=0;j<recipes[i].numberingredients;j++)
            {
               INDEX=recipes[i].p[j].ind;
                bakery[INDEX].disp+=recipes[i].p[j].gr;
    
    
            }
    
    
    
    
    
    
       }
    
    
    
    
    }
    for(j=0;j<numberrecipe;j++)
    {
        printf(" %d %s ",k[j],recipes[j].cake);
    }printf("\n");
    
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    15
    ragazzi ho risolto!!

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.