function setCode() {
var textbox1 = document.getElementById('textbox1');
var textbox2 = document.getElementById('textbox2');
var divResult = document.getElementById('divResult');
var c = ['azimuth','background','background-attachment',
'background-color','background-image',
'background-position','background-repeat',
'behavior','border','border-bottom',
'border-bottom-color','border-bottom-style',
'border-bottom-width','border-collapse',
'border-color','border-left','border-left-color',
'border-left-style','border-left-width','border-right',
'border-right-color','border-right-style',
'border-right-width','border-spacing','border-style',
'border-top','border-top-color','border-top-style',];
var code0 = ( function set(C0) {
return ( C0 +=
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[Math.floor(Math.random()*10)])
&& (C0.length == 3) ? C0 : set(C0);
}
)('');
textbox1.value = code0;
divResult.innerHTML = c[textbox1.value];
var t;
t = setTimeout('setCode()', 1000);
}
使用这个子程序我试图解决
的零点 program main
implicit none
double precision x0, a, b
x0 = -3
call findzero(x0)
contains
function f(x)
implicit none
double precision x,f
f = SIN(x) - exp(-x)
end function
function fprime(x)
implicit none
double precision fprime, x
fprime = COS(x) + exp(-x)
end function
subroutine findbracket(x0,a,b)
implicit none
double precision x0, a, b
double precision fa, fb
double precision dx
dx = 0.001d0
a = x0
b = x0
do
fa = f(a)
fb = f(b)
!print*,"bracket[", a, b, "]"
a = a - dx
if (fa*fb < 0) then
exit
end if
b = b + dx
if (fa*fb < 0) then
exit
end if
dx = dx*2
end do
end subroutine
subroutine findzero(x0)
implicit none
double precision x0, a, b
double precision p, tol
while (x0 <11) do
x0 = -3
print*, "what is x0", x0
call findbracket(x0,a,b)
call newtonbisection (p,a,b,tol)
print*, "this is x0, x", x0, p
x0 = x0 + 1
end do
end subroutine
f(x) = sinx - e^-x
。
我有子工作x0 = -3, -2, ..., 10
和findbracket
。使用newtonbisection
我打算得到[a,b]并使用那些a和b,我想为每个x0找到p。
当我编译时,我的代码陷入无限循环,我试着注释掉
findbracket
所以我认为问题出在call newtonbisection (p,a,b,tol)
。但是,如果我只是使用子程序来查找带有findbracket
的{{1}},那么它可以工作,但不能在我将它们组合时使用。
为什么我有无限循环?
答案 0 :(得分:2)
让我们缩小这个循环:
do while (x0 < 11)
x0 = -3
call findbracket(x0, a, b)
x0 = x0 + 1
end do
只要x0
小于11,就会执行此循环。在循环内部,您明确将x0
设置为减3,然后调用使用x0
的子例程,最后增加x0
我没有看到findbracket
例程中x0
的值会更改的任何位置,因此在通话结束时它仍然是-3
。然后它增加1,所以它现在-2
,它仍然小于11
,所以循环再次开始。它做的第一件事就是将x0
重置为-3
,整个spiel再次从同一点开始。
因此条件x0 < 11
将始终为真,因为在每次迭代中,x0
都会重置为-3
。循环永远不会退出。你的程序挂了。
您需要将x0 = -3
移到循环之前,如下所示:
x0 = -3
do while (x0 < 11)
call findbracket(x0, a, b)
x0 = x0 + 1
end do
这样,x0
在循环的每次迭代中都不会重置为-3
,最终会变得大于11
,以便循环结束。
答案 1 :(得分:0)
&#34;无限&#34; for循环实现如下:
do
** Some executable statements
if (conditional_statement) exit
end do
简而言之,重复执行一组语句,直到满足条件语句,即
conditional_statement .eqv. .true.
发生这种情况时,程序控制会跳转到do
构造后面的下一个可执行语句。