INF 1007 Simulado P2 Nome: Instruções

Documentos relacionados
INF 1620 P2-14/10/05 Questão 1 Nome:

INF 1620 P3-27/11/04 Questão 1 Nome:

INF 1620 P3-02/07/02 Questão 1 Nome:

INF 1620 P3-29/06/04 Questão 1 Nome:

Departamento de Informática PUC-Rio INF Estruturas de Dados Lista 2 Completa (Gerada em 8 de maio de 2006)

INF 1620 P4 30/06/07 Questão 1 Nome:

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P4 07/12/2010

char* prefixo (char* str, int n);

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010

INF 1620 P3-06/12/03 Questão 1 Nome:

INF 1620 P2-17/05/08 Questão 1 Nome:

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

INF 1620 P4-27/06/02 Questão 1 Nome:

INF 1620 P2-23/10/04 Questão 1 Nome:

P2 Programação II Departamento de Informática/PUC-Rio

INF 1620 P4-06/12/02 Questão 1 Nome:

2. Considerando as seguintes declarações de uma lista encadeada

INF 1620 P2-01/11/03 Questão 1 Nome:

Aluno: Para todas as questões desta prova considere os tipos estruturados abaixo:

Tipos Abstratos de Dados

INF 1620 P3-21/06/08 Questão 1 Nome:

Lista de Exercícios para P1 INF1007 (Prog2) 15/04/2013. ATENÇÃO: O material a seguir não sofreu revisão e pode conter erros.

Listas ligadas/listas encadeadas

Algoritmos e Estruturas de dados

Tipos abstratos de dados; pilhas e filas

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

INF 1620 P1-04/10/03 Questão 1 Nome:

Prova 2 - Computação

Programação de Computadores II. Cap. 9 Tipos Abstratos de Dados (TAD)

INF 1620 P4-13/12/01 Questão 1 Nome:

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P1 17/04/2010

Modulo 9: Você define como éo dado... Struct e typedef

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

INF 1620 P1-14/04/07 Questão 1 Nome:

INTRODUÇÃO À LINGUAGEM C

1. Selecione a Estrutura de Dados que melhor representa os diretórios ou pastas de arquivos do computador.

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

a) Implemente uma função que retorne uma aproximação do valor de π, de acordo com a F órmula de Leibniz: ( 1)

INF 1620 P1-17/09/05 Questão 1 Nome:

TAD: Tipo Abstrato de Dados (parte 2)

INF 1620 P1-18/09/04 Questão 1 Nome:

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Programação II. Tipos Estruturados. Bruno Feijó Dept. de Informática, PUC-Rio

1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.

Linguagem C: Ordenação

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Linguagem C Ficheiros Compilação Separada

ANHANGUERA ESTRUTURA DE DADOS AULA 02 O QUE É ESTRUTURA DE DADOS? Prof. Thomás da Costa

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 26/11/2010

INF 1620 P1-11/04/08 Questão 1 Nome:

C Estruturas. Adriano Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Módulo 1 Conceitos Fundamentais

TAD: Tipo Abstrato de Dados (parte 2)

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Lista de Exercícios - Listas Aula de Laboratório. 1. Considerando as seguintes declarações de uma lista encadeada:

INF P3-23/06/07 Questão 1 Nome:

Tipos Abstratos de Dados

Métodos Computacionais. Tipos Estruturados

Programação II. Módulos, Encapsulamento e TADs. Bruno Feijó Dept. de Informática, PUC-Rio

Tipos Abstratos de Dados TADs

Atividade de laboratório listas encadeadas simples

ESTRUTURAS COMPOSTAS. REGISTROS (Struct) Introdução à Ciência da Computação I Simone Senger Souza

Transcrição:

