Você está na página 1de 9

УНИВЕРЗИТЕТ “СВ.

КЛИМЕНТ ОХРИДСКИ“
Технички Факултет- Битола
Отсек за Информатика и Компјутерска Техника

ВОВЕД ВО ПРОГРАМИРАЊЕ 1
Семинарска работа

Кодирање на текст според даден клуч 2

Студент
ПАНЧО ТРЕНКОСКИ

Професор Асистент

Илија Јолевски Рамона Маркоска

Битола, 2009
Дефинирање на проблем

Програма во која преку мени ќе се одбира дали внесен стринг ќе се


кодира или ќе се декодира. Кодирањето и декодирањето да се решат
со 2 функции.

Клучот на кодирање: Во текстот се користат само букви од азбука и


цифри. Секоја буква во стрингот која е на непарна локација се
заменува со буква 2 места после неа во абецедата. Последните букви
Y,Z, се заменуваат со А,B следствено. Парните букви во стрингот не
трпат никакви измени. Непарните цифри се заменуваат со парните
цифри кои се нивни следбеници, а парните цифри, се заменуваат со
нивните непарни претходници. Цифрата 9 се кодира со 0, а 0 со 9.

Задачата да се тестира со 2 стринга. Прво да се кодираат а потоа


кодираната верзија да се декодира.

Анализа

Се започнува со внесувањес на string, па потоа се создава


менито. Потоа string-от треба да се подели на индекси. Секој индекс
треба да означува една буква или број. Следно е замената на
цифрите и буквите која ќе се врши со if и друга некоја функција која
врши улога на замена на кој било дел од внесениот string од
почетокот до крајот на целиот string. Горе напоменатото важи за
клучот на кодирање. Клучот на декодирањето оди на многу сличен
начин но со мали промени кои имаат голем ефект врз програмата.
Најупотребувана функција овде би била if. Постојат повеќе начини
да се состави ваква програма од кои јас го избрав овај начин.
Резултатот ќе биде или кодирање или декодирање каде што после
кодирањето ќе се забележи на кој начин работи програмата. Потоа
декодирањето треба да се изврши на кодираниот текст. Резултатите
ќе бидат очигледни.

Листинг на задачата

#include <cstdlib>
#include <iostream>

using namespace std;

string kodiranje(string tekst)


{

for(int i = 0; i < tekst.length(); i++)

2|Страна
{
if((tekst[i]>='Y' && tekst[i]<='Z') || (tekst[i]>='y' && tekst[i]<='z'))
{

replace(tekst.begin(), tekst.end(), 'Y', 'B');// nova, no ednostavna


naredba
replace(tekst.begin(), tekst.end(), 'Z', 'A');
replace(tekst.begin(), tekst.end(), 'y', 'b');
replace(tekst.begin(), tekst.end(), 'z', 'a');
}
else{
if((tekst[i]>='A' && tekst[i]<='X') || (tekst[i]>='a' && tekst[i]<='x') )
{
if(i%2==0)//zameni za parni ili neparni
{
tekst[i]=tekst[i]+3;// 2 mesta posle bukvata e bukvata koja e na tretoto
mesto desno od nea ( zgolemi ja vrednosta 3 za da se promenat mestata )
}
}
else
{

if(tekst[i] >= '0' && tekst[i]<='9')


{

if(tekst[i] == '0')// zamena na brojkite oddelno


{
tekst[i] = '9';
}
else
{
if(tekst[i] == '1')
{
tekst[i] ='2';
}
else{
if(tekst[i] == '2')
{
tekst[i] = '1';
}
else{
if(tekst[i] == '3')
{
tekst[i] = '4';
}
else
{
if(tekst[i] == '4')

3|Страна
{
tekst[i] ='3';
}
else
{
if(tekst[i] == '5')
{
tekst[i] = '6';
}
else
{
if(tekst[i] == '6')
{
tekst[i] = '5';
}
else
{
if(tekst[i] == '7')
{
tekst[i] ='8';
}
else
{
if(tekst[i] == '8')
{
tekst[i] = '7';
}
else
{
if(tekst[i] == '9')
{
tekst[i] = '0';
}

}}}}}}}}}}}

}
}
return tekst;
}

string dekodiranje(string tekst)// slicno na kodiranjeto no so zamena vo nekoi


