Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131

как зделать так чтобы прога не висла

06.01.2010, 21:06. Показов 6473. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
такая вот прога:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Dim s(0 To 26) As String
Dim p As String
Private Sub Form_Load()
s(1) = 'a'
s(2) = 'b'
s(3) = 'c'
s(4) = 'd'
s(5) = 'e'
s(6) = 'f'
s(7) = 'g'
s(8) = 'h'
s(9) = 'i'
s(10) = 'j'
s(11) = 'k'
s(12) = 'l'
s(13) = 'm'
s(14) = 'n'
s(15) = 'o'
s(16) = 'p'
s(17) = 'q'
s(18) = 'r'
s(19) = 's'
s(20) = 't'
s(21) = 'u'
s(22) = 'v'
s(23) = 'w'
s(24) = 'x'
s(25) = 'y'
s(26) = 'z'
For i = 0 To 26
p = s(i) + p + p
Next i
p = Mid(p, 14, 1)
Print p
End Sub
интересно что если i = 0 to 25
то прога за 2 сек решает но мне то нужно 26
попутный вопрос:можно ли как нибудь ввести в массив английский алфавит
не так как я(нудно знаете писать)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.01.2010, 21:06
Ответы с готовыми решениями:

Как зделать чтобы в место DATA использовать кнопки?
Подскажите как зделать чтобы в место DATA использовать кнопки. Я понимаю глупый вопрос, но вот этот код мне не помог=( If Not...

Как зделать так чтоб кнопки нажимались многоразово я нажал лишь один раз?
Я не знаю как зделать чтоб от одного нажатия кнопка нажималась многоразово. Меня это интересует из за недавно вышедшей игры South Park The...

Как зделать чтобы было видно иконка работающей программы в правом нижнем углу
За рании блогадарю. Извинаюсь за плохой русскйи.

60
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
10.01.2010, 13:34
Студворк — интернет-сервис помощи студентам
> спасибо за подсчет
Та ни за шо ))
Я покажусь тупым, но твоя прога, лишь заполняет массив в цикле символами лат. алфавита. Это конечно лучше, чем вбивать их ручками, но я не увидел самого решения проблемы. Я тут на досуге нашел как решить твою задачку рекурсией, но раз ты ее уже решил сам(где?я не увидел!?), значит постить не надо.

Так просто, на будущее: Заметь, что читать (с сайта, а не из ящика)
Code
1
2
3
4
5
6
  dim i=1
  for i=1 to 10
    if msgbox('Дальше?',vbYesNo)=vbNo then
      exit for
    end if 
  next i
Намного прикольнее, чем:

dim i=1
for i=1 to 10
if msgbox('Дальше?',vbYesNo)=vbNo then
exit for
end if
next i

не так ли?
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
10.01.2010, 20:23  [ТС]
to t-80
А эти строки тож ничего не делают?
Private Sub Command1_Click()n = InputBox('ВВЕДИТЕ НОМЕР БУКВЫ')
perv = 26 - n
Print strLetters(perv)
End Sub
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
10.01.2010, 20:26  [ТС]
мож чуть не по теме но
как делать так как вы(ты?) указали а то у меня чето пробелы удаляются
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
10.01.2010, 20:28  [ТС]
упс ошибка в пред последнем ответе правильно так:
to t-80
А эти строки тож ничего не делают?
Private Sub Command1_Click()
n = InputBox('ВВЕДИТЕ НОМЕР БУКВЫ')
perv = 26 - n
Print strLetters(perv)
End Sub
0
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
11.01.2010, 09:24
Можешь смело 'тыкать')))).
Я всегда пишу code в [] на отдельной строке.