INF 1007 Simulado P2 Nome: Matrícula: Turma: Instruções 1. Tempo de prova: 1 hora e 30 minutos. 2. Entregue a solução de sua prova em um ÚNICO arquivo texto, com o nome Turma_Matricula_P2.txt (por exemplo 33B_1020870.txt), contendo todas as linhas de código dos módulos pedidos (incluindo os cabeçalhos com seus dados e as linhas de código já existentes). 3. O módulo vetordecompra.c deve conter as soluções das questões 1, 2 e 3 e o módulo prog.c deve conter a solução da questão 4. Em cada módulo deve haver um cabeçalho preenchido no seguinte formato: ----------------------------------------------------------- Modulo: Aluno: Matricula (7 digitos): Turma (3 digitos): ---------------------------------------------------------- 4. No arquivo de entrega, NÃO INCLUA linhas de código que você eventualmente usou para fazer testes. 5. Para a sua comodidade, os seguintes arquivos estão disponíveis no sistema, caso você queira usá-los no Visual Studio: vetordecompra.h, Compra.h, Data.h, Compra.c, vetordecompra.c e prog.c. Uma listagem destes arquivos, exceto o TAD, se encontra no final desta prova. 6. Após 1hora e 30 minutos de prova, serão concedidos 15 minutos para que cada aluno monte o arquivo texto Turma_Matricula_P2.txt contendo as soluções, conforme a instrução 2 acima, e o copie para o diretório indicado pelo fiscal da prova. 7. Cada aluno é responsável por conferir o conteúdo do arquivo gravado pelo fiscal da prova.

Considere a existência de um cadastro composto pelas compras realizadas em uma livraria on-line no último ano. Esse cadastro é representado por um vetor de PONTEIROS para o TAD Compra. A interface do TAD Compra está definida no arquivo Compra.h, com o tipo typedef struct compra Compra; e onde se destacam as seguintes funções: Função char *cmp_obtem_cpf(compra *c); Data cmp_obtem_data(compra *c); char *cmp_obtem_cliente (Compra *c); float cmp_obtem_valor (Compra *c); Objetivo Retorna o cpf do cliente que realizou determinada compra. O ponteiro da compra é recebido como parâmetro. O cpf é representado como uma cadeia de caracteres. Retorna a data de determinada compra. O ponteiro da compra é recebido como parâmetro. A data da compra é do tipo estruturado Data. Retorna o nome do cliente que realizou determinada compra. O ponteiro da compra é recebido como parâmetro. O nome do cliente é representado como uma cadeia de caracteres. Retorna o valor de determinada compra. O ponteiro da compra é recebido como parâmetro. O módulo vetordecompra.c deve conter funções que usam o TAD Compra e deve oferecer funções de ordenação e busca a serem utilizadas no programa principal implementado no arquivo prog.c. Nesta prova, você deve completar os módulos vetordecompra.c e prog.c. Em nenhum módulo é permitido incluir novos arquivos.h e protótipos de funções Questão 1 1,0 ponto No módulo vetordecompra.c, implemente em C a função compara_datas que: recebe duas variáveis (d1 e d2) do tipo estruturado Data; retorna: -1, se a primeira data antecede cronologicamente a segunda data; 1, se a primeira data vem depois da segunda data; 0, se as duas datas são iguais. O protótipo dessa função é o seguinte: int compara_datas(data d1, Data d2); onde Data corresponde ao tipo estruturado descrito abaixo. 2 de 6

struct data { int dia, mes; } ; typedef struct data Data; Questão 2 3,0 pontos No módulo vetordecompra.c, implemente em C a função ordena que: receba um vetor de PONTEIROS para o TAD Compra (vpc) e o número de elementos desse vetor (n). O vetor de compras (vpc) pode ter várias compras de um mesmo cliente, correspondentes a diferentes compras efetuadas por ele durante o ano. Um cliente pode realizar várias compras em uma mesma data. O vetor de compras (vpc) a princípio NÃO está ordenado. coloque o vetor em ordem crescente de cpf do cliente e, para o mesmo cpf, em ordem decrescente de data de compra, ou seja, as compras mais recentes do cliente devem aparecer primeiro. O cpf do cliente é representado como uma cadeia de caracteres e a data de compra é do tipo estruturado Data. A função deve implementar um dos métodos de ordenação apresentados no curso, NÃO podendo utilizar a função qsort da biblioteca padrão do C. A função ordena, usando ou não funções auxiliares, deve OBRIGATORIAMENTE chamar a função compara_datas da questão anterior. A função ordena deve OBRIGATORIAMENTE chamar as devidas funções do TAD Compra. O protótipo dessa função é o seguinte: void ordena(compra ** vpc, int n); Questão 3 5,0 pontos No módulo vetordecompra.c, implemente em C a função busca_cliente que: recebe o vetor de ponteiros para TAD Compra (vpc), o número de elementos desse vetor (n) e o cpf de um cliente (cpf), sendo que cpf é uma cadeia de caracteres. Considere que o vetor vpc está em ordem crescente de cpf e, para o mesmo cpf, em ordem decrescente de data de compra, conforme resultado da questão 2. busca no vetor (vpc) o cliente que possui o cpf recebido como parâmetro, utilizando o método de busca binária. NÃO pode ser usada a função bsearch da biblioteca padrão do C. caso o cliente seja encontrado, lista na tela todas as compras efetuadas por ele, em ordem decrescente de data de compra, seguindo o exemplo apresentado a seguir. retorna 1, se o cliente for encontrado, ou 0, caso contrário. 3 de 6

A função busca_cliente deve OBRIGATORIAMENTE chamar as devidas funções do TAD Compra. O protótipo dessa função é o seguinte: int busca_cliente(compra ** vpc, int n, char * cpf); Veja a seguir um exemplo do resultado da busca de cliente: Conteúdo do vetor de compras, com 7 elementos: 11111111111 - bia nunes 40.40-19/5 22222222222 - leo silva - 20.30-12/7 22222222222 - leo silva - 60.30-20/5 22222222222 - leo silva - 90.30-12/5 77777777777 - rui souza - 80.50-20/6 99999999999 - ana prado - 50.00-20/5 99999999999 - ana prado - 30.10-19/5 Resultado apresentado na tela para o cpf 99999999999: 99999999999 - ana prado 20-5: 50.000000 19-5: 30.100000 Questão 4 1,0 ponto No módulo prog.c, usando obrigatoriamente todas as funções descritas em vetordecompra.h, complete o código da função main que testa estas funções. 4 de 6

Compra.h: contem a interface do TAD Compra #if!defined( Compra_h ) #define Compra_h #include "Data.h" typedef struct compra Compra; LISTAGEM DOS PRINCIPAIS ARQUIVOS Compra * cmp_cria(char * cpf, char * nome, float valor, int dia, int mes); void cmp_mostra_uma_compra(compra * c); char *cmp_obtem_cpf(compra *c); Data cmp_obtem_data(compra *c); char *cmp_obtem_cliente (Compra *c); float cmp_obtem_valor (Compra *c); #endif *** vetordecompra.h: contem os prototipos das funcoes a serem implementadas pelo aluno *** #if!defined( Prova_h ) #define Prova_h #include "Compra.h" #include "Data.h" Compra ** cria_massa_dados (int * n); void exibe_vp(compra **vp, int n); int compara_datas(data d1, Data d2); void ordena(compra ** vpc, int n); int busca_cliente(compra ** vpc, int n, char * cpf); #endif Data.h: contem a definicao do tipo Data #if!defined( Data_h ) #define Data_h struct data { int dia, mes; }; typedef struct data Data; #endif ----------------------------------------------------------- Modulo: vetordecompra Aluno: Matricula (7 digitos): Turma (3 digitos): ---------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include "Compra.h" #include "vetordecompra.h" void exibe_vp(compra ** vp, int n) { int i; printf("\n"); 5 de 6

} for (i=0; i<n; i++) cmp_mostra_uma_compra(*(vp+i)); Compra ** cria_massa_dados (int * n) { Compra ** v; *n = 7; v = (Compra **)malloc((*n)*sizeof(compra *)); v[0]=cmp_cria("99999999999", "ana prado", 50.00f, 20, 5); v[1]=cmp_cria("22222222222", "leo silva", 90.30f, 12, 5); v[2]=cmp_cria("77777777777", "rui souza", 80.50f, 20, 6); v[3]=cmp_cria("22222222222", "leo silva", 20.30f, 12, 7); v[4]=cmp_cria("99999999999", "ana prado", 30.10f, 19, 5); v[5]=cmp_cria("22222222222", "leo silva", 60.30f, 20, 5); v[6]=cmp_cria("11111111111", "bia nunes", 40.40f, 19, 5); return v; } Questao 1-1,0 pontos Questao 2-3,0 pontos Questao 3-5,0 pontos ----------------------------------------------------------- Modulo: prog.c Aluno: Matricula (7 digitos): Turma (3 digitos): ---------------------------------------------------------- #include <stdio.h> #include "Compra.h" #include "vetordecompra.h" int main (void) { Compra ** vp; int ncompras; int r = 0; Data d1 = {20,5}, d2 = {12,5}, d3 = {20,6}; prepara massa de dados vp= cria_massa_dados(&ncompras); Questao 4 } return 0; 6 de 6