PDF 60 KB

Propaganda
MC 102 – Algoritmos e Programação de Computadores
TURMAS I e J
Prof. Jefersson Alex dos Santos
Lista de Exercícios III (Data de entrega: 24/06/2009)
Atenção:
A lista deverá ser entregue em formato digital (por email) em código C. O nome do arquivo
de cada exercício deve ser o número do exercício (exemplos: 00.c, 01.c, 03.c, etc);
Todos os alunos devem entregar 6 exercícios (o exercício 00 , e mais 5 que serão
indicados por ele).
Coloque os arquivos em um arquivo compactado com o seu RA (<seu ra>.zip). Exemplo:
067925.zip
Envie o email com o assunto [MC102] Lista 4
Verifique se tudo foi enviado corretamente: trabalhos fora do prazo não serão aceitos!
00 – Crie um programa que mostre quais exercícios um aluno deverá fazer nessa lista. O
programa deverá ler um RA (inteiro) e retornar o número de 5 exercícios a serem feitos.
O programa deverá implementar uma função recursiva de modo a preencher um vetor V de
números inteiros com 5 posições tal que V[i]=(V[i-1]+ra[i])%4, em que ra[i] é o i-ésimo dígito do RA
(i=0 é o dígito das unidades) e V[0]=ra[0]. Por exemplo, se RA= 078572, V={2, 1, 2, 2, 1}
Então, para saber o n-ésimo exercício a ser feito utilize o seguinte cálculo: 4*n-3+V[n].
Para os números do exemplo, os exercícios a serem feitos seriam: 03, 06, 11, 15, 18.
01 – Faça um programa que contêm uma função recursiva que calcula o valor de m a partir de um
vetor de números reais V com tamanho N e um valor λ . Assuma 0 < λ < 1 .
N −1
m = ∑ λ( N −i )Vt
t =0
02 – Faça um programa que contêm uma função recursiva que calcula a média aritmética dos
elementos de um vetor de números reais V com tamanho N.
03 - Faça um programa que contêm uma função recursiva que determina o maior e o menor
elemento de um vetor de inteiros V de tamanho N.
04 - Faça um programa que contêm uma função recursiva que imprime uma string com as letras
em ordem invertida.
Entrada:
Bom dia
Saída:
aid moB
05– Dados três vetores ordenados, implemente uma função que intercala e retorne o vetor
resultante ordenado. Implemente uma função merge3_sort, que faça ordenação em um vetor
utilizando a sua função de intercalação (sugestão: se baseie no algoritmo do merge-sort original).
06– Considere a seguinte estrutura:
typedef struct _pessoa_ {
unsigned int RA;
float Nota;
} Aluno;
Faça uma função que, dado um valor inteiro N positivo, aloque dinâmicamente um vetor de Aluno,
leia do teclado os N pares de valores (RA, Nota) e retorne o vetor alocado. Imprima, ao final do
programa, a lista dos alunos ordenada por nota final (use algum algoritmo recursivo de ordenação
dado em aula).
07- Faça um programa que leia n nomes e ordene-os pelo tamanho utilizando o algoritmo mergesort. No final, o algoritmo deve mostrar todos os nomes ordenados.
08– Crie um programa que dado uma string, coloque as letras dela em ordem crescente pelo
algoritmo quick-sort.
Instruções para os exercícios 09 a 12:
Os exercícios 09 a 12 requerem que sejam implementados cadastros de variados tipos e
que os programas sejam capazes de armazenar ou recuperar os dados cadastrados com o uso de
arquivos. A implementação deverá ser feita por meio de 2 programas diferentes. O primeiro
deverá conter as seguintes funções:
le_dados_do_teclado(): recebe do teclado os dados requeridos pelo cadastro e os
armazena em um arquivo em formato de texto. O número de elementos cadastrados não deve ser
armazenado no arquivo.
escreve_dados_na_tela() : lê o conjunto de dados armazenados em um arquivo de
texto e lista as informações do cadastro na tela do computador.
Dica: Utilize as funções fscanf, fprintf e feof.
O segundo programa deverá conter as seguintes funções:
le_dados_do_teclado_bin() :recebe do teclado os dados requeridos pelo cadastro e
os armazena em um arquivo em formato binário (utilize registros). O número de elementos
cadastrados não deve ser armazenado no arquivo.
escreve_dados_na_tela_bin() : lê o conjunto de dados armazenados em um arquivo
binário e lista as informações do cadastro na tela do computador.
escreve_dados_n_esimo_bin(int n) : mostra na tela do computador os dados do nésimo elemento do cadastro armazenado no arquivo binário. Caso a posição não exista o
programa deverá escrever uma mensagem de erro na tela.
Dica: Utilize as funções fread, fwrite, feof e fseek.
09 – Com o uso das funções descritas previamente, faça um programa que faz o cadastro dos
produtos de um supermercado por código, preço e nome. Utilize se necessário:
struct produto{
int codigo;
float preco;
char nome[100];
};
10 – Com o uso das funções descritas previamente, faça um programa que faz o cadastro dos
alunos de uma classe por RA, nome e nota da primeira prova. Utilize se necessário:
struct aluno{
int RA;
char nome[100];
float p1;
};
11 – Com o uso das funções descritas previamente, faça um programa que faz o cadastro dos
atletas de uma equipe por nome, peso e altura. Utilize se necessário:
struct atleta{
char nome[100];
float peso;
float altura;
};
12 – Com o uso das funções descritas previamente, faça um programa que faz o cadastro dos
times de futebol por nome, ano de fundação e número de torcedores. Utilize se necessário:
struct time{
char nome[100];
int fundacao
int torcida;
};
13– Considere uma estrutura chamada Ponto (composta por valores x e y) e uma estrutura
chamada LINHA (composta por uma lista ligada de pontos). Faça um programa que leia do
teclado uma sequência de pontos enquanto o usuário não digitar os valores -99 e -99 para x e y, e
calcule o comprimento dessa linha. Obs: para isso você deverá criar uma função que calcula a
distância entre dois pontos.
14 - Considere uma estrutura chamada STRING composta por uma lista ligada de caracteres
(char). Crie:
Uma função que leia uma STRING digitada pelo usuário (dica: utilize a função getchar()
para ler caractere por caractere até o usuário digitar ENTER).
Uma função que imprime uma STRING na tela.
15 – Considere uma estrutura chamada Ponto (composta por valores x e y) e uma estrutura
chamada POLIGONO (composta por uma lista ligada de pontos). Faça uma função que leia um
poligono do teclado e outra que dado um polígono, classifique-o de acordo com o número de
pontos que ele contém: triângulo, quadrilátero, pentágono, hexágono, heptágono, octógono,
eneágono, decágono ou outro para mais de 10 lados.
16 – Implemente um programa que, dado um texto, armazene as palavras desse texto em uma
lista ligada (ou seja, uma FRASE é uma lista ligada de palavras). Crie:
Uma função que converta uma cadeia de caracteres em uma lista de palavras;
Uma função que, dada uma FRASE, retorne o número de palavras que ela contem.
Uma função que, dada uma FRASE, imprima todo o seu conteúdo na tela.
OBS: Considere apenas letras e números como entrada.
17 – Pilhas são listas de elementos onde o elemento removido é sempre aquele
que foi inserido mais recentemente. Escreva duas funcões que manipulam
(utilizando listas ligadas):
ae
pilhas
void insere_pilha(int n): insere o elemento n no topo da pilha;
int remove_pilha(): remove um elemento do topo da pilha e retorna -1 se a lista estiver
vazia.
Texto para os exercícios 18, 19 e 20:
Lista ligada de vetores. Embora pareca eficiente, alocar um elemento de memória
para cada inteiro pode tornar um programa extremamente lento, devido a forma como o acesso
a memória é feito internamente no computador.
Uma solução é criar listas ligadas de vetores. Quando precisamos inserir um elemento,
verificamos se o vetor do topo da lista ligada ainda possui espaco. Se possuir, inserimos o
elemento nesse espaco, caso contrário, alocamos um novo na memória e inserimos o novo
elemento no início do vetor alocado.
A remocão utiliza um procedimento análogo. Para remover um elemento, removemos o elemento
do vetor. Se ele ficar vazio, desalo camos o vetor e rearranjamos os ponteiros de forma a criar
novamente a lista ligada. Marcamos as posicões não utilizadas com -1, para diferenciar de
posic˜es que contenham valores reais.
18 – Escreva duas funcões de manipulacão de listas ligadas: insere_elemento, que insere o
elemento n na primeira posicão vaga da lista ligada de vetores, e remove_elemento, que remove o
primeiro elemento da lista ligada cujo valor seja igual a n, retornando 1, ou 0 caso esse elemento
não exista na lista ligada. Crie também uma função tamanho que retorna quantos elementos uma
lista possui.
19 – Escreva a funcão compacta_lista, que pega uma lista ligada de vetores e remove
todos
os espacos não utilizados, substituindo por elementos válidos, e reduzindo o espaço total que a
lista ocupa.
20 – Escreva a funcão ordena_lista, que pega uma lista ligada de vetores previamente
compactada e ordena os seus elementos. Utilize o algoritmo de ordenacão que achar mais
conveniente (sugestão: merge_sort).
Download