Форум: Форум C++Разное
Новые темы: 00
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Шифрование / расшифровка Решётки Кардано
 
 автор: vitalino   (23.11.2009 в 14:52)   письмо автору
 
 

Здравствуйте уважаемые гуру форума.
Столкнулся с задачей написать программу которая шифрует/расшифровывает текст закодированный решёткой Кардано.
Вот ссылка на сам алгоритм
http://school-555.narod.ru/kript/3.htm
Я решил поворачивать на 180 гр. Так как на я просто не додумался как сделать .
Вот что получилось у меня на данный момент :
#include <vcl.h>
#pragma hdrstop
#pragma argsused
#include <iostream.h>


int main(int argc, char* argv[])
{
int i1=0,j1=0,i=0,j=0,m=0,p=8,n=4;
int z=0;
char fraza[16];
char slovo[4][4]={
{'0','1','0','0'},
{'1','0','0','0'},
{'0','1','0','0'},
{'0','0','0','1'}
};
cout<<"Kluch : ";
cout<<"\n";
for(i1=0;i1<4;i1++)
{
cout<<"\n";
for(j1=0;j1<4;j1++)
{
cout<<slovo[i1][j1];
cout<<" ";
}
}
cout<<"\n";
cout<<"Enter text max 16 - ";
cin>>fraza;
cout<<"\n";
cout<<"Enter complete";
cout<<"\n";
 for(i1=0;i1<4;i1++)
 {
  for(j1=0;j1<4;j1++)
        {
         if (slovo[i1][j1]=='1')
        {
           slovo[i1][j1]=fraza[m];
           m++;
        }
        else
        {}
        }
  }
  cout<<"\n";
cout<<"vivod soderzgimogo : ";
cout<<"\n";
for(i1=0;i1<4;i1++)
{
cout<<"\n";
for(j1=0;j1<4;j1++)
{
cout<<slovo[i1][j1];
cout<<" ";
}
}
cout<<"\n";
m=4;




      for (i=0;i<4;i++)
        {
        z=0;
  for (j=0;j<4;j++)
  {
        if (slovo[i][j]!='0'&&z!=1)
        {
        n=4;
        z++;
           switch(j)
{
case 0:slovo[i][n-1]=fraza[m];m++;cout<<"z0";
 break;
case 1:slovo[i][n/2]=fraza[m]; m++; cout<<"z1";
 break;
case 2:slovo[i][n/2-1]=fraza[m]; m++;cout<<"z2";
 break;
case 3:slovo[i][0]=fraza[m]; m++; cout<<"z3";
 break;
}
         }
        else{cout<<"else";}
  }
        }



cout<<"\n\n";



  cout<<"\n";
cout<<"vivod soderzgimogo : ";
cout<<"\n";
for(i1=0;i1<4;i1++)
{
cout<<"\n";
for(j1=0;j1<4;j1++)
{
cout<<slovo[i1][j1];
cout<<" ";
}
}
cout<<"\n";
m=4;
   for (i=0;i<4;i++)
        {
        z=0;
  for (j=0;j<4;j++)
  {
        if (slovo[i][j]==fraza[m]&&z!=1)
        {
        n=4;
        z++;
           switch(i)
{
case 0:slovo[n-1][j]=fraza[p];p++;m++;cout<<"z0";
 break;
case 1:slovo[n/2][j]=fraza[p]; p++;m++; cout<<"z1";
 break;
case 2:slovo[n/2-1][j]=fraza[p]; p++;m++;cout<<"z2";
 break;
case 3:slovo[0][j]=fraza[p]; p++;m++; cout<<"z3";
 break;
}
         }
        else{cout<<"else";}
  }
        }

   cout<<"\n";
cout<<"vivod soderzgimogo : ";
cout<<"\n";
for(i1=0;i1<4;i1++)
{
cout<<"\n";
for(j1=0;j1<4;j1++)
{
cout<<slovo[i1][j1];
cout<<" ";
}
}
cout<<"\n";
char response;
cin>>response;
return 0;
}
//---------------------------------------------------------------------------


здесь много лишнего промежуточный вывод содержимого массива и прочее.
У меня получилость записать первые 4 буквы в квадрат, отразить на 180 и записать ещё 4
это вот этот кусок

cout<<"Enter text max 16 - ";
cin>>fraza;
cout<<"\n";
cout<<"Enter complete";
cout<<"\n";
 for(i1=0;i1<4;i1++)
 {
  for(j1=0;j1<4;j1++)
        {
         if (slovo[i1][j1]=='1')
        {
           slovo[i1][j1]=fraza[m];
           m++;
        }
        else
        {}
        }
  }
  cout<<"\n";
cout<<"vivod soderzgimogo : ";
cout<<"\n";
for(i1=0;i1<4;i1++)
{
cout<<"\n";
for(j1=0;j1<4;j1++)
{
cout<<slovo[i1][j1];
cout<<" ";
}
}
cout<<"\n";
m=4;




      for (i=0;i<4;i++)
        {
        z=0;
  for (j=0;j<4;j++)
  {
        if (slovo[i][j]!='0'&&z!=1)
        {
        n=4;
        z++;
           switch(j)
{
case 0:slovo[i][n-1]=fraza[m];m++;cout<<"z0";
 break;
case 1:slovo[i][n/2]=fraza[m]; m++; cout<<"z1";
 break;
case 2:slovo[i][n/2-1]=fraza[m]; m++;cout<<"z2";
 break;
case 3:slovo[i][0]=fraza[m]; m++; cout<<"z3";
 break;
}
         }
        else{cout<<"else";}
  }
        }


но дальше начались проблемы .
Алгоритм громоздкий и не совершенный. Поэтому дальше писать нет смысла .
Может быть кто сталкивался с подобной задачей, можете подсказать способы решения.
Или возможно кто то может подсказать как "поварачивать" двумерный массив на 90 градусов поочерёдно записывая в него данные.
Вообщем пишите любые советы. надеюсь на помощь.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования