• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

BlodyGrl

Exame

9 mensagens neste tópico

Bem, o que eu gostava era que ajudassem a avaliar a nota que vou ter na parte prática do exame de Estruturas de Dados que fiz hoje.

Deixo-vos aqui as perguntas e respostas que fiz, além das minhas opiniões obre aquilo que fiz. Agradecia que me corrigissem os que estivessem mal (ou pelo menos me ajudassem a perceber onde estão os erros).E se quiserem podem sempre dar uma avaliação ao que fiz(tipo uma nota :P).

1-Dando uma String crie uma função de nome count(s) que retorne um dicionário que indique quais os caracteres inseridos na String e o número de vezes que se repetem. Exemplo.: Se a String for "aab" o dicionário será {'a':2,'b':1}.

Julgo que este programa tem erros mas visto não ter estudado dicionários pode-se dizer que está "razoável".

def count(s):
   dic={}
   for i in range(len(s)):
       if dic.has_key[s[i]]:
           dic[s[i]]=+1
       else:
           dic[s[i]]=1
   return dic

2-Crie uma função all(x,y) que retorne todos os valores de x e todos os valores de y mas não os elementos que pertencem a ambos os conjuntos.

Acho que esta função está certa. :)

def all(x,y):
   return set(x)^set(y)

3a)-Crie uma função que dado um vector v (em forma de lista) e um valor k nos dê o valor da seguinte iteração:

(Σ(i=1) i*xi)%k

Acho que o professor não vai descontar muito porque o meu erro foi matemático e não de programação. Pensei que i=1 significava que ele queria que o somatório fosse de um em um elemento e não que começasse na posição 1.

def hash(v,k):
   a=0
   for i in range(len(v)):
       a=a+i*v
[i]    return a

3-b)Indique dois elementos que colidam.

Acho que esta está certa porque eu perguntei à professora e ela disse que sim.

Para k=2, os vectores [2,1] e [4,1] colidem.

4-Crie a classe Deque com os seguintes elementos:deque(),addFront(item),addRear(item),removeFront(),removeRear(),size().

Acho que a classe está certa. :)

class Deque:
   def __init__(self):
       self.D=[None]
   def addFront(self,item):
       self.D=[item]+self.D
   def addRear(self,item):
       self.D.append(item)
   def removeFront(self):
       self.D.pop(1)
   def removeRear(self):
       self.D.pop()
   def size(self):
       return len(self.D)

5-Sabendo que para se obter a bissecção de uma função então se houver um a e um b cujo sinal de f(a) e f(b) são diferentes então a função vai ter pelo menos um zero. Define uma função, que dado um a e um b, tenha as seguintes propriedades:

m=(a+b)/2

se f(m)=0 ou m-a=0 então retorna o valor de m

se f(m) e f(a) tiverem o mesmo sinal então a=m

se f(m) e f(b) tiverem o mesmo sinal então b=m

Não tenho certezas quanto a esta mas acho que a grande maioria está certa. O que me deixa em dúvida é aquele f(qualquer coisa).

def bisseccao(a,b):
   m=(a+b)/2
   if m==0 | m-a==0:
       return m
   elif funcao(m)>0 & funcao(a)>0 | funcao(m)<0 & funcao(a)<0:
       return biseccao(m,b)
  elif funcao(m)>0 & funcao(b)>0 | funcao(m)<0 & funcao(b)<0:
       return biseccao(a,m)

6-Dado um grafo:

V={A,B,C,D,E,F}

A={(A,B),(A,C),(B,A),(B,C),(B,D),(C,E),(D,C),(E,D),(E,F),(F,E)}.

grafo={'A':B,C;'B':A,C,D;'C':E;'D':C;'E': D,F;'F':E}

a)Represente o gráfico.

Acho que realmente o digrafo está certo.

grafond9.jpg

b)Indique todas as conecções do digrafo e diga se este é digrafo fortemente conexo.

Peço desculpa se não forem estes termos mas realmente não me lembro e o professor não deixou trazer o enunciado. :( Além disso não sei se o exercício está certo porque nunca tinha ouvido falar nestes termos mas deduzi que fosse isto que pedia.

{(A,B),(C,D),(D,E),(D,F),(E,F)}

O digrafo não é completamente conexo porque, por exemplo, consegue-se chegar de A a C mas não se consegue chegar de C a A.

c)Crie um programa, que com a ajuda da pesquisa em largura, encontre o caminho mais curto entre os vértices dados.

Esta não fiz. :-[ Sei que tem a ver com algoritmo de Dijktra mas não sabia o programa todo de cor e não estava a conseguir deduzi-lo a partir do pouco que sabia por isso acabei por não o fazer.

Agradecida a todos. E obrigado pela ajuda que me deram a estudar para o exame.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou-te responder ao 1o porque também estou sem grande tempo :) Depois dou uma vista de olhos aos outros!

1) Tens algumas coisas trocadas aí :) O raciocinio está perfeito, o problema é que te distraiste.. alem de teres complicado a coisa. Na tua resolução, vai-te dar erro porque tens a linha:

dic.has_key[s[i]]:

Devia ser:

dic.has_key(s[i]): # Nota os parentesis curvos de fora, porque é um método que estás a chamar. 
#Da maneira como tinhas estavas a aceder tipo fatias a uma lista, que te iria dar erro..

Depois, complicaste ao pores o range(len(s)). Bastava-te tirares partido das capacidadas de iteração de python fazendo assim:

def count(string):
        dict = {}
        for i in string:
                if dict.has_key(i):
                        dict[i] += 1
                else:
                        dict[i] = 1
        return dict

string = "anna"

print count(string)

joao@jUbuntu:~$ python exame.py 
{'a': 2, 'n': 2}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Autch... Nem me acredito que fui confundir os parêntesis...  :wallbash:

Quanto ao range pensei que uma String era uma lista de caracteres pelo que ia percorrer letra a letra...

Mas tirando está certo. Está melhor do que aquilo que pensei. xD Ainda bem. :)

Quanto ao 2 era muito mau que estivesse mal, se bem que eu tenha errado a reunião no 1º exame.  :)

O 4 também era muito mau porque devo ter feito para aí 20 árvores diferentes nos últimos 2 dias. Se não as aprendia estava muito mal.

Quanto ao 6 já tentei pôr a imagem mas sem resultado. O código da imagem está no post mas nem a imagem nem o código aparecem. xD

Quanto aos outros vou esperando resposta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu podes percorrer a string da maneira que puseste :) Só que dá mais jeito fazeres como eu te mostrei :) E também funciona para listas, dicionários, etc.. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então a única coisa mal naquele exercício são os parêntesis? Vou ter desconto só por causa de uns parêntesis?  :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tirei 16  :cheesygrin:  ;)

Pena que com as aulas a nota tenha descido para 13 -_-' mas com a vossa ajuda já tirei um boa nota. :) Ainda por cima se formos a ver que reprovei a Introdução à Programação (Python ainda mais fácil do que este ;)). Mas  gostava de ver o resto dos erros para poder melhor a minha forma de programar, vocês ajudam-me?  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora