Elementos de Programação - LMAC, MEBiom 2016/17

Ficha 2 - Enunciado A (1 valor, 10 minutos)

Número:

Nome:

Defina imperativamente em Python uma função intervalos que dado um inteiro positivo n devolva como resultado uma lista de n listas, em que a lista na posição i corresponde à partição do intervalo (0,1) em i+1 intervalos contíguos do mesmo tamanho.

Por exemplo, intervalos(3) deve dar como resultado [[(0,1)],[(0,0.5),(0.5,1)],[(0,0.333),(0.333,0.666),(0.666,1)]].

Neste exercício não pode usar definições por compreensão nem métodos. As únicas operações sobre listas permitidas são: lista vazia ([]), acesso aos elementos da lista por posição (lista[posição]), seccionamento da lista (lista[posição:posição]), concatenação (+) e cálculo do comprimento (len).

In [1]:
def intervalos(n):
    res=[]
    i=1
    while i<=n:
        part=[]
        j=0
        while j<i:
            part=part+[(j/i,(j+1)/i)]
            j=j+1
        res=res+[part]
        i=i+1
    return res

intervalos(3)
Out[1]:
[[(0.0, 1.0)],
 [(0.0, 0.5), (0.5, 1.0)],
 [(0.0, 0.3333333333333333),
  (0.3333333333333333, 0.6666666666666666),
  (0.6666666666666666, 1.0)]]

Alternativamente, usando ciclos for:

In [1]:
def intervalos(n):
    res=[]
    for i in range(1,n+1):
        part=[]
        for j in range(i):
            part+=[(j/i,(j+1)/i)]
        res+=[part]
    return res
    
intervalos(3)
Out[1]:
[[(0.0, 1.0)],
 [(0.0, 0.5), (0.5, 1.0)],
 [(0.0, 0.3333333333333333),
  (0.3333333333333333, 0.6666666666666666),
  (0.6666666666666666, 1.0)]]

Elementos de Programação - LMAC, MEBiom 2016/17

Ficha 2 - Enunciado B (1 valor, 10 minutos)

Número:

Nome:

Defina imperativamente em Python uma função lincol que dada uma matriz m devolva como resultado a submatriz de m formada apenas pelas linhas de índice par e as colunas de índice ímpar (sem esquecer que em Python os índices se contam a partir de zero).

Por exemplo, lincol([[1,2,3,4],[5,6,7,8],[9,0,1,2],[3,4,5,6]]) deve dar como resultado [[2,4],[0,2]].

Neste exercício não pode usar definições por compreensão nem métodos. As únicas operações sobre listas permitidas são: lista vazia ([]), acesso aos elementos da lista por posição (lista[posição]), seccionamento da lista (lista[posição:posição]), concatenação (+) e cálculo do comprimento (len).

In [2]:
def lincol(m):
    res=[]
    i=0
    while i<len(m):
        linha=[]
        j=1
        while j<len(m[0]):
            linha=linha+[m[i][j]]
            j=j+2
        res=res+[linha]
        i=i+2
    return res

lincol([[1,2,3,4],[5,6,7,8],[9,0,1,2],[3,4,5,6]])
Out[2]:
[[2, 4], [0, 2]]

Alternativamente, usando ciclos for:

In [3]:
def lincol(m):
    res=[]
    for i in range(0,len(m),2):
        linha=[]
        for j in range(1,len(m[0]),2):
            linha+=[m[i][j]]
        res+=[linha]
    return res
    
lincol([[1,2,3,4],[5,6,7,8],[9,0,1,2],[3,4,5,6]])
Out[3]:
[[2, 4], [0, 2]]

Elementos de Programação - LMAC, MEBiom 2016/17

Ficha 2 - Enunciado C (1 valor, 10 minutos)

Número:

Nome:

Defina imperativamente em Python uma função passos que dada uma lista w de inteiros positivos devolva como resultado uma lista de listas, em que a lista na posição i corresponde à sequência crescente de valores no intervalo (0,1) obtida a partir de zero por incrementos de 1/w[i].

Por exemplo, passos([4,1,2]) deve dar como resultado [[0,0.25,0.5,0.75,1],[0,1],[0,0.5,1]].

Neste exercício não pode usar definições por compreensão nem métodos. As únicas operações sobre listas permitidas são: lista vazia ([]), acesso aos elementos da lista por posição (lista[posição]), seccionamento da lista (lista[posição:posição]), concatenação (+) e cálculo do comprimento (len).

In [4]:
def passos(w):
    res=[]
    i=0
    while i<len(w):
        seq=[0]
        j=1
        while j<=w[i]:
            seq=seq+[j/w[i]]
            j=j+1
        res=res+[seq]
        i=i+1
    return res

passos([4,1,2])
Out[4]:
[[0, 0.25, 0.5, 0.75, 1.0], [0, 1.0], [0, 0.5, 1.0]]

Alternativamente, usando ciclos for:

In [5]:
def passos(w):
    res=[]
    for n in w:
        seq=[0]
        for j in range(1,n+1):
            seq+=[j/n]
        res+=[seq]
    return res
    
passos([4,1,2])
Out[5]:
[[0, 0.25, 0.5, 0.75, 1.0], [0, 1.0], [0, 0.5, 1.0]]

Elementos de Programação - LMAC, MEBiom 2016/17

Ficha 2 - Enunciado D (1 valor, 10 minutos)

Número:

Nome:

Defina imperativamente em Python uma função linzero que dada uma matriz m devolva como resultado a submatriz de m formada apenas pelas linhas cuja soma não é nula.

Por exemplo, linzero([[1,2,3,4],[5,-6,-7,8],[0,0,0,0],[3,4,5,6]]) deve dar como resultado [[1,2,3,4],[3,4,5,6]].

Neste exercício não pode usar definições por compreensão nem métodos. As únicas operações sobre listas permitidas são: lista vazia ([]), acesso aos elementos da lista por posição (lista[posição]), seccionamento da lista (lista[posição:posição]), concatenação (+) e cálculo do comprimento (len).

In [6]:
def linzero(m):
    res=[]
    i=0
    while i<len(m):
        s=0
        j=0
        while j<len(m[0]):
            s=s+m[i][j]
            j=j+1
        if s!=0:
            res=res+[m[i]]
        i=i+1
    return res

linzero([[1,2,3,4],[5,-6,-7,8],[0,0,0,0],[3,4,5,6]])
Out[6]:
[[1, 2, 3, 4], [3, 4, 5, 6]]

Alternativamente, usando ciclos for:

In [7]:
def linzero(m):
    res=[]
    for linha in m:
        s=0
        for j in range(len(linha)):
            s+=linha[j]
        if s!=0:
            res+=[linha]
    return res
    
linzero([[1,2,3,4],[5,-6,-7,8],[0,0,0,0],[3,4,5,6]])
Out[7]:
[[1, 2, 3, 4], [3, 4, 5, 6]]