1

Тема: Задача з VBA(Excel)

Вводиться послідовність із N чисел. Визначити, чи містить послідовність хоча б два рівних сусідніх числа (аі = аі+1).
Людоньки, підкажіть, третю годину над нею сиджу, а толку 0.

2

Re: Задача з VBA(Excel)

Пройдіться циклом FOR..NEXT всю послідовність од першого до передостаннього елемента, перевіряючи на рівність поточний і наступний елемент.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: zefeya1

3

Re: Задача з VBA(Excel)

Код, народжений за результатом трьох годин, покажіть.

I belong to the Dead Generation.

4

Re: Задача з VBA(Excel)

Bartash написав:

Код, народжений за результатом трьох годин, покажіть.

От власне, що нічого не можу зробити.

5

Re: Задача з VBA(Excel)

zefeya
Якщо зовсім нічого не допомагає - спробуйте почитати підручник ;)

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

6

Re: Задача з VBA(Excel)

0xDADA11C7
Читав:)

7

Re: Задача з VBA(Excel)

А нащо VBA, якщо є EXCEL? Хай послідовність в стопчику A. В стовпчик B поруч додаєте

=A1=A2

і т.д., а знизу під B

=SUMIF(B1:B11;TRUE)

(російською ця функція зветься СЧЬОТЄСЛІ).

Подякували: Bartash, zefeya2

8

Re: Задача з VBA(Excel)

zefeya написав:
Bartash написав:

Код, народжений за результатом трьох годин, покажіть.

От власне, що нічого не можу зробити.

Тоді думки викладайте, якісь спроби алгориту... Тут задача - як два байти переслати.

I belong to the Dead Generation.

9

Re: Задача з VBA(Excel)

koala
Потрібно в ВБА

Bartash
Ну потрібно цикл, та я не розумію, як в ВБА вирахувати 2ий і т.д. елемент послідовності і як потім відповідь виводити.

10

Re: Задача з VBA(Excel)

А ви напишіть, як перший елемент вираховуєте...

11

Re: Задача з VBA(Excel)

For i=1 to TextBox1.TextLength - 1
If (RightTextBox1.Caption, i) = (RightTextBox1.Caption, i+1) Then
Label1.Caption = "Так"
else
Label1.Caption = "Ні"
end if
next i

12

Re: Задача з VBA(Excel)

koala
Щось таке.

13 Востаннє редагувалося koala (13.04.2014 23:48:10)

Re: Задача з VBA(Excel)

zefeya написав:

For i=1 to TextBox1.TextLength - 1
If (RightTextBox1.Caption, i) = (RightTextBox1.Caption, i+1) Then
Label1.Caption = "Так"
else
Label1.Caption = "Ні"
end if
next i

1. Це точно запускається?
2. Я чогось не зрозумів - ви до довжини тексту в одному полі перебираєте щось в іншому; а як ці два поля пов'язані? І які ще є поля?
3. Це відповідь на чиє питання?
Якщо на моє - то ще раз його прочитайте, будь ласка.

14

Re: Задача з VBA(Excel)

zefeya
От бачите, ви самі і вирішили власне завдання, тільки засуньте код у code блок

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

15 Востаннє редагувалося Bartash (14.04.2014 00:36:28)

Re: Задача з VBA(Excel)

koala

Private Sub CommandButton1_Click()
Dim x As String
x = TextBox1.TextLength - 1
For i = 1 To x
If (Left("TextBox1.Caption", i) = (Left("TextBox1.Caption", i + 1))) Then

Label1.Caption = "Так"
Else
Label1.Caption = "Ні"
End If
Next i
End Sub

Bartash: код слід брати у теги [ code ].



От так в мене завжди виходить ні. Нічого не розумію.

16

Re: Задача з VBA(Excel)

Пане zefeya, дуже вас прошу заспокоїтися і зосередитися. Я вам поставив вже три питання; у відповідь ви виклали два фрагменти коду, які не відповідають на жодне з них. Я міг би ще раз повторити ці питання; але ваше небажання прокрутити вгору і прочитати їх або хоча б написати, що ви їх чомусь не зрозуміли, відбиває бажання вам допомагати. Спробуйте ще раз відповісти на ті три питання і додатково
4. пояснити, який саме код з двох наведених ми обговорюємо.

17

Re: Задача з VBA(Excel)

koala
1. Це запускається(останній).
2. Ні, я до тексту перебираю текст. Це одне поле, просто частини тексту в полі.
3. Перший елемент через Mid спробував тепер, результат такий самий.
Private Sub CommandButton1_Click()
Dim x As String
x = (TextBox1.TextLength - 1)
For i = 1 To x
If (Mid("TextBox1.Caption", i, 1) = (Mid("TextBox1.Caption", i + 1, 1))) Then

Label1.Caption = "Òàê"
Else
Label1.Caption = "ͳ"
End If
Next i
4. Всі.
End Sub

18 Востаннє редагувалося koala (14.04.2014 06:52:13)

Re: Задача з VBA(Excel)

1. Прийнято.
2,3. Функції Left, Right і Mid беруть шматок рядка, в цьому випадку - рядка "TextBox1.Caption" (НЕ вмісту TextBox1, а саме рядка "TextBox1.Caption", перша літера "T", друга "e" і т.д.) Нащо ви порівнюєте різні частини цього рядка?
4. Неможливо обговорювати ВСІ варіанти коду. Займатимемось тільки останнім.
5. В завданні однозначно сказано "вводиться послідовність з N чисел. Тобто спершу треба ввести N, а потім - ще N різних чисел. Ви, натомість, вводите один рядок і намагаєтеся (некоректно) розібрати його на символи. Ви ще не читали, що таке символи, числа і рядки в VBA? Тоді ідіть і почитайте підручник.
6. У вас в коді є порушення логіки, яке вам заважатиме. Дивіться:

For i = 1 To x
If умова Then
Label1.Caption = "Òàê"
Else
Label1.Caption = "ͳ"
End If
Next i

Останнє значення i буде, вочевидь, x. Після виконання цього коду значення Label1.Caption буде виставлено у відповідності до умови при i=x; але вам же треба не тільки останнє значення перевірити, а всі, і виставити "Так" якщо хоча б десь умова виконується, правильно? Тоді робимо так:

Label1.Caption = "Ні" 'Доки нічого не знайшли, то кажемо "ні"
For i = 1 To x
If умова Then 'Якщо знайшли хоч щось, то
Label1.Caption = "Так" 'кажемо "Так"
End If 'А "Ні" в циклі ніколи не виставляємо - бо вже виставили до циклу
Next i

Ще раз: якщо ми знайшли хоч одну відповідність, то відповідь має бути "Так" незалежно від того, чи трапиться надалі невідповідність. Тобто в циклі не можна ніколи міняти "Так" на "Ні". Зате якщо жодного "Так" не було, то відповідь має бути "Ні". Тому "Ні" виставляється до циклу, а "Так" - якщо в циклі щось знайшли.
7. Зверніть увагу на функції inputbox та CInt. Якщо вже хочете зовсім добре (наскільки може бути доброю програма на VBA із консольним завданням) - то ще IsNumeric.

Подякували: Ярослав1