domingo, 15 de novembro de 2009

Problema 6.13

Este problema vai ajudar a exercitar alguns aspectos. Desde logo o modo como guardamos os dados num dicionário. Mas também a possibilidade de usar o módulo cTurtle para visualizar os dados. Segue-se o programa.

01.import cTurtle
02.     
03.def le_ficheiro(nome):
04.    f_in = open(nome,'r')
05.    dados = []
06.    linha =  f_in.readline()
07.    while linha !='' and linha != '\n':
08.        pos = linha[:-1].split()
09.        dados.append((int(pos[0]), int(pos[1])))
10.        linha = f_in.readline()
11.         
12.    f_in.close()
13.    return dados
14. 
15. 
16.def analisa_frequencias(dados):
17.    frequencias={}
18.    for par in dados:
19.        for i in range(2):
20.            frequencias[par[i]]=frequencias.get(par[i],0)+1
21.    return frequencias
22. 
23.             
24.def desenha_coluna(tartaruga, numero, altura):
25.    x=(numero-1)*20 # para começar no inicio do eixo
26.    y=altura *10
27.     
28.    # escrever número no eixo
29.    tartaruga.up()
30.    tartaruga.goto(x+5,-20)
31.    tartaruga.down()
32.    tartaruga.write(str(numero), move=False, align='left', font=('Arial', 18, 'normal'))
33.     
34.    #desenhar coluna
35.    tartaruga.up()
36.    tartaruga.goto(x+2,0)
37.    tartaruga.down()
38.    tartaruga.goto(x+2,y)
39.    tartaruga.goto(x+18,y)
40.    tartaruga.goto(x+18,0)
41.     
42.    # escrever número da frequência
43.    tartaruga.up()
44.    tartaruga.goto(x+5,y+5)
45.    tartaruga.down()
46.    tartaruga.write(str(altura), move=False, align='left', font=('Arial', 10, 'normal'))
47.     
48. 
49.def visualiza_frequencias(tartaruga,frequencias):
50.    # desenhar eixo dos x
51.    tartaruga.up()
52.    tartaruga.goto(0,0)
53.    tartaruga.down()
54.    tartaruga.goto(20*6,0)
55.     
56.    # desenhar frequências
57.    for i in range(1,7):
58.        desenha_coluna(tartaruga,i,frequencias.get(i))
59.         
60.    tartaruga.hideturtle()
61.     
62.     
63.def main613(ficheiro):
64.       # Leitura dos dados
65.        pares = le_ficheiro(ficheiro)
66.        # Análise de frequências
67.        frequencias=analisa_frequencias(pares)
68.        # Visualização de frequências
69.        tartaruga= cTurtle.Turtle()
70.        visualiza_frequencias(tartaruga,frequencias)
71.        tartaruga.exitOnClick()



A leitura de dados a partir de um ficheiro já é uma questão resolvida em problemas anteriores. Segue-se depois a contagem do número de ocorrências. Usamos um dicionário em que a chave é o número e o valor é igual ao número de vezes que ocorreu. A visualização é desdobrada em duas operações: uma, permite desenhar uma coluna e é usada por outra definição (visualiza_frequências) que percorre com um ciclo for os 6 números, imprimindo a coluna correspondente. Note-se o uso do comando de escrita de texto na tela e as suas opções (write).

Só falta transcrever o programa, executar e ... visualizar!

Sem comentários:

Enviar um comentário