Programma cifratura

di il
34 risposte

34 Risposte - Pagina 2

  • Re: Programma cifratura

    Perfetto!
  • Re: Programma cifratura

    Hai capito il raggionamento almeno?
  • Re: Programma cifratura

    Credo di sì, cioè tu a c aggiungi la costante k e poi chiedi che il risultato stia tra 'A' e 'Z'. Stessa cosa per i numeri. Ho ragione?
    L'unica cosa che non capisco (forse la cosa più importante) è quel c+='A', che dovrebbe stare per c = c + 'A'. Cioè perchè sommi 'A'?
  • Re: Programma cifratura

    Sommo perche se nel caso la somma c+k supera Z il modulo lo fa diventare un numero compreso tra 0 (numero) e Z. Per farlo stare nel range A-Z li sommo A. Sta cosa non è indispensabile se il modulo pruduce un valore compreso tra A e Z.
  • Re: Programma cifratura

    No aspetta...credevo di aver capito ma adesso è peggio di prima. dove ho sbagliato?
    
     if (c >= 'A' && c <= 'Z') {
            c='A' + ((c+k) % ('Z'+1));;
        }
        else if ( c>= 'a' && c <= 'z') {
            c= 'A' + (c - ('a' - 'A') + k) % ('Z'+1);
        }
        else if (int(c)>=48 && int(c)<=57) {
            c='0' + (c+k)%('9'+1);
        }
        outFile<<c;
    
    per favore, potresti modificare il mio codice senza le funzioni islower, isdigit, ... che cerco di stare un po' più sul semplice?
  • Re: Programma cifratura

    
    if (c >= 'A' && c <= 'Z') {
            c=((c+k) % ('Z'+1));
           if(c < 'A')
              c = c+ 'A';
        }
        else if ( c>= 'a' && c <= 'z') {
            c= (c - ('a' - 'A') + k) % ('Z'+1);
            if(c < 'A')
              c = c+ 'A';
        }
        else if (int(c)>=48 && int(c)<=57) {
            c=(c+k)%('9'+1);
            if(c < '0')
             c = c + '0';
        }
        outFile<<c;
    
    
  • Re: Programma cifratura

    Ah! ho capito cosa mi mancava! proprio la somma che ti avevo chiesto...
  • Re: Programma cifratura

    Scusa se rompo ancora: ho provato a cifrare
    ciao mi chiamo Mario e la password del mio conto in banca e' 154876521035
    con costante 13 ma compaiono ancora caratteri strani (un <, una virgola e un punto e virgola...)
  • Re: Programma cifratura

    Con la mia versione da:
    
    PVNB ZV PUVNZB MNEVB R YN CNFFJBEQ QRY ZVB PBAGB VA ONAPN R' 487109854368
    
    cambiando sto codice:
    
    da 
    c = (c + k)% ('9' + 1);
    a
    c = ((c + k)% ('9' + 1)) % 10;
    
  • Re: Programma cifratura

    Chideo scusa. Ma tu converti anche i caratteri se sono maiuscoli?
    
    if (c >= 'A' && c <= 'Z') {
            c=((c+k) % ('Z'+1));
           if(c < 'A')
              c = c+ 'A';
    
    se si la soluzione darebbe

    PVNB ZV PUVNZB ZNEVB R YN CNFFJBEQ QRY ZVB PBAGB VA ONAPN R' 487109854368

    Cio' che cambia è nel nome Mario. Prima non veniva convertita.
  • Re: Programma cifratura

    Sì sì, io voglio che se ci sono delle minuscole vengano convertite in maiuscole, e poi venga cifrato tutto quanto. Forse non mi ero spiegato bene. Questo cambia qualcosa nel codice? O devo solo mettere quello che hai scritto nell'ultimo post?
  • Re: Programma cifratura

    Devi solo mettere la correzione dei numeri. Il resto dovrebbe funzionare così com'è
  • Re: Programma cifratura

    Sì ma non cifra le maiuscole, o meglio, le sostituisce con caratteri strani. Ad esempio la M diventa >.
    ad esempio ho provato a cifrare CIAO MI CHIAMO MARIO e mi scrive ‘—B ›— ‘–—›B ›E—B
    non ho parole...
  • Re: Programma cifratura

    Adesso provo il tuo codice. Col mio (isupper, lower ecc, funziona).
  • Re: Programma cifratura

    Per sicurezza te lo ri-posto tutto
    
    #include <iostream>
    #include <stdlib.h>
    #include <string>
    #include <fstream>
    using namespace std;
    
    int main() {
        int k;
        string inputFile, outputFile;
        cout<<"Inserire il nome del file di ingresso con l'estensione: ";
        getline(cin, inputFile);
        cout<<"Inserire il nome del file di uscita con l'estensione: ";
        getline(cin, outputFile);
        cout<<"Inserire una costante per la cifratura: ";
        cin>>k;
        ifstream inFile;
        ofstream outFile;
        inFile.open(inputFile.c_str(),ios::in);
        outFile.open(outputFile.c_str(),ios::out);
        while (inFile.good()) {
            char c = inFile.get();
            if (c >= 'A' && c <= 'Z') {
                c='A' + ((c+k) % ('Z'+1));;
            }
            else if ( c>= 'a' && c <= 'z') {
                c= (c - ('a' - 'A') + k) % ('Z'+1);
                if(c < 'A')
                    c = c+ 'A';
            }
            else if (int(c)>=48 && int(c)<=57) {
                c=((c+k)%('9'+1)) % 10;
                if(c < '0')
                    c = c + '0';
            }
            outFile<<c;
    
    }
        inFile.close();
        outFile.close();
        system("PAUSE");
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
34 risposte