//Scrivere un programma che realizzi un codice di sostituzione in cui si possa sostituire ogni lettera con quella che la segue di n posizioni (1<=n<=26) dove n è
//la chiave di cifratura
// specifiche del problema
// dato un testo (lettere minuscole) in chiaro e una chiave, cifrare il testo con il codice di sostituzione
// dato un testo cifrato (lettere minuscole) ottenere il testo in chiaro a patto di fornire la chiave corretta
// preservare l'inviolabilità del codice: il testo originale può essere ottenuto solamente conoscendo la chiave
//sottoproblemi
//menu a due scelte: codifica e decodifica
//acquisizione di testo e chiave
//costruire il testo (cifrato o in chiaro)mediante la sostituzione di un carattere alla volta
import prog.io.*;
import java.lang.*;
import prog.utili.*;
class keydicifratura {
public static void main(String[] args) {
ConsoleOutputManager out = new ConsoleOutputManager();
ConsoleInputManager in = new ConsoleInputManager();
String alfabeto = "abcdefghijklmnopqrstuvwxyz";
String testo;
int chiave;
char caratterevuoto= " ";
//realizzo il menu a doppia scelta
out.println("MENU");
out.println("1)Codifica");
out.println("2)Decodifica");
do
{
int scelta=in.readInt("\n Inserisci il numero associato all'operazione che desidera eseguire: ");
switch(scelta)
{
case 1:
testo=in.readLine("Inserisci il testo che desideri codificare: ");
chiave=in.readInt("Inserisci la chiave di codifica: ");
String testoCodificato="";
testo=testo.toLowerCase().trim(); //testo in minuscolo ed elimino gli spazi
for(int i=0; i<testo.length();i++)
{
char carattere;
if((carattere=testo.charAt(i)) != caratterevuoto ) //se il carattere prelevato da testo con indice i e messo in carattere è diverso da 0
{
testoCodificato+=alfabeto.charAt((alfabeto.indexOf (carattere)+chiave) %26); //????????
}
else testoCodificato+=' ';
}
testoCodificato=testoCodificato.toUpperCase();
out.println("Testo cifrato: "+testoCodificato);
break;
case 2: testo=in.readLine("Inserisci il codice da decodificare: ");
chiave=in.readInt("Inserisci la chiave di lettura del codice: ");
String testoDecodificato="";
testo=testo.toLowerCase().trim(); //elimino gli spazi oltre a rendere tutto minuscolo
for(int i=0; i<testo.length(); i++)
{
char carattere;
if((carattere=testo.charAt(i)) != caratterevuoto')
testoDecodificato+=alfabeto.charAt((alfabeto.index Of(carattere)+26-chiave)%26); //giusto,però non capisco il %26
else testoDecodificato+= ' ';
}
testoDecodificato=testoDecodificato.toUpperCase();
out.println("Testo codificato: "+testoDecodificato);
break;
case default: out.println("Hai inserito il numero sbagliato");
}}
while(scelta!=1 && scelta !=2 && scelta !=0);
}}