Тема: Задача з VBA(Excel)
Вводиться послідовність із N чисел. Визначити, чи містить послідовність хоча б два рівних сусідніх числа (аі = аі+1).
Людоньки, підкажіть, третю годину над нею сиджу, а толку 0.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Алгоритми та структури даних, технології → Задача з VBA(Excel)
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Вводиться послідовність із N чисел. Визначити, чи містить послідовність хоча б два рівних сусідніх числа (аі = аі+1).
Людоньки, підкажіть, третю годину над нею сиджу, а толку 0.
Пройдіться циклом FOR..NEXT всю послідовність од першого до передостаннього елемента, перевіряючи на рівність поточний і наступний елемент.
Код, народжений за результатом трьох годин, покажіть.
От власне, що нічого не можу зробити.
zefeya
Якщо зовсім нічого не допомагає - спробуйте почитати підручник
А нащо VBA, якщо є EXCEL? Хай послідовність в стопчику A. В стовпчик B поруч додаєте
=A1=A2
і т.д., а знизу під B
=SUMIF(B1:B11;TRUE)
(російською ця функція зветься СЧЬОТЄСЛІ).
Bartash написав:Код, народжений за результатом трьох годин, покажіть.
От власне, що нічого не можу зробити.
Тоді думки викладайте, якісь спроби алгориту... Тут задача - як два байти переслати.
koala
Потрібно в ВБА
Bartash
Ну потрібно цикл, та я не розумію, як в ВБА вирахувати 2ий і т.д. елемент послідовності і як потім відповідь виводити.
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
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. Це відповідь на чиє питання?
Якщо на моє - то ще раз його прочитайте, будь ласка.
zefeya
От бачите, ви самі і вирішили власне завдання, тільки засуньте код у code блок
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 ].
От так в мене завжди виходить ні. Нічого не розумію.
Пане zefeya, дуже вас прошу заспокоїтися і зосередитися. Я вам поставив вже три питання; у відповідь ви виклали два фрагменти коду, які не відповідають на жодне з них. Я міг би ще раз повторити ці питання; але ваше небажання прокрутити вгору і прочитати їх або хоча б написати, що ви їх чомусь не зрозуміли, відбиває бажання вам допомагати. Спробуйте ще раз відповісти на ті три питання і додатково
4. пояснити, який саме код з двох наведених ми обговорюємо.
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
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
Для відправлення відповіді ви повинні увійти або зареєструватися