Buscar

P4_2015_1_INF1007 - Prog 2

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 4 páginas

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

Prévia do material em texto

Disciplina: INF1005 - Programação I
Avaliação:	 P1	Data: 12/09/2014
Algumas funções de bibliotecas que podem ser usadas nesta prova, em qualquer questão, encontram-se relacionadas na última folha.
	
Questão 1) (2.0 pontos) Para preservar o sigilo, uma empresa transmite o primeiro nome de um cliente intercalando os caracteres deste nome com os 6 (seis) caracteres que representam a data de nascimento deste cliente. A cadeia de caracteres gerada é sempre completada com os caracteres restantes do nome ou da data. Por exemplo, nome = “ANA”e data = “261281” geram a cadeia “A2N6A1281”, enquanto que nome = “CRISTINA” e data = “261281” geram “C2R6I1S2T8I1NA”. Escreva a função mistura que:
 - recebe o nome e a data e ;
 - retorna uma nova cadeia de caracteres a ser transmitida. Caso não seja possível alocar a nova cadeia a 
 função retorna NULL. Entre todas as funções da biblioteca string, apenas a strlen pode ser usada.
Questão 2.0) (totalizando 3.0 pontos) Considere a representação de polinômios 
anxn + an-1xn+1 +.. + a2x2 + a1xn+ anx0
através de uma lista encadeada , onde cada nó tem um ponteiro para um termo do polinômio e um ponteiro para o próximo nó da lista. Um termo tem coeficiente inteiro e um grau (potência) inteiro.
A lista encadeada encontra-se ordenada decrescentemente pelo grau do termo. Considere os tipos estruturados abaixo:
struct termo
{	int coef;
	int grau;
};
typedef struct termo Termo;
struct no
{	Termo *te; /* ponteiro para um termo */
	struct no *prox; /* ponteiro para o próximo nó da lista */
};
typedef struct no No;
2.A) (2.0 ponto) Escreva a função insereTermo que:
- recebe (o endereço do primeiro nó de ) uma lista de termos, um coeficente e um grau (potência) de um novo termo. Caso na lista não exista termo com o grau recebido, deve ser inserido um novo nó na lista, com novo termo com o coeficiente e o grau recebidos. Caso já exista termo de mesmo grau na lista, deve ser feita apenas a atualização do coeficiente. A função deve levar em conta e manter a ordenação da lista;
- retorna (o endereço do primeiro nó da) lista atualizada ou NULL se ocorrerem problemas.
2.B) (1.0 ponto) Escreva a função RECURSIVA exibePolinômio, que:
	- recebe (o endereço do primeiro nó de) uma lista de termos e exibe coeficiente e grau de cada termo.
Questão 3) (2.0 pontos) Considere o tipo estruturado Livro (aqui não é TAD) abaixo, que representa um livro de uma livraria:
typedef struct livro Livro;
struct livro
{	char	autor[51];
	char 	titulo[31];
	int	estoque; /* quantidade de livros */
};
Considere também a existência do TAD PilhaDeLivros e do TAD FilaDeLivros. 
TAD PilhaDeLivros: guarda endereços de livros e a interface é apresentada a seguir:
typedef struct pilhaDeLivros PilhaDeLivros;
	função:
	descrição:
	PilhaDeLivros *piCria(void);
	cria e retorna (um ponteiro para) uma pilha de livros
	void piPush(PilhaDeLivros *pi, Livro *liv);
	recebe (um ponteiro para) uma pilha de livros e o endereço de um livro criado, inserindo o endereço desse livro na pilha
	Livro * piPop (PilhaDeLivros *pi);
	recebe (um ponteiro para) uma pilha de livros e retira o endereço do livro que está no topo da pilha, retornando-o
	int piVazia (PilhaDeLivros *pi);
	recebe (um ponteiro para) uma pilha de livros e retorna 1, se a pilha está vazia, ou 0, em caso contrário
	void piLibera (PilhaDeLivros *pi);
	recebe (um ponteiro para) uma pilha de livros e libera o espaço em memoria ocupado pela pilha
TAD FilaDeLivros: guarda endereços de livros e a interface é apresentada a seguir:
typedef struct filaDeLivros FilaDeLivros;
	função:
	descrição:
	FilaDeLivros *fiCria(void);
	cria e retorna (um ponteiro para) uma fila de livros
	void fiInsere(FilaDeLivros *fi, Livro *liv);
	recebe (um ponteiro para) uma fila de livros e o endereço de um livro criado, inserindo o endereço desse livro na fila
	Livro * fiRetira (FilaDeLivros * fi);
	recebe (um ponteiro para) uma fila de livros e retira o endereço do livro que está na frente da fila, retornando-o
	int fiVazia (FilaDeLivros * fi);
	recebe (um ponteiro para) uma fila de livros e retorna 1, se a fila está vazia, ou 0, em caso contrário
	void fiLibera (FilaDeLivros * fi);
	recebe (um ponteiro para) uma fila de livros e libera o espaço em memoria ocupado pela fila
