DCC003: Algoritmos e Estruturas de Dados I
2013/1

Exercícios 9 -- Gabarito

Exercício 1. Implemente um programa para resolver sistemas lineares da forma:

ax + by = u
cx + dy = v,

dados a, b, c, d, u e v.

Basta calcular os valores de x e y em função de a, b, u, c, d e v. Em particular: x = (v - du/b)/(c - da/b) e y = (v - cu/a)/(d - cb/a). Como a questão não especificou, não é preciso tratar sistemas sem solução ou com infinitas soluções.

Exercício 2. Fazem parte da declaração de uma função int fatorial(int N) { ... } (marque todos que aplicarem):

  1. bloco de comandos
  2. tipo de retorno
  3. alocação de memória
  4. lista de parâmetros
  5. registro de ativação
  6. nome

Alocação de memória e registro de ativação não fazem parte da declaração de uma função. Eles existem apenas quando o programa está em execução.

Exercício 3. Implemente uma função que processa um arranjo de ponteiros para struct atleta e retorne a altura média dos atletas e a idade do atleta mais novo. Considere que a estrutura atleta foi definida como:

struct atleta {
	char nome[80];
	double altura;
	int idade;
};
	

Sua função deve ter o seguinte cabeçalho:

void estatisticas(struct atleta **v, int n, double *altura_media, int *menor_idade) {
	int i;
	*altura_media = 0;
	*menor_idade = INT_MAX;
	for(i = 0; i < n; i++) {
		if(v[i]->idade < *menor_idade) {
			*menor_idade = idade;
		}
		*altura_media += v[i]->altura;
	}
	*altura_media /= n;
}
	

Desafio. Na Prática 8 nós vimos o conceito de pilha. Uma pilha aceita as operações de empilhar (colocar um elemento no topo da pilha) e desempilhar (retirar e retornar o elemento no topo da pilha. Uma fila é uma estrutura de dados similar que suporta as operações de enfileirar (colocar um elemento no final da fila) e desenfileirar (retirar e retornar o elemento no começo da fila). A diferença é que na pilha o último elemento a entrar é o primeiro a sair, e na fila o primeiro elemento a entrar é o primeiro a sair.

Se você precisar usar um sistema de computação que só possua pilhas, descreva como você pode implementar uma fila eficiente usando duas pilhas.