Autor Tópico: Programação Prolog.  (Lida 3878 vezes)

Offline lacerdabh

  • Usuário Ubuntu
  • *
  • Mensagens: 40
    • Ver perfil
    • Adesivos de Parede
Programação Prolog.
« Online: 21 de Maio de 2008, 20:15 »
A partir de um conjunto de números inteiros de 1 a Σ=n , para um dado n, construa um triângulo de números tal que cada número seja formado pela subtração dos dois números que estão imediatamente abaixo dele, por exemplo, para n=4 e n=5 pode-se construir os seguintes triângulos:

   3
  2 5
 7 9 4
8 1 10 6

    5
   9 4
  2 11 7
 10 12 1 8
13 3 15 14 6

Tá muito complicado de fazer, ainda mais que eu não tenho a amnha em prolog, uma das partes que é o somatório eu consegui fazer?

soma(0,0):-!.
soma(0,Res):- Res = 0.
soma(N,Res):- N1 is  N-1,soma(N1,S),Res is S + N.

Alguem tem alguma idéia para esse problema?

Offline ppfb

  • Usuário Ubuntu
  • *
  • Mensagens: 337
    • Ver perfil
Re: Programação Prolog.
« Resposta #1 Online: 21 de Maio de 2008, 21:53 »
isso é trabalho de faculdade?

Offline kakita

  • Usuário Ubuntu
  • *
  • Mensagens: 285
    • Ver perfil
Re: Programação Prolog.
« Resposta #2 Online: 22 de Maio de 2008, 08:40 »
amigo, essa pergunta e esses exemplos estão corectos? vc tem este erro (para n=4 e n=5, devia ser para n=3 e n=5) mas acho que tem mais, eu estou tentando fazer aqui e está dificil
quando vc souber a solução por favor explique aqui

vc só sabe a constante na linha a seguir
9+4 dá 13 e não 11
e para vc ter o 2 (11-9) e o 7 (11-4) precisa do 11, mas como vc obtem o 11 a partir do 9 e do 4??? Acho que não percebi bem o problema
não sei se me fiz entender

Edit: consegui fazer mas mal feito, ele não está fazendo automatico mas talvez este codigo possa ajudar alguem a perceber
Código: [Selecionar]
n = int(raw_input('n='))
s = n-1
t = n+s
y = t-2
z = y+s
 

print n
print s,t
print y,z,z-t

« Última modificação: 22 de Maio de 2008, 09:04 por kakita »

Offline lacerdabh

  • Usuário Ubuntu
  • *
  • Mensagens: 40
    • Ver perfil
    • Adesivos de Parede
Re: Programação Prolog.
« Resposta #3 Online: 22 de Maio de 2008, 10:40 »
Se a Base do meu triangulo fosse essa

[6,5,9,3,2,4]

ficaria assim:

[(6-5),(9-5),(9-3),(3-2),(4-2)] = [1,4,6,1,2]
[1,4,6,1,2] = [(1-4),(6-4),(6-1),(2-1)] = [3,2,5,1]
      .
      .
  3 2 5 1
 1 4 6 1 2
6 5 9 3 2 4

O Numero de cima é sempre formado pela subtração dos dois que estao abaixo dele


Pensei em um solução:

Código: [Selecionar]
anexa([], B, B).
anexa([X|A], B, [X|C]) :- anexa(A, B, C).

tr([]):-!.

tr(X):-
[A|B] = X,           %Pega a lista X e pegar o primeiro elemento e coloca em A
[C|_] = B,           %Pega a lista B e pega a cabeça e coloca em B
AUX is A-C,         %tenho quem criar uma regra para pegar o modulo dessa subtração
anexa(L,AUX,P),   %Vou Anexando AUX a uma outrar lista
tr(B),                 
tr(P),
write(X).

Offline kakita

  • Usuário Ubuntu
  • *
  • Mensagens: 285
    • Ver perfil
Re: Programação Prolog.
« Resposta #4 Online: 22 de Maio de 2008, 13:46 »
Eu percebi como o numero de cima é feito, mas a iideia é fazer os numero de baixo não é ???
mas isso não faz sentido porque assim vc está fazendo a piramide ao contrario e nesse caso o n teria de ser um monte de numeros.

agora, depois de reler o exercicio, estou pensando será que eu estou fazendo o exercicio ao contrario?? Vc tem a base e quer saber o numero de cima ou tem o primeiro numero e quer saber a base??


Offline lacerdabh

  • Usuário Ubuntu
  • *
  • Mensagens: 40
    • Ver perfil
    • Adesivos de Parede
Re: Programação Prolog.
« Resposta #5 Online: 22 de Maio de 2008, 22:34 »
Posso partir da base ou do topo, tanto faz...

Offline kakita

  • Usuário Ubuntu
  • *
  • Mensagens: 285
    • Ver perfil
Re: Programação Prolog.
« Resposta #6 Online: 23 de Maio de 2008, 19:12 »
esse exercicio é interesante, de momento não tenho muito tempo e agora todo o tempo que tenho dedico ao openbox conky e pypanel, mas adoraria saber a solução se poder depois post aqui
força