Kezdőoldal » Számítástechnika » Programozás » Delphi, Mi a Hiba a függvényben?

Delphi, Mi a Hiba a függvényben?

Figyelt kérdés

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ő?



2014. dec. 17. 22:28
1 2
 1/11 A kérdező kommentje:

Bocsánat, az eleje

function Crypt(Username:string):string;

2014. dec. 17. 22:29
 2/11 Tengor ***** válasza:
Az i siklus változót sehol nem használod fel. Mindig az első (count=1) karaktert vizsgálod az i. helyett és azt is cseréled ki.
2014. dec. 17. 22:48
Hasznos számodra ez a válasz?
 3/11 anonim ***** válasza:
Hát például a függvényed csak az 1-es indexű karaktert bizgeti. Username[count]-ot, vagiys Username[1]-et állítasz át mindig, a count csak egyszer kap értéket. Tipp: count helyett i kéne a string indexelésénél.
2014. dec. 17. 22:48
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:

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.

2014. dec. 18. 02:28
Hasznos számodra ez a válasz?
 5/11 coopper ***** válasza:

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.

2014. dec. 18. 08:13
Hasznos számodra ez a válasz?
 6/11 anonim ***** válasza:

"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.

2014. dec. 18. 16:39
Hasznos számodra ez a válasz?
 7/11 coopper ***** válasza:

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.

2014. dec. 18. 17:15
Hasznos számodra ez a válasz?
 8/11 SimkoL ***** válasza:

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.

2014. dec. 18. 18:08
Hasznos számodra ez a válasz?
 9/11 SimkoL ***** válasza:

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;

2014. dec. 18. 19:03
Hasznos számodra ez a válasz?
 10/11 anonim ***** válasza:

"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.

2014. dec. 19. 00:14
Hasznos számodra ez a válasz?
1 2

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!