title: Concatenamento
text: # 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.
  
  