مشاهدة النسخة كاملة : مسألة تشفير (خوارزمية يوليوس قيصر)
Golden man
03-03-2008, 08:06 AM
أرادت شركة ان ترسل رقم يتكون من اربع خانات عبر الشبكة و لكن هذا الرقم ذو أهمية عالية لذلك طلبت منك ان تكتب برنامج لتشفير هذا الرقم لكي ترسله ثم بعد استقباله في الطرف الآخر يتوجب عليك ان تكتب برنامج فك تشفير للرجوع انطلاقا من رقمك بعد التشفير الى الرقم السابق استخدم شيفرة يوليوس القيصر في حل هذه المسألة
شيفرة يوليوس قيصر:
قم بإضافة العدد 7 الى كل خانة من الخانات الأربعة
ثم اوجد باقي قسمة كل خانة على عشرة.
ثم بدّل الخانة الأولى مع الثالثة و الخانة الثانية مع الرابعة
allmaida
03-03-2008, 05:30 PM
السلام عليكم اخي golden man :
شكرا على المسألة وهاد الحل يللي طلع معي بتمنى اسمع رأيك فيه#include<iostream.h>
go(int x)
{
x=x+7;
x=x%10;
return(x);
}
back( int y)
{
if(y<7)
{ y=y+3;
return(y);
}
else
{
switch (y)
{
case 7:
{
y=0;
return(y);
}
case 8:
{
y=1;
return(y);
}
case 9:
{
y=2;
return(y);
}
}
}
}
void main ()
{
int a[4],f[4],m;
for(int i=0;i<4;i++)
{
cin>>a[i];
m=a[i];
f[i]=go(m);
}
m=f[1];
f[1]=f[3];
f[3]=m;
m=f[0];
f[0]=f[2];
f[2]=m;
for(i=0;i<4;i++)
cout<<f[i];
cout<<endl;
for(i=0;i<4;i++)
{
m=f[i];
a[i]=back(m);
}
m=a[1];
a[1]=a[3];
a[3]=m;
m=a[0];
a[0]=a[2];
a[2]=m;
for(i=0;i<4;i++)
cout<<a[i];
cout<<endl;
}
SYR_SNIPER
03-04-2008, 06:13 AM
اولا : السلام عليكم .
وثانيا : شكرا على الأسئلة الرائعة ....
ثالثا : انا حليت السؤال طبعا من الطرفين ( تشفير وفك تشفير) ...
رابعا والأهم : هناك خطأ بالسؤال او بفهمي للسؤال وهو : عندما يكون لدينا العدد واحد ونريد ان نشفره نضيف له 7 فيصبح ثمانية ونأخد باقي القسمة على عشرة فينتج لدينا 0 ( نتعامل مع اعداد صحيحة طبعا اذا ادرت بدونها فالسؤال محلول ^^) وعندما نريد فك تشفير هذا الصفر فلو اضفنا له عشرة ثم طرحنا 7 ينتج لدينا 3 وهذه النتيجة خاطئة
طبعا انا عتبرت الرقم المدخل عبارة عن رقم واحد : 4567 وليس مجموعة ارقام 4/5/6/7
هذا حلي المتواضع وشكرا واتمنى الإيضاح ;)
#include <iostream>;
#include <cmath>
using namespace std;
int Encode (int num) {
if (num /10000 > 1)
return 0;
int arr[4]={0};
int i=0,j=0;
int result=0;
while (num > 0) {
switch (i) {
case 0 : j=2;break;
case 1 : j=3;break;
case 2 : j=0;break;
case 3 : j=1;break;
};
arr[j] = ((num % 10) + 7) % 10 ;
num /= 10;
result += arr[j] * pow(10.0,j);
i++;
}
return result;
}
int Decode (int num) {
if (num /10000 > 1)
return 0;
int arr[4]={0};
int i=0,j=0;
int result=0;
while (num > 0) {
switch (i) {
case 0 : j=2;break;
case 1 : j=3;break;
case 2 : j=0;break;
case 3 : j=1;break;
};
arr[j] = ((num % 10) + 10) - 7 ;
num /= 10;
result += arr[j] * pow(10.0,j);
i++;
}
return result;
}
void main() {
int num;
char type;
bool ok;
cout << "Welcome to my little En/De coder\n";
do {
cout << "\n\nEnter your number here : ";
cin >> num;
cout << "For Encoding Type E | For Decoding type D : ";
cin >> type;
if ((type == 'e') || (type == 'E') )
cout << "Encoded numer : " << Encode(num) << endl;
if ((type == 'd') || (type == 'D') )
cout << "Decoded numer : " << Decode(num) << endl;
cout << "Other number ? 0 to exit : ";
cin >> ok;
}while(ok);
}
Simple :
Welcome to my little En/De coder
Enter your number here : 4567
For Encoding Type E | For Decoding type D : e
Encoded numer : 3412
Other number ? 0 to exit : 1
Enter your number here : 3412
For Encoding Type E | For Decoding type D : d
Decoded numer : 4567
Other number ? 0 to exit :
A_Alakkad
03-04-2008, 11:09 AM
السلام عليكم ورحمة الله وبركاته .
أحببت أن أضع حلي بين أيديكم
وأرجو تنبيهي إن احتوى على أية أخطاء
#include <iostream.h>
int dec(int x)
{
int y=(x+3)%10;
return y;
}
void main()
{
int x[4]={0};
for (int i=0 ;i<=3;i++)
cin >> x[i];
for (i=0 ;i<=3;i++)
{
cout << dec(x[i]);
}
cout <<endl;
}
وجزاكم الله كل خير .
SYR_SNIPER
03-05-2008, 05:23 AM
جاري انتظار الجواب ^^
vBulletin® v3.8.4, Copyright ©2000-2012, TranZ by Almuhajir