Войти

Показать полную графическую версию : VBS | Динамические массивы, циклы и присваивание


mrcnn
12-10-2006, 09:55
VBS

Есть динамический массив.
Его необходимо заполнить числами с помощью Inputbox.
Размер массива предварительно неизвестен.
Нужно отследить, когда не будет ничего введено, чтобы выйти из цикла.

Возникающие вопросы:
1. Как правильно написать условие выхода из цикла?
2. Как засунуть присваивание в шапку операторов цикла vbs - For или Do While?
3. Почему при вводе с данным условием val оказывается Empty всегда?
dim array(), min,i
i=0
Do While ( ( ( val=Inputbox("Введите a("&i&")") ) <> empty) <> True) '(Not(IsEmpty(val=Inputbox("Введите a("&i&")"))))
MsgBox ("val:"&val&vbcrlf&"type: "&typename(val))
Redim Preserve array(i+1)
array(i)=eval(val)
i=i+1
Loop

VBS - отстой.

hasherfrog
13-10-2006, 00:05
dim array(), bAgain, i
i = 0
bAgain = true
Do
val = Inputbox("Введите a("&i&")")
if val = Empty or val = Null or val = "" or IsNumeric(val) = false then
bAgain = false
else
MsgBox ("val:" & val & vbcrlf & "type: " & typename(val))
Redim Preserve array(i+1)
array(i)=eval(val)
i=i+1
end if
Loop While ( bAgain )
Можно так, хотя можно и оптимизировать (либо наоборот, усложнить: делать проверку на мусорный код с повторным вводом)

mrcnn
13-10-2006, 09:35
hasherfrog
Спасибо

mrcnn
21-10-2006, 18:45
С:

k=5;
for (i=0;i<k;i++){
if (i==2)
k=10;
cout << i <<"\n";
}

VBS:

k=5
For i=1 To k
if i=2 then k=10
msgbox i
Next

в VBS ущербная конструкция цикла For. Автора языка за такое издевательство над for следовало бы линчевать :)

hasherfrog
21-10-2006, 23:57
Ну зато много других циклов :] Да не, нормальный язык, просто привычки требует. А про то, что нельзя менять переменную, на которую завязан цикл, это и в обычном бейсике _с_самого_начала_ было, не только в vbS (дело же в этом? я правильно понял?).

mrcnn
22-10-2006, 14:12
А про то, что нельзя менять переменную, на которую завязан цикл, это и в обычном бейсике _с_самого_начала_ было, не только в vbS (дело же в этом? я правильно понял?).

Обычный бейсик я плохо знаю. Это плохо, что нельзя изменять переменную на которую завязан цикл. Кроме этого условия вроде бы нельзя вставить. Если будет стоять выбор между VBS и JS, я предпочту JS, хотя бы потому что там цикл for нормальный, а не обрезанный по самые гланды :)

Взять допустим сортировку Шелла
void shellsort(int v[], int n)
{
int gap, i, j, temp;

for (gap = n/2; gap > 0; gap /= 2)
for (i = gap; i < n; i++)
for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) {
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
}
}

я не знаю, как это можно переписать на VBS используя только for.




© OSzone.net 2001-2012