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