Прохождение цикла меток

У меня возникли проблемы с прохождением цикла, который я создал с помощью ярлыка. Цикл должен пройти 100 раз и распечатать соответствующие сообщения, если он делится на 3, на 5 или если он делится на 3 и 5. Я новичок в базовом и использую интерпретатор воды моста для компиляции программы . Вот исходный код. Программа работает до тех пор, пока не будет напечатано сообщение «вторая часть», а затем нет вывода. Я попытался переписать цикл, но я все еще не могу заставить его работать. Мы должны использовать только функции if-then и goto.

print "Enter product cost."
input productCost
print "Enter in amount paid."
input amountPaid
if amountPaid < productCost then
   print "Insufficient amount paid. Program exiting."
stop
end if
if amountPaid >= productCost then
   change = amountPaid - productCost
   dollars = int(change / 1)
   quarters = int(change / .25)
   dimes = int(change /  .10)
   nickles = int(change / .05)
   pennies = int(change / .01)

   print "Change in dollars: ";  dollars
   print "Change in quarters: "; quarters
   print "Change in dimes: "; dimes
   print "Change in nickles: "; nickles
   print "Change in pennies: "; pennies
end if
print "Entering second part of the program."
totalIterations = 1
secondPart:
if totalIterations < 100 then  
   if totalIterations / 3 = 0 And totalIterations / 5 = 0 then
      print "The number: " + totalIterations + " is FizzBuzz"
      totalIterations = totalIterations + 1
   end if
   if totalIterations / 3 = 0 And totalIterations / 5 > 0 then
      print "The number: " + totalIterations + " is Fizz"
      totalIterations = totalIterations + 1
   end if
   if totalIterations / 3 > 0 And totalIterations / 5 = 0 then
      print "The number: " + totalIterations + " is Buzz"
      totalIterations = totalIterations + 1
   end if
end if
goto secondPart

person user1881401    schedule 01.02.2015    source источник


Ответы (2)


Вы только увеличиваете totalIterations внутри внутренних if, которые никогда не вводятся. Вы должны переместить его в «основной» if, чтобы вы продолжали увеличивать его, даже если он не делится на 3 или 5:

totalIterations = 1
secondPart:
if totalIterations < 100 then  
   if totalIterations / 3 = 0 And totalIterations / 5 = 0 then
      print "The number: " + totalIterations + " is FizzBuzz"
   end if
   if totalIterations / 3 = 0 And totalIterations / 5 > 0 then
      print "The number: " + totalIterations + " is Fizz"
   end if
   if totalIterations / 3 > 0 And totalIterations / 5 = 0 then
      print "The number: " + totalIterations + " is Buzz"
   end if
   totalIterations = totalIterations + 1
end if
goto secondPart
person Mureinik    schedule 01.02.2015
comment
Я пытался сделать это изначально, но я получаю ту же проблему. Когда я компилирую и запускаю маммограмму, это вывод в моем окне терминала. Введите стоимость продукта. ? 500 Введите сумму оплаты. ? 600 Сдача в долларах: 100 Сдача в четвертаках: 400 Сдача в десятицентовых монетах: 1000 Сдача в пятаках: 2000 Сдача в пенни: 10000 Вход во вторую часть программы. Никогда не выполняет код, указанный в метке - person user1881401; 01.02.2015
comment
Я думаю, что вы сделали пару сисек в предыдущем комментарии! - person Paul R; 01.02.2015
comment
Когда компилирую и запускаю... - похоже, вы не уследили за своей автокоррекцией. - person Paul R; 01.02.2015

totalIterations = 1
secondPart:
if totalIterations < 100 then  
  ...
end if
goto secondPart

Неважно, что вы пишете на ... , это бесконечный цикл. Поскольку вы заявляете, что «мы должны использовать только функции if-then и goto», решите проблему с циклом, написав:

totalIterations = 1
secondPart:
...
if totalIterations < 100 then goto secondPart

Но подождите, с этими числами цикл будет выполняться только 99 раз! Более того, вы только увеличиваете переменную totalIterations в тестовых примерах, что означает, что если ни одно из них не истинно, переменная вообще не будет продвигаться. Решение обеих проблем приводит к:

totalIterations = 0
secondPart:
totalIterations = totalIterations + 1
...
if totalIterations < 100 then goto secondPart

if totalIterations / 3 = 0 And totalIterations / 5 = 0 then
if totalIterations / 3 = 0 And totalIterations / 5 > 0 then
if totalIterations / 3 > 0 And totalIterations / 5 = 0 then

Ни один из указанных выше тестов на делимость.

В отсутствие какого-либо суффикса типа BASIC будет обрабатывать вашу переменную totalIterations как значение с плавающей запятой, над которым вы затем выполняете обычную операцию деления, создавая дробную часть, которая отобразит все эти and в FALSE. Это было бы второй причиной того, что ваша программа застряла в бесконечном цикле.

Решение находится в операторе BASIC mod, который возвращает остаток от эквивалентного деления. Я не могу знать, какой вариант BASIC вы используете, но многие из них позволяют использовать суффикс % для определения переменной как целого числа. Это то, что вам нужно:

if (totalIterations% mod 15) = 0 then
  print "The number: ";totalIterations%;" is FizzBuzz"
end if
if (totalIterations% mod 3) = 0 then
  print "The number: ";totalIterations%;" is Fizz"
end if
if (totalIterations% mod 5) = 0 then
  print "The number: ";totalIterations%;" is Buzz"
end if
person Sep Roland    schedule 05.02.2017