Escreva a função invertePilha que:
	- recebe (um ponteiro para) uma pilha de livros e deixa na pilha os livros na ordem inversa a que eles estão originalmente, descartando (retirando) os livros com estoque igual a zero.
O tipo de retorno da função é void. A sua função deverá obrigatoriamente usar uma ou mais estrutura(s) auxiliar(es) (pilha e/ou fila), considerando a existência do TAD PilhaDeLivros e do TAD FilaDeLivros. 
Questão 4) (3.0 pontos) Considere o tipo estruturado NoInscrito abaixo, que representa um nó de uma lista simplesmente encadeada, com os dados de um inscrito aprovado em um concurso. Um inscrito tem número de inscricao (os números de inscrição variam de 1000 até 9999) e nota. 
typedef struct noIncrito NoInscrito;
struct noIncrito
{	int inscrição; /* numero de inscricao */
	float nota; 
	NoInscrito *prox; /* ponteiro para o próximo inscrito da lista */
};
Com o objetivo de tornar mais rápido o acesso aos dados de um inscrito, é mantido um vetor do tipo estruturado Entrada descrito abaixo, onde ficam “penduradas” as listas encadeadas:
typedef struct entrada Entrada;
struct entrada
{	int milharDaInsc; /*1000,2000,3000,4000,5000,6000,7000,8000,9000 */
	NoInscrito *lstInscritos; /* ponteiro para o primeiro nó de uma lista 
			 simplesmente encadeada de inscritos com número de 
inscricao correspondente a esse milhar. A lista se encontra ordenada crescentemente por inscricao */
};
1200
7.5
1000
2000
3000
4000
5000
6000
7000
8000
9000
7555
9.9
9198
8.0
8030
7.5
9100
9.5
6388
9.5
5300
8.5
4012
7.5
3000
8.5
7777
8.6
2444
9.5
3356
9.0
4100
7.5
5434
9.5
5600
9.5
7890
8.5
3555
9.5
1333
8.5
1888
8.5
2789
85
3789
7.5
4231
7.5
5800
8.5
6700
9.0
7905
9.5
8888
8.5
9899
9.0
Escreva a função obtemNotaDeUmInscrito que:
- recebe um vetor de Entrada, ordenado crescentemente por milhar, o número de entradas e um número de inscrição, e 
- retorna a nota do inscrito, se encontrado, ou -1, caso contrário. 
Obs: Para localizar primeiro a lista encadeada adequada, deverá ser considerada a ordenação do vetor de Entrada, sendo implementada e utilizada obrigatoriamente uma função de busca binária. A função de busca binária:
- recebe um vetor de entradas, ordenado crescentemente por milhar, o número de entradas e um milhar a ser procurado,
	- retorna a posição do elemento se encontrado ou -1 caso contrário.
Dica: para saber qual milhar procurar no vetor, basta fazer: milhar procurado = numero de inscricao/1000 *1000
Ao buscar o número de inscrição na lista encadeada deve também levar em consideração a ordenação da lista.
	ALGUMAS FUNÇÕES DE BIBLIOTECAS
	stdio.h:
int scanf (char* formato, ...);
int printf (char* formato, ...);
FILE* fopen (char* nome, char* modo);
int fclose (FILE* fp);
int fscanf (FILE* fp, char* formato, ...);
int fprintf (FILE* fp, char* formato, ...);
int sprintf(char* str, char* formato, ...);
char* fgets(char* str, int size, FILE* fp);
int sscanf(char* str, char* formato, ...);
stdlib.h:
void* malloc (int nbytes);
void free (void* p);
	
	math.h:
double sqrt (double x);
double pow (double x, double exp);
double cos (double radianos);
double sin (double radianos);
string.h:
int strlen (char* s);
int strcmp (char* s, char *t);
char* strcpy (char* destino, char* fonte);
char* strncpy (char* destino, char* fonte, int n);
char* strcat (char* destino, char* fonte);
char* strdup (char* s);void qsort (void *v, int n, int tam, int (*cmp)(const void*, const void*));
void * bsearch(void * info, void * v, int n, int tam, int (*cmp)(const void *, const void *));
NESTA PROVA VOCE PODE USÁ-LAS EM QUALQUER QUESTÃO

Outros materiais