Baixe o app para aproveitar ainda mais
Prévia do material em texto
Observações gerais: 1) Preencher os dados do cabeçalho do bloco de provas e na folha de questões o nome e a turma; 2) Ao final da prova entregar ao professor ou fiscal a folha de questões e o caderno de prova; 1º quesito: Você deverá implementar um programa em C para ajudar um restaurante em duas atividades: (i) Anotar pedidos; (ii) Processar os pedidos na ordem em que forams anotados (como em uma fila). Cada pedido deve ser representado por uma estrutura Pedido com 3 atributos: (i) um vetor de 50 strings com 50 caracteres em cada elemento, o qual representa os itens solicitados no pedido; (ii) o número de itens anotados, representado por um inteiro; e (iii) o número da mesa do pedido (também representado por um inteiro). Adicionalmente, o programa deverá ter as seguintes variáveis principais: (i) vetor de 200 pedidos; (ii) índice do próximo pedido a ser anotado (indice_proximo_pedido); e (iii) índice do próximo pedido a ser processado (indice_proximo_pedido_processar). O tamanho do vetor (200) indica apenas o número máximo de pedidos que o programa consegue comportar. O índice do próximo pedido (indice_proximo_pedido) indicará a posição deste no vetor, enquanto o índice do próximo pedido a ser processado (indice_proximo_pedido_processar) definará qual próximo pedido (armazenado no vetor) deverá ser atendido pela cozinha (seguindo a política de uma fila). As seguintes funções deverão estar presentes no programa: - void anotar_pedido(Pedido vetor_pedidos[], int *indice_proximo_pedido): Esta função deverá preencher um Pedido na posição indicada por indice_proximo_pedido. Ou seja, deverá solicitar ao usuário o número da mesa e os itens. Porém, a função deve pedir um item por vez e, após um item anotado, o programa deve perguntar se o usuário deseja concluir o pedido. Caso negativo, deverá solicitar um novo item,mas a quantidade não pode ultrapassar o limite de 50 itens. Em seguida, a variável indice_proximo_pedido deverá ser incrementada em uma unidade. Ao chegar no valor 200, indice_proximo_pedido deve voltar para o valor 0. A função utiliza passagem por referência para vetor_pedidos e indice_proximo pedido; - void processar_pedido(Pedido vetor_pedidos[], int *indice_proximo_pedido_processar, FILE *farquivo): Esta função deve obter o pedido indicado por indice_proximo_pedido_processar e imprimir a lista de itens, seguido pelo número da mesa. Ademais, cada item impresso na tela (juntamente com a mesa) deve também ser armazenado no arquivo representado pela variável arquivo. Em seguida, a variável indice_proximo_pedido_processar deverá ser incrementada em uma unidade. Ao chegar no valor 200, indice_proximo_pedido_processar deve voltar para o valor 0. A função utiliza passagem por referência para vetor_pedidos, indice_proximo_pedido_processar e arquivo; - main(): Inicialmente, a função deverá criar uma arquivo denominado pedidos_processados.cad. Em seguida, esta imprimirá o menu principal, em que solicita ao usuário se deseja anotar, processar um pedido ou sair do programa. Caso a opção escolhida seja anotar, a função anotar_pedido será utilizada. Se escolher ÁREA II – CCEN / UFPE Disciplina: IF 165 – Computação Eletrônica Segunda Chamada - 2017.2 Data: 05/12/2017 Nome legível do aluno: ..................................................….....................................……… Turma ......……. a opção processar, a função processar_pedido será executada. Por fim, caso escolha sair do programa, o arquivo deverá ser fechado e o programa encerrado. Importante: Não se preocupe com os possíveis choques entre “indice_proximo_pedido_processar” e “indice_proximo_pedido”. O tratamento deste potencial erro não faz parte da questão. Você poderá utilizar um arquivo binário ou texto. #include <stdio.h> typedef struct pedido{ char itens[50][50]; int numero_itens; int numero_mesa; }Pedido; void anotar_pedido(Pedido pedidos[], int *indice_proximo_pedido){ int numero_mesa; printf("Informe o numero da mesa:\n"); scanf("%d", &(pedidos[*indice_proximo_pedido].numero_mesa)); char concluir_pedidos = 'n'; int contador_itens = 0; do{ printf("Informe o item %d:\n", contador_itens + 1); scanf("%s", pedidos[*indice_proximo_pedido].itens[contador_itens]); do{ printf("Deseja concluir os pedidos?\n"); scanf("%c", &concluir_pedidos); if(concluir_pedidos != 's' && concluir_pedidos != 'n'){ printf("Responda 's' para sim ou 'n' para nao.\n"); } }while(concluir_pedidos != 's' && concluir_pedidos != 'n'); contador_itens++; }while(concluir_pedidos == 'n'); pedidos[*indice_proximo_pedido].numero_itens = contador_itens; *indice_proximo_pedido = *indice_proximo_pedido + 1; if(*indice_proximo_pedido >= 200){ *indice_proximo_pedido = 0; } } void processar_pedido(Pedido pedidos[], int *indice_proximo_pedido_processar, FILE *arquivo){ printf("Pedido a processar:\n"); int i; for(i = 0; i < pedidos[*indice_proximo_pedido_processar].numero_itens; i++){ printf(" - %s\n", pedidos[*indice_proximo_pedido_processar].itens[i]); fprintf(arquivo, "%s\n", pedidos[*indice_proximo_pedido_processar].itens[i]); } printf("Numero da mesa: %d\n", pedidos[*indice_proximo_pedido_processar].numero_mesa); *indice_proximo_pedido_processar = *indice_proximo_pedido_processar + 1; if(*indice_proximo_pedido_processar >= 200){ *indice_proximo_pedido_processar = 0; } } int main(){ char fechar = 'n'; Pedido pedidos[200]; int opcao = -1; int indice_proximo_pedido = 0; int indice_proximo_pedido_processar = 0; FILE *arquivo; arquivo = fopen("pedidos_processados.cad","w"); do{ printf("O que voce deseja fazer?\n1 - Anotar pedido\n2 - Processar pedido\n"); scanf("%d", &opcao); switch(opcao){ case 1: anotar_pedido(pedidos, &indice_proximo_pedido); break; case 2: processar_pedido(pedidos, &indice_proximo_pedido_processar, arquivo); break; default: printf("Opcao invalida!\n"); } Critério de correção •Declaração estruturas 1,0 •Declaração de variáveis 1,0 •Abertura/Manipulacao e fechamento de arquivos 1,0 •Função anotar_pedido 3,0 •Função processar_pedido 2,5 •Funcionamento do menu principal 1,5 do{ printf("Deseja fechar o sistema?\n"); scanf("%c", &fechar); if(fechar != 's' && fechar != 'n'){ printf("Responda 's' para sim ou 'n' para nao.\n"); } }while(fechar != 's' && fechar != 'n'); }while(fechar == 'n'); fclose(arquivo); }
Compartilhar