Насколько я разобрался, то приведенный код лишь выдает символ по номеру в заданной последовательности(в твоем случае англ. алф).
то, есть 1=a, 2=b, 3=c и тд. Если я не прав, то объясни, пожалуйста, на пальцах найденное тобой решение, а я что-то никак не въеду (
Кстати, чтобы определить какой символ какому числу соответствует, необязательно создавать массив :
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
  'Код не проверял, поэтому ошибок должно быть немеряно:))))
  dim i as String
  dim s as string
  i=inputbox('чего-то там')
  if isnumeric(i) then
    if CINt(i)>0 and Cint(i)<=26 then
      s=Chr(96+Cint(i))'Искомый символ
    Else
      'Тоже как-нибудь обматерить
    end if
  else
    msgbox 'Введи число!!!'
  end if
PS: Старый уже совсем стал, никак не пойму как ты решил задачку, расскажи, а то спать не буду)))
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
11.01.2010, 17:19  [ТС]
В общем так:
сначало я заметил что у A в первом шаге позиция №1
во втором 2
в третьем 3
значит для того чтобы найти какая буква скрывается за заданным числом нужно найти
шаг последавательности в котором она впервый раз встречается(он будет совпадать с номером
буквы в алфавите)
а его можно найти так:
perv=26-n,где perv - номер шага где первый раз встречается буква, 26 - кол-во шагов,
n - заданный номер
вроде все если че непонятно пиши на dformail@MAIL.RU
0
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
11.01.2010, 18:37
Угу, очень интересно, но непонятно.
Твоя программа что, как входное данное использует номер шага, на котором добавляется искомый символ? А в чем тогда прикол, э... то есть смысл задания? Ну правда, непонятно!
Как я понял из описания задания надо найти символ, стоящий ну скажем на 123456-ой позиции в ЧУГ-строке(или я не прав?). Тогда, как определить шаг на котором был добавлен символ, который стоит на 123456-ой позиции в ЧУГ-строке?
>сначало я заметил что у A в первом шаге позиция №1 во втором 2 ...
А еще на втором шаге А стоит на третьей позиции, а на 4-м на 3,4,6,7,10,11,13,14 -ой, а не только на третьей, на это что гвоздь забит? И вообще, количество 'А' в ЧУГ-строке это 2 в степени 13, но это так, к слову.
Ну да фиг с ним, с 123456 ))), давай определим символ, стоящий на 27-ой позиции (я не расписывал эту строку, но мне почему-то кажется, что это 'a')) ). 26-27=-1, давай-ка посмотрим, какой символ латинского алфавита стоит на (-1)-ой позиции))).

>значит для того чтобы найти какая буква скрывается за заданным числом нужно найти шаг последавательности в котором она впервый раз встречается(он будет совпадать с номером буквы в алфавите)
А вот это, как раз, очень здравая мысль!

PSS: не хочу я мылить!, пусть все знают какой я тормоз!!!
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
11.01.2010, 20:54  [ТС]
даа мое решение годится не для всех случаев
а кстати как ты решил ее рекурсиеей???
p.s Нет!! этл я тормоз
0
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
12.01.2010, 09:50
Ну, вот, я то думал, что ты нашел более элегантное решение, чем я, хотел выпытать.
По поводу рекурсии: это с моей точки зрения как программера, а вообще-то можно и без нее; в нек. литературе ей вообще не советуют пользоваться.
Я не претендую на то, что мое решение абсолютно и единственно верно ))
Итак, приступим.

>значит для того чтобы найти какая буква скрывается за заданным числом нужно найти шаг последавательности в котором она впервый раз встречается(он будет совпадать с номером буквы в алфавите)

Я тоже от этого отталкивался, но ты не подметил одну вещь, для примера рассмотрим строку, полученную на 4-м шаге (почему на 4-м? на третьем -еще ничего нельзя увидеть, а на пятом уже ничего нельзя увидеть ))) ) :
dcbaabaacbaabaa
А если так?:
d cbaabaa cbaabaa
Нет? все равно не понятно? Тогда так:
dcbaabaacbaabaa => d cbaabaa cbaabaa
cbaabaa => c baa baa
baa => b a a
a => усе, дальше почковаться некуда.
Сейчас надо радостно прыгать и кричать: 'Ура, допетрил!!!', но я на всякий случай продолжу.
Смысл всего вышеприведенного таков: любая строка, кроме полученной на первом шаге, может быть представлена как сумма трех строк :
- один символ, добавленный на последнем шаге
- две одинаковые строки, полученные на предыдущем шаге.
Тогда, вкратце, алгоритм таков:
Предположим, что у нас есть ЧУГ-строка, реально мы ее строить не будем, а предполагать мы можем что угодно))).
Пусть длина ЧУГ-строки =N (67 108 863 символов), а найти нам надо i-й элемент. Сначала посмотрим, i=1? (ура решение найдено, это 26-(номер шага) символ!), если это не так - делим ЧУГ-строку на три подстроки и определим какая из двух последних строк содержит в себе i-й искомый элемент:
если i>(N-1)/2, то во второй, иначе - в первой.
Затем отнимаем от кол-ва шагов 1, и вместо ЧУГ-строки делаем все вышеописанное над подстрокой из ЧУГ-строки, помня о том, что строка может начинаться либо с 2 до (N-1)/2, либо с ((N-1)/2)+1 до N. И сравнивать i надо теперь с 2 или с ((N-1)/2)+1.
И так продолжать до победного, то есть пока для какой-то подстроки i не совпадет с первым символом этой подстроки, и по кол-ву шагов определить, что это за символ.
ВСЕ. А надо ли прикручивать сюда рекурсию, думай сам. Текст проги, реализующей этот весь маразм раза в три меньше описания, но писать программы(кодировать) не так интересно, как придумывать алгоритмы. Если напишешь код для этого чуда, то ,плиз, писни сюда работает или нет.
PS to All other: Блин, я разочарован вами, господа программеры, решение ентой задачки заняло у меня мин 15, неужели у вас настолько размякли мозги? Или лень? Задачка-то, хоть и олимпиадная, но (наверное?) школьная, и не решить ее было бы просто стыдно. Вот подрастет наша смена, а местов начальников отделов и руководителей проектов на всех не хватит, и будем мы с вами пирожками торговать... в лучшем случае.





