Cifrario di Cesare in C

di il
2 risposte

Cifrario di Cesare in C

Salve, stavo cercando di creare un semplice cifrario di Cesare (premetto che sono un novellino in C) e, cercando qualcosa sul web, vidi un post su questo sito risalente al 2015 (https://www.iprogrammatori.it/forum-programmazione/cplusplus/cifrario-cesare-t25756.html), copiai il codice e provai a farlo partire, notai però che mi dava un errore insolito, allora trovai un carattere "invisibile" all'interno del codice che faceva crashare l'intero programma; lo tolsi e misi anche un'istruzione if e un while cosicché, qualora l'utente avesse inserito un numero maggiore di 26 o minore di 0 nella selezione di quante cifre saltare, il programma glielo avrebbe impedito. Voglio quindi condividere con voi la versione "migliorata":

#include "stdafx.h" //solo se si usa Microsoft Visual Studio
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void cesare(char s, int salto)
{
	char alfabeto[26] = { 'a', 'b', 'c', 'd' ,'e' ,'f' ,'g' ,'h' ,'i' ,'j' ,'k' ,'l' ,'m' ,'n', 'o', 'p' ,'q', 'r', 's' ,'t' ,'u' ,'v' ,'w' ,'x' ,'y' ,'z' };
	int i;

	for (i = 0; i<26; i++)
	{

		if (s == alfabeto[i])
		{
			printf("%c", alfabeto[i + salto]);
			break;
		}
	}

}

//main

int main()

{
	char cript[100];
	int S, lung, i;


	printf("Inserisci la parola da criptare > ");
	scanf("%s", cript); //se si usa Microsoft Visual Studio bisogna andare su Progetto >> Proprietà di *nome progetto* >> C/C++ >> Avanzate >> Disabilita errori specifici >> inserire 4996

	printf("Inserisci il salto da eseguire > ");
	scanf("%d", &S);
	if (S > 26 || S < 0)
	{
		while (S > 26 || S < 0)
		{
			printf("Inserisci il salto da eseguire > ");
			scanf("%d", &S);
		}
	}

	lung = strlen(cript);


	for (i = 0; i<lung; i++)

	{
		cesare(cript[i], S);

	}

	printf("\n");
	system("PAUSE");
	return 0;
}
Ditemi cosa ne pensate

2 Risposte

  • Re: Cifrario di Cesare in C

    1) inefficiente: fai una scansione sequenziale la' dove basta accedere (in modo furbo) al corretto elemento del vettore

    2) NON FUNZIONA: che cosa succede agli ULTIMI 'salto' CARATTERI? Ad esempio con la 'z'? Che carattere dovrebbe essere se 'salto' vale 1? 2? 3? 10? 20?

    Idea buona, ma da migliorare.

    Studiati che cosa e' la codifica ASCII dei caratteri.
  • Re: Cifrario di Cesare in C

    Sulla scia del punto 2) di @migliorabile sorge spontanea una domanda: dici di aver visto quel post risalente al 2015, ma l'hai letto tutto?

    Inoltre l'utente del post originale scrivendo S=rand()%21; non aveva bisogno di effettuare alcun controllo su S, se invece tu vuoi far inserire il salto all'utente, ti faccio notare che il seguente frammento di codice:
    printf("Inserisci il salto da eseguire > ");
    scanf("%d", &S);
    if(S > 26 || S < 0)
    {
        while (S > 26 || S < 0)
        {
            printf("Inserisci il salto da eseguire > ");
            scanf("%d", &S);
        }
    }
    può essere scritto in modo molto più semplice e compatto utilizzando un ciclo do/while.
Devi accedere o registrarti per scrivere nel forum
2 risposte