Разбивание цикла на несколько

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Разбивание цикла на несколько

Сообщение MIT » 31.10.2006 (Вт) 23:54

Вот сталкнулся с проблемой: есть цикл, работающий огромнейшее количество раз. Так вот, это кол-во раз не влезает даже в Currency, отсюда вопрос - как обойти это ограничение? Можно ли разбить цикл на структуру циклов (один в другом)?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.11.2006 (Ср) 0:00

В принципе, мы не против, разбивай.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.11.2006 (Ср) 0:08

MIT, лучше всего - приведи конкретный код :)

Сделать вложенность ничто не мешает.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 01.11.2006 (Ср) 0:25

Код: Выделить всё
'txtfinish = 10
'GetL = 255

For i = 1 to txtfinish ^ GetL 'сдесь Owerfol
    DoEvents
    If can = True Then can = False: GoTo err1
    If crackbd Then txtPass = pass & vbCrLf & txtPass: ok = 1: pa = pa + 1: Label4.Caption = "(" & pa & ")" ':Exit For
    If Len(pass) - 1 < txtfinish Then pass = q.GetNextString
next i


собственно обычный цикл...
Последний раз редактировалось MIT 01.11.2006 (Ср) 19:13, всего редактировалось 1 раз.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

zan
Бывалый
Бывалый
 
Сообщения: 224
Зарегистрирован: 24.08.2006 (Чт) 4:55

Сообщение zan » 01.11.2006 (Ср) 4:30

Интересно где возникают переполнение... Еще можно к примеру использовать Double...
offtop
MIT писал(а):Label4.Caption = "Ïîäõîäÿùèå ïàðîëè (" & pa & ")"

Для избежание подобной канители в XP необходимо перед копированием переключится с русского на английский... и хотя бы поправить & pa &...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Разбивание цикла на несколько

Сообщение alibek » 01.11.2006 (Ср) 8:49

MIT писал(а):есть цикл, работающий огромнейшее количество раз. Так вот, это кол-во раз не влезает даже в Currency

Обманываешь. Ты хоть представляешь, сколько влезает в Currency?
Lasciate ogni speranza, voi ch'entrate.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 01.11.2006 (Ср) 9:15

А нельзя сделать Do Until... ?
Подпись находится в стадии разработки...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 01.11.2006 (Ср) 10:34

А какой смысл здесь в Do Until? Число циклов известно заранее, самое место для For/Next
Весь мир матрица, а мы в нем потоки байтов!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.11.2006 (Ср) 10:39

В таком тупом брутфорсе можно хоть GoTo использовать, код от этого лучше не станет.
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 01.11.2006 (Ср) 10:47

а там уже есть GoTo...
Весь мир матрица, а мы в нем потоки байтов!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 01.11.2006 (Ср) 19:10

alibek
Не обманываю - попробуй запустить

Конь
Пробовал, но не очень это удобно
!Viper!
Ну можно Exit For
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.11.2006 (Ср) 19:27

Мне не надо пробовать запускать, я и без того вижу, что это за код.
Неужели ты хочешь сказать, что цикл у тебя выполнялся 2e14 раз, после чего выдал переполнение? Или все-таки он выдал ошибку в первом проходе, когда ты попытался подсунуть ему 1e256?
Lasciate ogni speranza, voi ch'entrate.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 01.11.2006 (Ср) 23:05

сразу же после запуска, ни сделав ничего
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

zan
Бывалый
Бывалый
 
Сообщения: 224
Зарегистрирован: 24.08.2006 (Чт) 4:55

Сообщение zan » 02.11.2006 (Чт) 5:26

MIT посмотри msdn по типам переменных... В твоем случае это не Currency, а Double, замени и все заработает...

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 02.11.2006 (Чт) 9:02

Вопрос немного не потеме но всёже: Можноли какнибуть работать с очень большими числами?

Код: Выделить всё
Private Sub Form_Load()
x=100000000000000000000001
y=100000000000000000000000
Me.Caption = x - y
End Sub


Поидеи должин выдать 1, но ....
С=[::::::::::> ™ e398wallpapers.narod.ru

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 02.11.2006 (Чт) 9:17

|( () ( T |/| |( писал(а):Вопрос немного не потеме но всёже: Можноли какнибуть работать с очень большими числами?

Код: Выделить всё
Private Sub Form_Load()
x=100000000000000000000001
y=100000000000000000000000
Me.Caption = x - y
End Sub


Поидеи должин выдать 1, но ....

Написать длинную арифметику. Массив байтов и несколько функций для работы с ними (обычно хватает +-). В поиске вариантов куча. Это стандартная олимпиадная задача.


И кстати вот это:
If can = True Then

Я никогда не мог понять...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.11.2006 (Чт) 10:07

zan писал(а):В твоем случае это не Currency, а Double, замени и все заработает...

Совет плохой и неправильный.
Lasciate ogni speranza, voi ch'entrate.

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 02.11.2006 (Чт) 12:48

GAGArin, что-то не могу найти, не скинеши?
С=[::::::::::> ™ e398wallpapers.narod.ru

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 02.11.2006 (Чт) 15:51


Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.11.2006 (Чт) 21:26

GAGArin писал(а):
|( () ( T |/| |( писал(а):Вопрос немного не потеме но всёже: Можноли какнибуть работать с очень большими числами?
Код: Выделить всё
Private Sub Form_Load()
x=100000000000000000000001
y=100000000000000000000000
Me.Caption = x - y
End Sub

Поидеи должин выдать 1, но ....

Написать длинную арифметику. Массив байтов и несколько функций для работы с ними (обычно хватает +-). В поиске вариантов куча. Это стандартная олимпиадная задача.


Ну вы блин даёте :lol:
Код: Выделить всё
Private Sub Form_Load()
x = CDec("100000000000000000000001")
y = CDec("100000000000000000000000")
Me.Caption = x - y
End Sub

Арифметику писать собрались...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.11.2006 (Чт) 21:48

Хакер, прежде чем вещать, попробуй еще шесть ноликов добавить.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.11.2006 (Чт) 21:51

alibek
Зачем? Ну будет оверфлоу и что?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.11.2006 (Чт) 22:08

Хакер, а что - числа 10^26 не существует? И складывать/делить/умножать такие числа не надо?

10^35 * 10^254 - какой будет результат? Overflow? ;)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.11.2006 (Чт) 22:16

Числа такие существуют. И VB и посчитать не может (напрямую). И приёчём тут это? Я лишь ответил, что для того чтобы посчитать
Private Sub Form_Load()
x=100000000000000000000001
y=100000000000000000000000
Me.Caption = x - y
End Sub

Ничего дополнительного писать не надо. Просто тип должен быть Decimal-ом к примеру.

Ведь когда человек пытается перемножить две байтовых переменных, между собой, произведение которых больше 255, ему советуют заюзать Integer или Long, а не сразу же слепо подключать к проекту доп. библы. Так?

Я думаю, предирка безосновательная.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 02.11.2006 (Чт) 22:46

Я думаю, предирка безосновательная.

Ты прав, черт возьми. Абсолютно безосновательная :lol:
Последний раз редактировалось GAGArin 02.11.2006 (Чт) 22:52, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.11.2006 (Чт) 22:47

GAGArin
Издеваешься?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 02.11.2006 (Чт) 23:26

GAGArin
can - это типа cancel, если он True - то выход
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.11.2006 (Чт) 23:32

MIT
If condition Then code1

code1 выполняется если condition = True

Но всесто того чтобы проверять равно ли (can = True) константе True, можно сразу проверить равно ли can константе True.

If can Then ...

не находишь?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 02.11.2006 (Чт) 23:57

Хакер
Спасибо, я это знаю. Пишу чтобы все поняли
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 101

    TopList