mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-24 01:51:38 +00:00
Merge pull request #1572 from Chris54721/patch-1
[brainfuck/it] Fixed typos and syntax errors
This commit is contained in:
commit
2f680301d5
@ -1,75 +1,72 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
language: brainfuck
|
language: brainfuck
|
||||||
contributors:
|
contributors:
|
||||||
- ["Prajit Ramachandran", "http://prajitr.github.io/"]
|
- ["Prajit Ramachandran", "http://prajitr.github.io/"]
|
||||||
- ["Mathias Bynens", "http://mathiasbynens.be/"]
|
- ["Mathias Bynens", "http://mathiasbynens.be/"]
|
||||||
translators:
|
translators:
|
||||||
- ["Ivan Sala", "http://slavni96.github.io/"]
|
- ["Ivan Sala", "http://slavni96.github.io/"]
|
||||||
|
- ["Christian Grasso", "http://chris54721.net"]
|
||||||
lang: it-it
|
lang: it-it
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Brainfuck è un linguaggio di programmazione estremamente minimale,
|
Brainfuck è un linguaggio di programmazione
|
||||||
ma è ingrado di rappresentare completamente una macchina di turnig,
|
[Turing equivalente](https://it.wikipedia.org/wiki/Turing_equivalenza)
|
||||||
e sfrutta solo 8 caratteri.
|
estremamente minimale, composto da solo 8 comandi.
|
||||||
[Per saperne di più](http://it.wikipedia.org/wiki/Brainfuck)
|
|
||||||
|
Puoi provarlo nel tuo browser utilizzando
|
||||||
|
[brainfuck-visualizer](http://fatiherikli.github.io/brainfuck-visualizer/).
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Qualsiasi carattere che non sia "><+-.,[]" (escludendo gli apici)
|
Qualsiasi carattere diverso da "><+-.,[]" (escludendo gli apici)
|
||||||
viene ignorato.
|
viene ignorato.
|
||||||
Branfuck è caratterizzato da un array (vettore) di 30,000 celle
|
Branfuck è caratterizzato da un array di 30,000 celle inizializzate a zero
|
||||||
inizializzare a zero, e un puntatore che punta alla cella corrente.
|
e da un puntatore che punta alla cella corrente.
|
||||||
|
|
||||||
Vi sono solo otto comando:
|
Vi sono otto comandi:
|
||||||
+ : Incrementa il valore della cella attuale di uno.
|
+ : Incrementa il valore della cella attuale di uno.
|
||||||
- : Decrementa il valore della cella attuale di uno.
|
- : Decrementa il valore della cella attuale di uno.
|
||||||
> : Sposta il puntatore sulla cella seguente (prossima a destra).
|
> : Sposta il puntatore sulla cella seguente (sulla destra).
|
||||||
< : Sposta il puntatore sulla cella precendete (precedente a sinistra).
|
< : Sposta il puntatore sulla cella precendete (sulla sinistra).
|
||||||
. : Stampa il valore in ASCII della cella corrente. (es: 65 = 'A')
|
. : Stampa il valore ASCII della cella corrente. (es. 65 = 'A')
|
||||||
, : Legge un singolo carattere come input per la cella corrente.
|
, : Legge un singolo carattere come input e lo salva nella cella corrente.
|
||||||
[ : Se il valore della cella corrente è zero, conclude il ciclo
|
[ : Se il valore della cella corrente è zero, prosegue fino alla ] corrispondente.
|
||||||
andando alla sua corrispondente ].
|
|
||||||
Altrimenti, passa alla prossima istruzione.
|
Altrimenti, passa alla prossima istruzione.
|
||||||
] : Se il valore della cella corrente è zero, passa alla prossima istruzione.
|
] : Se il valore della cella corrente è zero, passa alla prossima istruzione.
|
||||||
Altrimenti torna indetro fino alla [ corrispondente.
|
Altrimenti, torna indietro fino alla [ corrispondente.
|
||||||
|
|
||||||
[ e ] creano un loop (while). Ovviamente dovranno essere bilanciati.
|
[ e ] formano un ciclo while. Ovviamente dovranno essere bilanciati.
|
||||||
Per ogni [ dovrà corrispondere una ]
|
(Ad ogni [ dovrà corrispondere una ])
|
||||||
|
|
||||||
Alcuni semplici esempi di programmi scritti in Brainfuck:
|
Ecco alcuni semplici esempi di programmi scritti in Brainfuck:
|
||||||
|
|
||||||
++++++ [ > ++++++++++ < - ] > +++++ .
|
++++++ [ > ++++++++++ < - ] > +++++ .
|
||||||
|
|
||||||
Questo programma stampa in output la lettera 'A'. Priam incrementa
|
Questo programma stampa in output la lettera 'A'. Prima di tutto, incrementa
|
||||||
la cella #1 fino a 6, Quindi la cella #1 viene usata per crare un ciclo.
|
la cella #1 fino al valore 6. La cella #1 verrà utilizzata per il ciclo.
|
||||||
Poi, entra in un loop ([) e si sposta alla cella #2.
|
Poi, entra nel ciclo ([) e si sposta alla cella #2. Incrementa la cella #2 10
|
||||||
Incrementa la cella #2 10 volte, e torna alla cella #1, e la decrementa.
|
volte, torna alla cella #1, e decrementa quest'ultima.
|
||||||
Questo avviene 6 volte (servono che la cella #1 venga decrementata 6 volte
|
Il ciclo si ripete 6 volte (la cella #1 viene decrementata 6 volte prima di
|
||||||
per raggiungere lo 0. Quindi passa alla corrispondente ] e prosegue).
|
raggiungere lo 0, quindi prosegue oltre la corrispondente ]).
|
||||||
|
|
||||||
A questo punto, siamo sulla cella #1, che ha valore 0,
|
A questo punto, siamo sulla cella #1, che ha valore 0, mentre la cella #2 ha
|
||||||
la cella #2 ha valore 60 (6*10). Ci spostiamo sulla cella #2, incrementiamo
|
valore 60. Ci spostiamo sulla cella #2, la incrementiamo per 5 volte, ottenendo
|
||||||
per 5 volte, e otteniamo il valore 65, quindi stampaimo il valore della cella
|
il valore 65, quindi stampiamo il valore della cella #2.
|
||||||
#2 (.).
|
Il valore 65 equivale ad 'A' in ASCII, per cui viene stampato 'A' nel terminale.
|
||||||
65 è 'A' in ASCII, quindi alla fine viene stampata 'A'.
|
|
||||||
|
|
||||||
|
|
||||||
, [ > + < - ] > .
|
, [ > + < - ] > .
|
||||||
|
|
||||||
Questo programma legge un carattere come input dall'utente,
|
Questo programma legge un carattere come input dall'utente, quindi salva il
|
||||||
quindi salva il carattere dentro la cella #1.
|
carattere nella cella #1. Dopodichè entra in un ciclo. Si sposta alla cella #2,
|
||||||
In seguito, incominca a ciclare.
|
incrementa quest'ultima, torna alla cella #1, e decrementa quest'ultima.
|
||||||
Si sposta alla cella #², e increementa il valore della cella (#2).
|
Il ciclo continua fino a quando la cella #1 diventa 0, e quindi la cella #2
|
||||||
Quindi torna alla cella #1, e decrementa il valore della cella (#1).
|
avrà il valore iniziale della cella #1. Infine, visto che ci troviamo sulla
|
||||||
Questo continua fino a quando la cella #²1 diventa 0, e quindi la cella #2
|
cella #1 alla fine del ciclo, si sposta sulla cella #2 e stampa il valore in
|
||||||
avrà il valore iniziale della cella #1.
|
ASCII.
|
||||||
Infine, visto che ci troviamo sulla cella #1 alla fine del ciclo, si sposta
|
|
||||||
sulla cella #2 e stampa il valore in ASCII.
|
|
||||||
|
|
||||||
Gli spazi nel codice sovrastante, sono presenti solo a scopo di ottenere
|
Gli spazi nel codice sovrastante sono presenti solo a scopo di ottenere
|
||||||
una maggiore leggibilità, si poteva anche scrivere senza:
|
una maggiore leggibilità. Lo stesso programma poteva essere scritto senza spazi:
|
||||||
|
|
||||||
,[>+<-]>.
|
,[>+<-]>.
|
||||||
|
|
||||||
@ -77,25 +74,19 @@ Proviamo, adesso, a capire cosa fa invece questo programma:
|
|||||||
|
|
||||||
,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
|
,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
|
||||||
|
|
||||||
Prende due numeri in input e quindi li moltiplica.
|
Il programma legge 2 numeri come input dall'utente, e li moltiplica.
|
||||||
|
|
||||||
Prima prende in input i due numeri (,>,<), quindi inizia un cilclo
|
Innanzitutto, legge in input i due numeri. Poi entra nel ciclo più esterno
|
||||||
basandosi sulla cella #1.
|
basandosi sulla cella #1. Quindi si sposta sulla cella #2, e inizia il ciclo
|
||||||
Quindi si sposta sulla cella #2, e inizia un altro ciclo condizionato
|
più interno basandosi sul valore della cella #2, incrementando la cella #3.
|
||||||
dal valore della cella #2, incrementando la cella #3.
|
|
||||||
Arrivati a questo punto abbiamo un problema: alla fine del ciclo interno
|
Arrivati a questo punto abbiamo un problema: alla fine del ciclo interno
|
||||||
la cella #2 ha valore 0. In questo caso, quando il ciclo esterno rifarà
|
la cella #2 avrà valore 0. Ciò impedirà di eseguire nuovamente il ciclo interno.
|
||||||
partire il ciclo interno, non funzionerà più perchè la cella #2 ha valore 0.
|
Per ovviare a questo problema, incrementiamo anche la cella #4, e copiamo il
|
||||||
Per ovviare a questo problema, oltre alla cella 3, incrementiamo anche la cella
|
valore di quest'ultima nella cella #2.
|
||||||
#4, e alla fine di ogni ciclo interno copiala il valore della cella #4
|
Il risultato sarà infine contenuto nella cella #3.
|
||||||
nella cella #2, in modo che il ciclo interno
|
|
||||||
possa essere eseguito una altra volta.
|
|
||||||
Alla fine la cella #3 contiene il risultato.
|
|
||||||
```
|
```
|
||||||
|
|
||||||
E questo è brainfuck...Non è difficele, vero?
|
E questo è brainfuck. Non è così difficile, eh? Se vuoi, ora puoi scrivere per
|
||||||
Per divertimento adesso puoi scrivere i tuoi programmi in brainfuck,
|
divertimento altri programmi in brainfuck, oppure scrivere un interprete
|
||||||
oppure puoi scrivere un interprete brainfuck in un altro linguaggio.
|
brainfuck in un altro linguaggio. L'interprete è abbastanza semplice da
|
||||||
L'interprete è abbastanza semplice da implementare, ma se sei veramente
|
implementare, ma se sei veramente masochista, prova ad implementare un interprete brainfuck... in brainfuck.
|
||||||
masochista prova ad implementare un interprete brainfuck in...
|
|
||||||
brainfuck.
|
|
||||||
|
Loading…
Reference in New Issue
Block a user