Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Progetto Java ROT13
Forum - Java - Progetto Java ROT13

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
tamaramen (Normal User)
Newbie


Messaggi: 7
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 10:38
Lunedì, 21/04/2008
Ciao ragazzi, volevo chiedervi come fareste a risolvere questo problema:
Scrivere un programma Java, opportunamente commentato, che implementi un  metodo per codificare e decodificare messaggi in codifica ROT13. Le specifiche del problema sono le seguenti.
Il codice ROT13 permette di codificare una stringa di caratteri utilizzando il seguente codice: ogni lettera è codificata con la lettera che sta 13 posizioni più avanti nell’alfabeto. Nel caso si raggiunga il termine dell’alfabeto senza aver raggiunto la 13 posizione, si ricomincia a contare dall’inizio. Segue il codice ROT13 e un esempio di codifica. Si consiglia di implementare una classe ROT13 contenente almeno due funzionalità che permettano (1) di crittare una stringa di caratteri usando il codice ROT13; (2) decrittare una frase codificata in codice ROT13.
Per l’implementazione della classe si consiglia di utilizzare  la classe String e i metodi ad essa associati. Il programma deve permettere di crittare/decrittare indifferentemente testo scritto in maiuscolo e/o minuscolo e contenete anche dei numeri.


Ho gia iniziato a vedere qualcosa ma con il mio codice cioè questo:import java.awt.*;
import javax.swing.*;

/**
* Class Esame - Scrivere un programma Java, opportunamente commentato,
* che implementi un  metodo per codificare e decodificare messaggi in
* codifica ROT13. Le specifiche del problema sono le seguenti.
*
* @author  
* @version (a version number)
*/

public class Rot13 {
    /** apply the rot13 encryption to the given character
     */
    public static char scramble(char c) {
        if (Character.isLetter(c)) {
            char base = Character.isUpperCase(c) ? 'A' : 'a';
            return (char) ((c - base + 13) % 26  + base);
        }
        else
            return c;
    }

    /** apply the rot13 encryption to all characters in the given string
     */
    public static String scramble(String s) {
        String result = "";
        for (int i = 0; i < s.length(); ++i)
            result += scramble(s.charAt(i));
        return result;
  

        }
    }


non riesco a decritt le parole intere come CIAO e non saprei proprio come fare neanche per i numeri.
Qualcuno può gentilmente aiutarmi??

Ringrazio in anticipo
Ciao

PM Quote
Avatar
K.Mitnick (Member)
Expert


Messaggi: 278
Iscritto: 24/03/2007

Segnala al moderatore
Postato alle 16:47
Martedì, 22/04/2008

PM Quote
Avatar
tamaramen (Normal User)
Newbie


Messaggi: 7
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 19:57
Martedì, 22/04/2008
ciao...già guardato qst...mi servirebbe il codice però...nn è corretto quello che ho fatto?

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 19:23
Mercoledì, 23/04/2008
in quel link qualche sorgente c'è ma ho visto che non rispetta le indicazioni del tuo esame (fra quelli che ho visto almeno).

Visto che sono da accettare stringhe con sia maiuscole, sia minuscole sia numeri dovresti dirmi se bisogna trattare i dati:

1) tutto su una fila(0,1...A,B...a,b), quindi se uno mi mette 9 per convertirlo vado avanti e passo a A B C ecc... se uno mi mette z torno a 0, 1 2 ecc..

2) oppure ogni sequenza va gestita a parte: se ho 0 vado fino a 9 e torno su, se o A vado fino a Z e torno, se ho a vado fino a z e torno su

Ultima modifica effettuata da netarrow il 23/04/2008 alle 19:24
PM Quote
Avatar
tamaramen (Normal User)
Newbie


Messaggi: 7
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 21:30
Mercoledì, 23/04/2008
credo sia la seconda opzione cioè qst :ogni sequenza va gestita a parte: se ho 0 vado fino a 9 e torno su, se o A vado fino a Z e torno, se ho a vado fino a z e torno su.
Grazie ancora
CIAO
:)

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 22:24
Mercoledì, 23/04/2008
ho provato il tuo programma e a me funziona, CIAO diventa PVNB e PVNB diventa CIAO rispettando quindi la simmetria dell'algoritmo. Anche usando maiuscole e minuscole i risultato sembrano corretti.

Per quanto riguarda i numeri guardando su internet ho visto che l'algoritmo prevede vengono ignorati e lasciati come nell'originale.
Quindi fai un isDigit per vedere se è un numero e lo restituisci così comè.

Infatti pensandoci se si inserissero i numeri l'algoritmo non sarebbe più simmetrico visto che su 10 simboli dovrei spostare di 13 e quindi rispostando nuovamente di 13 sul risultato avrei un risultato ancora diverso e non quello generatore di prima.

Se non lo hai visto prova questo:
http://rot13page.googlepages.com/

PM Quote
Avatar
tamaramen (Normal User)
Newbie


Messaggi: 7
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 11:40
Giovedì, 24/04/2008
scusa l'ignoranza ma che vuol dire un isDigit? comunque sul testo ke ti ho mandato ce scritto che bisogna fare indifferentemente testo scritto in maiuscolo minuscolo e contenente anche dei numeri.
Ma tu per vedere se funziona vai su char scramble? a me da errore se scrivo la parola 'ciao'
ufff sai dov'è il problema?
grazie e ciao!!:d

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:22
Giovedì, 24/04/2008
isDigit è un metodo che restituisce true nel caso l'argomento passato sia un numero, altrimenti false.


Il mio blog: https://piero.dev
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 19:23
Giovedì, 24/04/2008
Il codice di prova è questo:

Codice sorgente - presumibilmente Java

  1. /**
  2. * Class Esame - Scrivere un programma Java, opportunamente commentato,
  3. * che implementi un metodo per codificare e decodificare messaggi in
  4. * codifica ROT13. Le specifiche del problema sono le seguenti.
  5. *
  6. * @author
  7. * @version (a version number)
  8. */
  9.  
  10. public class ROT13 {
  11. /** apply the rot13 encryption to the given character
  12. */
  13. public static char scramble(char c) {
  14. if (Character.isLetter(c)) {
  15. char base = Character.isUpperCase(c) ? 'A' : 'a';
  16. return (char) ((c - base + 13) % 26 + base);
  17. }
  18. else
  19. return c;
  20. }
  21.  
  22. /** apply the rot13 encryption to all characters in the given string
  23. */
  24. public static String scramble(String s) {
  25. String result = "";
  26. for (int i = 0; i < s.length(); ++i)
  27.   result += scramble(s.charAt(i));
  28. return result;
  29. }
  30.  
  31. public static void main(String args[]) {
  32.  System.out.println(ROT13.scramble(args[0]));
  33. }
  34.  
  35. }



per quanto riguarda il testo alla fine ho interpretato che potrebbe voler dire che l'input deve poter contenere anche numeri ma che dovranno poi essere ignorati nell'elaborazione del ROT13, perchè sennò non è più ROT13.

Per isDigit intendevo un metodo che ritornasse true o false se il carattere passato è un numero (non ricordo come si chiamava in Java, isNumber forse ma mi pare isDigit)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo