07. Programação em F

Propaganda
Computação e Programação 2008/09
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.
2.11 Defina a função Maxcol que recebe como argumento uma matriz e devolve um vector de
dimensão igual ao número de colunas, que em cada posição i devolve o elemento máximo da
coluna i.
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.
Download