Buscar

Prova com gabarito - 2ª chamada

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

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); 
}

Outros materiais