Pagina 1 di 1

[C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 17:45
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.


Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 18:14
da Guiodic
ehm... quindi?

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 18:45
da kelev
Forse qui la sezione Programmazione non viene usata come gli altri forum :-\

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 18:47
da sospiro
E come è usata negli altri forum?

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 18:48
da kelev
Di solito in questa sezione si postano problemi oppure i propri source..ma qui credo solo i problemi :)

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 18:50
da streetcross
No puoi postare anche i tuoi source, anzi bel lavoro  ;)

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 18:52
da kelev
Grazie :)

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 18:52
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).

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 18:54
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

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 19:01
da Guiodic
già, è che io sono abituato a compilare con -Wall

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 19:11
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.

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 19:25
da kelev
Accetto i consigli..vedo che posso fare  ;)

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 19:31
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

Re: [C]Cifrario di Cesare

Inviato: giovedì 11 settembre 2008, 19:50
da kelev
Ok