爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6007|回复: 9

[分享资料] 求助:使用if语句时,变量之间的比较大小遇到困惑

[复制链接]

新浪微博达人勋

发表于 2012-2-13 23:07:08 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 huangyaohuai 于 2012-2-14 07:51 编辑

我在写GS时,当使用if语句判断任两个变量大小时,结果经常出错。比如:我要计算某时刻500hPa高度场,距离台风中心第5根等值线的经纬度是多少,部分代码如下(格点是0.5*0.5):
...
tt=1
while(tt<=9)
'set t 'tt
read_file=read('f:/steering/hgt_tc0202_0402.txt')
read_line=sublin(read_file,2)
hgt_tc=subwrd(read_line,1)
hgt5=hgt_tc+50
read_file=read('f:/steering/nigetrack6hr.txt')
read_line=sublin(read_file,2)
lat0=subwrd(read_line,1)
lon0=subwrd(read_line,2)

hgtbefore=hgt_tc
lon0_e=lon0+0.5
j=1
while(j<=30)
'set lat 'lat0
'set lon 'lon0_e

if(hgt5<hgtprs)
  if(abs(hgt5-hgtprs)<abs(hgt5-hgtbefore))
  'd lon0_e'
   else
   'd lon0_e-0.5'
   endif
break
endif

hgtbefore=hgtprs
lon0_e=lon0_e+0.5
j=j+1
endwhile

tt=tt+1
endwhile
...
最终得出结果是错误的,我查出的原因是:j=1,只循环一次就退出循环,不论对于任何时次的hgtprs, hgt5都小于它,都满足if里的条件。问题就出在if(hgt5<hgtprs)上,请高手指点迷津,多谢。


密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-2-13 23:32:16 | 显示全部楼层
hgt5的值在循环中没有变化啊,是不是下面的赋值语句有问题,给hgtbefore赋值好像没用到啊,我也不是很清楚,你改了试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-2-14 07:53:54 | 显示全部楼层

hgt5=hgttc+50应是hgt5=ght_tc+50的误写,错误还是没有解决
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-2-14 08:16:53 | 显示全部楼层
我的意思是在下面的内循环里面  hgt5和hgtprs的值都没有发生变化
while(j<=30)
'set lat 'lat0
'set lon 'lon0_e
if(hgt5<hgtprs)
  if(abs(hgt5-hgtprs)<abs(hgt5-hgtbefore))
  'd lon0_e'
   else
   'd lon0_e-0.5'
   endif
break
endif
hgtbefore=hgtprs
lon0_e=lon0_e+0.5
j=j+1
endwhile

这个条件可能永远也没有满足,也就是你说的运算完之后j=1,应该是一次也没有内循环,如果有的话算完j应该等于2,因为你初始值为1,算完后会+1,所以你看看是不是应该在内循环里面动态改变if里面两个或者一个变量的值。

我只是从程序的角度去考虑的,没有考虑你的变量的实际意义,所以可能有不对的地方
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-2-14 08:37:08 | 显示全部楼层
mofangbao 发表于 2012-2-14 08:16
我的意思是在下面的内循环里面  hgt5和hgtprs的值都没有发生变化
while(j

hgtprs位势高度值,随lon0_e(经度)的值的变化而有不同的值,lon0_e=lon0_e+0.5,lon0_e随着 j 增长而向东增加0.5度,然后新的hgtprs值赋予hgtbefore
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-2-14 08:42:48 | 显示全部楼层
本帖最后由 冰枫 于 2012-2-14 08:45 编辑
huangyaohuai 发表于 2012-2-14 08:37
hgtprs位势高度值,随lon0_e(经度)的值的变化而有不同的值,lon0_e=lon0_e+0.5,lon0_e随着 j 增长而向 ...


貌似你没有将hgtprs读入呀,还是我没看仔细?即使读入了,它会默认的随着lon0_e变化吗?

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-2-14 08:49:35 | 显示全部楼层
huangyaohuai 发表于 2012-2-14 08:37
hgtprs位势高度值,随lon0_e(经度)的值的变化而有不同的值,lon0_e=lon0_e+0.5,lon0_e随着 j 增长而向 ...

hgt5随时间tt而变,一个tt一个值,hgtprs随 j 而变,一个tt,有30个hgtprs值。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-2-14 08:57:46 | 显示全部楼层
是不是grads把数字(实数或整数)看成字符串,来进行比较,这样的比较结果就出错。grads有没有定义数据类型的功能呀?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-2-14 08:52:13 | 显示全部楼层
huangyaohuai 发表于 2012-2-14 08:49
hgt5随时间tt而变,一个tt一个值,hgtprs随 j 而变,一个tt,有30个hgtprs值。

hgtprs是ctl文件里面的固有变量,随经纬度的变化而变化
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-30 08:29:36 | 显示全部楼层
很好的问题
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表