D?lal sem do ?koly takovej ?kol, jde o to na??st v?tu (string) a o kolik p?smen v abeced? se to m? posunout a vypsat tu v?tu s t?m ?e ka?d? p?smeno bude posunut? o tolik
p?smen v abeced?, kolik bylo zad?no. Pr? to je n?jak? Caesarova ?ifra.
Probl?m je ale s posouv?n?m Z, p??padn? A, kdy? to je dozadu. Vy?e?il sem to pomoc? if else, ale to se mi moc nel?bilo, tak sem se tu d?val a na?el sem vlastn? ordin?ln? datov? typy.
Ale na co vlastn? takovej v??tovej typ je, kdy? ho nem??u ani readnout ani vypsat?? Udelal sem si takovej typ abeceda(a,b,c,d.....z); ale nem??u mu ani p?edat p?smeno ze strigu - pismeno:=s[i] .
Tak jak se to d? vůbec vyu??t??
Fórum › Delphi
Výčtové typy - jak se jim dostat pod kůži?
Huge napsal:
Jo, tak sem p?i?el na to, ?e asi bude lep?? pou??t interval...jen?e ten taky nefach? jak m? :(( Nadefinuju PismenVAbecede= 65..90; a kdy? pak nastavim prom?nnou na 90 a p?i?tu 1, vyp??e mi to 91 :(( Tak?e je to ?pln? na h....
A nestocilo by Ti pouzit uplne jednoduse pole:
THugeSettings = array ['A'..'Z'] of byte;
Pricemz by jednotlive polozky byly indexovatelne pres pole['A'] := 5 a hned by jsi vedel ,o kolik ktere pismenko mas posunout. Jinak me jeste zajima to zadani. Konkretne, co se ma stat, kdyz je nejake posunti delsi, nez je delka retezce. Ma se rotovat, nebo se pismeno jednoduse vynecha(nebude se s nim manipulovat)??
heh, tak jsem se kouknul, co to vlastne Caesarova sifra je a musim rict, ze je celkem trivilani. Ovsem pokud jsem to pochopil. Cerpal jsem z http://cs.wikipedia.org/wiki/Caesarova_?ifra. Takze kod by potom mohl vypadat, takhle:
function CaesarCode(const Str: String; pos: integer): String;
var temp: string;
j, len: integer;
c : char;
begin
len := Length(Str);
Assert(len > 0);
SetLength(temp, len);
for j:=1 to len do
begin
c := char(ord(Str[j])+pos);
if (c > 'Z') then c := char(ord('A')+(ord(c) - ord('Z'))-1);
if (c < 'A') then c := char(ord('Z')-(ord('A')-ord(c))-1);
temp[j] := c;
end;
Result:=temp;
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var HugeArray: THugeArray;
c: char;
begin
ShowMessage(CaesarCode('CAESAR', 3));
end;
Jen jeste poznamka, predtim nez to poslel funkci CaesarCode, tak retezec musi byt prevedená na velke pismena, nebo si tam dodel podminku na c > 'z'.
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 10 hostů
Podobná vlákna
Jak dostat DNS IP pod Linuxem — založil hakka
Jak dostat do proměné? — založil Náhodný
Jak dostat GET do promene — založil Row
Jak se dostat k typu button — založil VladislavK
Jak dostat proměnou do a z callbacku — založil meEM