(a) Escreva uma função que recebe 2 inteiros ini
e fim
, e uma lista L
, tal que 0 <= ini < fim <= len(L)
e calcula a soma dos elementos L[i]
, para ini <= i < fim
.
(b) Usando a função anterior, escreva um programa que leia n>0
e uma sequência com n
números reais, e determina um segmento de soma máxima. Um segmento é uma subsequência de números consecutivos.
Exemplo: Na sequência
5, 2, -2, -7,
3, 14, 10, -3, 9,
-6, 4, 1
,
a soma do segmento de soma máxima é 33.
def main():
'''Programa que lê n > 0 e uma sequência com n
números reais e calcula a maior soma de
um de seus segmentos.
'''
n = int(input("Digite n:"))
# leia a sequência
lista = []
for i in range(n):
num = float(input("Digite um número: "))
lista.append(num)
soma_max = lista[0]
for tam in range(1,n+1):
# verifique a soma dos segmentos de comprimento tam
for i in range(n-tam):
soma_lista = soma(lista,i,i+tam)
if soma_lista > soma_max:
soma_max = soma_lista
# escreva a resposta
print("Maior soma de um segmento =", soma_max)
#---------------------------------------------
def soma(lista,ini,fim):
''' (list,int,int) -> float
Recebe em `lista` uma lista de números e índices
`ini` e `fim` da lista e retorna a soma
lista[ini]+lista[ini+1]+...+lista[fim-1]
Pré-condicao: a função supõe que
0 <= ini < fim <= len(lista)
'''
soma_lista = 0
for i in range(ini,fim):
soma_lista += lista[i]
return soma_lista
#---------------------------------------------
# inicio do programa
main()
Matrizes são estruturas bidimensionais (tabelas) com m
linhas por n
colunas muito importantes na matemática, utilizadas por exemplo para a resolução de sistemas de equações e transformações lineares.
Em Python, uma matriz pode ser representada como uma lista de listas, onde um elemento dessa lista contém uma linha da matriz, que por sua vez corresponde a uma lista com os elementos da coluna da matriz. Veja um exemplo abaixo:
linha0 = [1,10,100,1000]
linha1 = [2,20,200,2000]
linha2 = [3,30,300,3000]
matriz1 = [linha0,linha1,linha2] # A matriz é uma lista de listas
print(matriz1)
matriz2 = [[1,10,100,1000],[2,20,200,2000],[3,30,300,3000]] # Outra forma de criar a matriz
print(matriz2)
matriz1 == matriz2
Para acessar uma posição específica de uma matriz, usamos uma indexação dupla, ou seja, precisamos indicar o índice da linha onde a posição desejada se encontra e depois o índice da coluna (ou seja, o índice da posição desejada dentro dessa linha). Veja o exemplo a seguir:
matriz3 = [[1,10,100,1000],[2,20,200,2000],[3,30,300,3000]] # Outra forma de criar a matriz
print("O valor da posição na segunda linha da matriz, na quarta coluna, é:", matriz3[1][3])
Considere o código abaixo como uma primeira tentativa de criar a matriz A:
linha_com_zeros = [0]*5
A = [ linha_com_zeros ] * 5
print(A)
A[1][1] = 2
print(A)
Essa primeira tentativa de criar a matriz A não foi bem sucedida. Em lugar de criar uma lista contendo 5 listas independentes de tamanho 5, acabamos criando uma lista contendo 5 referências para uma mesma lista. Com isso, ao alterar uma posição de uma das linhas de A, também alteramos a mesma posição de todas as demais linhas de A. Certamente, esse não é o modo correto de criar e iniciar uma matriz.
Note que o que foi feito acima equivale ao trecho de código (mais curto, mas igualmente semanticamente incorreto) abaixo:
A = [ [0] * 5 ] * 5
print(A)
A[1][1] = 2
print(A)
O código a seguir mostra a forma correta de se criar A. Note que precisamos usamos um laço (no caso do exemplo, o for
) para criar 5 listas contendo 5 elementos cada, sendo que cada uma delas foi adicionada à lista A, correspondendo a uma linha das linhas da matriz A.
A = []
for i in range(5):
A.append( [0] * 5 )
A[1][1] = 2
print(A)