Problem z funkcją

0

Witam, od razu zaznaczam, że dopiero rozpoczynam przygodę z programowaniem. Mój problem polega na braku pomysłu jak użyć funkcji w programie, przewertowałem google, ale żaden z podanych przykładów na różnych forach nie przydaje się w moim przypadku. Oto kod:

 
program szyfr;
  uses crt;
     var znak:char;
               c:integer;

function Cezar(z:char; d:integer):char;
var c:integer;
begin
if z in ['A'..'Z'] then
begin
c:=ord(z) +d;
if c>90 then c:=c-26;
if c<65 then c:=c+26;
Cezar:=char(c);
end
else Cezar :=z
end;
//begin
write('podaj cos: ');
readln(znak);
write(Cezar(znak));
readln;
end.
end;//

Część pisana kursywą/między slashami jest częścią napisaną przeze mnie. Reszta w ramach ćwiczeń ściągnięta z netu. Problem polega na braku wiedzy JAK wykorzystać tą funkcję aby wpisany znak był kodowany w ten najprostszy z możliwych szyfrów. Zmianę z char na string rozumiem w razie jakbym później chciał zamiast znaków kodować słowa.
Pozdrawiam
srss

0

A można jaśniej ?

1

Sformatuj kod oraz dodaj w znaczniki Delphi (przy pisaniu posta masz do tego ikonki) -> wtedy pogadamy

0

tak może być?;>

jaśniej hmm. Mam funkcję szyfrującą znak w Cezarze, jak użyć tego kodu? Użyszkodnik musi wprowadzić znak, ale w którym miejscu umieścić read(x); i resztę kodu, która będzie korzystała z tej funkcji? I jaki to kod, jestem nowy i nie wiem jak tego użyć.
Próbowałem manualami/instrukcjami/przykładami/kursami znalezionymi w necie ale np writeln(Cezar(znak)); wyrzuca mi błąd w tej linijce (oczekiwano przecinka (,)). Staram się to rozgryźć wszelkimi sposobami ale brakuje już mi pomysłu. Natomiast mam wrażenie że to jakaś pierdoła o której póki co nie mam pojęcia.

1

srss: chyba sobie żartujesz, porównaj swój "kod" z tym poniżej. Myślisz, że jak dodasz dwie spacje tylko przed var to wszystko jasne. Sam miałem problem ogarnąć o co w tym programie ma chodzić, bo nie wiadomo co w jakim bloku ma być. Nie znam się na szyfrowaniu, ale według mnie powinno być coś w stylu poniżej. Jak nie to sobie dopasuj do potrzeb. A jak nie potrafisz samodzielnie sformatować kodu, to wspomóż się programem z: http://olesio.eu/delfor - jest według mnie idelny jeżeli mamy kod w osobnych liniach, ja go zawsze stosuje do wcięć, poprawiłęm go lekko żeby kompilował się pod Delphi 7 Personal. Lepszy na pewno taki niż tak beznadziejne formatowanie, a raczej jego brak, jak pokazałeś w pierwszym postcie.

program szyfr;

uses
  crt;

var
  S : string;
  I : integer;

function Cezar(Tekst : string; D : Byte) : string;
var
  C : Char;
  I : integer;
begin
  Cezar := '';
  for I := 1 to Length(S) do
  begin
    if Tekst[I] in ['A'..'Z'] then
    begin
      C := Chr(Ord(Tekst[I]) + D);
      if Ord(C) > 90 then
        C := Chr(Ord(C) - 26);
      if Ord(C) < 65 then
        C := Chr(Ord(C) + 26);
      Cezar := Cezar + C
    end
    else
      Cezar := Cezar + Tekst[I];
  end;
end;

begin
  Write('podaj cos: ');
  Readln(S);
  Writeln(Cezar(S, 10));
  Readln;
end.
0

wybacz nie potrafie pisac czytelnego kodu, od kiedy pamietam zawsze robilem burdel;)
Wszystko rozumiem, jednak korzystając z Twojego dobrodziejstwa mógłbyś powiedzieć mi jeszcze co oznacza/za co odpowiada to '10' w linijce

Writeln(Cezar(S, 10));

:)
Pozdrawiam

0

No tak była skonstruowana funckja Cezar w oryginale, że miała mieć drugi parametr. Jest to liczba dodawana do kodu każdego znaku pobranego z paraetru Tekst. Jeżeli chcesz to możesz dać inną, ale nie większą niż rozmiar typu bajt, ale dodawanie dużych liczb nie ma sensu, bo kody znaków są i tak tylko w przedziale typu Byte, czyli od 0 do 255 włacznie.

0

Zrozumialem :)
Dziękuję. Mam nadzieje ze nigdy już nie bede zawracał d**y takimi pytaniami.
Jak wytrzezwieje to jeszcze raz przewertuje kod jeszcze raz ;)
Pozdrawiam
Srss

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