Δημοσιεύτηκε: 11 Φεβ 2012, 16:45
από migf1
Star_Light έγραψε:Αντε και καλη αρχή :D

http://ideone.com/PaJUZ

+1 αλλη μια συναρτηση που θα εκτυπώνει .

Κι εγώ νόμιζα πως το είχες ήδη έτοιμο :)

Btw, γιατί δεν ξεκινάς με Ceasar cipher που είναι πιο βατός στην υλοποίηση, συν ότι πάνω σε αυτόν πατάει κατόπιν ο Vigenère; Θα μπορούσες με αυτόν τον τρόπο να δεις ιδίας όμασι πως φτιάχνοντας έναν βασικό αλγόριθμο (πιθανότατα σε ξεχωριστή, re-usable συνάρτηση) μπορείς να τον χρησιμοποιήσεις ως μέρος άλλου αλγόριθμου, που να περιλαμβάνει τον πρώτο.

Επίσης θα μπορείς να ρωτάς τον χρήστη να διαλέξει έναν από τους 2 αλγόριθμους για την κρυπτογράφηση/αποκρυπτογράφηση ;)

Παραθέτω και τον κώδικά σου ψιλο-διορθωμένο σύμφωνα με τα conventions της C...

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>

#define SIZE (1024+1) /* 26 x 26 */

void Alphabet_table( char table[SIZE] );
void Vigenere_table( char table[SIZE] );
void Vigenere_Encryption( char plaintext[SIZE], char key[SIZE] );

/*****************************************************//**
*
*********************************************************
*/
int main( void )
{
char table[SIZE] = {'\0'};
char plaintext[SIZE] = {'\0'};
char key[SIZE] = {'\0'};

printf("Δώστε μια συμβολοσειρά : ");
fgets(plaintext, SIZE, stdin);

printf("Δώστε το κλειδί : ");
fgets(key, SIZE, stdin);

printf("H συμβολοσειρά που δόθηκε ειναι : %s " , plaintext);
printf("Το κλειδί που δόθηκε ειναι : %s " , key);

Alphabet_table( table );
Vigenere_table( table );
Vigenere_Encryption(plaintext, key);

return 0;
}

/*****************************************************//**
*
*********************************************************
*/
void Alphabet_table( char table[SIZE] )
{
/* ... Αρχικοποίηση του αρχικου πλαισίου ... */

return;
}

/*****************************************************//**
*
*********************************************************
*/
void Vigenere_table( char table[SIZE] )
{
/* ... Αρχικοποίηση του πλαισίου του Vigenere ... */
return;
}

/*****************************************************//**
*
*********************************************************
*/
void Vigenere_Encryption( char plaintext[SIZE] , char key[SIZE] )
{
/* ... Κρυπτογράφηση ... */
return;
}


Βασικά, στα #define χρησιμοποιούμε κεφαλαία γράμματα, για να είναι αμέσως αντιληπτό πως πρόκειται για preprocessor constant/macro. Επίσης, αρχικοποιώ και τα 3 strings με '\0' παντού, για να μειώσω τις πιθανότητας ενδεχόμενου boundary overflow στον κώδικα που θα τα διαχειριστεί, και άλλαξα τα σχόλια από // σε /* */ ώστε να μπορεί ο κώδικας να γίνεται compile ΚΑΙ σύμφωνα με τα πρότυπα C89/C90 της γλώσσας ;) Τέλος, έκανα ευδιάκριτες τις αρχές και τα τέλη των συναρτήσεων.