Pascalban hogy lehet szöveget randomizálni?
Közben – mivel a kérdező privát üzenetben is rákérdezett – válaszoltam rá. De álljon itt a válaszom, hátha mást is érdekelni fog a jövőben.
Régen használtam pascalt, így elnézést, ha esetleg hibáznék. De az elv talán érthető lesz.
var
ch:char;
begin
ch:=chr(radnom(26)+ord('a'));
end.
Magyarán 0 és 25 között generálunk számot (26 betűs az angol ábécé). Ehhez hozzáadjuk az 'a' karakter kódját (ami egyébként a karaktertáblában 65-ös), így az 'a' és 'z' karakter kódja közötti számunk van. Innen a chr függvénnyel karaktert készítünk belőle.
Ha pl. ékezetes karakterek is kellenek, akkor egy másik módszert tudok ajánlani:
const betuk:String='aábcdeéfg………xyz';
var ch: char;
begin
ch:=copy(betuk , radnom(length(betuk))+1 , 1);
end.
Magyarán van egy betuk nevű stringünk, benne az összes előforduló karakter. Generálunk egy random számot 0 és a string hossza között és innen másolunk ki egy karaktert.
Az utolsó válaszolónak üzenem hogy az első program mindig csak egy "a" betüt ír ki a második program pedig error-t.
A saját programom(ez csak egy random karaktert generál):
uses crt;
var x:word; c:char;
begin
randomize;
ClrScr;
x:=random(255);
c:=chr(x);
write(c);
repeat until keypressed;
end.
A szöveggenerálás egy kicsit hosszasabb munka de még ma elkészítem, még írok.
#4: Mondtam, hogy fogok hibázni. :-)
Igen, az elsőben elírtam a random-ot radnomnak. A másodikkal nem tudom mi a hiba, bár úgy látom ott is elírtam a random-ot. (Ctrl+C,Ctrl+V átka.)
(Azért azt is tudni kell, hogy különböző megvalósításai vannak a Pascal nyelvnek, eltérő függvénynevekkel, eltérő speciális szabályokkal.)
4.Vagyok.
Mint ígértem elkészült a program:
uses crt;
var x,i:word; c:char; n,k:longint;
procedure ha(x:word);
begin
x:=random(255);
if ((x>=65) and (x<=90)) or ((x>=97) and (x<=122)) or
((x>=48) and (x<=57)) then
c:=chr(x) else
ha(x);
end;
procedure nagybetu(x:word);
begin
x:=random(255);
if ((x>=65) and (x<=90)) then
c:=chr(x) else
nagybetu(x);
end;
procedure kisbetu(x:word);
begin
x:=random(255);
if ((x>=97) and (x<=122)) then
c:=chr(x) else
kisbetu(x);
end;
procedure szam(x:word);
begin
x:=random(255);
if ((x>=48) and (x<=57)) then
c:=chr(x) else
szam(x);
end;
procedure ossz(x:word);
begin
x:=random(255);
c:=chr(x);
end;
procedure ha0(k:integer);
begin
case k of
1:nagybetu(x);
2:kisbetu(x);
3:szam(x);
4:ha(x);
5:ossz(x);
end;
end;
begin
randomize;
ClrScr;
writeln('Milyen stringet szeretnel:');
writeln('1=Nagybetukbol allo');
writeln('2=Kisbetukbol allo');
writeln('3=Szamokbol allo');
writeln('4=Mindharombol allo');
writeln('5=Osszes karakterbol allo');
write('k=');
readln(k);
write('Ird be mennyi karakterbol alljon a string:');
readln(n);
for i:=1 to n do
begin
ha0(k);
write(c);
end;
repeat until keypressed;
end.
Ha pas file is kell szólj és küldöm.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!