# Concatenamento

In linguaggio formale e programmazione software il concatenamento (o concatenazione) indica un procedimento in cui parole o numeri vengono legati insieme a formare, rispettivamente, una sola parola o numero.
Ad esempio, concatenando "piano" e "forte" si ottiene "pianoforte", oppure concatenando i numeri 5 e 12 si ottiene il numero 512.
Quest'operazione è spesso utilizzata nei linguaggi di programmazione per l'unione di stringhe.

## Definizione

Siano $L_{1},L_{2}$ due linguaggi costruiti su un dato un alfabeto $\Sigma$. Il concatenamento $L_{1}L_{2}$ rappresenta tutte le stringhe della forma $vw$, dove $v$ appartiene a $L_{1}$ e $w$ a $L_{2}$. Formalmente:
$L_{1}L_{2}=\{vw:v\in L_{1},w\in L_{2}\}$
Lo stesso procedimento può essere fatto con una stringa e un linguaggio o viceversa. Il risultato del concatenamento di un linguaggio $L_{0}$ e una stringa $v$ è $vL_{0}=\{vw:w\in L_{0}\}$
Per esempio, se su un alfabeto $\Sigma =\{a,b\}$ sono costruiti due linguaggi $L_{1}=\{abab,baba\}$ e $L_{2}=\{bbbb,aaaa\}$, il loro concatenamento $L_{1}L_{2}$ corrisponde a $\{ababbbbb,bababbbb,ababaaaa,babaaaaa\}$

## Esempio

Dati due insiemi $L_{1}=\{a,b,c,d,e,f,g,h\}$ e $L_{2}=\{1,2,3,4,5,6,7,8\}$ il loro concatenamento $L_{1}L_{2}$ è l'insieme che contiene tutte le coordinate di una scacchiera nella notazione algebrica. Il risultato del concatenamento di una qualsiasi lettera di $L_{1}$ e $L_{2}$ è l'insieme contenente tutte le coordinate della colonna corrispondente alla lettera. Per esempio, si consideri la lettera d in $L_{1}$, il concatenamento $dL_{2}$ indica la colonna della regina.

## Nei linguaggi di programmazione

Nella maggior parte dei linguaggi di programmazione, l'operatore per il concatenamento delle stringhe è "+".
La sintassi è:

### Java

In Java è possibile concatenare più stringhe semplicemente in questo modo:

#### Concatenamento di numeri interi

Concatenare numeri interi è più complesso:
Qui, usufruendo della classe java.lang.Integer, i due numeri vengono prima trasformati in stringhe, poi concatenati e infine ritrasformati nel numero intero risultante assegnato alla variabile c.

### C++, C, Python

In C++, C e Python, come in Java, si può usare l'operatore " + ":
Inoltre, in C++, è possibile eseguire il concatenamento di stringhe e/o variabili nei comandi cout e cerr della libreria iostream utilizzando l'operatore " << ".

## In matematica

In matematica concatenare vuol dire fondere due o più numeri per formarne uno nuovo.
Per esempio:
$56||21=5621$
Il simbolo $||$ è stato usato qui per indicare l'operazione concatenamento.
L'operazione NON gode della proprietà commutativa, quindi:
$56||21\neq 21||56$
Una semplice funzione matematica che esegue questa operazione tra due numeri $m$ e $n$ con $n\geq 1$ e $m,n\in \mathbb {N}$ è:
$C_{10}(m,n)=10^{\lceil \log _{10}(n+1)\rceil }m+n$
Dove $\lceil x\rceil$ indica la funzione parte intera superiore.
Questa formula si ricava facilmente in questa maniera: Il primo numero m, deve essere spostato di tante cifre quante sono quelle di n, per lasciargli spazio. Dunque per avere il numero di cifre di n basterebbe la parte intera superiore del logaritmo (nel caso della numerazione decimale in base 10) di n sommato al più ad 1. Adesso, possiamo spostare m delle cifre di n verso sinistra moltiplicandolo per $10^{n_{c}}$ dove $n_{c}$ è il numero di cifre, uguale a: $\lceil \log _{10}(n+1)\rceil$. A questo punto, spostato m delle cifre di n, possiamo sommare n. Il risultato è la concatenazione dei due numeri.
Ovviamente è possibile generalizzare la formula per una qualsiasi base, sostituendo le basi dell'esponenziale e del logaritmo:
$C_{b}(m,n)=b^{\lceil \log _{b}(n+1)\rceil }m+n$
Dove $b$ è la base del nostro sistema di numerazione.
Le Costanti di Champernowne e la Costante di Copeland-Erdős sono ottenute attraverso concatenamento.