This content is protected, please login and enroll in the course to view this content!
3 Comments
Adriel Almeida
18 de outubro de 2018
Prof. Estou com dificuldade nesse exercício. Você pode me explicar passo a passo?
A seguir, propomos outra tarefa que também é gerenciada deste modo: um supermercado possui 3 filas de carrinhos (caixas) que vão chegando e são atendidos quando chega a sua vez.
O que deve ser realizado na questão:
1) Primeiramente defina um tipo abstrato de dados (TAD) para comportar os dados de um carrinho: um identificador numérico, o nome do cliente (com máximo de 30 caracteres); o número de produtos; e o valor total da compra.
2) Em seguida, crie um tipo abstrato de dados (TAD) que define a “fila” de carrinhos, para comportar um máximo de 10 clientes.
3) E, por último, crie três filas de carrinhos (os caixas), como três variáveis globais: caixa1, caixa2 e caixa3.
4) De posse desse trecho de código, faça as seguintes rotinas ou funções:
· Crie a função “enqueue” ou “insert”, que recebe por parâmetro os dados de um carrinho (encapsulados em um tad) e insere na fila escolhida pelo cliente, verificando se existe espaço na fila, e emitindo mensagem de erro caso a fila esteja cheia.
· Crie uma função “inicializa”, que esvazia as 3 filas no inicio do dia de trabalho.
· Crie a função “remove”, que retira um cliente de uma fila indicada.
· Crie também uma função “total”, que recebe uma fila de carrinhos como parâmetro e retorna o valor total arrecadado pelo supermercado nela.
5) No main, chame estas rotinas para:
o Inicializar as filas
o Colocar alguns clientes nas filas (4 ou 5 em cada uma bastam).
o Retirar pelo menos um cliente de uma das filas.
o E por ultimo calcular seus valores totais.
Dicas:
· Você pode fazer a fila com vetores de carrinhos; ou com nós alocados dinamicamente.
· Prefira passar a fila por parâmetro e por referencia ao fazer uma rotina.
· Diferencie os conceitos de pilha, fila e lista antes de iniciar a questão.
Adriel tudo bem?
vai ser um pouco complicado responder tudo por aqui… então, se me permitir, usarei este comentário como tema de uma aula futura, pode ser?
Uma aula de resolução de exercícios. Que tal?
Odys
6 de fevereiro de 2023
Adriel Almeida, uma possível solução seria esta, mas não a leve como absoluta, pode conter erros. Não adicionei novas funções pois não sei se o exercício permite.
int main(void) {
srand(time(NULL));
//Gera um ID aleatório de 0 a 99
int id_aleatorio = rand() % 100;
//Gera uma quantidade aleatória de 1 a 10
int quantidade_aleatoria = 1 + (rand() % 10);
int preco_aleatorio = (1 + (rand() % 50)) * quantidade_aleatoria;
3 Comments
Prof. Estou com dificuldade nesse exercício. Você pode me explicar passo a passo?
A seguir, propomos outra tarefa que também é gerenciada deste modo: um supermercado possui 3 filas de carrinhos (caixas) que vão chegando e são atendidos quando chega a sua vez.
O que deve ser realizado na questão:
1) Primeiramente defina um tipo abstrato de dados (TAD) para comportar os dados de um carrinho: um identificador numérico, o nome do cliente (com máximo de 30 caracteres); o número de produtos; e o valor total da compra.
2) Em seguida, crie um tipo abstrato de dados (TAD) que define a “fila” de carrinhos, para comportar um máximo de 10 clientes.
3) E, por último, crie três filas de carrinhos (os caixas), como três variáveis globais: caixa1, caixa2 e caixa3.
4) De posse desse trecho de código, faça as seguintes rotinas ou funções:
· Crie a função “enqueue” ou “insert”, que recebe por parâmetro os dados de um carrinho (encapsulados em um tad) e insere na fila escolhida pelo cliente, verificando se existe espaço na fila, e emitindo mensagem de erro caso a fila esteja cheia.
· Crie uma função “inicializa”, que esvazia as 3 filas no inicio do dia de trabalho.
· Crie a função “remove”, que retira um cliente de uma fila indicada.
· Crie também uma função “total”, que recebe uma fila de carrinhos como parâmetro e retorna o valor total arrecadado pelo supermercado nela.
5) No main, chame estas rotinas para:
o Inicializar as filas
o Colocar alguns clientes nas filas (4 ou 5 em cada uma bastam).
o Retirar pelo menos um cliente de uma das filas.
o E por ultimo calcular seus valores totais.
Dicas:
· Você pode fazer a fila com vetores de carrinhos; ou com nós alocados dinamicamente.
· Prefira passar a fila por parâmetro e por referencia ao fazer uma rotina.
· Diferencie os conceitos de pilha, fila e lista antes de iniciar a questão.
Adriel tudo bem?
vai ser um pouco complicado responder tudo por aqui… então, se me permitir, usarei este comentário como tema de uma aula futura, pode ser?
Uma aula de resolução de exercícios. Que tal?
Adriel Almeida, uma possível solução seria esta, mas não a leve como absoluta, pode conter erros. Não adicionei novas funções pois não sei se o exercício permite.
main.c
#include
#include
#include
#include
#include “mercadinho.h”
FILA caixa1;
FILA caixa2;
FILA caixa3;
int main(void) {
srand(time(NULL));
//Gera um ID aleatório de 0 a 99
int id_aleatorio = rand() % 100;
//Gera uma quantidade aleatória de 1 a 10
int quantidade_aleatoria = 1 + (rand() % 10);
int preco_aleatorio = (1 + (rand() % 50)) * quantidade_aleatoria;
//Inicializando manualmente as structs
CARRINHO carrinho1 = {id_aleatorio,”Zezinho”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho2 = {id_aleatorio,”Dennis Ritchie”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho3 = {id_aleatorio,”Pedro”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho4 = {id_aleatorio,”Linus Torvalds”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho5 = {id_aleatorio,”Marcos”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho6 = {id_aleatorio,”Luizinho”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho7 = {id_aleatorio,”Henrique”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho8 = {id_aleatorio,”Júlio”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho9 = {id_aleatorio,”Calabresa”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho10 = {id_aleatorio,”Feijãozinho”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho11 = {id_aleatorio,”Débora”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho12 = {id_aleatorio,”Safira”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho13 = {id_aleatorio,”Adolf”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho14 = {id_aleatorio,”Halliday”,quantidade_aleatoria,preco_aleatorio};
CARRINHO carrinho15 = {id_aleatorio,”Moyses”,quantidade_aleatoria,preco_aleatorio};
//inicializando as filas
inicializa(&caixa1);
inicializa(&caixa2);
inicializa(&caixa3);
//Inserindo os clientes/carrinhos nas filas
enqueue(&caixa1, &carrinho1);
enqueue(&caixa1, &carrinho2);
enqueue(&caixa1, &carrinho3);
enqueue(&caixa1, &carrinho4);
enqueue(&caixa2, &carrinho5);
enqueue(&caixa2, &carrinho6);
enqueue(&caixa2, &carrinho7);
enqueue(&caixa2, &carrinho8);
enqueue(&caixa2, &carrinho9);
enqueue(&caixa3, &carrinho10);
enqueue(&caixa3, &carrinho11);
enqueue(&caixa3, &carrinho12);
enqueue(&caixa3, &carrinho13);
enqueue(&caixa3, &carrinho14);
enqueue(&caixa3, &carrinho15);
//Retirando ao menos um cliente
retira(&caixa1);
printf(“No caixa 1 arrecadamos R$ %.2f\n”,total(caixa1));
printf(“No caixa 2 arrecadamos R$ %.2f\n”,total(caixa2));
printf(“No caixa 3 arrecadamos R$ %.2f\n”,total(caixa3));
return 0;
}
mercadinho.h
#define LIMITE 10
struct carrinho{
int id;
char nome_cliente[30];
int quantidade_produtos;
double valor_total;
};
struct fila{
struct carrinho *carrinhos;
int tamanho;
int inicio;
int fim;
};
typedef struct carrinho CARRINHO;
typedef struct fila FILA;
void enqueue(FILA *fila,CARRINHO *carrinho);
void inicializa(FILA *fila);
void retira(FILA *fila);
double total(FILA fila);
mercadinho.c
#include
#include “mercadinho.h”
#define LIMITE 10
void enqueue(FILA *fila,CARRINHO *carrinho){
if(fila->tamanho inicio > LIMITE – 1){
fila->inicio = 0;
}else if(fila->fim > LIMITE – 1){
fila->fim = 0;
}
fila->carrinhos[fila->fim] = *carrinho;
fila->fim += 1;
fila->tamanho += 1;
}else{
printf(“A fila do caixa está cheia!\n”);
}
}
void inicializa(FILA *fila){
fila->carrinhos = (CARRINHO *)calloc(LIMITE,sizeof(CARRINHO));
fila->inicio = 0;
fila->fim = 0;
fila->tamanho = 0;
}
void retira(FILA *fila){
if(fila->tamanho > 0){
if(fila->inicio > LIMITE – 1){
fila->inicio = 0;
}else if(fila->fim > LIMITE – 1){
fila->fim = 0;
}
free(&fila->carrinhos[fila->inicio]);
fila->inicio += 1;
fila->tamanho -= 1;
}else{
printf(“A fila do caixa está vazia!\n”);
}
}
double total(FILA fila){
double soma = 0.0;
do{
soma += fila.carrinhos[fila.inicio].valor_total;
fila.inicio += 1;
}while(fila.inicio != fila.fim);
return soma;
}