"+" so "-" itn.
{
for(int i = 0; i < tekst.length(); i++)
{
if((tekst[i]>='A' && tekst[i]<='B') || (tekst[i]>='a' && tekst[i]<='b') )
{

4|Страна
replace(tekst.begin(), tekst.end(), 'Y', 'B');
replace(tekst.begin(), tekst.end(), 'Z', 'A');
replace(tekst.begin(), tekst.end(), 'y', 'b');
replace(tekst.begin(), tekst.end(), 'z', 'a');
}
else
{
if((tekst[i]>='A' && tekst[i]<='X') || (tekst[i]>='a' && tekst[i]<='x') )
{
if(i%2==0)
{
tekst[i]=(char)((int)tekst[i]-3);
}
}
else
{
if(tekst[i] >= '0' && tekst[i]<='9')
{

if(tekst[i] == '9')
{
tekst[i] = '0';
}
else
{
if(tekst[i] == '2')
{
tekst[i] ='1';
}
else{
if(tekst[i] == '1')
{
tekst[i] = '2';
}
else{
if(tekst[i] == '4')
{
tekst[i] = '3';
}
else
{
if(tekst[i] == '3')
{
tekst[i] ='4';
}
else
{

5|Страна
if(tekst[i] == '6')
{
tekst[i] = '5';
}
else
{
if(tekst[i] == '5')
{
tekst[i] = '6';
}
else
{
if(tekst[i] == '8')
{
tekst[i] ='7';
}
else
{
if(tekst[i] == '7')
{
tekst[i] = '8';
}
else
{
if(tekst[i] == '0')
{
tekst[i] = '9';
}

}}}}}}}}}}}

}
return tekst;
}

int main(int argc, char *argv[])


{
string tekst;
int n;
cout<<"Vnesete tekst koj zavrsuva so '.' i sakate da se kodira ili
dekodira:";//meni
cout<<"\n";
getline(cin,tekst,'.');
cout<<"Vnesete 1 za vneseniot tekst da se kodira ili 2 za tekstot da se
dekodira:";
cout<<"\n";

6|Страна
cin>>n;
if(n==1)
{
cout<<"Vie izbravte tekstot da se kodira:";
cout<<"\n";
cout<<kodiranje(tekst);
cout<<".";
}
else
{
if(n==2)
{
cout<<"Vie izbravte tekstot da se dekodira:";
cout<<"\n";
cout<<dekodiranje(tekst);
cout<<".";
}
else
{

cout<<"Toa meni ne postoi!";


cout<<"\n";
}
}
cout<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}

Опис на кодот

Се користат библиотеките cstdlib и iostream. Потоа кодирањето и


декодирањето ќе се реши со две функции, една за кодирање и една за
декодирање. Функцијата за кодирање е слична со функцијата за декодирање
но треба да се направат мали промени кои ќе имаат голем ефект врз таа
функција. Функцијата се започнува со наредбата for која ке го подели string-
от на одделни зборови или цифри каде што ќе може да се изврши селекција
на тие зборови или цифри за да можат да се заменат со некоја буква и цифра.
Тоа е возможно со користење на наредбата if ili replace(od pocetok , do krajot
, ‘a’ se zamenuva so ,’ b’ ,). Наредбата replace е поедноставна наредба од if во
однос на замена на одделни букви или цифри. Потоа со користење на if се
заменуваат цифрите во опсег од 0 до 9 (if(tekst[i] >= '0' && tekst[i]<='9')),
потоа ги одделуваме буквите кои се наоѓаат на непарна позиција и ги
заменуваме со букви 2 места после нив што значи три места од десно според
ASCII кодот ( if(i%2==0) { tekst[i]=tekst[i]+3; ) со опсег од ‘a’ до ‘x’ или ‘A’ do
‘X’ . Со наредбата replace
се заменуваат ‘y’ и ‘z’ со ‘a’ и ‘b’ или ‘Y’ и ‘Z’ со ‘A’ и ‘B’.

7|Страна
Декодирањето оди на сличен начин, но во тој случај кај наредбата
replace се заменува кај со има ‘a’ и ‘b’ со ‘y’ и ‘z’ или ‘A’ и ‘B’ со ’Y’ и ‘Z’. Потоа
кај if што се однесува на цифрите се променуваат бројките обратно, а пак кај
if што се однесува на зголемување на 3 позиции се менува на -3 позиции со
опсег од ‘a’ до ‘x’ или ‘A’ do ‘X’.
Менито е поедноставно и се прави со користење на наредбата if каде
што во овој случај треба да се внеси 1 или 2 за да се избери дали текстот да
се кодира или декодира.

Тестирање и резултати

Внесен текст:
Marjan Tanevski so broj na index 1765 e roden vo Bitola 09 08 1991.

Кодираниот текст :
Paujdn Tdnhvvkl vo buom qa iqdhx 2856 h uogeq Eiwooa 90 97 2002.

Декодирањето на текстот Paujdn Tdnhvvkl vo buom qa iqdhx 2856 h uogeq


Eiwooa 90 97 2002 изгледа вака: Marjan Tanevski so broj na index 1765 e roden vo
Bitola 09 08 1991.

8|Страна
9|Страна

Você também pode gostar