Цикл Do-Пока Fortran 95 не завершается в ложном состоянии - PullRequest
2 голосов
/ 28 февраля 2011

Вот мой код:

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, но он проходит еще раз и выдает отрицательное число. Почему это не выход, даже если условие ложно? Я использую Fortran "компилятор" IDEone.com, который похож на Fortran 95.

1 Ответ

4 голосов
/ 28 февраля 2011

Ваши циклы DO в порядке.Вам просто нужно вычесть правильный номинал из remainder в каждом цикле.Например, измените ваш второй цикл DO на:

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

и измените остальные значения аналогичным образом.

...