Differenze tra le versioni di "Brainfuck"

182 byte aggiunti ,  5 anni fa
m
Bot: fix citazione web (v. discussione)
m (ortografia)
m (Bot: fix citazione web (v. discussione))
== Esempi ==
 
=== [[Hello world]]! ===
 
Il seguente codice mostra "Hello World!" sullo schermo e manda a capo il cursore
,----------[----------------------.,----------]
 
Questo esempio prenderà input scritti in minuscolo dalla tastierà e li farà diventare maiuscoli. Per uscire, premere il tasto invio.
 
In primo luogo, inseriamo il primo carattere usando il comando <code>,</code> e immediatamente sottriaiamo 10 da esso. (Molti, ma non tutti, i programmi Brainfuck usano 10 per indicare il tasto di ritorno a capo.) Se l'utente preme invio, l'istruzione di ciclo (<code>[</code>) salterà dopo la fine del ciclo, perché setteremo il primo byte a zero. Se il carattere inserito non era 10, assumeremo che esso fosse una lettera minuscola, ed entreremo nel ciclo, nel quale sottrarremo un altro 22 da esso, per un totale di 32, il quale è la differenza tra una lettera ASCII minuscola e la corrispondente lettera maiuscola.
 
Successivamente lo visualizzeremo. Ora inseriamo il prossimo carattere, ed ancora sottraiamo 10. Se questo carattere fosse un [[Carattere_di_controlloCarattere di controllo#Nella_tavola_ASCIINella tavola ASCII|linefeed]], usciamo dal ciclo; altrimenti, ritorneremo all'inizio del ciclo, sottrarremo un altro 22, lo visualizzeremo, e così via. Quando usciamo dal ciclo, il programma termina, siccome non ci sono più comandi.
 
==== Copiare un [[byte]] ====
 
Brainfuck non include nessuna operazione per copiare bytes. Questo deve essere fatto con i costrutti di ciclo e gli operatori aritmetici. Muovere un byte è abbastanza semplice; muovere il valore di [0] a [1] può essere fatto come segue:
 
[->+<]
 
Comunque, questo resetta il valore di [0] a 0. Possiamo ripristinare il valore di [0] dopo la copia prendendo vantaggio dell'abilità di copiare un valore in due posti alla volta. Per copiare il valore di [0] in entrambi [1] e [2] è semplice:
 
[->+>+<<]
 
Possiamo prendere vantaggio di questo per ripristinare il valore [0]. Quindi, possiamo non distruttivamente copiare [0] a [1] (usando [2] come variabile temporanea) così come segue:
 
[->+>+<<]>>[-<<+>>]
7
 
(Ora le cose iniziano a diventare un po' più complicate. Noi possiamo riferirci ai bytes nell'array come [0], [1], [2], e così via.)
 
Il primo numero è inserito in [0], e gli si sottrae 48 per ottenere la cifra corrispondente (i codici ASCII per i numeri da 0 a 9 sono infatti quelli da 48 a 57). Questo è fatto mettendo un 6 in [1] ed usando un ciclo per sottrarre 8 da [0] il numero corrispondente di volte. (Questo è un metodo comune di sommare o sottrarre grandi numeri) Successivamente, si inserisce il segno di somma in [1]; si inserisce infine il secondo numero, sovrascrivendo il simbolo di somma.
Come il precedente esempio, ma esegue la moltiplicazione, non l'addizione.
 
Il primo numero è inserito in [0], l'asterisco e poi il secondo numero sono inseriti in [1], ed entrambi i numeri sono corretti sottraendo da essi 48.
 
Ora entriamo nel ciclo principale della moltiplicazione. L'idea base è che ogni volta attraverso esso noi sottraiamo uno da [0] ed aggiungiamo [1] al totale corrente tenuto in [2]. In particolare: il primo ciclo interno sposta [1] su entrambi [2] e [3], mentre azzera [1]. (Questo è il metodo base per moltiplicare un numero.) Il prissimo ciclo interno sposta [3] indietro all'interno di [1], azzerando [3]. Poi uno è sottratto da [0], e il ciclo esterno viene terminato. Uscendo da questo ciclo, [0] è zero, [1] continua a contenere il secondo numero, e [2] contiene il prodotto dei due numeri. (Abbiamo fatto attenzione tenendo il primo numero, potevamo aggiungere uno a [4] ogni volta attraverso il ciclo esterno, poi spostare il valore da [4] indietro ad [1] in seguito.)
 
Ora aggiungiamo 48 al prodotto, inseriamo un risultato in [3], visualizziamo il prodotto usando i caratteri ASCII, e poi visualizziamo il risultato che abbiamo memorizzato.
 
==Collegamenti esterni==
*{{en}}cita [web|http://4mhz.de/ |'''Brainfuck Developer''' - Interprete Brainfuck con debugger integrato (IDE) per Windows]|lingua=en}}
*{{en}} [http://www.muppetlabs.com/~breadbox/bf/ Brian Raiter, Muppetlabs. '''Brainfuck: An Eight-Instruction Turing-Complete Programming Language (Brainfuck: un linguaggio di programmazione Turing-conforme formato da 8 istruzioni)''']. Questo sito contiene un [[quine]] per Brainfuck
*{{en}} [http://esoteric.sange.fi/Brainfuck/ Panu Kalliokoski. '''The Brainfuck Archive (Archivio Brainfuck)'''] contiene molti programmi scritti in Brainfuck, [[quine]], e implementazioni
*{{en}} c Compilatore per windows
*{{en}}cita [web|http://wuarchive.wustl.edu/pub/aminet/dev/lang/brainfuck-2.lha |Version 2 of the original compiler (Versione 2 del compilatore originale)]|lingua=en}}
*{{en}}cita [web|http://home.planet.nl/~faase009/Ha_bf_Turing.html |Frans Faase. '''BF is Turing Complete (BF è Turing-conforme)''']|lingua=en}}
*{{en}}cita [web|http://www.hevanet.com/cristofd/brainfuck/ |Daniel Cristofani. '''some Brainfuck fluff. (alcune gaffe in Brainfuck)''']|lingua=en}}
*{{en}}cita [web|http://www.brainfuck.ca |Brainfuck.ca '''GPLed Brainfuck interpreters and source converters (Interpreti Brainfuck rilasciati sotto GPL e convertitori di codice)''']|lingua=en}}
*{{en}}cita [web|url=http://www.hardtware.de/index.cgi?site=products&action=brainfuck |titolo=A complete Brainfuck interpreter and compiler for windows (Un interprete completo per Brainfuck e compilatore per windows)]|lingua=en}}
*{{en}}cita [web|http://elswanko.vm.bytemark.co.uk/~fraggle/stuffage/bf.net/ |Brainfuck.Net]|lingua=en}}
*{{en}} [http://www.nada.kth.se/~matslina/awib/ Also Written In Brainfuck (awib) (Anche scritto in Brainfuck (asib)] è un compilatore per il linguaggio Brainfuck scritto in Brainfuck per [[GNU/Linux]] su processori della famiglia [[i386]]
*{{en}}cita [web|http://robos.org/bfcomp/index.html |Robert Östling. '''Brainfuck computer.''']|lingua=en}}
*{{en}}cita [web|http://www.clifford.at/bfcpu/ |Clifford Wolf. '''The Brainf*ck CPU''' and other Brainfuck-related projects ('''La CPU Brainf*ck''' ed altri progetti relativi a Brainfuck)]|lingua=en}}
*{{en}}cita [web|url=http://martin.egy.nu/index.php?page=bfcomp |titolo='''A Brainfuck Computer With a Brainfuck CPU (Un computer Brainfuck con una CPU Brainfuck)''']|lingua=en}}
*{{en}}cita [web|http://alephmobius.8m.com/dl.html |'''The download page with Blue Fern, a Brainfuck IDE (La pagina download con Blue Fern, un IDE Brainfuck)''']|lingua=en}}
*{{en}} [http://alx2002.free.fr/. '''A Brainfuck tutorial''' in English and French ('''Un tutorial Brainfuck''' in inglese e francese)].
*{{en}}cita [web|http://kidsquid.com/programs/bf/bf.html |Jeffry Johnston. '''BF programs''', including Basic compiler and assembler ('''Programmi BF''', include un compilatore Basic ed assembler)]|lingua=en}}
 
<!-- {{esolangs}} -->
{{portale|informatica}}
 
[[Categoria:Linguaggi di programmazione esoterici]]
2 874 783

contributi