Prośba o sprawdzenie kodu z szyfrem Cezara.

0

Dzień dobry. Napisałem program mający szyfrować i rozszyfrowywać tekst w szyfrze Cezara ale nie chce się skompilować. Terminalowy free pascal pod Ubuntu przy próbie skompilowania informuje mnie, że znalazł 3 błędy, niestety nie informuje gdzie i jakie to błędy. Bardzo proszę o pomoc i z góry za nią dziękuje. Z góry też przepraszam za brak użycia funkcji.

program szyfr_cezara;
uses CRT;

procedure Copyright;
begin
clrscr;

writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=             #CEZ-NIGMA 2.0            =');
writeln('=      STWORZONE PRZEZ                  =');
writeln('= = = = = = = = = = = = = = = = = = = = =');

end;

procedure Menu;
begin
var a:integer;
clrscr;

writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=             #CEZ-NIGMA 2.0            =');
writeln('=                > MENU <               =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;
writeln('            [1] SZYFROWANIE');
writeln('            [2] DESZYFROWANIE');
writeln('            [3] WYJDZ');
writeln;
writeln;
write('         WYBIERZ DZIALANIE (1-3): ');
readln(a);

case a of
1: Szyfrowanie;
2: Deszyfrowanie;
3: halt;

else

writeln('MUSISZ WPISAC 1, 2 lub 3');
end;
end;

procedure Szyfrowanie;
var tekst,a:string;
b,i,c:integer;

begin
clrscr;

writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=             #CEZ-NIGMA 2.0            =');
writeln('=             > SZYFROWANIE <           =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;
writeln('       WYPISZ TEKST DO ZASZYFROWANIA');
writeln('          (ZNAKI A-Z BEZ POLSKICH)');
writeln;
write('TEKST: ');
readln(tekst);
tekst:=upcase(tekst);
b:=length(tekst);
repeat
clrscr;
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=              #CEZ-NIGMA 2.0           =');
writeln('=              > SZYFROWANIE <          =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;
writeln('TEKST KTORY WPISALES: ',tekst);
writeln;
write('CZY CHCESZ TAK ZOSTAWIC? (TAK/NIE): ');
readln(a);
a:=upcase(a);
until a='tak';

clrscr;
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=              #CEZ-NIGMA 2.0           =');
writeln('=              > SZYFROWANIE <          =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;
write('      WYPISZ LICZBE PRZESUNIECIA: ');
readln(c);

clrscr;
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=              #CEZ-NIGMA 2.0           =');
writeln('=              > SZYFROWANIE <          =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;

for i:=1 to b do
begin
if (ord(tekst[i])+c<=122) then tekst[i]:=chr(ord(tekst[i])+c)
else
tekst[i]:=chr(ord(tekst[i])+c-122+96);
end;
writeln('ZASZYFROWANY TEKST:',tekst);
end;

procedure Deszyfrowanie;
var tekst,a:string;
b,i,c:integer;

begin
clrscr;

writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=             #CEZ-NIGMA 2.0            =');
writeln('=            > DESZYFROWANIE <          =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;
writeln('        WYPISZ TEKST DO ODSZYFROWANIA');
writeln('          (ZNAKI A-Z BEZ POLSKICH)');
writeln;
write('TEKST: ');
readln(tekst);
tekst:=upcase(tekst);
b:=length(tekst);
repeat
clrscr;
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=              #CEZ-NIGMA 2.0           =');
writeln('=            > DESZYFROWANIE <          =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;
writeln('TEKST KTORY WPISALES: ',tekst);
writeln;
write('CZY CHCESZ TAK ZOSTAWIC? (TAK/NIE): ');
readln(a);
a:=upcase(a);
until a='tak';

clrscr;
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=              #CEZ-NIGMA 2.0           =');
writeln('=            > DESZYFROWANIE <          =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;
write('      WYPISZ LICZBE PRZESUNIECIA: ');
readln(c);

clrscr;
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln('=              #CEZ-NIGMA 2.0           =');
writeln('=            > DESZYFROWANIE <          =');
writeln('= = = = = = = = = = = = = = = = = = = = =');
writeln;
writeln;

for i:=1 to b do
begin
if (ord(tekst[i])-c>=97) then tekst[i]:=chr(ord(tekst[i])-c)
else
tekst[i]:=chr(ord(tekst[i])-c+26);
end;
writeln('ODSZYFROWANY TEKST:',tekst);
end;

BEGIN
clrscr;
Copyright;
Menu;
readln;
END.
0

Jak pisali poprzednicy. Pomimo nicku, nie zwalnie to Ciebie z formatowania kodu. Natomiast czy ktoś moze to potwierdzić, że FPC pod Linuxem nie informuje o linijce oraz kolumnie występienia błedów? Powinien raczej rzucać na konsole te same rezultaty, jak robi to Windowsowa wersja. Pomijająj jej nazwę.

Poza tym na Google widzę mnóstwo kodów do szyfru Cezara w Pascalu. Na prawdę tak ćiężko wpisać te trzy słowa? Niestety na forach z pierwszych wyników - odpowowiedzi podają jacyś Twoi "koledzy po fachu". Bo albo formatowania brak, albo jest ono standardem również "z pupki" wziętym. Ale kod raczej powinien dać pojęcie co i jak kombinować samodzielnie.

Aha i następnym razem za dodawanie zbędnych tagów z czterech liter, a także takie tytyłowanie wątku jak było. Będzie on przeniesiony do Kosza.

0

Dziękuje Wam za rzeczowe odpowiedzi, na pewno pomogą mi w rozwiązaniu problemu...

0

Nie zapomnij machnąć łapek w górę przy postach oraz zafajkować tego, który rozwiązał problem, aby "zamknąć" temat.
Chyba że jednak zamierzasz nas posłuchać i zastosować się do rad, a nie narzekać na to, że nie czytamy Twojego w-oczy-kolącego (pseudo)kodu, abyśmy mogli kontynuować.

0

Mam nadzieję, że zmodyfikowałem ten kod wystarczająco dobrze dla Waszych oczu. ;) Niestety wraz z kodem zmienił się problem, ponieważ dla linux x32 się kompiluje bezproblemowo, a gdy próbuje go skompilować do win x32 to pojawia się problem. Może mógłby to ktoś skompilować u siebie i sprawdzić czy to wina samego Ubuntu? Z góry dzięki.

program cez;
uses CRT;

var R1,R2:string;

procedure rama(b:string);
  begin
    clrscr;
    textcolor(2);
    writeln(R1);
    writeln(R2);
    writeln(b);
    writeln(R1);
    writeln;
    writeln;
  end;

procedure powitanie;
  begin
    clrscr;
    writeln(R1);
    writeln(R2);
    write('=      STWORZONE PRZEZ ');
    textcolor(4);
    write('NIEDZIELNY');
    textcolor(2);
    writeln('      =');
    writeln(R1);
    readkey;
    clrscr;
  end;

procedure szyfrowanie;
  var b,tekst,d:string;
      a,c,i:integer;
  begin
    b:='=             > SZYFROWANIE <           =';
    rama(b);
    write('      WYPISZ LICZBE PRZESUNIECIA: ');
    textcolor(4);
    readln(c);
    textcolor(2);
    rama(b);
    writeln('       WYPISZ TEKST DO ZASZYFROWANIA');
    writeln('          (ZNAKI A-Z BEZ POLSKICH)');
    writeln;
    write('TEKST: ');
    textcolor(4);
    readln(tekst);
    textcolor(2);
    tekst:=upcase(tekst);
    a:=length(tekst);
    repeat
      rama(b);
      write('TEKST KTORY WPISALES: ');
      textcolor(4);
      writeln(tekst);
      textcolor(2);
      writeln;
      write('CZY CHCESZ TAK ZOSTAWIC? (');
      textcolor(4);
      write('TAK');
      textcolor(2);
      write('/');
      textcolor(4);
      write('NIE');
      textcolor(2);
      write('): ');
      textcolor(4);
      readln(d);
      textcolor(2);
      d:=upcase(d);
    until d='TAK';
    rama(b);
    for i:=1 to a do
      begin
        if (ord(tekst[i])+c<=122) then tekst[i]:=chr(ord(tekst[i])+c)
        else
          tekst[i]:=chr(ord(tekst[i])+c-122+96);
      end;
    write('ZASZYFROWANY TEKST: ');
    textcolor(4);
    writeln(tekst);
  end;

procedure deszyfrowanie;
  var b,tekst,d:string;
      a,c,i:integer;
  begin
  b:='=             > SZYFROWANIE <           =';
  rama(b);
  write('      WYPISZ LICZBE PRZESUNIECIA: ');
  textcolor(4);
  readln(c);
  textcolor(2);
  rama(b);
  writeln('       WYPISZ TEKST DO ODSZYFROWANIA');
  writeln('          (ZNAKI A-Z BEZ POLSKICH)');
  writeln;
  write('TEKST: ');
  textcolor(4);
  readln(tekst);
  textcolor(2);
  tekst:=upcase(tekst);
  a:=length(tekst);
  repeat
    rama(b);
    write('TEKST KTORY WPISALES: ');
    textcolor(4);
    writeln(tekst);
    textcolor(2);
    writeln;
    write('CZY CHCESZ TAK ZOSTAWIC? (');
    textcolor(4);
    write('TAK');
    textcolor(2);
    write('/');
    textcolor(4);
    write('NIE');
    textcolor(2);
    write('): ');
    textcolor(4);
    readln(d);
    textcolor(2);
    d:=upcase(d);
  until d='TAK';
  rama(b);
    for i:=1 to a do
      begin
        if (ord(tekst[i])-c<=97) then tekst[i]:=chr(ord(tekst[i])-c)
        else
          tekst[i]:=chr(ord(tekst[i])-c+26);
      end;
    write('ODSZYFROWANY TEKST: ');
    textcolor(4);
    writeln(tekst);
  end;

procedure menu;
  var a:integer;
      b:string;
  begin
    b:='=                > MENU <               =';
    rama(b);
    textcolor(2);
    write('            [');
    textcolor(4);
    write('1');
    textcolor(2);
    write('] ');
    writeln('SZYFROWANIE');
    write('            [');
    textcolor(4);
    write('2');
    textcolor(2);
    write('] ');
    writeln('DESZYFROWANIE');
    write('            [');
    textcolor(4);
    write('3');
    textcolor(2);
    write('] ');
    writeln('WYJDZ');
    writeln;
    writeln;
    write('         WYBIERZ DZIALANIE ');
    write('(');
    textcolor(4);
    write('1');
    textcolor(2);
    write('-');
    textcolor(4);
    write('3');
    textcolor(2);
    write('): ');
    textcolor(4);
    read(a);
    case a of
      1: szyfrowanie;
      2: deszyfrowanie;
      3: halt;
    else
      begin
        rama(b);
        textcolor(2);
        write('       MUSISZ WPISAC ');
        textcolor(4);
        write('1');
        textcolor(2);
        write(',');
        textcolor(4);
        write('2');
        textcolor(2);
        write(' lub ');
        textcolor(4);
        write('3');
        readkey;
        menu;
      end;
    end;
  end;

BEGIN
  textbackground(0);
  clrscr;
  R1:= '= = = = = = = = = = = = = = = = = = = = =';
  R2:= '=             #CEZ-NIGMA 2.0            =';
  textcolor(2);
  powitanie;
  menu;
  readkey;
END.
0

FPC 2.7.1 x86 (na Win8 x86-64) - kompiluje się normalnie.
Jaki błąd?

0

@NiedzielnyProgramista - zlikwiduj te zmienne globalne, bo nie są Ci do niczego potrzebne.

0
Patryk27 napisał(a):

FPC 2.7.1 x86 (na Win8 x86-64) - kompiluje się normalnie.
Jaki błąd?

user image

0

Ale albo ja źle patrze i nie widzę jaki konkretnie tutaj jest błąd. Nie pokazuje się okienko na dole z błedami. Może przez namieszane ustawienia. U mnie domyślnie 32 bitowy FPC pod swoim IDE pokazuje że kompilacja pliku wywołanego z pod Total Cmd jako fp plik.pp jest w Debug mode, a nie Normal Mode jak u Ciebie.

0

Robisz cross compiling, być może masz niewłaściwy RTL.

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