
 
		
		
    
-  Duvida em C
 
	
	
 
 
 
		
			
	+ Responder ao Tópico
	
	
	
	
	
	
		
			
- 
	
	
		
		
			
				
				
				
					
 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: "<IMG SRC="images/forum/icons/icon_wink.gif">;
        scanf("%d",&itens);
        printf("digite a capacidade da mochila: "<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"<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"<IMG SRC="images/forum/icons/icon_wink.gif">;
        for(i=0;i<capacidade;i++) printf("%d", melhor[i]);
}
//--------------fim do programinha
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
		
			
				
				
				
					
 Duvida em C
				
				
						
						
				
					
						
							desculpem-me o trecho do programa a q me referia fika na funcao dados.
void dados(.....);
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
		
			
				
				
				
					
 Duvida em C
				
				
						
						
							
						
				
					
						
							AAAA mais uma coisa.
as variaveis declaradas na funcao dados. sao desconsideradas.