Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [VB] Работа с двумерным массивом  (Прочитано 17066 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
samlab
Гость
« : 20-11-2010 21:33 » 

Прошу помочь нерадивому студенту еще разочек, если вас это не затруднит, конечно Да-да
Код:
Dim i As Integer, j As Integer
Dim a(7, 7) As Integer
Dim Result As Single

Private Sub cmd1_Click()

Cls

k = Val(InputBox())

For i = 1 To 7
For j = 1 To 7
a(i, j) = ((-1) ^ (i + j)) * ((22 * Cos(i)) + (33 * Sin(j)) + (44 * Cos(k)))

Print a(i, j),

Next j

Print

Next i

End Sub
В коде вычисляется двумерный массив, когда вводишь с помощью inputbox значение k. Не могу разобраться, как вычислить наибольшее положительное cos (a(4,j)), то бишь косинус 4 строки начиная с 1 и до 7 столбца... Как вариант делал так
Код:
For i = 1 To 7
For j = 1 To 7
a(i, j) = ((-1) ^ (i + j)) * ((22 * Cos(i)) + (33 * Sin(j)) + (44 * Cos(k)))

Print cos (a(4,j))

Next j

Next i
Но что то тут не то, по идее выводиться должно 7 раз, а не как у меня... И как вообще сравнивать числа?
Заранее спасибо.
« Последнее редактирование: 20-11-2010 22:01 от samlab » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 20-11-2010 21:37 » 

samlab, не уважаешь ты нас. Отформатируй код!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #2 : 20-11-2010 21:59 » 

samlab, не уважаешь ты нас. Отформатируй код!
Отформатировал в первом посту, так должно быть?
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 20-11-2010 22:10 » 

Код:
For i = 1 To 7
    For j = 1 To 7
        a(i, j) = ((-1) ^ (i + j)) * ((22 * Cos(i)) + (33 * Sin(j)) + (44 * Cos(k)))
        Print cos (a(4,j))
    Next j
Next i
А так слабо?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 20-11-2010 22:49 » 

1. Ввести дополнительную переменную для этого значения. Проинициализировать! Чем - подумай.
2. Цикл по j. Вычислить формулу и сравнить с переменной (см. п.1). Если значение формулы больше, присвоить переменной ее значение.
3. После цикла проверить, положительная ли переменная (см. функцию SIGN) и если да, то вывести ее.

Математика 5 класс...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #5 : 20-11-2010 23:48 » 

Код:
For i = 1 To 7
    For j = 1 To 7
        a(i, j) = ((-1) ^ (i + j)) * ((22 * Cos(i)) + (33 * Sin(j)) + (44 * Cos(k)))
        Print cos (a(4,j))
    Next j
Next i
А так слабо?
Слабо, давайте кидайтесь в меня гнилыми помидорами и тухлыми яйцами, я готов ко всему...
Записан
samlab
Гость
« Ответ #6 : 20-11-2010 23:49 » 

1. Ввести дополнительную переменную для этого значения. Проинициализировать! Чем - подумай.
2. Цикл по j. Вычислить формулу и сравнить с переменной (см. п.1). Если значение формулы больше, присвоить переменной ее значение.
3. После цикла проверить, положительная ли переменная (см. функцию SIGN) и если да, то вывести ее.

Математика 5 класс...
математику мы не любим с детства ибо преподаватель был тот еще фрукт, спасибо за подсказку, буду думать
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 21-11-2010 07:32 » 

samlab, извини, но это твои проблемы. Ты потихоньку скатываешься до уровня соседнего раздела - "Памагите".

Кстати, если ты не любишь две крайности - грамматику и математику, то чего же ты любишь?
« Последнее редактирование: 21-11-2010 07:34 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #8 : 22-11-2010 00:49 » 

samlab, извини, но это твои проблемы. Ты потихоньку скатываешься до уровня соседнего раздела - "Памагите".

Кстати, если ты не любишь две крайности - грамматику и математику, то чего же ты любишь?


Я и не перекладываю свои проблемы на Вас.  По поводу соседнего раздела - разве я хнычу " памагите пажалуйста..., сессия горит, напишите за меня код..."? Я просто прошу помочь, но не навязываю себя.
А по - поводу грамматики, вы немного путаете , по-моему - кислое с пресным, уважаемый RXL. Знай я, в каком виде нужно представить свой код на суд общественности, я бы так и сделал, не прекословя, вы же требуете от меня того, чего я не могу сделать, я по-просту не знаю - пишу код так, как удобно читать и понимать мне, я же не виноват в этом...

Добавлено через 2 часа, 46 минут и 27 секунд:
А по поводу кода, сам принцип мне ясен
назначаешь за миниум первый элемент: MIN = M(1) или MIN = M(1, 1) для двумерного
А потом в цикле сравниваешь. И если текущий элемент меньше - берёшь его за миниум
Только из за этих внутренних и внешних циклов у меня каша в голове...
Код:
For i = 4 To 4
      For j = 1 To 7
            a(i, j) = ((-1) ^ (i + j)) * ((22 * Cos(i)) + (33 * Sin(j)) + (44 * Cos(k)))
            l = cos (a(4,j))
      Next
Next

Правильно ли пока что тут?
« Последнее редактирование: 22-11-2010 03:37 от samlab » Записан
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #9 : 23-11-2010 14:09 » 

А по поводу кода, сам принцип мне ясен
назначаешь за миниум первый элемент: MIN = M(1) или MIN = M(1, 1) для двумерного
А потом в цикле сравниваешь. И если текущий элемент меньше - берёшь его за миниум
Только из за этих внутренних и внешних циклов у меня каша в голове...
Код:
For i = 4 To 4
      For j = 1 To 7
            a(i, j) = ((-1) ^ (i + j)) * ((22 * Cos(i)) + (33 * Sin(j)) + (44 * Cos(k)))
            l = cos (a(4,j))
      Next
Next

Правильно ли пока что тут?

Для выявления минимального числа надо сделать:
Код:
For i = 1 To 7
      For j = 1 To 7
            a(i, j) = ((-1) ^ (i + j)) * ((22 * Cos(i)) + (33 * Sin(j)) + (44 * Cos(k)))
            If i = 4 Then
                   m = cos (a(i,j))
                   If j = 1 Then
                         l = m
                   Else
                         If  l > m then  l = m
                   End If
            End If
      Next
Next


Скорее всего должно выглядеть где-то так, если я правильно понял задание.
Разберись в том, что я написал.

P.S. Точно не помню, и проверить негде, поддерживает ли VB конструкцию типа  If  l > m then  l = m.
Если не поддерживает - исправляй ошибку сам.
« Последнее редактирование: 23-11-2010 14:11 от Dusk » Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
samlab
Гость
« Ответ #10 : 23-11-2010 19:36 » 

Спасибо, немного под себя подправил код ( нужно было сравнивать только положительные косинусы), а так все работает... Сейчас буду заниматься сортировкой массива, но уже сам, чтобы никого тут больше не доставать... Улыбаюсь
Записан
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #11 : 24-11-2010 07:54 » 

samlab, тебе надо понять принцип работы вложенных циклов - без них сортировку тоже не сделаешь.
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
samlab
Гость
« Ответ #12 : 25-11-2010 02:26 » 

Да тут и понимать нечего - один цикл идет по строкам, второй по столбцам, разве не так? Меня гнетет то, что мне нужно отсортировать фактически только одну строку (сортировка квадратов элементов 6 - го стобца), а как в одной строке найти столбцы...  Не-а...
Код:
Dim I As Integer, J As Integer
Dim a(7, 7) As Integer
Dim my(7) As Integer

Private Sub cmd1_Click()
Cls
k = Val(InputBox("", ""))
For I = 1 To 7
  For J = 1 To 7
    a(I, J) = ((-1) ^ (I + J)) * ((22 * Cos(I)) + (33 * Sin(J)) + (44 * Cos(k)))
    Print a(I, J),
  Next
  Print
Next
For I = 1 To 7
  For J = 1 To 7
    a(I, J) = ((-1) ^ (I + J)) * ((22 * Cos(I)) + (33 * Sin(J)) + (44 * Cos(k)))
    If I = 4 Then
       m = Cos(a(I, J))
       If m > 0 Then
         If J = 1 Then
           l = m
         Else
            If l > m Then l = m
         End If
      End If
    End If
  Next
Next
Print "Min =" & Round(l, 5)
For I = 1 To 7
  J = 6
  my(I) = ((-1) ^ (I + J)) * ((22 * Cos(I)) + (33 * Sin(J)) + (44 * Cos(k)))
  Print my(I) ^ 2 ' kak tyt ???'
Next
End Sub
Форматировать код не буду, ибо мне не понятны принципы всех этих мистических отступов, пробелов и т.п., уж не вините Жаль
Столько методов смотрел, самый простой в реализации - пузырьковый, но там все для массивов, а мне надо отсортировать только 6 столбик, или я не правильно мыслю?

updА я буду. Предупреждение, в противном случае тема будет удалена
« Последнее редактирование: 25-11-2010 08:25 от Sla » Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 25-11-2010 08:28 » new

samlab, т.е. ты считаешь, что нам здесь делать нефик, чтоб подстраиваться под твои хочу/не хочу

Не хочешь - не надо. Но в таком случае ЗДЕСЬ твоих постов не будет.

А ломать глаза из-за твоих непонятных принципов мне, лично, облом, и другим, наверное, тоже.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 25-11-2010 13:14 » 

Цитата: samlab
Форматировать код не буду, ибо мне не понятны принципы всех этих мистических отступов, пробелов и т.п., уж не вините
Тут я со Sla согласен. Не умеешь - научим, не хочешь - заставим.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
samlab
Гость
« Ответ #15 : 25-11-2010 17:32 » 

samlab, т.е. ты считаешь, что нам здесь делать нефик, чтоб подстраиваться под твои хочу/не хочу

Не хочешь - не надо. Но в таком случае ЗДЕСЬ твоих постов не будет.

А ломать глаза из-за твоих непонятных принципов мне, лично, облом, и другим, наверное, тоже.

Ваше право, удаляйте тему...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines