Delphi, Mi a Hiba a függvényben?
function Crypt(Username:string);
var
length1,i,count:integer;
begin
Username:=LowerCase(Username);
count:=1;
length1:=Length(Username);
for i:=1 to length1 do begin
case Username[count] of
'a' : Username[count] :=IntToStr(1);
'b' : Username[count] :=IntToStr(2);
'c' : Username[count] :=IntToStr(3);
'd' : Username[count] :=IntToStr(4);
'e' : Username[count] :=IntToStr(5);
'f' : Username[count] :=IntToStr(6);
'g' : Username[count] :=IntToStr(7);
'h' : Username[count] :=IntToStr(8);
'i' : Username[count] :=IntToStr(9);
'j' : Username[count] :='z';
'k' : Username[count] :='y';
'l' : Username[count] :='x';
'm' : Username[count] :='w';
'n' : Username[count] :='v';
'o' : Username[count] :='u';
'p' : Username[count] :='t';
'q' : Username[count] :='s';
'r' : Username[count] :='r';
's' : Username[count] :='q';
't' : Username[count] :='p';
'u' : Username[count] :='o';
'v' : Username[count] :='n';
'w' : Username[count] :='m';
'x' : Username[count] :='l';
'y' : Username[count] :='k';
'z' : Username[count] :='j';
'0' : Username[count] :='i';
'1' : Username[count] :='h';
'2' : Username[count] :='g';
'3' : Username[count] :='f';
'4' : Username[count] :='e';
'5' : Username[count] :='d';
'6' : Username[count] :='c';
'7' : Username[count] :='b';
'8' : Username[count] :='a';
'9' : Username[count] :=IntToStr(0);
end;
end;
Idáig meg van, de nem csinál semmit ha lefut, azt szeretném elérni, hogy a karaktereket kicserélje más karakterekre, és számokra. Mi a teendő?
Bocsánat, az eleje
function Crypt(Username:string):string;
Szúrja a szemem, hogy az indokolatlan IntToStr függvény használat. Miért nem '1'-et írsz IntToStr(1) helyett?
Nem ír fordítási hibát? Elvileg kéne mert az IntToStr stringet ad vissza az oké hogy 1 karakter hosszút ez esetben , de az nem számít, az Username[count] meg char típusú.
A másik meg amit írtak már.
A harmadik meg az hogy nem definiált a visszatérési értéke a függvénynek. Az Username érték szerinti paraméter, a függvényen kívül nincs semmi hatása ha az értékét megváltoztatod. Mert nem az átadott változót kapja meg a függvény hanem annak az értékét.
Szia.
Az előttem szólók leirtak pár dolgot - azzokkal én is egyetértek, én csak egyet tennék hozzá :
Nincs a függvénynek visszatérési értéke: Tehát akárhányszor hivod meg, sohasem add vissza értéket, ezt két módon tudod megoldani :
Az utolsó end; elé a következőket irod : Crypt:=Username;
vagy ami szebb és szerintem "olvashatóbb" is : Result:=Username;
Sok sikert.
üdv.
"Nincs a függvénynek visszatérési értéke: Tehát akárhányszor hivod meg, sohasem add vissza értéket"
Ez nem igaz. Továbbra is igaz, hogy nem definiált a visszatérési értéke. Valamit mindig visszaad, de nincs rá garancia, hogy nem keletkezik kivétel, mert előfordulhat, hogy ami ott van valami a memóriában ami korábbról ottmaradt, amit string-ként tekintve memóriaolvasási hiba lenne mert úgy "látszódhat" ha string-nek tekintjük, hogy olvassuk olvassuk a karaktereit egyszer csak kifutottunk az olvasható memóriacím tartományból és ekkor csúnyán "rácsap a kezünkre" az oprendszer. Lehet hogy nem futunk ki, de átcsúszunk a kódszegmensbe is és azt is a string részeként "látjuk" amit visszaadott, lehet hogy üres stringet ad vissza. Persze ha nem olvassuk ki a vissaztérési értéket és nem is raktunk bele semmit akkor mindez nem fordul elő, de nagyon rossz programozási stratégia.
Szia.
Kedves utolsó, sajnos nincs igazad. (Kipróbáltad ?)
Hidd el nem add vissza semmit (Ha az üres string "nem definiált" visszatérési érték, akkor igazad van, de szerintem nem az - Pascalban lehet, hogy visszad valamit, de Delphiben már nem add vissza semmiféle értéket az üres stringen kivűl.
Beirtam console applicationnak (csak azért, hogy kipróbáljam, meg már érdekelt is, hogy kinek van igaza)
Itt a kód le lehet tölteni és mindenki eldönti, hogy visszadd-e valamit vagy nem : [link]
Továbbra is fentartom (sőt ezt a hibát én is sokszor elkövettem), hogy nem ad vissza semmiféle értéket a függvény.
Az üres string nekem (érték érték), de mégsem igazi érték.
Üdv.
No comment:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
const mire : string = '123456789zyxwvutsrqponmlkjihgfedcba0';
mit : string = 'abcdefghijklmnopqrstuvwxyz0123456789';
function Crypt(s : string) : string;
var i, szam: byte;
begin
s := LowerCase(s);
for i := 1 to Length(s) do
begin
if s[i] in ['a'..'z','0'..'9'] then
begin
szam := Pos(s[i], mit);
s[i] := mire[szam];
end;
end;
Result := s;
end;
begin
WriteLn(Crypt('Igy kellene kineznie'));
ReadLn;
end.
Picit rövidebben:
const kod : string = 'abcdefghijklmnopqrstuvwxyz0123456789123456789zyxwvutsrqponmlkjihgfedcba0';
function Crypt(s : string) : string;
var i : byte;
begin
s := LowerCase(s);
for i := 1 to Length(s) do
if s[i] in ['a'..'z','0'..'9'] then s[i] := kod[Pos(s[i], kod) + 36];
Result := s;
end;
"Kedves utolsó, sajnos nincs igazad. (Kipróbáltad ?)"
Nem próbáltam. Írja valahol a szabvány hogy üres stringet kell visszaadnia az esetben? (Azt meg ne nevezzük úgy hogy nem ad vissza értéket, ha üres stringet ad vissza.) Amit írtam azt úgy kell érteni, hogy beletartozik azaz eset is ahol mindig üres stringet ad vissza olyan kódot állít elő a fordító, de erre mi a garancia , hogy minden fordító olyan kódot állít elő? Free pascalban és Delphiben is ugyanúgy működik nálam.
function f():string;
begin
if random(2)=0 then
f:='alma';
end;
Ez viszont eltérően viselkedett free pascalban és Delphiben. (Sokszor kell meghívni f-et, hogy látszódjon a különbség.)
Ha type string20=string[20] típusú a visszatérési érték, akkor már mindenféle kiriksz kraksz karakterek is előfordultak delphiben ha nem állítottam be a visszatérési értéket. Ha integer volt a visszatérési érték akkor nem nullát adott vissza ugyanilyen esetben.
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!