[C]Cifrario di Cesare

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

[C]Cifrario di Cesare

Messaggio da kelev »

Dati in input il numero di lettere di una parola, e la parola stessa il programma cripta la parola secondo il cifrario di Cesare. Codice:

Codice: Seleziona tutto

typedef unsigned char byte;
#include<stdio.h>
main() {
   int num, k, scelta;
   byte parola[20];
   for(;;) {
       fflush(stdin);
       fflush(stdout);
       printf("\nInserire numero lettere parola:  ");
       scanf("%d", &num);
       printf("\nInserire parola da criptare:   ");
       k = 0;
       num = num + 1;
       while(k < num) {
           parola[k] = getchar();
           k++;   
       }
       printf("\nParola criptata secondo il cifrario di Cesare == ");      
       k = 0;
       num = num + 1;
       while(k < num) {
           if(parola[k] >= 97 && parola[k] <= 102) {

               parola[k] = parola[k] + 3;
               putchar(parola[k]);
		   } 
           else if(parola[k] == 103 || parola[k] == 104 || parola[k] == 105) {
               parola[k] = parola[k] + 5;
               putchar(parola[k]);
           } 
           else if(parola[k] >= 108 && parola[k] <= 115) {
               parola[k] = parola[k] + 3;
               putchar(parola[k]);
           }        
           else if(parola[k] == 116) {
               parola[k] = parola[k] + 6;
               putchar(parola[k]);
           }
           else if(parola[k] == 117 || parola[k] == 118) {
               parola[k] = parola[k] - 20;
               putchar(parola[k]);
           }  
           else if(parola[k] == 122) {
               parola[k] = parola[k] - 23;
               putchar(parola[k]);
           }   
           k++;
       }
       printf(".\n\n");

       printf("1. Per continuare premere\n2. Per uscire.\nScelta:  ");

       scanf("%d", &scelta);

       if(scelta == 2) break;

   }
}

Esempio programma:

Codice: Seleziona tutto

Inserire numero lettere parola:  6

Inserire parola da criptare:   ubuntu

Parola criptata secondo il cifrario di Cesare == aeaqza.

"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
Guiodic
Accecante Asceta
Accecante Asceta
Messaggi: 28474
Iscrizione: martedì 24 aprile 2007, 15:28
Località: Roma
Contatti:

Re: [C]Cifrario di Cesare

Messaggio da Guiodic »

ehm... quindi?
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [C]Cifrario di Cesare

Messaggio da kelev »

Forse qui la sezione Programmazione non viene usata come gli altri forum :-\
"E alla fine sei da solo, dove vai, con chi brindi?"
sospiro
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 521
Iscrizione: lunedì 24 aprile 2006, 21:57
Contatti:

Re: [C]Cifrario di Cesare

Messaggio da sospiro »

E come è usata negli altri forum?
[url=http://"spidblog.altervista.org"]Il mio blog[/url]
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [C]Cifrario di Cesare

Messaggio da kelev »

Di solito in questa sezione si postano problemi oppure i propri source..ma qui credo solo i problemi :)
"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
streetcross
Accecante Asceta
Accecante Asceta
Messaggi: 24943
Iscrizione: giovedì 7 febbraio 2008, 10:52
Contatti:

Re: [C]Cifrario di Cesare

Messaggio da streetcross »

No puoi postare anche i tuoi source, anzi bel lavoro  ;)
Ubuntu user #22995 Linux user #474679 Stacy can't you see, you're just not the girl for me, I know it might be wrong, but I'm in love with Stacy's Mom. ﺕ In molti credono di essere degli alternativi. In realtà la maggior parte di loro lascia la strada principale per seguire la seconda strada più battuta; in pochi si creano il proprio sentiero.
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [C]Cifrario di Cesare

Messaggio da kelev »

Grazie :)
"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
Guiodic
Accecante Asceta
Accecante Asceta
Messaggi: 28474
Iscrizione: martedì 24 aprile 2007, 15:28
Località: Roma
Contatti:

Re: [C]Cifrario di Cesare

Messaggio da Guiodic »

xajx ha scritto: Di solito in questa sezione si postano problemi oppure i propri source..ma qui credo solo i problemi :)
Ah, ecco, pensavo ci fosse una domanda inespressa...
(tipo i warning di gcc che sicuramente hai).
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [C]Cifrario di Cesare

Messaggio da kelev »

Codice: Seleziona tutto

xajx@xajx-desktop:~/Scrivania/xajx/Programmazione/C$ gcc -o cifrario cifrario.c
xajx@xajx-desktop:~/Scrivania/xajx/Programmazione/C$ ./cifrario
Non credo
"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
Guiodic
Accecante Asceta
Accecante Asceta
Messaggi: 28474
Iscrizione: martedì 24 aprile 2007, 15:28
Località: Roma
Contatti:

Re: [C]Cifrario di Cesare

Messaggio da Guiodic »

già, è che io sono abituato a compilare con -Wall
Ikitt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1816
Iscrizione: mercoledì 24 ottobre 2007, 12:05

Re: [C]Cifrario di Cesare

Messaggio da Ikitt »

xajx ha scritto: Dati in input il numero di lettere di una parola, e la parola stessa il programma cripta la parola secondo il cifrario di Cesare. Codice:
Qualche appuntarello sparso che potrebbe risparmiarti qualche warning (e qualche grattacapo) in futuro. Libero di ignorare il tutto ;)

Codice: Seleziona tutto

typedef unsigned char byte;
#include<stdio.h>
main() {
forma deprecata, sarebbe meglio int main(void)
(oppure int main(int argc, char *argv[]))

Codice: Seleziona tutto

   int num, k, scelta;
   byte parola[20];
   for(;;) {
       fflush(stdin);
Occhio: fflush(stdin) e` undefined behaviour

Codice: Seleziona tutto

       fflush(stdout);
       printf("\nInserire numero lettere parola:  ");
       scanf("%d", &num);
       printf("\nInserire parola da criptare:   ");
       k = 0;
       num = num + 1;
       while(k < num) {
           parola[k] = getchar();
           k++;   
       }
Sarebbe meglio controllare per potenziali buffer overflow.
Ultima modifica di Ikitt il giovedì 11 settembre 2008, 19:25, modificato 1 volta in totale.
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [C]Cifrario di Cesare

Messaggio da kelev »

Accetto i consigli..vedo che posso fare  ;)
"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
simo_magic
Rampante Reduce
Rampante Reduce
Messaggi: 9496
Iscrizione: lunedì 18 dicembre 2006, 21:37
Località: Piemonte

Re: [C]Cifrario di Cesare

Messaggio da simo_magic »

xajx ha scritto:

Codice: Seleziona tutto

xajx@xajx-desktop:~/Scrivania/xajx/Programmazione/C$ gcc -o cifrario cifrario.c
xajx@xajx-desktop:~/Scrivania/xajx/Programmazione/C$ ./cifrario
Non credo
perchè non hai abilitati tutti i warning ;)
Guiodic ha scritto: già, è che io sono abituato a compilare con -Wall
per l'appunto
è un consiglio caloroso: impara ad usare SEMPRE -Wall
Ultima modifica di simo_magic il giovedì 11 settembre 2008, 19:58, modificato 1 volta in totale.
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [C]Cifrario di Cesare

Messaggio da kelev »

Ok
"E alla fine sei da solo, dove vai, con chi brindi?"
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti