Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 22:39   #1
ДМИТРИЙ1234
Пользователь
 
Регистрация: 31.05.2011
Сообщений: 19
По умолчанию ЗАДАЧА одномерные массивы

Определить число элементов массива, каждый из которых превышает своего соседа налево не более чем на 25%.
ДМИТРИЙ1234 вне форума Ответить с цитированием
Старый 31.05.2011, 23:42   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

если бы процентов на 20, ну максимум на 22 - я бы еще смог такую программу написать, но на 25!!! даже не знаю с чего начать...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.06.2011, 00:27   #3
ДМИТРИЙ1234
Пользователь
 
Регистрация: 31.05.2011
Сообщений: 19
По умолчанию

Давай программу на 20%.
Хоть что-то будет.
ДМИТРИЙ1234 вне форума Ответить с цитированием
Старый 01.06.2011, 01:54   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Function HowMatch(rg As Range) As Long
  Dim c As Long, i As Long, m()
  ReDim m(rg.Cells.Count)
  c = 0
  m(1) = rg.Cells(1)
  For i = 2 To UBound(m)
    m(i) = rg.Cells(i)
    If m(i) > m(i - 1) And m(i) / m(i - 1) < 6 / 5 Then c = c + 1
  Next
  HowMatch = c
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.06.2011, 09:00   #5
ДМИТРИЙ1234
Пользователь
 
Регистрация: 31.05.2011
Сообщений: 19
По умолчанию

Спасибо большое.
А можно каждую строчку написать название???
Что определяется каждая строка.
ДМИТРИЙ1234 вне форума Ответить с цитированием
Старый 01.06.2011, 14:42   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Игорь, а почему не так?

Код:
Function HowMatchNom(rg As Range) As Long
  Dim c As Long, i As Long
  c = 0
  For i = 2 To rg.Cells.Count
    If rg.Cells(i) > rg.Cells(i - 1) And rg.Cells(i) / rg.Cells(i - 1) < 6 / 5 Then c = c + 1
  Next
  HowMatchNom = c
End Function
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 01.06.2011, 15:56   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

)))
Игорь, читай условия - это задача на массив, а у тебя в коде даже упоминания о массиве нет... а студентам надо...дать представление об основных понятиях и элементах ВБА

Function HowMatch(rg As Range) As Long ' обьявлена функция и ее тип, входящие аргументы и их тип
Dim c As Long, i As Long, m() ' обьявлены переменные
ReDim m(rg.Cells.Count) ' размер массива приведен к размеру диапазона с исходными данными
c = 0 ' обнулен счетчик
m(1) = rg.Cells(1) ' присвоено первое значение
For i = 2 To UBound(m) ' цикл с второго по последний элемент массива
m(i) = rg.Cells(i) ' i-й элемент массива получил значение с исходных данных
If m(i) > m(i - 1) And m(i) / m(i - 1) < 6 / 5 Then c = c + 1 ' если элемент соответствует кондициям счетчик увеличивается на 1
Next
HowMatch = c ' функция получает значение счетчика
End Function ' синтаксическая конструкция "конец записи функции"

Дима, а Вам задание на дом - получить из приведенного кода, код под Ваши 25% а не под 20, как посчитано здесь
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 01.06.2011 в 16:00.
IgorGO вне форума Ответить с цитированием
Старый 01.06.2011, 16:08   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

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

Код:
Sub HowMatchNoRng()
Dim c As Long, i As Long, a() ' объявлены переменные
a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
c = 0 ' обнулен счетчик
For i = 1 To UBound(a) ' цикл с второго по последний элемент массива (первый индекс =0)
    If a(i) > a(i - 1) Then
        If a(i) / a(i - 1) < 6 / 5 Then
            c = c + 1 ' если элемент соответствует кондициям счетчик увеличивается на 1
        End If
    End If
Next
MsgBox c
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 01.06.2011 в 16:13.
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на одномерные массивы. Renge Помощь студентам 7 17.03.2011 21:35
Задача Двумерные и одномерные массивы BlackEzh Помощь студентам 5 12.12.2010 16:37
Одномерные массивы задача Тату Помощь студентам 3 10.12.2010 11:08
задача на одномерные массивы salmanov Паскаль, Turbo Pascal, PascalABC.NET 6 19.11.2008 15:59
задача на одномерные массивы pelsh Помощь студентам 3 05.01.2008 21:30