我正在尝试将 pascal 程序重写为 PHP ,并且不明白pascal函数的这一部分是做什么的:
while (u[3] <> 1) and (u[3]<>0) and (v[3]<>0)do
begin
q:=u[3] div v[3];
for i:=1 to 3 do
begin
t:=u[i]-v[i]*q;
u[i]:=v[i];
v[i]:=t;
{writeln('u',i,'=',u[i],' v',i,'=',v[i]); }
end;
end;
if u[1]<0 then u[1]:=n+u[1];
rae:=u[1];
请帮助将其重写为PHP。
感谢。
答案 0 :(得分:4)
该代码的非常字面翻译应该是这个:
while ($u[3] != 1 && $u[3] != 0 && $v[3] != 1 )
{
$q = floor($u[3] / $v[3]);
for ($i = 1; $i <= 3; $i++)
{
$t = $u[$i] - $v[$i] * $q;
$u[$i] = $v[$i];
$v[$i] = $t;
//writeln('u',i,'=',u[i],' v',i,'=',v[i]);
}
}
if ($u[1] < 0 )
$u1] = $n + $u[1];
$rae = $u[1];
当然,你和v是数组。很抱歉没有提供任何更多的信息,但是自从帕斯卡尔和我上次见到对方已经10年了,但是我们有很长一段时间的深刻浪漫,因为我觉得自己喜欢辣妹(C#和PHP) :)
答案 1 :(得分:3)
while ($u[3] != 1) && ($u[3] != 0) && ($v[3] != 0) {
$q = floor($u[3] / $v[3]);
for ($i = 1; $i <= 3; $i++) {
$t = $u[$i] - $v[$i] * $q;
$u[$i] = $v[$i];
$v[$i] = $t;
echo "u$i={$u[$i]} v$i={$v[$i]}\n";
}
}
if ($u[1] < 0) {
$u[1] = $n + $u[1];
}
$rae = $u[1];
答案 2 :(得分:3)
while($u[3] != 1 && $u[3] != 0 && $v[3] != 0)
{
$q = ($u[3] - ($u[3] % $v[3]) ) / $v[3]; //just the same as floor($u[3]/$v[3]), but i want to use % here :)
for ($i = 1; $i <= 3; $i++)
{
$t = $u[$i] - $v[$i]*$q;
$u[$i] = $v[$i];
$v[$i] = $t;
echo '<br />u'.$i.'='.$u[$i].' v'.$i.'='.$v[$i];
}
}
if ($u[1] < 0) $u[1] = $n + $u[1];
$rae = $u[1];
答案 3 :(得分:3)
对David的代码进行了2次小修改:
while ($u[3] != 1 && $u[3] != 0 && $v[3] != 1 )
应该是
while ($u[3] != 1 && $u[3] != 0 && $v[3] != 0 )
和
for ($i = 1; $i < 3; $i++)
我永远不会达到3的价值
for ($i = 1; $i <= 3; $i++)
可能是Writeln可以翻译成
echo 'u'.$i.'='.$u[$i].' v'.$i.'='.$v[$i];
当您进行数组转换时,请考虑php中的数组使用0作为第一个索引。
$u= array( 3, 5, 22 )
echo u[1]; // prints 5
答案 4 :(得分:2)
我不知道pascal但我已经尝试过了:)
while ($u[3]!=1 && $u[3]!=0 && $v[3]!=0) [
$q=floor($u[3]/ $v[3]);
for ($i=1;$i<3;$i++) {
$t=$u[$i]-$v[$i]*$q;
$u[$i]=$v[$i];
$v[$i]=$t;
echo "u".$i."=".$u[$i]."v".$i."=".$v[$i];
}
if ($u[1]<0) {
$u[1]=$n+$u[1];
}
$rae=$u[1];