Pratica 3. - Departamento de Informática

Propaganda
Programação II
Aula Pratica 3: programação recursiva e apontadores
Marco Giunti
Departamento de Informática, UBI
Exercício 1 - Parte A
Palindromos
Implementar uma função que verifica se um array e palindromo
1,2,3,..,9, 99, 505, 999, 2002, 123454321, 16345554361 são
números palindromos
a[1]=1, a[2]=2, a[3]=3, a[4 ]=4...,
//function returns 1 if a[] is a palindrome, 0 otherwise
int ispalindrome(char a[], int n);
Marco Giunti
Programação II
Exercício 1 - Parte B
Palindromos
Implementar uma função que transforma um array em palindromo
1,2,3,..,9, 99, 505, 999, 2002, 12345421, 1234555421 são
números palindromos
a[1]=1, a[2]=2, a[3]=3, a[4]=4...,
//function transforms a[] in a array palindrome
int setpalindrome(char a[], int n);
Marco Giunti
Programação II
Exercício 2 - Parte A
Números naturais
Considere que 0 é o primeiro natural. Defina funções recursivas
(normal e terminal) em C para efectuar os seguintes cálculos.
2
Dado um natural n, multiplicar os naturais de 1 a n.
3
Dado um natural par n, somar os naturais pares até n.
4
Dados naturais k e n, com k ≤ n, multiplicar os naturais de k
a n.
5
Multiplicar os 10 primeiros naturais ímpares.
6
Somar os 10 primeiros naturais pares.
7
Dado um natural n, calcular os factoriais dos n primeiros
naturais e escrever os resultados obtidos.
Marco Giunti
Programação II
Exercício 2 - Parte B
Números naturais
7 Dado um natural n, calcular o n-ésimo número de Fibonacci.
Fn = Fn−1 + Fn−2 dato F0 = 0, F1 = 1
8
Dado um natural n, calcular o n-ésimo número de Catalan
C (n) =
n
Y
2n!
n+k
=
(n + 1)!n!
k
n≥0
k=2
9
10
Dados dois naturais n e m, calcular nm .
Dados dois naturais n e m (com n ≤ m), calcular o número de
divisores de n até m.
Marco Giunti
Programação II
Exercício - Parte C
Função de Ackermann
11 Dados dois naturais n e m, calcular o valor
Ackermann no ponto (n, m).

if
 n+1
A(m − 1, 1)
if
A(m, n) =

A(m − 1, A(m, n − 1)) if
da função de
m=0
m > 0 and n = 0
m > 0 and n > 0
Pergunta: que seja possível calcular A(m, n) sem recursão?
Marco Giunti
Programação II
Exercício 3
Apontadores
Fazem um programa que
1
procura o valor mais alto de um array de inteiros
2
atribui este valor as posições do array que contem os primeiros
dois números mais baixos
3
faz o undo da penúltima atribuição se as soma dos valores e
major de um dado limite
Marco Giunti
Programação II
Exercício 3
Apontadores
Stub: assinatura da função e array inicial:
#define L 100
int normalize(int a[], int dim, int max);
int main(void){
int i,b[10]={7,9,11,1,2,5,2,25,14,9};
// ... add lines if needed
i=normalize(b, ???, L);
// ... add lines if needed, e.g. print the array a/o its sum...
return 0;
}
Notam: a função trabalha com qualquer array de inteiros e
qualquer limite
Marco Giunti
Programação II
Download