@Nejtron

Почему этот скрипт так нестабилен?

Добрый вечер, весь день писал скрипт для нахождения слагаемых какой-то суммы, представленных натуральной степенью двойки (11 = 2**3 + 2 ** 1 + 2 ** 0). В каких-то случаях он нормально отрабатывает и выдаёт желаемую строку, а в каких-то виснет после приёма желаемой суммы.
скрипт
sum = inputbox("Введите желаемую сумму (до 1000):")
conv = array(512,256,128,64,32,16,8,4,2,1)
list = array()

number = 0
while sum <> 0
	for each item in conv
		if item <= sum then
			sum = sum - item
			redim preserve list(number)
			list(number) = item
			number = number + 1
		end if
	next
wend

str = ""

for each item in list
	str = str & " " & item
next

msgbox str

Расскажите недопрограммисту, что не так?
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
wisgest
@wisgest
Не ИТ-специалист
Если бы вместо строки
while sum <> 0
было бы более строгое условие
while sum > 0
то зависания не было бы (но не уверен, что ответ всегда был бы правильным), а так sum может стать отрицательной из-за того, что сразу после ввода она является строкой и, вероятно, в условии
if item <= sum then
сравниваются строки, а не числа. Чтобы этого не происходило сразу явно преобразуйте введённое значение к целочисленному типу:
sum = CInt( InputBox("Введите желаемую сумму (до ...):") )

Но в целом можно попроще
sum = CInt(InputBox("Введите желаемую сумму (до ...):"))
conv = 1
str = ""
while conv <= sum
	if sum and conv then str = conv & " " & str
	conv = conv * 2
wend
MsgBox Trim(str)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы