Ir ao conteúdo

Alguem poderia me ajudar a resolver este programa em C???


amanda87

Posts recomendados

Postado

Oie gente!!!!

Eu faço uma matéria de programação na PUC-Campinas, mas como sou de outra área, não entendo quase nada.

Gostaria de saber se algum de vocês, poderia por favor, me ajudar!!!

Estou mandando anexado o programa com o "int main" pronto....segundo a descrição do programa só precisam ser feitas 6 funções bem fáceis, mas como não sei quase nada, não consigo fazer!!

Peço ajuda porque estou desesperada!!!!

Segue o int main:

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

typedef struct {

int identificador;

double valor;

} produto;

typedef struct {

produto *lista;

int quantidade_produtos;

} lista_produtos;

typedef struct {

int identificador;

int quantidade;

} pedido;

typedef struct {

pedido *fila;

int quantidade_pedidos;

} fila_pedidos;

//Variavel global que contrloa o faturamenteo

double faturamento;

#define MSG_ID_PROD "Digite o identificador do produto e o valor:\n"

//procedimento para leitura da lista de produtos

void lerLista(lista_produtos *lista, int num_prod) {

}

//listar produtos

void listarProdutos(lista_produtos *lista) {

}

// Adiciona um pedido na fila de pedidos

void receberPedido(fila_pedidos *fila, int identificador, int quantidade) {

}

#define MSG_FILA_VAZIA "A fila de pedidos esta vazia.\n"

// Remove um pedido da fila

void atenderPedido(fila_pedidos *fila, lista_produtos *lista) {

}

// Imprime a fila de pedidos

void listarPedidos(fila_pedidos *fila) {

}

//procedimento que desaloca lista e fila

void desaloca(lista_produtos *lista, fila_pedidos *fila) {

}

/************************************************************************************************************/

//Não altere a partir daqui

#define MSG_NUM_PROD "Insira o numero de produtos:\n"

#define MSG_OP1 "\n(1) Listar produtos.\n"

#define MSG_OP2 "(2) Receber pedido.\n"

#define MSG_OP3 "(3) Atender pedido.\n"

#define MSG_OP4 "(4) Listar pedidos.\n"

#define MSG_OP5 "(5) Sair.\n"

#define MSG_OP6 "Escolha a opcao:\n"

#define MSG_ENTRADA_PEDIDO "Entre com o identificador do produto e a quantidade do pedido:\n"

#define MSG_PEDIDO "Pedido recebido.\n"

#define MSG_LISTA_PRODUTOS "Lista de produtos:\n"

#define MSG_LISTA_PEDIDOS "Lista de pedidos:\n"

int main() {

#ifdef __linux__

//-------------------------------------------------------

//Para saber a memoria dinamica foi desalocada - Ignore

struct mallinfo info = mallinfo ();

int MemDinInicial = info.uordblks, MemDinFinal;

//-------------------------------------------------------

#endif

lista_produtos lista; //lista de produtos

fila_pedidos fila; //fila de pedidos

int num_prod; //numero de produtos

int opcao; //opcao do menu

int id, qtd; //identificador, tipo e quantidade para leitura de pedido

// Iniciando fila de pedidos

fila.quantidade_pedidos = 0;

fila.fila = NULL;

//iniciando o faturamento

faturamento = 0.0;

//Leitura do numero de produtos

printf(MSG_NUM_PROD);

scanf("%d", &num_prod);

lerLista(&lista, num_prod);

do {

//menu

printf(MSG_OP1);

printf(MSG_OP2);

printf(MSG_OP3);

printf(MSG_OP4);

printf(MSG_OP5);

printf(MSG_OP6);

scanf("%d", &opcao);

switch (opcao) {

case 1: //listar produtos

printf(MSG_LISTA_PRODUTOS);

//Chamada do procedimento para lista produtos

listarProdutos(&lista);

break;

case 2: //receber pedido

printf(MSG_ENTRADA_PEDIDO);

scanf("%d %d", &id, &qtd);

//Chamada para o procedimento para receber o pedido

receberPedido(&fila, id,qtd);

printf(MSG_PEDIDO);

break;

case 3://Atender pedido

//Chamada para o procedimento para atender pedido

atenderPedido(&fila, &lista);

break;

case 4://Listar pedidos

printf(MSG_LISTA_PEDIDOS);

//Chamada para o procedimento para listar pedidos

listarPedidos(&fila);

break;

case 5:

break;

default:

printf("Opcao invalida. \n");

}

} while (opcao != 5);

//Imprime faturamenteo

printf("O faturamento foi de $%.2f.\n", faturamento);

//desalocando memoria

desaloca(&lista, &fila);

#ifdef __linux__

//--------------------------------------------------------------------

//Codito para verificar se toda memoria alocada foi desalocada - Ignore

info = mallinfo ();

MemDinFinal = info.uordblks;

if (MemDinInicial!=MemDinFinal)

printf("\n\nMemoria dinamica nao foi totalmente liberada (%d, %d)\n", MemDinInicial,MemDinFinal);

//---------------------------------------------------------------------

#endif

return 0;

}

