• Nenhum resultado encontrado

Resolução do exame de Computadores e Programação da licenciatura em Engenharia Biomédica

N/A
N/A
Protected

Academic year: 2021

Share "Resolução do exame de Computadores e Programação da licenciatura em Engenharia Biomédica"

Copied!
7
0
0

Texto

(1)

Resolução do exame de Computadores e Programação

da licenciatura em Engenharia Biomédica

(2)

Solução da questão 1

# Importa modulos necessarios import sys

import string import copy #

# Funcao para ler uma imagem #

def le_imagem():

# Primeiro pede nome

n_fich=raw_input("Ficheiro com imagem ? ") # Inicializa lista imagem=[] # Abre imagem f_imagem=open(n_fich,'r') # Le linhas imagem_ascii=f_imagem.readlines() # Fecha ficheiro f_imagem.close

# Converte dados para numeros imagem_int=[] for l in range(len(imagem_ascii)): linha = string.split(imagem_ascii[l]) linha_int=map(string.atoi,linha) imagem_int.append(linha_int) # Obtem dimensoes linhas=len(imagem_int) colunas=len(imagem_int[0])

# Verifica se todas as linhas tem o mesmo numero de elementos for l in range(linhas):

if len(imagem_int[l]) != colunas:

print "Existem linhas com numero de elementos diferentes." sys.exit

# Testa paridade de linhas e colunas if(linhas%2!=0 or colunas%2!=0):

(3)

print "Numero de linhas ou colunas nao e multiplo de 2." sys.exit

# Devolve imagem return imagem_int #

# Funcao para testar dimensoes # def testa_dim(i1,i2,i3,i4): l1=len(i1) l2=len(i2) l3=len(i3) l4=len(i4) c1=len(i1[0]) c2=len(i2[0]) c3=len(i3[0]) c4=len(i4[0])

return(l1==l2 and l2==l3 and l3==l4 and c1==c2 and c2==c3 and c3==c4) #

# Funcao para criar imagem mosaico #

def cria_mosaico(i1,i2,i3,i4): # Determina dimensoes linhas=len(i1)

colunas=len(i1[0])

# Cria mosaico por copia de i1 mosaico=copy.deepcopy(i1)

for l in range(linhas/2): for c in range(colunas/2): # Canto esquerdo superior

mosaico[l][c]=(i1[l*2][c*2]+i1[l*2][c*2+1]+i1[l*2+1][c*2]+i1[l*2+1][c*2+1])/4 # Canto direito superior

mosaico[l][c+colunas/2]=(i2[l*2][c*2]+i2[l*2][c*2+1]+i2[l*2+1][c*2]+i2[l*2+1][c*2+1])/4 # Canto esquerdo inferior

mosaico[l+linhas/2][c]=(i3[l*2][c*2]+i3[l*2][c*2+1]+i3[l*2+1][c*2]+i3[l*2+1][c*2+1])/4 # Canto direito inferior

(4)

# Devolve nova imagem return mosaico

#

# Funcao para gravar imagem # def grava_imagem(nome_fich,imag): # Abre ficheiro fich=open(nome_fich,'w') # Grava informacao for l in range(len(imag)): for c in range(len(imag[0]): fich.write(str(imag[l][c])) fich.write(' ') fich.write('\n') # Fecha ficheiro fich.close # # Programa principal #

# Le quatro imagens originais imagem1=le_imagem()

imagem2=le_imagem() imagem3=le_imagem() imagem4=le_imagem()

# Testa coerencia de dimensoes

if(testa_dim(imagem1,imagem2,imagem3,imagem4)==False):

print "Erro : imagens fonte nao tem as mesmas dimensoes." sys.exit

# Cria mosaico

mosaico=cria_mosaico(imagem1,imagem2,imagem3,imagem4) # Guarda mosaico

saida=raw_input("Nome do ficheiro mosaico ? ") grava_imagem(saida,mosaico)

(5)

Conteúdo de ficheiros com imagens de teste e resultado

Imagem 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Imagem 3

5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6

Mosaico Resultante

1 1 1 1 3 3 3 3 1 1 1 1 3 3 3 3 2 2 2 2 4 4 4 4 2 2 2 2 4 4 4 4 5 5 5 5 7 7 7 7 5 5 5 5 7 7 7 7 6 6 6 6 8 8 8 8 6 6 6 6 8 8 8 8

Imagem 2

