VBS/WSH/JS - VBS | Динамические массивы, циклы и присваивание

Ответить
Аватара пользователя
mrcnn

VBS/WSH/JS - VBS | Динамические массивы, циклы и присваивание

Сообщение mrcnn »

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

Re: VBS/WSH/JS - VBS | Динамические массивы, циклы и присваивание

Сообщение hasherfrog »

Код:

Код: Выделить всё

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

Re: VBS/WSH/JS - VBS | Динамические массивы, циклы и присваивание

Сообщение mrcnn »

С:





Код:

Код: Выделить всё

k=5;
for (i=0;i

VBS:





Код:

Код: Выделить всё

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

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

Re: VBS/WSH/JS - VBS | Динамические массивы, циклы и присваивание

Сообщение hasherfrog »

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

Re: VBS/WSH/JS - VBS | Динамические массивы, циклы и присваивание

Сообщение mrcnn »

Цитата:



А про то, что нельзя менять переменную, на которую завязан цикл, это и в обычном бейсике _с_самого_начала_ было, не только в 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.
Ответить

Вернуться в «Программирование и базы данных»