UFCG/CEEI/DSC

Disciplina: INTRODUÇÃO À PROGRAMAÇÃO - Turma 02

Período 2006.2

Prof. Roberto M. de Faria

 

2ª Lista de Exercícios

 

Data limite para entrega: 21/03/2007.
A entrega será em disquete.

 

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, em que C é o dígito de controle da senha (e.g, se Y = 5329, então d1 = 5, d2 = 3 d3 = 2 e C = 9). O dígito C da senha é uma forma de segurança que impede que pessoas não autorizadas entrem na sala do laboratório. Caso uma pessoa não autorizada consiga digitar uma senha, ela é testada para verificar se é válida. O dígito C é calculado da seguinte forma:

 

 

Assim, se d1 = 5, d2 = 3, d3 = 2 e C = 9, a senha é válida e a porta será aberta. Se a senha digitada for Y = 7206, a senha é inválida e a porta permanece fechada. Escreva um programa que leia o número Y = d1d2d3C (digitado de uma única vez) e informe se a senha é válida ou não.

 

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:

    1. Recebe um valor de base e um valor de expoente como parâmetros do tipo unsigned int.
    2. Recebe o endereço de uma variável, do tipo unsigned int, em cujo conteúdo será armazenado o resultado de baseexpoente.
    3. Retorna 1 se foi bem sucedida e 0 se a exponenciação não pôde ser calculada devido a estouro.
    4. Utiliza a característica recursiva da exponenciação:

                                                               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