Paradigmas de Programação II
2006.03.06

Objectivos:

O objectivo desta ficha é treinar o aluno na utilização de estruturas de controlo em C.

Para atingir esse fim, o aluno irá desenvolver pequenos programas em C.
Exercícios:
  1. Problemas de cálculo numérico
  2. Tudo ao contrário!
  3. Sequência de Fibonacci
  4. Conversões de representações de informação numérica


Problemas de cálculo numérico

(a) Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê um inteiro e escreve no écran os seus divisores.

(b) Desenvolva o algoritmo, e posteriormente codifique-o em C como uma função. A sua função deverá ter dois argumentos inteiros e produzir um resultado inteiro que é o menor múltiplo comum dos argumentos recebidos. Posteriormente codifique um programa principal (main()) que utiliza esta função para cálculo do menor múltiplo comum de dois números fornecidos pelo utilizador.

(c) Desenvolva o algoritmo, e posteriormente codifique-o em C como uma função. A sua função deverá ter um argumento inteiros e produzir um resultado do tipo booleano (o docente irá desenvolver uma pequena biblioteca de booleanos: bool.h). O resultado será verdadeiro (TRUE) se o argumento passado fôr primo e falso (FALSE) caso contrário. Posteriormente codifique um programa principal (main()) que utiliza esta função para verificar quem é primo numa sequência de inteiros introduzidos pelo utilizador (terminada por 0).



Tudo ao contrário!


Foste transferido para uma nova escola.

Nessa escola, a professora e matemática gostava muito de pôr os alunos a pensar e tentava que a mais simples tarefa fosse algo em que o raciocínio tivesse que intervir.

Uma das medidas que ela implementou foi a de utilizar os números inteiros invertidos. Por exemplo, o 12 seria 21 e o 1821 seria 1281.

Ora, os alunos locais já estão habituados a lidar com os inteiros daquela maneira e até fazem as operações de adição e subtracção com os inteiros naquela forma. No entanto, para ti, que acabaste de chegar à escola esta tarefa não é tão simples. Assim, resolveste criar um programa em computador que fizesse três coisas:

(a) dado um número calcula o seu inverso (o valor inteiro correcto)

(b) dados dois números na forma invertida calcula a sua soma e devolve o resultado na mesma forma invertida

(c) dados dois números na forma invertida calcula a sua subtracção e devolve o resultado na mesma forma invertida


Sugestão: especifica uma função para cada um dos pontos acima.


Sequência de Fibonacci


Codifica um programa que gere os primeiros 20 números de Fibonacci. Os números de Fibonacci são definidos recursivamente da seguinte forma:
   fib(0) = 1
   fib(1) = 1
   fib(n) = fib(n-1) + fib(n-2)   para n>=2


Conversões de representações de informação numérica

(a) Depois de discutires com o docente o algoritmo das divisões sucessivas para a conversão de números decimais em números binários, codifica-o num programa em C.

(b) Depois de teres resolvido o problema anterior, tenta resolver o problema inverso. Nota que os números binários são representados numa string com os carácteres 0 e 1.

(c) Pensa agora em como converter um número binário num número hexadecimal. Cria um programa em C para realizar esta tarefa.

(d) Cria uma função genérica de conversão que permita converter um valor numérico em qualquer base entre 2 e 10 para o valor correspondente numa base diferente mas no mesmo domínio, entre 2 e 10.