Илья Кучальский
1 повідомлення
#13 років тому
Помогите исправить ошибки в коде на PHP

Написал код для последовательной генерации паролей по принципу перевода десятичного числа в 16-ричное на Delphi.
Но нужно было перевести на PHP.

Я написал код но он не хочет работать,
ПОМОГИТЕ НАЙТИ ОШИБКИ:

Заранее благодарен.

На PHP:

<?php

echo Convert(100);


Function Convert($n)
{
$Symbols = '0123456789ABCDEF';
$Base=16;
if ($n==0)
{
return 0;
$ret =0;
}
else {
return '';
$ret='';
}
while (n>0) {
$bDigit = $n % $Base;
$n=$n/$Base;
$ret=$Symbols + $ret;
return $ret ;
}
}
?>



И на всякий случай на ДЕЛФИ:



function Convert(n : bigint; base : TBase) : string;
//const
//cSymbols : array of char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!"?;%:?*()_+=-~/\<>,.{}';
var
bDigit : byte;
cSymbols: string;
begin

cSymbols := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!"?;%:?*()_+=-~/\<>,.{}';

if n = 0 then
result := '0'
else
result := '';
while n > 0 do
begin
bDigit := n mod base;
n := n div base;
result := cSymbols + result;
end;
end;




Прошу не судить строго, я только начал учить PHP.
Андрей К.
1172 повідомлення
#13 років тому
В php (как и многих других языках), в отличие от delphi, возврат результата делается через использование языковой конструкции return. Но как только вы указали return, вас выкидывает из функции.
Виталий Москвин
204 повідомлення
#13 років тому
Цитата ("ARGLETO"):
while (n>0) {
$bDigit = $n % $Base;
$n=$n/$Base;
$ret=$Symbols + $ret;
return $ret ;
         }

Кроме того, не понятно зачем цикл если после первой итерации вы из него выходте.Да и останавливается цикл в php инструкцией break;
Цитата:
$Symbols

Такая запись в вашем случае не сработает.
Антон С.
1316 повідомлень
#13 років тому
$ret=$Symbols$bDigit+1] + $ret;
Антон Е.
279 повідомлень
#13 років тому
А так низя?

Антон Е.
279 повідомлень
#13 років тому
Сорри,нужно было исправить ошибки в коде,а не найти простой способ конвертации
Олег Г.
4 повідомлення
#13 років тому
<?php

echo Convert(100);

Function Convert($n)
{
$Symbols = '0123456789ABCDEF';
$Base = 16;
if ($n == 0) { # если n есть 0
return 0; # выйти из функции и вернуть значение 0
$ret = 0; #! <- этот код не выполняется
} else { # или
return ''; # выйти из функции и вернуть значение ''
$ret = ''; #! <- этот код не выполняется
}
# код что дальше не выполняется
while (n > 0) {
$bDigit = $n % $Base;
$n = $n/$Base;
$ret = $Symbols + $ret;
return $ret; # выйти из функции и вернуть значение в переменной ret
}
}
?>

или с подсветкой синтаксиса