Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Kriptovanje podataka, rotiranje

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Kriptovanje podataka, rotiranje

[ Pregleda: 3217 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

galitden
RH

Član broj: 97645
Poruke: 8
*.cmu.carnet.hr.

ICQ: 301235474


Profil

icon [Zadatak] Kriptovanje podataka, rotiranje13.03.2007. u 19:34 - pre 208 meseci
Evo ljudi pisem program (za maturalni rad) koji služi za kriptiranje podataka i pri tome koristi des algoritam. Te jedan dio programa treba rotirati zadane bitove... U ovom codu sto sam postavio ovdje, imaju dvije greške, prvo program mi neće da izađe iz prve FOR petlje (ako mi je uvjet nije k<x, ako je x od 1 do 14 izlazi iz petje a ako je x od 15 pa nadalje ne izlazi iz petlje).
A drugi problem je pri ispisu C nizova pomoću druge FOR petlje, ispisani nizovi imaju duljine veće od 28 znakova (tj. imaju više od 28 znakova)??? Te evo molim vas da mi pokažete i objasnite u čemu je problem???
Zadatak ovoga djela programa je da sa zadanim stringom u ovome slučaju C[0] i D[0] vrši rotiranje znakova u ljevo... I to tako da stvori 16 novih stringova ( C[1] , C[2], ... , C[16] i D[1] , D[2], ... , D[16] ) pri čemu je svaki pomaknut u odnosu na predhodni za 1 ili 2 znaka što ovisi o trenutnoj vrjednosti K.
Code:

#include <iostream>
#include <string>
using namespace std;

void pomicanje_ljevo(char a[], int x, char b[])
{
if(x==1){
 char temp=a[0];
 for(int s=0;s<27;s++)
 b[s]=a[s+1];
 b[27]=temp;
 b[28]='\0';
}
else{
 char temp1 =a[0],temp2=a[1];
 for(int s=0;s<26;s++)
 b[s]=a[s+2];
 b[26]=temp1;
 b[27]=temp2;
 b[28]='\0';
}
}

int main()
{
char C[17][28],D[17][28];

strcpy(C[0],"0000000011111111111111111001");
strcpy(D[0],"1001001010100111001011100001");

C[0][28]='\0';
D[0][28]='\0';
cout<<C[0]<<endl;
cout<<D[0]<<endl<<endl;

for(int k=0;k<16;k++){

 if(k==0 || k==1 || k==8 || k==15){
    pomicanje_ljevo(C[k],1, C[k+1]);
    pomicanje_ljevo(D[k],1, D[k+1]);
 }
 else{
    pomicanje_ljevo(C[k],2, C[k+1]);
    pomicanje_ljevo(D[k],2, D[k+1]);
 }

}
for(int z=1;z<17;z++)
{
cout<<"C: "<<C[z]<<endl;
}
return 0;

 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
89.190.198.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: [Zadatak] Kriptovanje podataka, rotiranje13.03.2007. u 20:16 - pre 208 meseci
Svaki od for-ova ti se sigurno završava.

Da bi radio C[0][28] = 0, trebaš C da definišeš kao C[ nekakonstanta ][29]. Kada ovo ispraviš, trebalo bi da stringovi prilikom ispisa ne cure (tj. da dužine izlaznih stringova ne budu veće od očekivanih).
Ipak se ++uje.
 
Odgovor na temu

galitden
RH

Član broj: 97645
Poruke: 8
*.cmu.carnet.hr.

ICQ: 301235474


Profil

icon Re: [Zadatak] Kriptovanje podataka, rotiranje14.03.2007. u 21:44 - pre 208 meseci
Probao sam to sa "nekakonstanta" no opet isti problem, ispisjue mi više od 28 znakova... Mozda nisam dobro napisao, mozete li mi vi dati primjer kako da to napravim sa ovim djelom programa???
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
89.190.198.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: [Zadatak] Kriptovanje podataka, rotiranje15.03.2007. u 05:45 - pre 208 meseci
Nije ovde poenta u nekojkonstanti, koja je trebala da ti ostane isti broj kao što je i bila, nego u broju iza nje.

Indeksiranje polja u jeziku C počinje od 0, i ako odrediš da imaš 28 mesta, možeš da pišeš na indeksima 0-27. Ne i na 28-om (zapravo 29-om po redu). Zbog toga je ovo:
Code:
char C[17][28];
// ...
C[0][28]='\0';
Uzrok tvog problema. Treba da povećaš dužine nizova po kojima pišeš sa 28 na 29 pri deklaraciji.
Ipak se ++uje.
 
Odgovor na temu

galitden
RH

Član broj: 97645
Poruke: 8
*.cmu.carnet.hr.

ICQ: 301235474


Profil

icon Re: [Zadatak] Kriptovanje podataka, rotiranje15.03.2007. u 17:01 - pre 208 meseci
Sada radi! Puno hvala na pomoći...
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Kriptovanje podataka, rotiranje

[ Pregleda: 3217 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.