Kezdőoldal » Számítástechnika » Programozás » Miért nem működik ez a Pascal...

Miért nem működik ez a Pascal program?

Figyelt kérdés

Egy olyan programról van szó, amely egy stringet egy megadott kulcs alapján lekódol. A forráskód:


program coding;

uses crt;

var mask,c:char;

szoveg,k_szoveg:string;

i:integer;

begin

clrscr;

write('A kulcs (1 karakter): ');

readln(mask);

repeat

writeln;

writeln('Ird be a szoveget (max. 255 karakter)! ');

readln(szoveg);

for i:=1 to length(szoveg) do k_szoveg[i]:=chr(ord(szoveg[i] xor ord(mask));

writeln('A szoveg kodolva: ',k_szoveg);

writeln('Kilepes: ESC, restart: egy karakter.');

writeln;

c:=readkey;

until c=#27;

writeln('Nyomj meg egy gombot!');

repeat until keypressed;

end.


A kód lefordul és le is fut, de nem ír ki semmilyen lekódolt szöveget. Pedig működnie kellene az ismereteim alapján. Mi lehet a hiba oka és hogyan tudnám kiküszöbölni? (Kezdő programozó vagyok, Pascal-ban és C++ -ban írok programokat. A jövőben komolyan szeretnék foglalkozni programozással.)

A válaszokat előre is köszi!



2012. dec. 27. 14:49
 1/5 ejbenjaro ***** válasza:

A programod valószínűleg működik, de a karakterek, amelyek a kódolás után a stringbe kerülnek olyanok, amelyeket nem tud a képernyőn megjeleníteni. Írd ki egy fájlba és ott vissza tudod ellenőrizni. Pl hexa editorral megnyitva a fájlt, láthatod a benne levő karakterek kódját.


Fájlbaírással: A teszt.dat-ban lesz a kódolt szöveg. A Totalcommander nézőkéjével meg nézz rá hexában


program project1;

{$mode tp}

uses crt;

var mask,c:char;

szoveg,k_szoveg:string;

i:integer;

f: file of char;

begin

clrscr;

write('A kulcs (1 karakter): ');

readln(mask);

assign(f,'teszt.dat');

rewrite(f,1);

repeat

writeln;

writeln('Ird be a szoveget (max. 255 karakter)! ');

readln(szoveg);


for i:=1 to length(szoveg) do

begin

c:=chr(ord(szoveg[i]) xor ord(mask));

write(f,c);

k_szoveg[i]:=c;

end;



writeln('A szoveg kodolva: ',k_szoveg);

writeln('Kilepes: ESC, restart: egy karakter.');

writeln;

c:=readkey;

until c=#27;


writeln('Nyomj meg egy gombot!');

close(f);

repeat until keypressed;

end.

2012. dec. 27. 15:36
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
Rég pascaloztam, de biztos, hogy char típusú változót readln-nel akarsz beolvasni? Szerintem az sima read.
2012. dec. 27. 21:12
Hasznos számodra ez a válasz?
 3/5 ejbenjaro ***** válasza:

"Rég pascaloztam, de biztos, hogy char típusú változót readln-nel akarsz beolvasni? Szerintem az sima read."


Minden gond és probléma nélkül lehet readln-el beolvasni char típusú változóba adatot.

2012. dec. 28. 07:38
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:

A read és a readln között annyi a különbség hogy a read olvasás után nem rakja új sor elejére a kurzort, a readln meg igen.

#1, köszi a választ! :)

2012. dec. 28. 17:21
 5/5 ejbenjaro ***** válasza:

Csak hogy pontosítsuk ezt a Read/Readln kérdést.

Idézet az Együtt könnyebb a Programozás: Free Pascal (szerzők Benkő Tiborné, Tóth Bertalan) című könyvből:


"A read eljárás az adatbeviteli sorból csak a paraméterei számára szükséges adatokat dolgozza fel, míg a fel nem használt rész egy következő read/readln eljárás számára elérhető marad.


Ezzel szemben a readln eljárás beolvassa a teljes adatsort, a bevitelt záró enter billentyűnek megfelelő karakterekkel együtt, és ezt követően ad értéket a paraméterként megadott változóknak. Amennyiben minden paraméter értéket kapott, a beolvasott sor további része elvész."

2012. dec. 28. 18:14
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!