Šifrování v pascalu – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Šifrování v pascalu – Pascal – Fórum – Programujte.comŠifrování v pascalu – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
14. 5. 2011   #1
-
0
-

Zdarec hoši, potřeboval bych s něčím pomoci. Mám zadanou práci: Je dán text a přirozené číslo k. Zašifrujte text, že každé písmeno ang. abecedy nahradíte písmenem o k znaků dále. Číslici nahradíte číslicí o k znaků dále. Ost. Znaky zůstavají.

Napsal jsem si program přes funkci ord, ale háček je v tom, že nevím jak udělat, aby šlo posunutí v ascii tabulce v cyklu. Když ord(text[i])+k přesáhne kód znaku Z popř. 9 , aby se zbytek posouvání(k) vrátil na znak A popř. 0.

Nejsem v programování příliš zběhlý, budu rád za vaši pomoc :)

Nahlásit jako SPAM
IP: 188.75.182.–
Reklama
Reklama
nervak0
Věrný člen
14. 5. 2011   #2
-
0
-

V podstatě sis odpověděl. O kolik překročíš zZ9, tolik vezmeš od aA0 (mínus 1). Můžeš použít operátor mod, tabulku znaků, nebo prostě if.

Nahlásit jako SPAM
IP: 213.211.51.–
14. 5. 2011   #3
-
0
-

To nervak : Mohl by jsi mi prosím hodit příklad toho příkazu :)

Nahlásit jako SPAM
IP: 188.75.182.–
nervak0
Věrný člen
14. 5. 2011   #4
-
0
-

if c > b then c := a + c-b - 1;

Nahlásit jako SPAM
IP: 213.211.51.–
14. 5. 2011   #5
-
0
-

To nervak : Takže budu muset dělat 3 for cykly. . . pro malá, velká písmena a čísla zvlášť :) ?

Nahlásit jako SPAM
IP: 188.75.182.–
14. 5. 2011   #6
-
0
-

Blbost sorry, Jeden for cyklus projetí věty a potom 3 podmínky na malá,velká písmena a číslice, potom funkce zašifrování a mělo by to být hotovo ne :) ?

Nahlásit jako SPAM
IP: 188.75.182.–
15. 5. 2011   #7
-
0
-

To nervak : Něměl bych tu podmínku spíš změnit na cyklus while c>b do c:=a+(c-b)-1; ??? Teď nevím jak to funguje, ale když se zadá větší číslo o které budeme posouvat např. 50, tak se podmínka provede pouze jednou a potom už ne, nebo snad ano ?

Nahlásit jako SPAM
IP: 188.75.182.–
nervak0
Věrný člen
15. 5. 2011   #8
-
0
-

Tyhle věci právě pěkně řeší ten operátor mod. Ale jo, pokud to může překročit rozsah víc než jednou, tak použij while.

Nahlásit jako SPAM
IP: 213.211.51.–
15. 5. 2011   #9
-
0
-

To nervak : Tak já to naprogramuji a potom sem hodím kód, protože to beztak pos**u xDDD. Díky za pomoc, Potom to prosím checkni teda :) Snad to tu do zítra bude ;)

Nahlásit jako SPAM
IP: 188.75.182.–
18. 5. 2011   #10
-
0
-

Tak jsem zesmolil tohle xD , prosím někdo na to mrkněte popř. poupravte a postněte, díky moc. jinak to háže chyby u podmínek:
Fatal: Syntax error, THEN expected but .. found

Program Rocnik;


var text:string[255];

i,k,n:integer;

z:char;

function sifra1:char;

begin

z:=text[i];

n:=ord(z)+k;

while n>ord('9') do n:=ord('0')+(n-ord('9'))-1;

sifra1:=chr(n);

end;



function sifra2:char;

begin

z:=text[i];

n:=ord(z)+k;

while n>ord('Z') do n:=ord('A')+(n-ord('Z'))-1;

sifra2:=chr(n);

end;



function sifra3:char;

begin

z:=text[i];

n:=ord(z)+k;

while n>ord('z') do n:=ord('a')+(n-ord('z'))-1;

sifra3:=chr(n);

end;





begin

write('Zadejte vetu: ');

readln(text);

write('Zadejte o kolik chcete danou vetu zasifrovat: ');

readln(k);

for i:=1 to length(text) do



begin

if text[i]=' ' then i:=i+1;

if text[i]='0'..'9' then text[i]:=sifra1;

if text[i]='A'..'Z' then text[i]:=sifra2;

if text[i]='a'..'z' then text[i]:=sifra3;

end;

writeln('Zasifrovany text: ',text);

readln;

end.


Nahlásit jako SPAM
IP: 188.75.182.–
Mircosoft+1
Věrný člen
18. 5. 2011   #11
-
0
-

1) Zruš řádek "if text[i]=' ' then i:=i+1;". S řídicí proměnnou nesmíš takhle hýbat, cyklus si ji zvyšuje sám.
2) "if text[i]='0'..'9' then..." je syntaktický nesmysl, je potřeba buď "if text[i] in ['0'..'9'] then..." (čili "pokud je znak text[i] obsažen v množině obsahující znaky '0'..'9'"), nebo "case text[i] of '0'..'9':sifra1; 'a'..'z': ... atd. ... end;" (to mi připadá lepší). Tím se zbavíš té fatální chyby.
3) Funkce by měly vypadat nějak takhle:

function sifra1(z:char):char;    {z je vstup - znak, který chceš zašifrovat}

var n:byte; {n není potřeba nikde jinde než tady, tak je lepší ji deklarovat lokálně}
begin
n:=ord(z)+k;
while n>ord('9') do n:=ord('0')+(n-ord('9'))-1;
sifra1:=chr(n); {tímhle se nastaví návratová hodnota funkce - tos tu neměl a proto se objevilo to varování}
end;

Použije se to potom takhle:
text[i]:=sifra1(text[i]);

V závorce předáš funkci znak, který se má zašifrovat, a jako funkční hodnota ti vypadne zašifrovaný znak. Je to stejný systém jako třeba u funkce sinus: výsledek:=sin(vstup).

Jinak to vypadá dobře.

Edit: koukám, že na ty funkce jsi přišel dřív, než jsem to stihnul dopsat :-)

Nahlásit jako SPAM
IP: 208.232.182.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
18. 5. 2011   #12
-
0
-

To Mircosoft : Díky moc, že sis našel čas. No já to předělám na to case, měl jsem to v hlavě, ale nechtělo se mi to už editovat opět :D ,tak sem to tak nechal. ještě nevím co za typ je byte a proč to nemůže být klasika integer. Jinak teda dík a já to jdu tedy dodělat :)

Nahlásit jako SPAM
IP: 188.75.182.–
Mircosoft+1
Věrný člen
19. 5. 2011   #13
-
0
-

Byte je celé číslo v rozsahu 0..255, čili přesně tolik, kolik je potřeba na indexování stringu, proto jsem zvyklý ho na tyhle účely používat. Ale klidně tam dej integer, s tím to půjde taky.

Nahlásit jako SPAM
IP: 208.232.182.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
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žit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Podobná vlákna

šifrování — založil technik0

Nápad na šifrování — založil Matěj Andrle

Šifrování textového souboru — založil skodik.o

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý