<mosaic.cnfolio.com>
PROGRAM
  1. /*
  2.  
  3.    START
  4.       READ cipher_key_length
  5.  
  6.       IF cipher_key_length < 2 or cipher_key_length > 16
  7.          THEN
  8.             PRINT cipher key length must be 2 to 16 characters in length
  9.          ELSE
  10.             READ cipher_key
  11.            
  12.             IF cipher_key contains other than lower case characters or has duplication
  13.                THEN
  14.                   PRINT cipher key can only contain lower case characters of the alphabet (a-z)
  15.                ELSE
  16.  
  17.  
  18.                   READ input_text_length
  19.              
  20.    
  21.                   IF input_text_length < 4 or input_text_length > 256
  22.                       THEN
  23.                          PRINT plain text length must be 4 to 256 characters in length
  24.                       ELSE
  25.                          READ input_text
  26.                                
  27.                             IF input_text contains other than lower case characters and space
  28.                                THEN
  29.                                   PRINT plain text can only contain lower case characters of the alphabet (a-z) or spaces
  30.                                ELSE
  31.                                  
  32.                                   FOR N=0 AND N < cipher_key_length
  33.                                  
  34.                                      from_letter = cipher_key[N}
  35.                                      to_letter = next letter
  36.                                      
  37.                                      FOR j=0 AND j < input_text_length
  38.                                      
  39.                                         REPLACE text from_letter to to_letter
  40.                                      
  41.                                      END FOR
  42.                                  
  43.                                   END FOR
  44.                                  
  45.                                END IF
  46.                                
  47.                        END IF
  48.             END IF
  49.       END IF
  50.      
  51.      
  52.    END
  53.  
  54.  
  55. */
  56.  
  57. #include<stdio.h>
  58. #include<string.h>
  59.  
  60. int main( void )
  61. {
  62.    /*defining variables*/
  63.    int cipher_key_length;
  64.    char cipher_key[17];
  65.  
  66.    int input_text_length;
  67.    char input_text[257];
  68.    char ciphered_text[257];
  69.    
  70.    int i,j;
  71.    int N;
  72.    
  73.    int hasErrors=0;
  74.    
  75.    /*getting input from screen*/
  76.    
  77.    /* get cipher key length */
  78.    scanf("%d",&cipher_key_length);
  79.    
  80.    if (cipher_key_length < 2 || cipher_key_length > 16)
  81.    {
  82.       printf("cipher key length must be 2 to 16 characters in length\n");
  83.    }
  84.    else
  85.    {
  86.      /* get cipher key */
  87.      /* reading an empty char to fix a problem*/ 
  88.      scanf("%c",&cipher_key[0]);
  89.  
  90.      /* loop to read cipher key */
  91.      for (i=0;i<cipher_key_length;i++)
  92.      {
  93.         scanf("%c",&cipher_key[i]);
  94.        
  95.         if (cipher_key[i] < 'a' || cipher_key[i] > 'z')
  96.         {
  97.           printf("cipher key can only contain lower case characters of the alphabet (a-z)\n");
  98.             hasErrors=1;
  99.         }
  100.         else
  101.         {
  102.            /* search for duplication */
  103.            for(j=0;j<i;j++)
  104.            {
  105.               if (cipher_key[i] == cipher_key[j])
  106.               {
  107.             printf("cipher key is duplicated\n");
  108.                   hasErrors=1;
  109.               }
  110.            }
  111.         }
  112.        
  113.      }
  114.      
  115.      if (hasErrors == 0)
  116.      {
  117.  
  118.        /* get plain text length */
  119.        scanf("%d",&input_text_length);
  120.      
  121.        if (input_text_length < 4 || input_text_length > 256)
  122.        {
  123.           printf("plain text length must be 4 to 256 characters in length\n");
  124.        }
  125.        else
  126.        {
  127.          /*reading an empty char to fix a problem*/ 
  128.          scanf("%c",&input_text[0]);
  129.      
  130.          /* loop to read plain text */
  131.          for (i=0;i<input_text_length;i++)
  132.          {
  133.             scanf("%c",&input_text[i]);
  134.            
  135.             /* accept only spaces and lower case characters */
  136.             if (input_text[i] != ' ')
  137.             {
  138.               if (input_text[i] < 'a' || input_text[i] > 'z')
  139.               {
  140.                   printf("plain text can only contain lower case characters of the alphabet (a-z) or spaces \n");
  141.                   hasErrors=1;
  142.               }
  143.             }
  144.          }
  145.          
  146.          if (hasErrors == 0)
  147.          {
  148.            /* copy plain text to another array for ciphering */
  149.            strcpy(ciphered_text,input_text);
  150.            
  151.            /*looping through  the steps */
  152.            for (N=0;N<cipher_key_length;N++)
  153.            {
  154.               char from_letter;
  155.               char to_letter;
  156.        
  157.               from_letter = cipher_key[N];
  158.              
  159.               if (N < cipher_key_length-1)
  160.                  to_letter = cipher_key[N+1];
  161.               else
  162.                  to_letter = cipher_key[0];
  163.              
  164.               printf("Step %d substitute %c with %c\n",N+1,from_letter,to_letter);
  165.        
  166.               for (int i=0;i<input_text_length;i++)
  167.               {
  168.                  if (input_text[i]==from_letter) ciphered_text[i]=to_letter;
  169.               }
  170.              
  171.               printf("%s\n",ciphered_text);
  172.            }
  173.          }
  174.        }
  175.      }
  176.    }
  177. }