Você está na página 1de 2

Programação @ Informática Web

UC 14710 - Ficha 6
Universidade da Beira Interior, 2022/2023
Modularidade / Funções.

Sempre que nesta ficha seja pedido para criar/escrever/fazer um programa, significa que queremos que
seja implementado um programa em linguagem Python.

1. Crie uma função para somar todos os elementos numéricos, devolvendo essa soma.

2. Crie uma função que recebe uma lista e devolve a posição em que o número máximo
ocorre na lista. Se não existir nenhum número na lista, a função deve devolver -1.

3. Crie uma função que faz o que as duas anteriores fazem e também calcula o mínimo dos
valores numéricos da lista. Esta nova função deve denominar-se opera e, além da lista,
deve receber um segundo parâmetro denominado ação que determinará o que é que a
função opera deve realizar. Por omissão queremos que ação seja “soma”.

4. Vamos criar uma função para realizar a tarefa do exercício 7, da Ficha 4. A função deve
chamar-se “moldura” e receber como parâmetro uma string, precisamente a string que
queremos emoldurar. Esta é uma função com retorno vazio e portanto o cabeçalho da
função deve ser definido assim def moldura(s:string) -> None.

5. Escreva uma função que recebe um número e testa se ele é um número primo. O
cabeçalho da função é def isprime(p:int) -> bool.

6. Crie a função showprimes(a:int, b:int) -> None. Que escreve no output todos os
números primos que estão compreendidos entre a e b, assumindo que a≤b. Esta função
deve necessariamente usar a função isprime do exercício anterior.

7. Por vezes queremos determinar qual é o primeiro número que ocorre, imediatamente após
um determinado número, por exemplo na decomposição de um número em factores
primos. Vamos assim fazer a função nextprime(n:int)->int. Por exemplo,
nextprime(6)->7, nextprime(7)->7, nextprime(13)->17. Esta função deve
obrigatoriamente invocar a função imprime, feita anteriormente.

8. Escreva um programa que pede ao utilizador um número inteiro positivo e depois mostra
os seus fatores primos. Por exemplo para 60 = 2*2*3*5, os fatores primos seriam 2, 3, 5.

9. Considere a seguinte função:

def randMatrix(m=9, n=9) -> list:


A = m*[0]
for i in range(m):
A[i] = n*[0]
for j in range(n):
A[i][j] = randint(1,9)
return A

Crie um programa para testar esta função de modo a verificar o que é que ela faz.










10. Escreva um programa para gerar uma matriz com a função randMatrix do exercício
anterior e depois escrevê-la num quadro como o do exercício 12 da Folha Prática 5.

11. Em vez de um programa, queremos agora a função “tabuleiro(m=9, n=9) -> None” que
escreve um tabuleiro com números aleatórios entre 1 e 9. Implemente esta função e
teste-a invocando-a na secção “__main__” do programa.

12. Escreva a função swapLines(ia:int, ib:int, A:list) -> list, que troca os elementos
da linha ia com os da linha ib, na matriz A. Crie também uma função (swapColumns)
equivalente para trocar os elementos de duas colunas de uma matriz.

13. Crie a função protoSudoku() -> list que vai gerar uma matriz 9x9 com cada linha igual
à sequência de números de 1 a 9.

14. Agora, usando as funções dos exercícios 9 e 10 consegue implementar um algoritmo


simples para gerar um tabuleiro de Sudoku. Começa por inicializar o tabuleiro (matriz)
com a função protoSudoku() e depois aplica aleatoriamente a troca de linhas e colunas da
matriz original até um certo número de vezes. No final, obterá uma permutação da tabela
original sendo esta uma solução válida de um tabuleiro de Sudoku.

15. Faça uma função para gerar uma árvore de natal de caracteres, como a exemplificada em
baixo. A função recebe como parâmetros a largura da base a altura e largura do tronco:

*
**
****
******
********
**********
************
###
###

neste exemplo temos base=12, altura=2 e largura=3. Teste a função num programa que
vai pedindo em ciclo os três parâmetros ao utilizador e escrevendo a árvore respetiva,
invocando a função criada. O ciclo termina quando o utilizador inserir uma base < 4.

Bom Trabalho

Você também pode gostar