Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   VBS | Динамические массивы, циклы и присваивание (http://forum.oszone.net/showthread.php?t=72785)

mrcnn 12-10-2006 09:55 496634

VBS | Динамические массивы, циклы и присваивание
 
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 496980

Код:

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 497111

hasherfrog
Спасибо

mrcnn 21-10-2006 18:45 501094

С:

Код:

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 501153

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

mrcnn 22-10-2006 14:12 501235

Цитата:

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


Время: 19:15.

Время: 19:15.
© OSzone.net 2001-