Posun znaku – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Posun znaku – Pascal – Fórum – Programujte.comPosun znaku – Pascal – Fórum – Programujte.com

 

pista
~ Anonymní uživatel
14 příspěvků
24. 5. 2007   #1
-
0
-

Mam taky dotaz, mam v premennej typu char nacitany urcity znak a akym sposobom mam zadat programu aby znak posunul o napr. 3 znaky dalej? Mam urobit program ktory mi zadane slovo zasifruje tak ze kazde pismenko posune o zadany pocet znakov.

Nahlásit jako SPAM
IP: ...–
Nosko0
Stálý člen
24. 5. 2007   #2
-
0
-

To pista:
Na to budeš asi potrebovať 2 funkcie: ORD(char) ktorá ti vracia ascii hodnotu znaku a CHAR(int) ktorá zase vypisuje znak prislúchajúci int-u. Prebehneš vetu cyklom, načítaš znaky, pripočítaš posun a vypíšeš.

Nahlásit jako SPAM
IP: ...–
pista
~ Anonymní uživatel
14 příspěvků
24. 5. 2007   #3
-
0
-

To Nosko:diki ale ja som fakt zaciatocnik nemozes pls. dat nejaky priklad ako to pouzit?

Nahlásit jako SPAM
IP: ...–
pista
~ Anonymní uživatel
14 příspěvků
24. 5. 2007   #4
-
0
-

To Nosko:diki ale ja som fakt zaciatocnik nemozes pls. dat nejaky priklad ako to pouzit?

Nahlásit jako SPAM
IP: ...–
Nosko0
Stálý člen
24. 5. 2007   #5
-
0
-

No v pascale som už nerobil nejaký ten rôčik, ale nejak takto snáď



String veta;
int i,p,posun;

Readln("Zadaj vetu",veta);
Readln("O kolko posunut?",posun);

for(i=0; i<veta.length; i++)
begin
p=ORD(veta[i]);
p+=posun;
write(CHAR(p));
end;

Nejaké chyby tam určite budú, knižnice doplň CRT tuším.

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
24. 5. 2007   #6
-
0
-

To Nosko: No tak takhle určitě ne. To cos napsal by mohlo možná fungovalo ale prvně by takovej jazyk musel existovat. Jelikož tvůj kód kombinuje c a pascal (možná i něco dalšího). Nic ve zlým. Bohužel i já sem už spíš navykl na c a c++ ale zkusím naspat něco méně inovativního.



uses crt;
var retezec:array[1..120] of char;
posun, i:integer;

begin
i := 1;
write('Zadej text: ');
repeat
read(retezec[i]);
inc(i);
until (ord(retezec[i]) = {ordinální číslo enteru})or(i = 120);
writeln;
write('Zadej posun: ');
readln(posun);
for i := 1 to 120 do
retezec[i] := char(ord(retezec[i]) + posun);
end.

Takhle by to mohlo fungovat. Psal sem to z hlavy tak nevím ale myslím, že by to mohlo bejt správně. Ten komentář je tam úmyslně jelikož už si z hlavy nepamatuju ordinální číslo enteru ale to už si sám jistě doplníš.

Nahlásit jako SPAM
IP: ...–
Nosko0
Stálý člen
24. 5. 2007   #7
-
0
-

Hej, pozerám práve na ten môj "pseudo jayzk" :)) , to už je tak, 4 roky pascal na gymnáziu, potom na výške 1/2 roka C a ďaľší 1/2 roka java :p

Nahlásit jako SPAM
IP: ...–
pista
~ Anonymní uživatel
14 příspěvků
25. 5. 2007   #8
-
0
-

To Matrix17:diki a prosim co mam dat namiesto toho znak?

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
25. 5. 2007   #9
-
0
-

To pista: Je toho sem si nevšim ord(retezec[i]). Promiň toho sem si nějka nešim. Hned to opravím. Ještě by se to dalo vylepšit, že těch 120 by se dala jako konstanta a tím bys mohl ten řetězec zkrátit nebo prodloužit bez složitých změn zdrojáku.
PS: Možná by to šlo řešit i jinak ale tohle je první co mě napadlo.

Nahlásit jako SPAM
IP: ...–
pista
~ Anonymní uživatel
14 příspěvků
25. 5. 2007   #10
-
0
-

toto sa mu nejako nepaci i:=inc(i); pise to: Error: Incompatible types: got "VOID" expected "LONGINT"

Nahlásit jako SPAM
IP: ...–
25. 5. 2007   #11
-
0
-

To pista:ma tam byt miesto toho len inc(i);

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
25. 5. 2007   #12
-
0
-

Jak sem psal je to z hlavy. Už sem opravil i tuhle chybu.

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



program sifrovani;
const posun=3;
var retezec:string;
i:byte;
BEGIN
write('Zadej retezec: ');
readln(retezec);
for i:=1 to length(retezec) do retezec[i]:=chr(ord(retezec[i])+posun);
writeln('Vysledek je: ',retezec);
readln; {program skonci po stisknuti enteru}
END.

A to je cele ;-).

Misto funkce chr, ktera dela z cisla znak, se da pouzit rovnou pretypovani na znak: char(cislo).
Totez misto ord funguje pretypovani na byte: byte(znak) (char a byte jsou oboje 8bitove hodnoty).

Ten cyklus by sel jeste zjednodusit:
for i:=1 to length(retezec) do inc(retezec[i],posun);

protoze inc se da pouzit na libovolny ordinalni typ.

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Laaca0
Stálý člen
25. 5. 2007   #14
-
0
-

A kdybys to "inc(retezec[i], posun)" přepsal do assembleru, tak by ses vyhnul možnosti přetečení ordinální hodnoty pro ASCII kódy > 252 (pro posun=3)
Tedy:



const posun = 3;
var s:string;
i:integer;
begin
s:='ahoj';
writeln(s);
for i:=1 to Length(s) do
asm
lea si,s
add si,i
mov ax,posun
add ds:[si],al
end;
writeln(s);
readln;
end.

Tenhle kód vám samozřejmě přeloží jen Turbo pascal (Borland pascal). FPC ani TMT ne-e.

Nahlásit jako SPAM
IP: ...–
DOS-u-akbar
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, 11 hostů

Podobná vlákna

Posun Jmen — založil Radek

Posun obrazku — založil Dan

Posun jmen — založil David

Plynulý posun — založil mikeek

Moderátoři diskuze

 

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