Cifrari di….Cesare e Vigenere

Cesare

In crittografia il cifrario di Cesare è uno dei più antichi algortmi crittografici di cui si abbia traccia storica. È un cifrario a sostituzione monoalfabetica in cui ogni lettera del testo in chiaro è sostituita nel testo cifrato dalla lettera che si trova un certo numero di posizioni dopo nell’alfabeto. Questi tipi di cifrari sono detti anche cifrari a sostituzione o cifrari a scorrimento a causa del loro modo di operare: la sostituzione avviene lettera per lettera, scorrendo il testo dall’inizio alla fine.

esempio in c++

#include <stdio.h>
#include <string.h>
void cesare (char s,int salto)
{
char alfabeto[21]={‘a’,’b’, ‘c’, ‘d’ ,’e’ ,’f’ ,’g’ ,’h’ ,’i’ ,’l’ ,’m’ ,’n’, ‘o’, ‘p’ ,’q’, ‘r’, ‘s’ ,’t’ ,’u’, ‘v’ ,’z’} ;
int i;
for(i=0;i<21;i++)
{
if(s==alfabeto[i])
{
printf (“%c”,alfabeto[i+salto]);
break;
}
}
}
int main()

{
char cript[100];
int S,lung,i;
printf(“Inserisci la parola da criptare > “);
scanf(“%­s”,cript);
S=rand()%21; //S è il salto che dovrà eseguire nella criptazione
lung=strlen(cript);
for (i=0;i<lung;i++)
{
cesare(cript[i],S);
}
return 0;
}

 

Vigenere

Il cifrario di Vigenere è un metodo per crittografare caratteri. Consiste nel far valere come salto la somma dei numeri dei caratteri presenti nella parola da crittografare. Di conseguenza ogni carattere avrà un salto diverso.

Le funzioni

L’uso di funzioni permette di strutturare il programma in modo modulare, sfruttando tutte le potenzialità fornite dalla programmazione strutturata fornite dal C++.

Una funzione è un blocco di istruzioni con un nome che viene eseguito in

ogni punto del programma in cui viene richiamata la funzione usando il nome.

Essa si dichiara nel modo seguente….

Tipo restituito NomeFunzione ( Argomento1, Argomento2 , …)

{Istruzioni;

   return valoreRestituito;

}

dove:
· Tipo restituito è il tipo del valore ritornato dalla funzione.

  • NomeFunzione è il nome con cui possiamo richiamare la funzione.
  • Argomento (possiamo indicarne quanti ne vogliamo, anche nessuno). Un argomento è costituito da un nome di tipo seguito da un  identificatore (ad esempio int x ), esattamente come in una dichiarazione di variabile; ed infatti, all’interno della funzione, un argomento si comporta come una variabile (locale). Gli argomenti permettono di passare dei parametri quando la funzione viene richiamata. I parametri sono separati da virgole.
  • Istruzioni è il corpo della funzione: un blocco di istruzioni racchiuse tra parentesi graffe {}

Esempio di funzione:

// esempio dell uso di una funzione
#include <iostream>

      int z;          //variabile globale
                   // parametri formali
int somma (int a, int b)
{
  int r; //variabile locale
  r=a+b;
  return r;
}
int main ()
{
z = somma (5,3); //chiamata alla funzione con il

                  // passaggio di  parametri attuali
  cout << “Il risultato e’ ” << z;
  return 0;
}

Cicli

Teorema di Jacopini: Qualunque algoritmo può essere risolto con una delle tre strutture di controllo fondamentali: Sequenza, selezione, iterazione. Cicli di ripetizione Premessa: Contatore (C) Variabile numerica intera che si incrementa di una unità ad ogni iterazione. C=C+1 oppure C++. E’ buona norma prima di usare un contatore inizializzarlo a zero Sommatore (S) Variabile numerica che viene incrementata di una certa quantità ad ogni iterazione. S=S+X E’ buona norma prima di usare un sommatore inizializzarlo a zero Cosa intendiamo per ciclo nell’ambito della programmazione? Essenzialmente ci riferiamo ad una serie di istruzioni che possono essere espresse in una forma sintetica attraverso una iterazione perchè risultano in qualche modo simili. Ad esempio immaginiamo di voler calcolare la media delle età di 20 persone. L’istruzione elementare di riferimento è sempre la stessa, quella che consente di caricare 20 età e di accumulare le età in una variabile di tipo sommatore. Situazioni simili a quella descritta (ovvero con necessità di ripetere istruzioni simili) sono molto frequenti e si può dire che i cicli siano utilizzati praticamente in ogni tipo di programma. Il vantaggio, utilizzando un ciclo, è di non dover scrivere le istruzione tante volte quante è necessario ripeterle ma, come vedremo meglio in seguito, una volta soltanto, specificando il numero di ripetizioni. In alcuni casi il numero delle ripetizioni viene specificato in forma esplicita (parliamo in questo caso di un tipo particolare di ciclo detto ciclo for) o in forma implicita (è il caso dei cicli di tipo while o do-while). Esaminiamo ora più nel dettaglio le caratteristiche dei vari tipi di cicli appena menzionati nel linguaggio C++, cominciando dal ciclo for. Il ciclo for (o ciclo con contatore) Come già accennato, nel caso del ciclo for specifichiamo in modo esplicito per quante volte l’istruzione deve essere ripetuta usando un contatore. Esercizio determinazione della media delle età di 20 persone.

….. …..
int e, sommae=0;
float med;
int main()
{
for(int i=0;i<20;i++)
{
cout<<”inserisci e=”;
cin>>e;
sommae=sommae+e;
cout<<“\n”;
}
med=sommae/20;
cout<<”\n la media delle eta\’:”<<med;
return 0;
}

Array

Array ( vettore)
Definizione. Un array è una variabile strutturata
Un array può essere definito come una “collezione organizzata di oggetti”. Analizziamo la
definizione e capiremo molte cose, innanzitutto il concetto di “collezione” implica che tali
oggetti siano dello stesso tipo, così, prendendo spunto dal mondo reale, potremmo
definire un array di mele, che, quindi non può contenere nessun “oggetto pera”; un array
in C è una collezione di variabili dello stesso tipo.
“Organizzata” implica che sia possibile identificare univocamente tutti gli oggetti
dell’array in modo sistematico; questo in C viene fatto tramite l’uso di indici numerici
che, in un array di dimensione N, vanno da 0 ad N-1.
Riprendendo l’esempio della rubrica del cellulare, usato per spiegare le variabili nella
lezione 11, si può pensare a quando creiamo un “gruppo suonerie”, ad esempio di
nome “amici scuola”; tale gruppo può contenere a tutti gli effetti un certo numero di
nomi/numeri dei nostri compagni di classe, ecco questo “gruppo” è un array, perchè
formato da oggetti dello stesso tipo (nomi/numeri) ed indentificato da un nome (amici
scuola) che li accomuna.
Ma vediamo nel dettaglio come è possibile dichiarare un array:
int myarray[10];
Come si può notare un array viene dichiarato mettendo il nome della variabile
(myarray), e ,tra parentesi quadre, la cifra che identifica il numero di elementi dello
stesso tipo (int) e quindi la dimensione dell’array.
Nell’esempio, ognuno dei dieci interi viene chiamato elemento dell’array e dieci è la
dimensione dell’array. In C, come già detto, ogni elemento viene identificato da un
numero, contando da 0 (invece che da 1) ed arrivando ad N (la dimensione, nel nostro
esempio uguale a 10) – 1 (quindi arriviamo a 9); per far comprendere meglio il concetto
abbiamo creato la seguente immagine che ci riporta ad un paragone con il mondo
reale;
myarray[3]=’w’;
In questa immagine l’array viene paragonato ad un palazzo. Pensateci bene, quando
diciamo che un palazzo ha 5 piani, in realtà ha sei livelli; cioè il piano terra è il primo
livello, il primo piano il secondo, e così via; analogamente succede nell’array, se
abbiamo un array di dimensione 6, i suoi indici andranno da 0 a 5 e un elemento
richiamato, ad esempio, tramite l’indice 3, è il quarto elemento, questo perché si inizia a
contare da 0.
L’analogia assume maggiore importanza, anche per far capire che le variabili dell’array
sono dello stesso tipo, così come un array di int può contenere solo int (e non char o
float), un palazzo che contiene uffici, in questo esempio, può contenere solo uffici (e
non abitazioni).