Programação Prolog.

Iniciado por lacerdabh, 21 de Maio de 2008, 20:15

tópico anterior - próximo tópico

lacerdabh

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?
bemColar | Adesivos de Parede

ppfb

isso é trabalho de faculdade?

kakita

#2
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
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



lacerdabh

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:

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).

bemColar | Adesivos de Parede

kakita

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??


lacerdabh

Posso partir da base ou do topo, tanto faz...
bemColar | Adesivos de Parede

kakita

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