Fórum: Programação Multiparadigma

Projeto 1

 
Picture of Artur Miguel Dias
Projeto 1
by Artur Miguel Dias - terça, 16 outubro 2012, 5:50
 

Dúvidas e discussões sobre o projeto 1.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - quarta, 17 outubro 2012, 6:32
 

 - Na definição circular e directa da matrix temos de usar a 1a linha e depois definir apartir dai ou temos também que definir a 1a linha da forma directa e circular?

Se nada mais fosse dito, em rigor a primeira linha também teria de ser gerada das duas formas diferentes, em cada um dos casos.

Mas eu só estou interessado na geração das sucessivas linhas. Por isso a forma como a primeira linha é gerada não importa. Não vale mesmo a pena o esforço de gerar a 1ª linha de duas formas diferentes.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - quarta, 17 outubro 2012, 6:35
 

- É considerada definição circular se aplicar um map à estrutura que estou a definir e a função que passo é a que constrói a linha seguinte a essa?

Uma definição circular duma entidade X é uma definição que usa efetivamente X para definir o próprio X. Tudo o que se enquadre nisto é circular e está tudo dito.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - quinta, 18 outubro 2012, 7:26
 

Uma vez que só e possivel adicionar ou multiplicar matrizes com mesmos nº de colunas e nº de linhas, pergunto se temos de preparar as operações para a eventualidade de receberem como argumentos 2 matrizes que não reunam as condiçoes enunciadas.

Adicionei ao enunciado um esclarecimento. Ver o Changelog do enunciado.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - quinta, 18 outubro 2012, 8:11
 

Uma solução certa tem garantidamente 100%.

Não. Uma solução certa, se for razoável, provavelmente só tem 80% garantidos. Eu reservo 20% para questões de qualidade, simplicidade, elegância (e eficiência, se for caso disso). O bom uso das funções de biblioteca também conta.

Picture of João Rato
Re: Projeto 1 (Find revisto)
by João Rato - sexta, 19 outubro 2012, 12:17
 

Bom dia, professor.

No que toca à definição revista do find, que considera que se deve também funcionar com matrizes finitas, mantém-se a frase:

"if z does not occur in the matrix, then the method will fail to return a result" ?

No caso de uma matriz ser finita, é possível retornar um valor inválido, do tipo (-2,-2), para indicar que de facto não foi encontrada uma solução. Ou é preferível que o comportamento da função seja igual para os dois casos, isto é, entre em ciclo e não consiga devolver nenhum resultado, tal como está na especificação?

Obrigado.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - sábado, 20 outubro 2012, 6:25
 

No caso de uma matriz ser finita, é possível retornar um valor inválido...

Tem toda a razão. O enunciado só considerava o caso infinito. Alterei ligeiramente o enunciado. Veja o changelog. Obrigado.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - sábado, 20 outubro 2012, 6:36
 

Não existe  nenhuma penalização em usar métodos do scala para definir os nossos metodos ou constantes ? 

Pelo contrário. Na aula teórica 04 está escrito: "IMPORTANT: You must get used to the high-order methods an use them in our programs as much as possible". Se ficar mais simples usando as funções de biblioteca (como geralmente fica) e isso não for feito, é melhor apresentar dar uma razão em comentário: por exemplo, a solução ficar com complexidade temporal pior (por exemplo ficar exponencial ou quadratica em vez de linear).

Picture of Ricardo Manuel Paula Martins
Re: Projeto 1
by Ricardo Manuel Paula Martins - sábado, 20 outubro 2012, 4:42
 

Boa tarde, professor,

Devemos considerar que os elementos das matrizes têm os índices a começar em 1 (isto é, o 1º elemento de uma matriz A é o elemento a1,1), como é habitual em Matemática, ou 0?

Olhando para o enunciado da conversão/função make, parece-me implícito que a indexação começa em 0, mas está omisso no resto do enunciado e achei melhor confirmar.

Obrigado pela atenção.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - domingo, 21 outubro 2012, 12:24
 

Sim, a indexação começa em zero, como é habitual em C, Java e Scala. Fez bem perguntar.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - domingo, 21 outubro 2012, 2:34
 

Como fazer um find que também funcione para o caso finito?

Quando me falaram que havia uma certa ambiguidade do enunciado relativamente ao caso finito (permitido pela estrutura de dados Matrix), percebi que a função 'find' iria ficar mais desafiante. Decidi que uma versão elegante do find que funcione só para o caso infinito teria pelo menos 70% da cotação do find.

Posso dizer que a minha solução para o problema geral (finito + infinito) tem 4 linhas, incluindo esta linha que define uma função auxiliar:

    def defined(m: Matrix, i: Int, j: Int) = m.isDefinedAt(i) && m(i).isDefinedAt(j)

Picture of Miguel Carvalho Pires
Re: Projeto 1
by Miguel Carvalho Pires - domingo, 21 outubro 2012, 6:03
 

O que vais ser mais valorizado, eficiência ou elegância? Consigo visualizar uma função bastante pequena de apenas 4 linhas para o Find e que use essa função "defined" que referiu, contudo é bastante ineficiente quando comparada com alternativas ligeiramente mais complexas.

Picture of José Cunha
Re: Projeto 1
by José Cunha - segunda, 22 outubro 2012, 1:54
 

Boa tarde professor,

então e as matrizes finitas são quadradas? é que senão vou ter de alterar toda a minha solução...

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - segunda, 22 outubro 2012, 4:56
 

O que vais ser mais valorizado, eficiência ou elegância?

Deve ter reparado que na mensagem anterior eu coloquei eficiência entre parêntesis...

Na ausência de requisitos especiais, a legibilidade é sempre o critério número 1. Só perante duas solução igualmente legíveis se usa a complexidade para desempatar.

Mas, e se a tal solução muito legível for exponencial ou cúbica, o que fazer? Nesse caso vale a pena fazer um grande esforço por encontrar um solução com menor complexidade.

E se a solução legível for apenas quadrática? Então depende: Se existir outra solução bastante simples, mesmo à mão, de complexidade inferior, então não há desculpa para não a usar. Mas se a melhor solução de complexidade inferior for muito complicada, estamos numa zona cinzenta e nesse aceito as duas em pé de igualdade, desde que a solução complicada venha com uma justificação.

De qualquer forma, os algoritmos sobre Streams tendem a ter complexidade inferior comparando com os mesmos algoritmos sobre Lists, em virtude da avaliação lazy.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - segunda, 22 outubro 2012, 4:55
 

então e as matrizes finitas são quadradas?

Bem as matrizes finitas são matrizes. Esta é a primeira vez que vejo a ser usada a palavra quadrada neste contexto.

Picture of José Cunha
Re: Projeto 1
by José Cunha - segunda, 22 outubro 2012, 5:05
 

Boa tarde professor,

quando eu falei em matrizes quadradas era no sentido de por exemplo:

[01

10]

mas entranto já consegui resolver.

Picture of Artur Miguel Dias
Re: Projeto 1
by Artur Miguel Dias - segunda, 22 outubro 2012, 6:43
 

À minha maneira, eu estava só a manifestar a minha surpresa por alguém assumir que as matrizes eram quadradas, apesar disso não estar escrito em sítio nenhum.

Mas, ainda bem que conseguiu adaptar o seu programa!