Computação e Programação 2006/07 Aula Prática 7 Programação em F 1. Programação imperativa sobre vectores 1.1 Defina a função MembroQ que dado um número N e um vector V de números devolve verdadeiro se N pertence a V e falso caso contrário. 1.2 Defina a função Ocorrencias que dado um número N e um vector V conta quantas vezes N ocorre em V. 1.3 Defina a função PosMax que dado um vector V devolve a soma dos índices das posições onde o máximo de V ocorre. 1.4 Defina uma função que dado um vector V e um número N devolve um triplo [A,B,C] tal que A é o número de elementos de V maiores que N, B é o número de elementos de V iguais a N e C é o número de elementos menores que N. 1.5 Defina a função Junta que recebe dois vectores V e W e devolve um vector com os elementos de V seguidos dos elementos de W. 1.6 Defina uma função CarPrimos que recebe um vector V e devolve um vector com 1 nas posições onde V contém um número primo e 0 nas restantes. 1.7 Defina a função Compmsuccresc que recebe como argumento um vector de inteiros e devolve o comprimento da maior sucessão estritamente crecente que ocorre no vector. 2. Programação imperativa sobre matrizes 2.1 Defina a função Mediamatriz que recebe como argumento uma matriz e devolve a média dos seus elementos. 2.2 Defina uma função IgualmatrizQ que recebe como argumento duas matrizes de igual dimensão e devolve verdadeiro se ambas as matrizes são iguais elemento a elemento e falso caso contrário. 2.3 Defina a função MenormatrizQ que recebe como argumento duas matrizes M1 e M2 de igual dimensão e devolve verdadeiro se todos os elementos da primeira matriz são menores que os elementos na mesma posição da segunda matriz, i.e., M1<M2 se para todo i,j M1(i,j)<M2(i,j). 2.4 Defina a função Pimatriz que recebe como argumento duas matrizes M1 e M2 de igual dimensão e calcula a soma dos M1(i,j)*M2(i,j) para todo i e todo o j. 2.5 Defina a função Matrizdiagonal que recebe como argumento um vector V de comprimento L e devolve a matriz LxL em que na diagonal principal ocorrem os elementos de V e nas restantes posições ocorrem zeros. 2.6 Defina a função Colunasnm que recebe como argumento uma matriz NxM e devolve um vector de dimensão M em que na i-ésima posição ocorre 1 se na i-ésima coluna ocorre um elemento maior que N*M e 0 caso contrário. 2.7 Defina a função Linhapar que recebe como argumento um vector de inteiros e devolve verdadeiro se a soma dos elementos é par e falso caso contrário. Generalize esta função de modo a receber como argumento uma matriz e a devolver um vector em que na i-ésima posição ocorre 1 se a linha satisfizer Linhapar e 0 caso contrário. 2.8 Defina a função Triangsupinf que recebe como argumento uma matriz quadrada e devolve 1 se esta for triangular superior, 2 se for triangular inferior, 3 se for triangular superior e inferior (ou seja, se for matriz diagonal) e 0 caso contrário. 2.9 Defina a função ProdM que recebe como argumentos duas matrizes e calcula o respectivo produto. Sugestão: Comece por definir a função recorrendo a uma função auxiliar para calcular o produto interno de uma linha por uma coluna. Em seguida, desenvolva a função sem recorrer a funções auxiliares. 2.10 Defina uma subrotina Gauss que recebe como argumento uma matriz quadrada e devolve a matriz resultante da eliminação de Gauss. Pretende-se que a subrotina actue directamente sobre a matriz argumento. 3. Programação recursiva 3.1 Defina a função SomaNatR que recebe como argumento um número natural N e devolve a soma de todos os naturais até N. 3.2 Defina a função MdcR que recebe como argumento dois números naturais e devolve o seu máximo divisor comum, calculado através do algoritmo de Euclides. 3.3 Defina a função ContaperfeitosR que recebe como argumento um número natural N e que devolve o número de números perfeitos até N. 3.4 Defina a função PrimAlgR que recebe como argumento um número natural e devolve o primeiro algarismo na sua representação decimal. 3.5 Defina a função TresNMaisUmR que recebe como argumento um número natural e devolve o número de iterações da função x if (x par) then x/2 else 3x+1 necessárias para atingir o valor 1. 3.6 Defina uma função MembroQR que recebe como argumento um vector e um número e devolve verdadeiro se o número ocorre no vector e falso caso contrário. 3.7 Defina uma função OcorrenciasR que dado um vector e um número conta quantas vezes o número ocorre no vector. 3.8 Defina uma função Prefixo que recebe como argumento dois vectores U e V e devolve verdadeiro se U é prefixo de V e falso caso contrário. 3.9 Defina uma subrotina ProdEscalar que recebe como argumento um vector V e um escalar X e calcula o produto escalar de V por X, alterando directamente V. 3.10 Defina a função MediamatrizR que recebe como argumento uma matriz e devolve a média dos seus elementos. 3.11 Defina a função Pesquisabin que recebe como argumento um vector V de números ordenado de forma crescente e um elemento X, e que retorna verdadeiro se X pertence a V e falso caso contrário.