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

Cifrario di Cesare

  1. #1
    Post
    6
    Like Inviati  
    0
    Like Ricevuti  
    0
    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 ora è in linea Very Important Person
    Post
    6,204
    Like Inviati  
    18
    Like Ricevuti  
    10

  3. #3
    Post
    1,864
    Blogs
    21
    Like Inviati  
    13
    Like Ricevuti  
    11
    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
    Post
    540
    Like Inviati  
    2
    Like Ricevuti  
    0
    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
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,356
    Blogs
    5
    Like Inviati  
    5
    Like Ricevuti  
    30
    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
    Post
    540
    Like Inviati  
    2
    Like Ricevuti  
    0
    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
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,356
    Blogs
    5
    Like Inviati  
    5
    Like Ricevuti  
    30
    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