3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

Imagem 4

7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8

(6)

Solução da questão 2

# alinea a) def LeBases(nomeFich): lis = [] f = open(nomeFich, 'r') linha = f.readline() while linha != '':

if (linha[0] !='A' and linha[0] !='C' and linha[0] !='G' and linha[0] !='T'): f.close()

return -1

lis += [linha[0]] # De cada linha lida do ficheiro so guarda o primeiro caracter (o seguinte e o '\n') linha = f.readline()

f.close() return lis

# alinea b)

fich = raw_input('Por favor introduza o nome do ficheiro a abrir:\n') listaBases = LeBases(fich) ATT = 0 TAT = 0 GCAA = 0 encontrouSeq = 0 anteriorBase3='' anteriorBase2='' anteriorBase1='' actualBase=''

for base in listaBases:

anteriorBase3 = anteriorBase2 #desliza uma base para a direita na sequencia anteriorBase2 = anteriorBase1 #desliza uma base para a direita na sequencia anteriorBase1 = actualBase #desliza uma base para a direita na sequencia actualBase = base

if (encontrouSeq > 0):

encontrouSeq -= 1 #salta 3 ou 2 bases para a direita ate que encontrouSeq seja de novo zero continue

if (anteriorBase2 == 'A' and anteriorBase1 == 'T' and actualBase == 'T'): ATT += 1 #encontrou uma sequencia ATT

encontrouSeq = 2 #esta variavel e' usada para saltar as 2 proximas bases (que ainda fazem parte da sequencia ATT actual)

continue

(7)

if (anteriorBase2 == 'T' and anteriorBase1 == 'A' and actualBase == 'T'): TAT += 1 #encontrou uma sequencia TAT

encontrouSeq = 2 #esta variavel e' usada para saltar as 2 proximas bases (que ainda fazem parte da sequencia TAT actual)

continue

if (anteriorBase3 == 'G' and anteriorBase2 == 'C' and anteriorBase1 == 'A' and actualBase == 'A'): GCAA += 1 #encontrou uma sequencia GCAA

encontrouSeq = 3 #esta variavel e' usada para saltar as 3 proximas bases (que ainda fazem parte da sequencia GCAA actual)

continue print "ATT: " + ATT * '*' print "TAT: " + TAT * '*' print "GCAA: " + GCAA * '*' #alinea c)

f = open('Sequencias.txt', 'a')

f.write('Quantidade de sequencias detectadas:\n\n') f.write(str(ATT) + ' ATT\n')

f.write(str(TAT) + ' TAT\n') f.write(str(GCAA) + ' GCAA\n\n')

f.write('Nao foram detectadas mais sequencias.') f.close()

Referências

Documentos relacionados

DAIANA COSTA OLIVEIRA (JATAÍ) KATIA CRISTINA LIMA OLIVEIRA LEMOS (RIO VERDE) ELIENE ALVES BORGES SANTOS (ITUMBIARA) SOLANGE DA SILVA SANTOS FERREIRA (ITAPIRAPUÃ) JOAO GERALDO

DESCONTO EM CARTÃO 20 % € 1, 96 Acumule € 0,39 DESCONTO EM CARTÃO 20 % Lâminas Descartáveis MY LABEL Oscilante Lubrificante Emb.:

Licenciatura e mestrado em Engenharia Eletrotécnica e de Computadores, área científica de Sistemas de Energia, pela Faculdade de Engenharia da Universidade do Porto. Doutoramento

O objetivo deste estudo foi de estabelecer o perfil epidemiológico e tratamento instituído nos pacientes acometidos por infecções odontogênicas atendidos no Hospital

t Für wiederaufladbare alkaline Batterien kein Ni-Cad oder Ni-MH Batterieaufladegerät verwenden.. t Bitte verwenden Sie die für Batterien

Workshop de Dança – Lina Frazão Galeria 3 14h às 16h Renascimento de Natal Vão Central 19h Festival Novadança Conversando com o artista Giovane Aguiar Teatro I 21h 20 –

O mencionado Decreto-Lei nº 7/2015, de 13 de janeiro, veio instituir, a partir de 1 de julho de 2015, uma tributação em sede de Imposto do Selo, correspondente a 0,0125% da

Se, por um lado, a norma dispôs expressamente como proceder quando optado por aplicar apenas uma causa de aumento ou diminuição, por outro, não o fez de forma expressa