+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

Cifrario di Cesare

  1. #1
    Stavo provando a creare un programma per riprodurre il cifrario di cesare, in input prende la stringa e la chiave, in output restituisce la stringa cifrata. Mi stavo chiedendo se esistesse una maniera più semplice di fare il programma di come l'ho fatto io.

    import java.util.Scanner;
    
    
    public class CifrarioDiCesare {
    
    	public static void main(String[] args) {
    		
    		Scanner in = new Scanner(System.in);
    		
    		System.out.print("INPUT: ");
    		String frase = in.nextLine();
    		
    		System.out.print("Chiave: ");
    		int chiave = in.nextInt();
    		
    		frase = cifra(frase, chiave);
    		
    		System.out.print("OUTPUT: " + frase);
    		
    	}
    	
    	public static String cifra(String frase, int chiave) {
    		
    		char[] arrayChar = frase.toCharArray();
    		
    		for (int i=0; i<arrayChar.length; i++) {
    			for (int j=0; j<chiave; j++) {
    				
    				if (arrayChar[i]=='A') {
    					arrayChar[i]='B';
    					
    				}
    				else if (arrayChar[i]=='B') {
    					arrayChar[i]='C';
    					
    				}
    				else if (arrayChar[i]=='C') {
    					arrayChar[i]='D';
    					
    				}
    				else if (arrayChar[i]=='D') {
    					arrayChar[i]='E';
    					
    				}
    				else if (arrayChar[i]=='E') {
    					arrayChar[i]='F';
    					
    				}
    				else if (arrayChar[i]=='F') {
    					arrayChar[i]='G';
    					
    				}
    				else if (arrayChar[i]=='G') {
    					arrayChar[i]='H';
    					
    				}
    				else if (arrayChar[i]=='H') {
    					arrayChar[i]='I';
    					
    				}
    				else if (arrayChar[i]=='I') {
    					arrayChar[i]='L';
    					
    				}
    				else if (arrayChar[i]=='L') {
    					arrayChar[i]='M';
    					
    				}
    				else if (arrayChar[i]=='M') {
    					arrayChar[i]='N';
    					
    				}
    				else if (arrayChar[i]=='N') {
    					arrayChar[i]='O';
    					
    				}
    				else if (arrayChar[i]=='O') {
    					arrayChar[i]='P';
    					
    				}
    				else if (arrayChar[i]=='P') {
    					arrayChar[i]='Q';
    					
    				}
    				else if (arrayChar[i]=='Q') {
    					arrayChar[i]='R';
    					
    				}
    				else if (arrayChar[i]=='R') {
    					arrayChar[i]='S';
    					
    				}
    				else if (arrayChar[i]=='S') {
    					arrayChar[i]='T';
    					
    				}
    				else if (arrayChar[i]=='T') {
    					arrayChar[i]='U';
    					
    				}
    				else if (arrayChar[i]=='U') {
    					arrayChar[i]='V';
    					
    				}
    				else if (arrayChar[i]=='V') {
    					arrayChar[i]='Z';
    					
    				}
    				else if (arrayChar[i]=='Z') {
    					arrayChar[i]='A';
    					
    				}
    				
    				
    				
    			}
    		}
    		frase = new String(arrayChar);
    		
    		return frase;
    	}
    
    }
    
    ℹ️ Leggi di più su Vittorio Esposito ...

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person

  3. Quote Originariamente inviato da Vittorio Esposito Visualizza il messaggio
    Stavo provando a creare un programma per riprodurre il cifrario di cesare, in input prende la stringa e la chiave, in output restituisce la stringa cifrata. Mi stavo chiedendo se esistesse una maniera più semplice di fare il programma di come l'ho fatto io.
    prova a convertire uno char in un int ... se fai +1 ...
    ℹ️ Leggi di più su sspintux ...

  4. #4
    Dev-01 non è in linea Scribacchino
    Ciao.

    fortunatamente l'alfabeto consiste in una serie limitata di caratteri.

    L'osservazione di sspintux rappresenta un ottima riflessione.

    Dovresti sempre tentare di pensare i tuoi algoritmi in maniera più generalizzata possibile.

    Tipicamente puoi identificare un valore costante (il +1 rilevato da sspintux) e renderlo personalizzabile.

    La definizione di una costante di translazione ti consentirebbe di operare facilmente sui valori ASCII prima di riconvertirli in caratteri con l'eventuale eccezione dei casi limite dovuti alla "rotazione" dei valori, ovvero la gestione del "rientro" all'interno della collezione di simboli disponibili a partire dalla prima posizione quando il valore di un carattere sommato alla costante superi il valore ASCII dell'ultimo simbolo disponibile nella raccolta .

    Ad esempio (SingleCharVal = ASCII_VAL + COSTANTE Mod RACCOLTA.Length) o qualcosa di simile.

    In questi termini otterresti un cifrario dinamico.

    PS: Nonostante la premessa di pensare l'algoritmo in maniera generalizza mi sono limitato all'utilizzo dei valori ASCII attenendomi al tuo esempio di codice.
    Ultima modifica di Dev-01; 06-11-2015 14:49 

  5. #5
    Dev .... questo thread è di maggio, abbastanza vecchio ... probabilmente non viene più seguito da chi lo ha creato ...
    ℹ️ Leggi di più su AntonioG ...

  6. #6
    Dev-01 non è in linea Scribacchino
    Scusami, hai ragione, stranamente non ho fatto caso alla data. Sai che in genere non capita. Ti chiedo per favore di eliminare i miei commenti se anche tu lo ritieni opportuno.

  7. #7
    No ... No problem
    ℹ️ Leggi di più su AntonioG ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Cifrario di Vernam
    Da angelo3la@libero.it nel forum Microsoft Excel
    Risposte: 4
    Ultimo Post: 11-07-2014, 22:34
  2. [C/C++] Cifrario di Vigenère
    Da drew nel forum C/C++
    Risposte: 3
    Ultimo Post: 11-10-2011, 09:17
  3. [C++] cifrario di vigenere
    Da robertodb nel forum C/C++
    Risposte: 7
    Ultimo Post: 19-09-2011, 17:53