0
Ghost
12.01.2010, 10:30
2 t-80 : изучение существующих и разработка новых алгоритмов - это действительно то, из-за чего я стал разработчиком. А по поводу данного конкретного случая - посмотри на задачу - явно академическая. Похоже, что студенту её задали, так что для него это не творчество, а принудиловка. Отсюда и подход.
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
12.01.2010, 10:44  [ТС]
Допустим не студенту а ученику 10 класса и не задали а сам в инете нашел
так что не принудиловка
0
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
12.01.2010, 11:28
2 Ghost: Та же фигня,))), тк суть программирования - творчество, а это себе могут позволить люди далеко не любой проффессии(ИМХО), да еще и намного баблосов за это иметь .

2 goldseeker: Молодец, конечно что озадачиваешь себя, только это задачка не столько по программированию, сколько по 'алгоритмическому мышлению'. Вот и косвенный ответ на вопрос, 'какой же язык выбрать', так как главное состоит в разработке алгоритмов, а не в их 'кодинге'.
А известный алгоритм можно реализовать хоть на чём. Кодинг-занятие не творческое и не интересное. Но, если ты не сможешь придуманный алгоритм выразить в коде - то это тоже совсем не Good. Често говоря, думал что ты еще помоложе )).
0
Ghost
12.01.2010, 11:41
2 goldseeker - тогда мои регардсы.
к сказанному t-80 хочу добавить - чистые кодеры не всегда нужны и это такое-же скучное занятие (ИМХО) как и хождение по граблям.
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
12.01.2010, 11:41  [ТС]
тут еще одно обстаятельство дело в том что я занимаюсь программированием ок. 3 месяцев так что думаю усе еще впереди
0
Ghost
12.01.2010, 11:44
Оптимистичный прогноз звучит так - вскрытие покажет ))))
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
12.01.2010, 12:01  [ТС]
to t-80
я конечно уже всех достал но:
1 как ты определил N (67 108 863 символов)
2 'если это не так - делим ЧУГ-строку на три подстроки и определим какая из двух последних строк содержит в себе i-й искомый элемент'
ведь две последние строки одинаковы следовательно он будет либо содержатся либо нет в обоих
3'Затем отнимаем от кол-ва шагов 1, и вместо ЧУГ-строки делаем все вышеописанное над подстрокой из ЧУГ-строки, помня о том, что строка может начинаться либо с 2 до (N-1)/2, либо с ((N-1)/2)+1 до N. И сравнивать i надо теперь с 2 или с ((N-1)/2)+1.
И так продолжать до победного, то есть пока для какой-то подстроки i не совпадет с первым символом этой подстроки, и по кол-ву шагов определить, что это за символ.' это я вообще не понял
p.s черт мне указал на енту задачку
0
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
12.01.2010, 13:55
Понятно, что ничего не понятно )))
ЧУГ - Чудовищно Ужасно Громадная строка, сформированная как описано в задании )))
1. N=(2 в степени 26)-1 - длина ЧУГ-строки, но я могу и ошибиться, проверь обязательно.
2. i-й элемент это не буква, это позиция в ЧУГ-строке, а нам надо определить какая буква там нах-ся.

Поясню на примере.
Пусть мы используем не 26, а 4 символа, тогда:
ЧУГстрока= 'dcbaaBaacbaabaa';
длина =(2 в степени 4)-1=15,согласен?
Найдем, какой символ стоит на 6-ой позиции(i=6), это 'B', но мы то этого не 'знаем'.
(Шаг 4)
Так как i<>1, то Бъем строку на три подстроки:
Code
1
2
d cbaaBaa cbaabaa
1 2345678 9012345
Затем определим, в какой из подстрок стоит 6-ой символ
от 2 до 8 - первая строка
от 9 до 15- вторая строка
6>=2, но 6<=8, значит 6-ой символ в первой подстроке
(Шаг 4-1=3)
Так как номер первого символа в строке 2<>i(6), то продолжим, бъем дальше:
Code
1
2
d >c baa Baa< cbaabaa
1  2 345 678  9012345
итого первая строка: от 3 до 5-ти (почему 5? из предудущего шага известно, что подстрока, содержащая искомый символ, это символы от 2 до 8-го, надо отнять 1 (символ 'с') и поделить оставшуюся строку (от 3 до 8) напопалам, вот и получим 5)
вторая строка : с 6-го по 8-ой
6>=3 и 6<=5 - брехня)), значит
6>=6 и 6<=8 , значит i-ый символ во второй строке
(Шаг 2)
i(6)=первому символу в подстроке 'Baa',
Все!!! , так как полученная строка 'Baa' была получена на (Шаг 2), и символ 'b' здесь был добавлен впервые, то следовательно символ, стоящий на i-й(6-ой) позиции в ЧУГ, это 2-ой символ взятого 4-х значного алфавита 'abcd', а это 'b'.

