+ Responder ao Tópico



  1. #1
    kappalinux
    Visitante

    Padrão Duvida em C

    estou tentando passar 5 parametros e 2 deles por referencia na chamada de uma função.
    Oproblema eh o seguinte eh o seguinte:
    a funcao mochila passa 2 parametros por referencia: a variavel inteira capacidade e a variavel inteira itens. Gostaria de alocar uma regiao de memoria com o valor que "itens" e "capacidade" recebem, usando o malloc nas variaveis: peso, custo, melhor e valor.
    Apos a execucao do da funcao ele deveria ir para a proxima instrucao com as variaveis capacidade e itens com o valor recebido anteriormente.
    nao estou conseguinte alocar memoria com essas 2 variaveis passadas por referencia.
    alguem pode me dizer o q estah ocorrendo?
    PS: obrigatoriamente "capacidade" e "itens" tem q ser passado por referencia.

    //-------------inicio do programinha-----------------------------------

    #include <stdio.h>
    #include <stdlib.h>

    void dados(int *capacidade, int peso[], int valor[], int custo[], int melhor[], int *itens);
    void mochila(int capacidade, int peso[], int valor[], int custo[], int melhor[], int itens);
    void escreve(int custo[], int melhor[], int capacidade);

    int main(){
    int capacidade,*peso=NULL,*valor=NULL;
    int itens,*custo=NULL,*melhor=NULL;

    dados(&capacidade,peso,valor,custo,melhor,&itens);
    mochila(capacidade,peso,valor,custo,melhor,itens);
    escreve(custo,melhor,capacidade);

    return 0;
    }

    void dados(int *capacidade, int peso[], int valor[],int custo[],int melhor[], int *itens){
    int i,capacidade,itens;
    printf("digite a quantidade de itens: &quot<IMG SRC="images/forum/icons/icon_wink.gif">;
    scanf("%d",&itens);
    printf("digite a capacidade da mochila: &quot<IMG SRC="images/forum/icons/icon_wink.gif">;
    scanf("%d",&capacidade);
    peso = malloc(sizeof(int)*itens);
    valor = malloc(sizeof(int)*itens);
    custo = malloc(sizeof(int)*capacidade);
    melhor = malloc(sizeof(int)*capacidade);
    printf("\ndigite os pesos e os valores dos itens respectivamente:\n\n&quot<IMG SRC="images/forum/icons/icon_wink.gif">;
    printf("%d %d", itens, item);
    for(i=0;i<itens;i++){printf("item[%d]->peso: ",i+1);
    scanf("%d",&peso[i]);
    printf("item[%d]->valor:",i+1);
    scanf("%d",&valor[i]);
    }
    }

    void mochila(int capacidade, int peso[], int valor[], int custo[], int melhor[],int itens){
    int ind,i,j;

    for(ind=0;ind<=capacidade;ind++) custo[ind]=0;

    for(i=0;i<itens;i++){
    for(j=0;j<capacidade;j++){
    if(i>=peso[j]){
    if(custo[i]<custo[j-peso[i]]+valor[i]){
    custo[j]=custo[j-peso[i]]+valor[i];
    melhor[j]=i;
    }
    }
    }
    }
    }

    void escreve(int custo[], int melhor[], int capacidade){
    int i=0;
    for(i=0;i<capacidade;i++) printf("%d", custo[i]);
    printf("\n&quot<IMG SRC="images/forum/icons/icon_wink.gif">;
    for(i=0;i<capacidade;i++) printf("%d", melhor[i]);
    }
    //--------------fim do programinha

  2. #2
    kappalinux
    Visitante

    Padrão Duvida em C

    desculpem-me o trecho do programa a q me referia fika na funcao dados.
    void dados(.....);

  3. #3
    kappalinux
    Visitante

    Padrão Duvida em C

    AAAA mais uma coisa.
    as variaveis declaradas na funcao dados. sao desconsideradas.