Ir ao conteúdo

Posts recomendados

Postado

Uma rede de lojas possui 5 filiais. Cada uma das filiais comercializa 10 produtos. Você deve elaborar um algoritmo para auxiliar no gerenciamento do estoque de produtos de cada filial. Para resolver esta questão, deve-se fazer:

a) Defina constantes para representar o número total de filiais e o número de produtos comercializados.

b) Crie uma estrutura para representar uma filial da loja. Essa estrutura deve conter 

o nome da filial (string);

um número inteiro representando a capacidade de estoque da filial, ou seja, a quantidade máxima de produtos que essa filial pode ter em estoque (considerando todos os produtos); 

um vetor para armazenar a quantidade de unidades de cada produto presentes no estoque dessa filial.

c) Faça uma função que receba como parâmetro uma estrutura do tipo filial. A função deve determinar e imprimir o percentual de ocupação do estoque de cada filial em relação à capacidade máxima. Caso a quantidade de itens em  estoque esteja acima de 90% da capacidade, a função deve mostrar uma mensagem de alerta informando que o estoque está quase completo.

d) Elabore um programa principal que crie um vetor de estruturas do tipo filial para armazenar as informações referentes às 5 filiais da loja e leia todos os dados para cada uma. Em seguida, o programa deve chamar a função do item c para cada filial.

 

Quando eu compilo meu código está aparecendo "Error Segmentation fault (core dumped)" e eu não sei qual o motivo.

 

#include <stdio.h>
#include <string.h>
#define FIL 5
#define PROD 10

typedef struct{
    char nome[50];
    int maxprodutos;
    int quantprodutos[PROD];
} Filiais;

void ReajustaPreco(Filiais filial[], int tam, int i){
    int j, estoque;
    float percentual;
    for(j=0; j<FIL; j++){
        estoque = filial[j].quantprodutos[i];
        percentual = (estoque*100)/(float)filial[j].maxprodutos;
        if(percentual<5){
            printf("Produto %d ocupa %.1f%% na filial %s", i, percentual, 
                   filial[j].nome);
            printf("Estoque do produto esta baixo na filial!\n");
        }
        else{
            printf("Produto %d ocupa %.1f%% na filial %s", i, percentual, 
                   filial[j].nome);
        }
    }
}

int main(){
    Filiais filial[FIL];
    int j, k, i;
    
    for(j=0; j<FIL; j++){
      	printf("Digite o nome da filial: \n");
        fgets(filial[j].nome,50,stdin);
        filial[j].nome[strcspn(filial[j].nome, "\n")] = 0;
      	printf("Digite o maximo de produtos: \n");
        scanf("%d", &filial[j].maxprodutos);
        for(k=0; k<PROD; k++){
          	printf("Digite o numero de produtos: \n");
            scanf("%d", &filial[j].quantprodutos[k]);
        }
        getchar();
    }
    
    scanf("%d", &i);
    ReajustaPreco(filial,FIL,i);
    return 0;
}
Postado

O código estava errado (burro de mais).

 

#include <stdio.h>
#define FIL 5
#define PROD 10

typedef struct{
    char nome[50];
    int maxprodutos;
    int quantprodutos[PROD];
}Filiais;

void ReajustaPreco(Filiais filial[], int tam, int k){
    
    int j, estoque = 0;
    float percentual = 0;
    
    for(j = 0; j < FIL; j++){
        estoque = filial[j].quantprodutos[k];
        percentual = (estoque * 100) / filial[j].maxprodutos;
        if(percentual > 90){
            printf("%.1f%% de ocupacao do estoque da filial %s", percentual, filial[j].nome);
            printf("O estoque da filial esta quase completo!\n");
        }
        else{
            printf("%.1f%% de ocupacao do estoque da filial %s", percentual, filial[j].nome);
        }
    }
}

int main(){
    
    Filiais filial[FIL];
    int j, k;
    
    for(j = 0; j < FIL; j++){
        fgets(filial[j].nome,50,stdin);
        scanf("%d", &filial[j].maxprodutos);
        for(k = 0; k < PROD; k++){
            scanf("%d", &filial[j].quantprodutos[k]);
        }
        getchar();
    }
    
    ReajustaPreco(filial,FIL,k);
    return 0;
}

O problema é que o calculo do percentual não está dando certo.

Postado

@immoraesz O maior problema do seu algorítimo e a entrada, você não está pegado as informações corretamente.

faça algo básico para você ver a entrada e a saída das informações.

exemplo

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

#define TAMANHO_NOME 80
#define MAXIMO_ESTOQUE 3

#define QUNATIDADE_FILIAIS 2

struct informacoes_filial
{
    char nome[TAMANHO_NOME];
    int capacidade_estoque;
    int estoque_produtos[MAXIMO_ESTOQUE];
};

int main(void)
{
    int contadador1, contadador2;
    struct informacoes_filial filiais[QUNATIDADE_FILIAIS];
    /* Pega o nome e a quantidade de cada produto */
    for (contadador1 = 0; contadador1 < QUNATIDADE_FILIAIS; contadador1++) {
        printf("Digite o nome da filia:%i\n", contadador1);
        fgets(filiais[contadador1].nome, TAMANHO_NOME, stdin);
        printf("Digite a quantidade de cada produto no estoque\n");
        for (contadador2 = 0; contadador2 < MAXIMO_ESTOQUE; contadador2++) {
            printf("Digite a quantidade de produtos para o produto:%i\n", contadador2);
            scanf("%d%*c", &filiais[contadador1].estoque_produtos[contadador2]);
        }
    }
    
    printf("\n\n");
    /* Mostra todas as filiais e a quantidade de cada produto */
    for (contadador1 = 0; contadador1 < QUNATIDADE_FILIAIS; contadador1++) {
        printf("Nome da filia:%s", filiais[contadador1].nome);
        printf("Quantidade de cada produto no estoque\n");
        for (contadador2 = 0; contadador2 < MAXIMO_ESTOQUE; contadador2++) {
            printf("produto %i tem %i produtos\n", contadador2, filiais[contadador1].estoque_produtos[contadador2]);
        }
    }
    return(0);
}

 

De nomes mais significativos para as variáveis, colocar letras soltas fica difícil seguir o seu próprio código.

 

de uma olhada nesse tópico que o autor estava com o mesmo problema de pegar os valores das variáveis via teclado.

Dificuldade com Variável Booleana

   

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!