---------------------------------------------------------------------------------------

E aqui esta o que é pra fazer:

1. Objetivos:

² Uso de aloca»c~ao din^amica de mem¶oria.

2. Neste laborat¶orio voc^e ter¶a que manipular duas estruturas de dados:

² Um lista de produtos. Esta lista possui um vetor de produtos e um campo inteiro que

controla a quantidade de produtos no vetor. A mem¶oria do vetor deve ser alocada dina-

micamente, conforme a necessidade. Cada produto possui um identi¯cador e um valor.

² Uma ¯la de pedidos dos produtos. Esta ¯la possui um vetor de pedidos e um campo

inteiro que controla a quantidade de pedidos no vetor. A mem¶oria do vetor deve ser

alocada dinamicamente, conforme a necessidade. Os pedidos s~ao atendidos na ordem

em que entram na ¯la. Pedidos novos entram no ¯m da ¯la. Cada pedido apresenta o

identi¯cador de um produto e a quantidade do pedido.

3. Utilize o arquivo auxiliar \pedidos.c". N~ao se preocupe com a fun»c~ao main!!! Ela j¶a est¶a

implementada e chama os procedimentos que voc^e deve implementar. Assim, respeite todas as

informa»c~oes deste enunciado, sob o risco de seu programa n~ao funcionar.

4. Descri»c~oes dos procedimentos que devem ser implementadas:

² void lerLista(lista_produtos *lista, int num_prod): este procedimento cria a lista

de produtos. O par^ametro \num prod" especi¯ca o n¶umero de produtos a serem inseridos.

A fun»c~ao deve alocar a mem¶oria necess¶aria para criar o vetor \lista!lista" que armaze-

nar¶a as informa»c~oes dos produtos. Em seguida, a fun»c~ao deve solicitar as informa»c~oes dos

produtos ao usu¶ario. Para cada produto o programa deve ler o identi¯cador do produto e o

valor. Dica: n~ao esque»ca de atualizar o campo \lista!quantidade produtos", que controla

a quantidade de produtos na lista. Exemplo de execu»c~ao:

Digite o identificador do produto e o valor:

12345 100.00 <=== Digitado pelo usuario

Digite o identificador do produto e o valor:

12346 35.50 <=== Digitado pelo usuario

Digite o identificador do produto e o valor:

12347 12.75 <=== Digitado pelo usuario

OBSERVAC» ~AO: N~ao se preocupe em validar os dados inseridos pelo usu¶ario.

² void listarProdutos(lista_produtos *lista): este procedimento imprime a lista de

produtos e respectivos valores. Cada produto deve aparecer em uma linha. O identi¯cador

do produto e o seu valor devem ser separados por um espa»co em branco.

12345 100.000000

12346 50.500000

12347 12.750000

² void receberPedido(fila_pedidos *fila, int identificador, int quantidade): este

procedimento insere um pedido na ¯la de pedidos. Os dados do novo pedido (identi¯cador

e quantidade) s~ao passados como par^ametro. O procedimento deve inserir o novo pedido

na primeira posi»c~ao do vetor. Lembre-se, voc^e ter¶a que realocar a mem¶oria do vetor para

acomodar mais um pedido. N~ao esque»ca de atualizar o campo \quantidade pedidos";

² void atenderPedido(fila_pedidos *fila, lista_produtos *lista): quando um pe-

dido ¶e atendido, este pedido ¶e removido da ¯la e o valor total do pedido (quantidade X

valor do produto) deve ser acrescentado µa variavel global \faturamento". Os pedidos s~ao

atendidos por ordem de chegada, ou seja, o procedimento deve atender o pedido na ¶ultima

posi»c~ao do vetor. Para remover o pedido, realoque a mem¶oria do vetor. N~ao esque»ca

de atualizar o campo \quantidade pedidos". Se a ¯la estiver vazia, o procedimento deve

imprimir a mensagem MSG FILA VAZIA.

² void listarPedidos(fila_pedidos *fila): este procedimento imprime a ¯la de pedi-

dos na ordem de prioridade para atendimento. Cada pedido deve ser impresso em uma

linha. Identi¯cador e quantidade dever ser separados por um espa»co em branco. Se a ¯la

estiver vazia, o procedimento deve imprimir a mensagem MSG FILA VAZIA.

12345 20

12346 15

12345 5

² void desaloca(lista_produtos *lista, fila_pedidos *fila): este procedimento deve

desalocar a mem¶oria dos vetores da lista de produtos e da ¯la de pedidos.

Peço ajuda...por favor!!!!

Obrigada desde já!!

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...