2

これが私のコードです:

program change 

            integer:: amount, remainder, q, d, n, p
            amount = 47
            remainder = amount
            print*,remainder
            q = 0
            d = 0
            n = 0
            p = 0

            do while (remainder >= 25)
                    remainder = remainder - 25
                    print*,remainder
                    q = q + 1       
            end do
            do while (remainder >= 10)
                    remainder = remainder - 25
                    print*,remainder
                    d = d + 1       
            end do
            do while (remainder >= 5)
                    remainder = remainder - 25
                    print*,remainder
                    n = n + 1       
            end do
            do while (remainder >= 1)
                    remainder = remainder - 25
                    print*,remainder
                    p = p + 1       
            end do 

            print*, "# Quarters:", q
            print*, "# Dimes:", d
            print*, "# Nickels:", n
            print*, "# Pennies:", p

    end program change

出力:

 47
      22
      -3
# Quarters:           1
# Dimes:           1
# Nickels:           0
# Pennies:           0

最初のループ (>=25) は、剰余が 22 になると終了するはずですが、もう一度実行され、負の数が返されます。条件が false であるにもかかわらず、これが終了しないのはなぜですか? Fortran 95 のように見える IDEone.com の Fortran "コンパイラ" を使用しています。

4

1 に答える 1

4

あなたのDOループは問題ありません。remainder各ループで正しい金種を差し引くだけです。たとえば、2 番目の DO ループを次のように変更します。

        do while (remainder >= 10)
                remainder = remainder - 10
                print*,remainder
                d = d + 1       
        end do

残りも同様に変更します。

于 2011-02-28T03:42:59.583 に答える