Fortran Coder

标题: 想请教一下这个if函数的逻辑和参数传递 [打印本页]

作者: 盛世青衫    时间: 2024-3-21 10:11
标题: 想请教一下这个if函数的逻辑和参数传递
请教一个问题。程序按照IF判断逻辑会先执行2处的else if,但是我这里else if的值想要用到1处IF的最终结果(34或者37行的值)。并且我想让后面的else if中“qulv”的值恒等于if中某一个i处的值(i等于第一次进入if 语句中的值),请问有什么办法可实现吗。感谢


ae6057c7ff82d21fd3f67edf7650a386.png (71.08 KB, 下载次数: 44)

ae6057c7ff82d21fd3f67edf7650a386.png

作者: fcode    时间: 2024-3-21 11:27
没太听懂你的意思。
if判断并不会先执行2处的 else if,只会在 if 条件不满足时执行 else if。

你想要另一个分支的值,通常做法是把计算这个需要的值的代码放在 if 前面。
这样不管进入哪个分支,都会先计算这个值。每个分支都能使用。

你可能需要定义额外的变量来存储它
作者: 盛世青衫    时间: 2024-3-21 14:55
本帖最后由 盛世青衫 于 2024-3-21 15:25 编辑
fcode 发表于 2024-3-21 11:27
没太听懂你的意思。
if判断并不会先执行2处的 else if,只会在 if 条件不满足时执行 else if。

大佬好,我的判断条件是导致这个else if 先执行的原因(他这个X_1这个变量是从小到大的单调递增函数(22行),所以他的判断会导致else if先执行),但是我现在对于遇到的问题暂时没有想到其他的判断方法。请问大佬,有没有办法能够让第一次进入if的这个"i"值(因为I也是迭代循环的随着外层DO的不断循环也不断变化)对应的qulv值能够回到else if 中让else if中对应的每一个"i"值能够等于这个值,也就是让这个本身是在else if 后面执行的if语句先执行,和I值一起在第37行这里进行一个欧拉迭代运算,希望得到您的回复。感谢!!!

1e59a181f4e4473122cdf7fd83a568d0.png (760.49 KB, 下载次数: 43)

弯矩图

弯矩图

作者: fcode    时间: 2024-3-21 16:20
用文字表达算法,就是不太清楚。我不是很清楚你想要的算法是什么样子。
如果你要先找到一个符合条件的 i 。你要不要考虑用2次循环?

第一次先找到符合条件的 i,并保存在 k 里,然后计算对应的 qulv 值。
然后第二次循环,做下一步使用 k 和 qulv 值的计算。
[Fortran] 纯文本查看 复制代码
k = 0
do i = 1 , reso
  if( X_I(I)>L2 ) then
    k=i
    qulv = ...
    exit
  end if
end do
do i = 1 , reso
  m_jisuan(k ??? i ...
end do

作者: 盛世青衫    时间: 2024-3-22 10:32
fcode 发表于 2024-3-21 16:20
用文字表达算法,就是不太清楚。我不是很清楚你想要的算法是什么样子。
如果你要先找到一个符合条件的 i 。 ...

感谢指导,我学习一下。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2