UFCG/CEEI/DSC
Disciplina: INTRODUÇÃO À PROGRAMAÇÃO - Turma 02
Período 2006.2
Prof. Roberto M. de Faria
2ª Lista de
Exercícios
1) O
acesso ao Laboratório de Processamento de Sinais do DEE/UFCG é controlado a
partir de uma porta automática. Para abrir a porta referido laboratório, é
necessário o uso de uma senha, composta por 4 dígitos, no formato Y = d1d2d3C,
Assim, se d1 = 5,
d2 = 3, d3 = 2 e C =
2) Elabore, utilizando a linguagem de programação C, um programa que implementa a “Cifra de deslocamento (Cifra de César Generalizada)”.
O programa deverá ser elaborado de acordo com as
seguintes especificações:
·
Alfabeto utilizado: Romano (a,
b, c, d, ...z) , 26 letras;
·
Opções para o usuário: cifrar
mensagem e decifrar mensagem;
·
Informações fornecidas pelo
usuário: a sentença a ser criptografada (ou descriptografada) e o valor do
deslocamento (chave criptográfica);
·
Cada caractere (ou dígito) da
informação fornecida deverá ser substituído por um símbolo (*) ao ser digitado;
·
Uso de duas funções: a primeira
para criptografar a mensagem e a segunda para descriptografar a mensagem;
·
Informação fornecida ao usuário:
sentença criptografada (ou descriptografada).
3) Fazer um programa que mostre o MDC e o MMC entre dois números, implementando duas funções com o seguinte protótipo:
·
int MDC(int,int);
·
int MMC(int, int);
4) Implemente as funções da questão anterior de modo recursivo.
5) Implementar a função RAIZQUADRADA. Esta função deve:
·
Receber um número do tipo float como
parâmetro.
·
Retornar a raiz quadrada do
número recebido, de tal maneira que esta raiz, quando elevada ao quadrado,
apresente um erro máximo de 0.01% em relação ao valor do parâmetro.
6) Implementar a função double POWER (double base, doublé expoente), que retorna o valor de base elevado a expoente. Dicas:
a. Transformar o expoente em uma razão de inteiros (multiplicando ambos por 10 até o numerador ficar inteiro).
b. Simplificar a razão de inteiros com sucessivas divisões de numerador e denominador.
c. Calcular basenumerador
d. (basenumerador)1/denominador . Utilizar a função de raiz anteriormente implementada.
e. Se Calcular basenumerador estourar a faixa dos doublé, dividir numerador e denominador por 10 e repetir.
f. Se numerador for negativo, resultado é 1/resultado.
7) Faça uma função que recebe, por parâmetro, a hora de inicio e a hora de término de um jogo, ambas subdivididas em 2 valores distintos: horas e minutos. A função deve retornar, a duração do jogo em minutos, considerando que o tempo máximo de duração de um jogo é de 24 horas e que o jogo pode começar em um dia e terminar no outro.
8) Implementar a função EXP com as seguintes características:
i. Baseexp = base.baseexp-1 , exp > 0
ii. Baseexp = 1, exp ==0
9) Considere uma partida de futebol entre duas equipes A x B, cujo placar final é m x n, em que m e n são números de gols marcados por A e B, respectivamente. Escreva um algoritmo recursivo que imprima todas as possíveis sucessões de gols marcados. Por exemplo, para um placar final de 3 x 1, as possíveis sucessões de gols são “AAAB”, “AABA”, “ABAA” e “BAAA”.
10) Torre de Hanói: considerando 3 torres, o objetivo é transferir 3 discos que estão na torre A para a torre C, usando uma torre B como auxiliar. Somente o último disco de cima de uma pilha pode ser deslocado para outra, e um disco maior nunca pode ser colocado sobre um menor. Implementar uma função recursiva que mostra a seqüência de movimentos para resolver o problema da Torre de Hanói.
O – O – O