PS: Получилось довольно-таки коряво, но из меня плохой объясняльщик.
Как собака, все понимает, а сказать не может)))
PSS: Формирование ЧУГ нету ни в какой форме! Здесь она приведена для понятности! Мы оперируем лишь числами-позициями символов в строке, а также числами-позициями начала и конца подстрок. Саму ЧУГ-строку можно рассматривать как подстроку, которая начинается с 1-го символа, а заканчивается см. выше, отсюда и идея сделать рекурсию. Если предпоследнее предложение не понятно, забей на него))
0
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
13.01.2010, 11:16
Просьба сильно не бить ногами, ранее мною были допущены ошибки, исправляюсь )) держи код (сделай на форме кнопку Command1), который это все реализует:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Option Explicit
  'Всего символов в алфавите
  Const N = 26
 
Private Sub Command1_Click()
  Dim i As String
  Dim iNum As Integer
  'dcbaabaacbaabaa
  i = InputBox('Введите номер символа', 'Ввод исходных данных', '1')
  If Len(Trim(i)) > 0 Then
    If IsNumeric(Replace$(i, ' ', '')) Then
      'Проверку на целое число добавь сам, а то мне лень
      iNum = Dalshe(1, (2 ^ N) - 1, CLng(Replace$(i, ' ', '')), N)
      If iNum > 0 Then
        Call MsgBox('Символ №' & CStr(iNum) & ' алфавита', vbExclamation, 'Все ОК!')
      Else
        Call MsgBox('Какой-то трабл, символ определить не удалось', vbCritical, 'Все не ОК:(((')
      End If
    Else
      Call MsgBox('Надо ввести число', vbInformation, 'Сообщение')
    End If
  Else
    Call MsgBox('Надо что-то ввести', vbInformation, 'Сообщение')
  End If
End Sub
 
Private Function Dalshe(lBegin As Long, lEnd As Long, i As Long, iStep As Integer) As Integer
  If iStep > 0 Then
    If Not i = lBegin Then
      If i > (lEnd + lBegin) / 2 Then
        '2-я подстрока
        Dalshe = Dalshe((lEnd + lBegin) / 2 + 1, lEnd, i, iStep - 1)
      Else
        '1-я подстрока
        Dalshe = Dalshe(lBegin + 1, (lEnd + lBegin) / 2, i, iStep - 1)
      End If
    Else
      Dalshe = iStep
    End If
  Else
    'Какой-то трабл, символ определить не удалось
    Dalshe = 0
  End If
End Function
Не правда ли элементарно!?
0
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 131
15.01.2010, 19:23  [ТС]
огромное спасибо за код сам ну никак :-(((
разберусь отвечу элементарно ли
0
Ghost
15.01.2010, 21:06
2 t-80 - я бы убил за такой код - нифига не понятно )))
Если быть точнее - понятно, что goldseeker'у именно такой код и надо давать, но ты не мог сделать его с исключениями? Бросил Exception - и все довольны )))

2 goldseeker - Вдогонку - VB(A) - язык, канэшна, общедоступный, но, может, есть смысл обратить сразу внимание на C#/VB.NET? Ибо приучившись к дурному стилю, показанному t-80, потом отучаться тяжко.

А если серъезно - в коде t-80 с точки зрения VB(A)-шника все написано грамотно (стилистически - правильность кода не проверял) - отступы, подсказки, нет GOTO, есть рекурсия. Кстати - о рекурсии - её можно разложить в цикл (по определению), тогда стековая память так жраться не будет. )))
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2010, 21:06

Как зделать так чтобы по нажатию на кнопку компьютер выключался?
Как зделать так чтобы по нажатию на кнопку компьютер выключался?

Как зделать так, чтобы событие OnLOad обрабатывалось только один раз?
Как зделать так, чтобы событие OnLOad обрабатывалось только один раз, тоесть не повторялось при обновлении документа?

Можно ли зделать так, чтобы строчка имела такую же ширину как и предыдущая строчка?
Можно ли зделать так, чтобы строчка имела такую же ширину как и предыдущая строчка?

Как сделать так, чтобы прога имела доступ к реестру на чтение и запись (Vista, seven)
Как сделать так, чтобы прога имела доступ к реестру на чтение и запись (Vista, seven) Я так понимаю, что этого добиться из простого...

прога.exe файл как это зделать
Как написать прогу на C с помощью которой можно былобы открывать файлы через командную строку!!! Например как это: tasm.exe h.asm ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru