Pages: [1]   Go Down
Print
Author Topic: Esercizio su successioni di Fibonacci PICT  (Read 1484 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
rondey
Matricola
*
Offline Offline

Posts: 74


« on: 30-04-2016, 08:56:37 »

Code:
run (

def fib [n:Int r:!Int] =
    ( new br:^Bool
        ( {- calculate n=0 -}
            ==![n 0 (rchan br)]
            | {- is n=0? -}
            br?b =
            if b then
                    {- yes: return 1 as result -}
                    r!1
                 else
                    ( {- calculate n=1 -}
                        ==![n 1 (rchan br)]
                        | {- is n=1? -}
                        br?b =
                        if b then
                            {- yes: return 1 as result -}
                            r!1
                        else
                            {- no... -}
                            (
                                new nr:^Int
                                new fr:^Int
                                ( {- subtract one from n -}
                                      -![n 1 (rchan nr)]
                                    | -![n 2 (rchan nr)]
                                    | nr?nMinus1 = fib![nMinus1 fr]
                                    | nr?nMinus2 = fib![nMinus2 fr]
                                    | fr?f1 = fr?f2 = +![f1 f2 (rchan r)]
                                )
                            )
                    )
        )
    )
   
fib![5 printi])
Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 2.799



WWW
« Reply #1 on: 30-04-2016, 14:03:10 »

Fantastico.

Logged
Ocelot92
Apprendista Forumista
**
Offline Offline

Posts: 301



« Reply #2 on: 01-05-2016, 18:15:20 »

C'è un errore. Se provo con 5 mi da 8 e non 5.
Tip: Controlla i casi base Wink.

Io sto ultimando al mia versione, appena finisco la metto qua.

UPDATE: ecco la mia versione non testata. Al compilatore non piace come scrivo ed è più di 30 min che cerco di risolvere un parse error. Vado a ricaricare la pazienza.

Code:
def fib [n:Int out:!Int] =
(new br:^Bool
<<![n 3 (rchan br)]
| br?b=(
if b then
out!1
else
(new aux:^Int
(new nMinus1r:^Int
(-![n 1 (rchan nMinus1r)])
| (nMinus1r?nMinus1 = fib![nMinus1 aux])
)
|
(new nMinus2r:^Int
(-![n 1 (rchan nMinus2r)])
| (nMinus2r?nMinus2 = fib![nMinus2 aux])
)
| (new sumr:!Int
(aux?fibNminusX = (aux?fibNminusY = (+![fibNminusX fibNminusY sumr])))
| (sumr?sum = out!sum)
)
)
)
)

« Last Edit: 04-05-2016, 22:56:18 by Ocelot92 » Logged

I'm happy to tell you all that...
((λf.λx.f(f(x))) (λy.y^2)) (5)  = 5^4

"Si ma dillo che bisogna cliccare APPLY per crearle le partizioni…" - cit. Utente dopo aver seguito un How-To... .-.
rondey
Matricola
*
Offline Offline

Posts: 74


« Reply #3 on: 02-05-2016, 07:37:40 »

Tip: Controlla i casi base Wink

Ecco appunto......

Quote from: Programming in the Pi-Calculus link=http://www.dipmat.unict.it/~barba/FOND-LING-PROG-DISTR/PROGRAMMI-TESTI/READING-MATERIAL/TutorialPICT.pdf



fib(0) = 1
fib(1) = 1
fib(n) = fib(n − 1) + fib(n − 2) when n > 1

Secondo queste indicazioni, la mia successione di Fibonacci è corretta. Se prendi le indicazioni di Wikipedia allora hai ragione tu. Non so chi in assoluto abbia ragione, ma almeno relativamente parlando il mio esercizio non ha errori  [Emoticon] Asd
« Last Edit: 02-05-2016, 07:40:37 by rondey » Logged
Ocelot92
Apprendista Forumista
**
Offline Offline

Posts: 301



« Reply #4 on: 02-05-2016, 07:42:15 »

Tip: Controlla i casi base Wink

Ecco appunto......

Quote from: Programming in the Pi-Calculus link=http://www.dipmat.unict.it/~barba/FOND-LING-PROG-DISTR/PROGRAMMI-TESTI/READING-MATERIAL/TutorialPICT.pdf



fib(0) = 1
fib(1) = 1
fib(n) = fib(n − 1) + fib(n − 2) when n > 1

Secondo queste indicazioni, la mia successione di Fibonacci è corretta. Se prendi le indicazioni di Wikipedia allora hai ragione tu. Non so chi in assoluto abbia ragione, ma almeno relativamente parlando il mio esercizio non ha errori  [Emoticon] Asd

http://php.bubble.ro/fibonacci/
fb(5) = 5
Io ho usato questo come test... cioè avevo in mente di usarlo ma poi il compilatore si è indisposto.

Mah, strano che sul libro includono 0 in N stranamente...
« Last Edit: 02-05-2016, 07:54:51 by Ocelot92 » Logged

I'm happy to tell you all that...
((λf.λx.f(f(x))) (λy.y^2)) (5)  = 5^4

"Si ma dillo che bisogna cliccare APPLY per crearle le partizioni…" - cit. Utente dopo aver seguito un How-To... .-.
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 2.799



WWW
« Reply #5 on: 02-05-2016, 10:45:20 »

La successione di Fibonacci e', giustamente, quella indicata anche da wikipedia:
1 1 2 3 5 8 ecc.
Il vostro programma deve calcolare l'n-esimo elemento della successione.
Quindi, se iniziate con 0 ed 1 come casi base, e' ovvio che il primo elemento sara' fib(0),
il secondo fib(1) e l'ennesimo fib(n-1)
Se invece usate 1 e 2 per i casi base, l'ennesimo elemento sara' calcolato da fib(n).
Vi siete persi in un bicchiere d'acqua ( e pure piccolo...    )

FB



Tip: Controlla i casi base Wink

Ecco appunto......

Quote from: Programming in the Pi-Calculus link=http://www.dipmat.unict.it/~barba/FOND-LING-PROG-DISTR/PROGRAMMI-TESTI/READING-MATERIAL/TutorialPICT.pdf



fib(0) = 1
fib(1) = 1
fib(n) = fib(n − 1) + fib(n − 2) when n > 1

Secondo queste indicazioni, la mia successione di Fibonacci è corretta. Se prendi le indicazioni di Wikipedia allora hai ragione tu. Non so chi in assoluto abbia ragione, ma almeno relativamente parlando il mio esercizio non ha errori  [Emoticon] Asd

http://php.bubble.ro/fibonacci/
fb(5) = 5
Io ho usato questo come test... cioè avevo in mente di usarlo ma poi il compilatore si è indisposto.

Mah, strano che sul libro includono 0 in N stranamente...
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.450


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #6 on: 04-05-2016, 15:10:57 »

Quote
Mah, strano che sul libro includono 0 in N stranamente...
Mica tanto stanno... 0 ∈ ℕ
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 2.799



WWW
« Reply #7 on: 04-05-2016, 16:22:09 »

Quote
Mah, strano che sul libro includono 0 in N stranamente...
Mica tanto stanno... 0 ∈ ℕ

Dipende.
Per alcuni i naturali partono da 1, non da 0.

Se cerchi su google "does zero belong to natural numbers?",
troverai infatti numerose risposte.
Anche wikipedia (per quanto non sia avviamente la bibbia matematica...)
accenna alla questione.

Salutoni
FB

Logged
Ocelot92
Apprendista Forumista
**
Offline Offline

Posts: 301



« Reply #8 on: 04-05-2016, 22:46:12 »

Finally... dopo aver capito che su pict le new dei canali devono essere sempre wrappate tra parentesi (grazie rodney) e che quando i processi che possono vedere il canale creato a loro volta devono essere wrappati da un'altra coppia di parentesi:
Code:
def fib [n:Int out:!Int] =
(new br:^Bool
(
<<![n 3 (rchan br)]
|
br?b=
if b then
out!1
else
(new aux:^Int
new sumr:^Int
(
(new nMinus1r:^Int
(
-![n 1 (rchan nMinus1r)]
|
nMinus1r?nMinus1 = fib![nMinus1 aux]
)
)
|
(new nMinus2r:^Int
(
-![n 2 (rchan nMinus2r)]
|
nMinus2r?nMinus2 = fib![nMinus2 aux]
)
)
|

aux?fibNminusX = aux?fibNminusY = +![fibNminusX fibNminusY (rchan out)]

)
)
)
)


run fib![5 printi]

8

UPDATE2: ci sono degli errori. Ci sto lavorando. Risolto, semplicemente mentre spostavo pezzi per far quadrare le parentesi ho fatto un cut 'n paste dove ho dimenticato di mettere 2 invece che 1 quindi invece di togliere 2 in fib(n-2) ritoglievo 1.
« Last Edit: 05-05-2016, 08:31:23 by Ocelot92 » Logged

I'm happy to tell you all that...
((λf.λx.f(f(x))) (λy.y^2)) (5)  = 5^4

"Si ma dillo che bisogna cliccare APPLY per crearle le partizioni…" - cit. Utente dopo aver seguito un How-To... .-.
Pages: [1]   Go Up
Print
Jump to: