Zakodowac i odtworzyc dany tekst

0

Witam! Dopiero zaczynam programowanie dlatego nawet tak prosty program sprawia mi klopot. Musze napisac program ktory zakoduje i odtworzy dany tekst stosujac zamiane znaków. Mam cos takiego ale to jest raczej zle

program szyfr;
{$APPTYPE CONSOLE}
uses SysUtils;

var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u,w,y,z: ?;
    i: integer;
begin
  writeln('Jesli chcesz zaszyfrowac dane wcisnij 1');
  writeln('Jesli chcesz rozszyfrowac dane wcisnij 2');
  read(i);
  begin
  if i=1 then
  a:=2;
  b:=4;
  c:=6;
  d:=5;
  write('podaj wyraz do zaszyfrowania :');
  if i=2 then
  2:=a;
  6:=c;
  5:=d;
  4:=b;
  write('podaj do rozszyfrowania:');
  end;
  end.

prosze o pomoc :)

0
if i=1 then
   a:=2;
b:=4;
c:=6;
d:=5;

Tylko pierwsza instrukcja a:=2; jest wewnątrz if-a. Jeśli chcesz cały blok, trzeba dodać begin-end:

if i=1 then
begin
   a:=2;
   b:=4;
   c:=6;
   d:=5;
end;
0

nadal nie dziala ;/

program szyfr;
{$APPTYPE CONSOLE}
uses SysUtils;

var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u,w,y,z: real;
    i: integer;
begin
  writeln('Jesli chcesz zaszyfrowac dane wcisnij 1');
  writeln('Jesli chcesz rozszyfrowac dane wcisnij 2');
  read(i);
  if i=1 then
  begin
  a:=2;
  b:=4;
  c:=6;
  d:=5;
  end;
  write('podaj wyraz do zaszyfrowania :');
  else
  begin
  2:=a;
  6:=c;
  5:=d;
  4:=b;
  end;
  write('podaj do rozszyfrowania:');

  end.

Poza tym nie wiem jak zrobic żeby kiedy podaje wyraz do zaszyfrowania np abc , zeby zmienilo sie na 246 :(

0

do sharp
przecież piszę ze dopiero zaczynam programowanie? więc nie pisz o zajeciach bo dopiero teraz to zaczynamy, dlatego pytam i prosze o pomoc

0
  2:=a;
  6:=c;
  5:=d;
  4:=b;

Tak nie można; trzeba to zrobić inaczej ;)
Lektura na dzisiaj: Tablice

0

Tak myslalam że inaczej :( tylko nie mam pojęcia jak.
Wiem jak działają tablice, tylko nie rozumiem jak to zrobic zeby kodowalo slowo ktore podam :(

1

Ja zrobiłbym to tak:

Var Znaki: Array[0..25] of Char = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
   Zakodowane: Array[0..25] of Char = ('1', '2', '3', '4', '5', '6',...i tak dalej..., '25', '26'); //można dać dowolny znak/ciąg znaków

Function Indeks(T: Integer; Ch: String): Integer;
Var I, N: Integer;
    F: Boolean;
Begin
 Result := -1;
 F := False;
 if (T = 0) Then
  For I := Low(Znaki) Do High(Znaki) Do
   if (Znaki[I] = Ch[I]) Then
    Result := I;
 if (T = 1) Then
  For I := Low(Zakodowane) Do High(Zakodowane) Do
   if (Length(Zakodowane[I]) = Length(Ch)) Then
   Begin
    F := True;
    For N := 1 To Length(Ch) Do
     if (Zakodowane[I][N] <> Ch[N]) Then
      F := False;
    if (F) Then
     Result := I;
   End;
End;

Function Zakoduj(Str: String): String;
Var I, N: Integer;
Begin
 Result := '';
 For I := 1 To Length(Str) Do
 Begin
  N := Indeks(0, Str[I]);
  if (N > 0) Then
   Result := Result + Znaki[N];
 End;
End;

Function Odkoduj(Str: String): String;
Const Rozdzielnik = ' ';
Var I, N: Integer;
    C: String;
Begin
 Result := '';
 For I := 1 To Length(Str) Do
 Begin
  if (Str[I] = Rozdzielnik) Then
  Begin
   N := Indeks(1, C);
   if (N > 0) Then
    Result := Result+Zakodowane[N]+Rozdzielnik;
   C := '';
  End Else
   C := C+C[I];
 End;
End;

Nie sprawdzałem, czy działa; pisałem z pamięci.
Jedna uwaga:
Takie coś: 20123121325 nie zadziała; trzeba pooddzielać spacją.
20 12 3 1 21 3 25
W razie pytań lub błędów w kodzie pisz na forum ;)
Edit: ten kod działa rzecz jasna tylko dla pojedynczych liter (tzn.kodowanie działa dla pojedynczych znaków; odkodowywanie działa dla kilku/kilkunastu naraz).

1

Patryk, taka tablica jeszcze może być:

var Znaki: array[0..25] of Char = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');

choć znacznie prościej jest ją zapisać w ten sposób:

var Znaki: array[0..25] of Char = 'abcdefghijklmnopqrstuvwxyz';

Natomiast taka tablica:

var Zakodowane: array[0..25] of Char = ('1', '2', '3', '4', '5', '6',...i tak dalej..., '25', '26');

może pomieścić 26 cyfr zapisanych w postaci znakowej, ale w żaden sposób nie pomieści 26 liczb od 1 do 26, gdy liczby dwucyfrowe są zapisane w postaci dwóch znaków. Chyba, żeby zadeklarować tablicę 52-elementową i wtedy rozpatrywać po dwa znaki na raz:

var Zakodowane: array[0..51] of Char = '01020304050607080910111213...i tak dalej...2526';
// albo
var Zakodowane: array[0..51] of Char = ' 1 2 3 4 5 6 7 8 910111213...i tak dalej...2526';

Druga wersja jest nawet lepsza, bo zakodowany tekst będzie w postaci grup cyfr o nieregularnej długości, np:
201510 51920161815192025192625 618 // Nie do złamania ;)

PS. Dlaczego Znaki i Zakodowane są zmiennymi, a nie stałymi?

0

'12' to 'ab' czy może 'l' ?

0 użytkowników online, w tym zalogowanych: 0, gości: 0