Помогите, очень очень надо решить задачку в VBA: Седловой точкой в матрице называется элемент, являющийся одновременно наибольшим в столбце и наименьшим в строке. Седловых точек может быть и несколько (в этом случае они имеют равные значения). В матрице A(m,n) найти седловую точку и ее координаты p,q, либо установить, что такой точки нет.
AI-выжимка обсуждения
скоро
Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.
Обзор обсужденияскоро
Разбор ответов скоро
Ключевые ответы обсуждения и их оценка появятся здесь.
Эксперты в тредескоро
Рейтинг участников скоро
Участники с сильными ответами в этой теме появятся здесь.
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
К курсу →
Сортировка
Обсуждаемые
Лучшие
Эксперты
скоро
- Статус
- Закрыто для дальнейших ответов.
Я Вас категорически приветствую!! Помогите с решением задачи. Дан документ (*.doc) в котором содержаться: шифр статьи, название и имена авторов. Что б в ручную не копипастить все эти данные нужно сделать макрос, я вижу решение таким: выделяем шифр название и авторов символами, к примеру вот так- }Шифр} , ©Авторы©, {Название{. Макрос пробегаеться по всему документу, находит нужные символы, выделяет и переносит все это в БД.
примерно получился такой код.. для одного символа .. далее по анологии.. проблема в том как сделать чтобы он выделял область внутри символов и делал перенос в БД?? (MySQL)..
Sub Макрос3()
'
'
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Text = "{"
While Selection.Find.Execute=True
i = 0
While Selection.Text <> "}"
Selection.MoveRight Unit:=wdCharacter, Count:=1
i = i + 1
Wend
Selection.MoveRight Unit:=wdCharacter, Count:=1
i = i + 1
Selection.MoveLeft Unit:=wdCharacter, Count:=i, Extend:=wdExtend
Selection.Font.Italic = True
Selection.MoveRight Unit:=wdCharacter, Count:=1
Wend
End Sub
Заранее спасибо..
примерно получился такой код.. для одного символа .. далее по анологии.. проблема в том как сделать чтобы он выделял область внутри символов и делал перенос в БД?? (MySQL)..
Sub Макрос3()
'
'
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Text = "{"
While Selection.Find.Execute=True
i = 0
While Selection.Text <> "}"
Selection.MoveRight Unit:=wdCharacter, Count:=1
i = i + 1
Wend
Selection.MoveRight Unit:=wdCharacter, Count:=1
i = i + 1
Selection.MoveLeft Unit:=wdCharacter, Count:=i, Extend:=wdExtend
Selection.Font.Italic = True
Selection.MoveRight Unit:=wdCharacter, Count:=1
Wend
End Sub
Заранее спасибо..
Lalique, Вам повезло, т. к. я решал похожую задачу! (А сейчас и не вспомнил бы). В общем решение такое:
З.Ы код немного надо подправить, буквы и тп.
Код:
dim a(m,n), p(10), e(10) as integer
for i = 1 to m
for j = 1 to n
a(i,j) =cint(rnd*(20-1)+1) 'Заполняем массив случайным образом
next j
next i
min = a(1,1)
for i = 1 to m
for j = 1 to n
if a(i,j)<min then min = a(i,j)
t = i
t1 = j
next j
p(i) = min
next i
for j = 1 to m
for i = 1 to n
if a(i,j)>max then max = a(i,j)
next
e(j) = max
next
for i = 1 to 10
if p(i) = m(i) then
msg box "Седловая точка", a(t,t2)
else
msgbox "нет"
end if
next
спасибо большое.а можно еще такой вопрос:как правильно задать случайным образом многомерный массив с выводом на лист Excel?
спасибо большое.а можно еще такой вопрос:как правильно задать случайным образом многомерный массив с выводом на лист Excel?
dim a as integer
dim b as integer
dim M as integer
dim N as integer
M = 10 'задаем размерность массива
N = 5
for a = 1 to M
for b =1 to N
cells(a,
next b
next a
в итоге получим поле 10 на 5 заполненное случайными числами
Lalique, вы помоему то сообщение, где я вам код написал, так и не прочитали
Jumpy, твое решение мне кажется не очень правильно(может я не прав)
А на счёт экселя, эт я пока не знаюa(i,j) =cint(rnd*(20-1)+1) 'Заполняем массив случайным образом
Jumpy, твое решение мне кажется не очень правильно(может я не прав)
BGD9517, я нашла как заполнить массив в Excel, вдруг пригодится
Dim a() As Variant
m = UserForm1.TextBox1.Value
n = UserForm1.TextBox2.Value
ReDim a(1 To m, 1 To n) As Variant
For i = 1 To m
For j = 1 To n
a(i, j) = Fix(Rnd(1) * 50)
Next j
Next i
For i = 1 To m
For j = 1 To n
Worksheets(1).Range(Cells(1, 1), Cells(i, j)).Value = a
Next j
Next i
Dim a() As Variant
m = UserForm1.TextBox1.Value
n = UserForm1.TextBox2.Value
ReDim a(1 To m, 1 To n) As Variant
For i = 1 To m
For j = 1 To n
a(i, j) = Fix(Rnd(1) * 50)
Next j
Next i
For i = 1 To m
For j = 1 To n
Worksheets(1).Range(Cells(1, 1), Cells(i, j)).Value = a
Next j
Next i
Lalique, вы помоему то сообщение, где я вам код написал, так и не прочитали![]()
А на счёт экселя, эт я пока не знаю![]()
Jumpy, твое решение мне кажется не очень правильно(может я не прав)
А я не знаю что такое "заполнить массив в экселе" ))
что такое заполнить массив в VBA - знаю.
Что такое заполнить таблицу из массива - догадываюсь
по факту паходу надо было заполнить массив и вывести на лист
Jumpy, признаю, не правильно сформулировалабывает
ничего страшного
BGD9517, преподша забраковала программу. Седловая точка точка находится немного не так: нужно найти max всех столбцов,а затем среди этих чисел определить min. Аналогично по строкам, найти min всех строк, а среди них max. И если min=max это и есть седловая точка. Теперь вопрос, как это сделать? 
BGD9517, преподша забраковала программу. Седловая точка точка находится немного не так: нужно найти max всех столбцов,а затем среди этих чисел определить min. Аналогично по строкам, найти min всех строк, а среди них max. И если min=max это и есть седловая точка. Теперь вопрос, как это сделать?![]()
Эм... правильно ли я понял:
1) В Каждом столбце найти максимальное значение
2) Среди найденных максимальных значений - найти минимальное
3) В каждой строке найти минимальное значение
4) Среди найденных минимальных значений - найти максимальное.
если найденное в 2) равно найденном в 4) это и есть седловая точка ?
Вопрос: чего делать если все всему равны, т.е. в таблице 2на2:
3 3
3 3
Ноль седловых точек или 4ре ?
Эм... правильно ли я понял:
1) В Каждом столбце найти максимальное значение
2) Среди найденных максимальных значений - найти минимальное
3) В каждой строке найти минимальное значение
4) Среди найденных минимальных значений - найти максимальное.
если найденное в 2) равно найденном в 4) это и есть седловая точка ?
Вопрос: чего делать если все всему равны, т.е. в таблице 2на2:
3 3
3 3
Ноль седловых точек или 4ре ?
получается, что 4.но этот случай не надо рассматривать
ыыыы щас чо нить наваяю...
дан массив A(m,n)
дан массив A(m,n)
Код:
dim a as integer
dim b as integer
dim MAX as double 'максимальное значение в столбце
dim CURRENT_MAX as double 'минимальное значение среди всех максимальных значений в столбцах
dim MIN as double 'аналог, только для строк
dim CURRENT_MIN as double
current_max = A(1,1)
for a = 1 to m
MAX = A(a,1) 'по умолчанию считаем что первый элемент и есть максимальный
CURRENT_MAX = MAX
for b = 1 to n
if MAX < A(a,b) then
MAX = A(a,b)
end if
next b
if CURRENT_MAX > MAX then 'если текущее минимальное значение среди максимальных больше чем данное максимальное
CURRENT_MAX = MAX 'считаем его наименьшим максимальным :)
end if
next a
'тож самое для строк
CURRENT_MIN = A(1,1)
for b = 1 n
MIX = A(1,b)
for a = 1 to m
if MIN > A(a,b) then
MIN = A(a,b)
end if
next b
if CURRENT_MIN < MIN then
CURRENT_MIN = MIN 'считаем его наименьшим максимальным :)
end if
next a
if CURRENT_MIN = CURRENT_MAX then
'седловая точка есть, ее значение = CURRENT_MIN
'если ее надо вывести то
for a = 1 to m
for b = 1 to n
if A(a,b) = CURRENT_MIN then
msgbox ("Элемент массива А(" & a & ":" & b & ") является седловой." )
'ну или выписать a,b - если эти индексы надо сохранить
end if
next b
next a
else
call msgbox("Чота нету седловой, нет в жизни счастья :( ")
end if
ыыыы щас чо нить наваяю...
Спасибо большое, Вы мне очень помогли!!!
Еще один вопрос: как сделать, чтобы программа запоминала индексы имеено седловой точки, а то например, когда вбиваешь матрицу
4 5 3
6 7 4
5 2 3
седловой точко является А(2,3)=4, а
программа выводит А(1,1), т.к. значение тоже =4. кстати в любым примерах А(1,1) показывает ( задавали current_max = A(1,1) и current_max = A(1,1))
Спасибо большое, Вы мне очень помогли!!!
Еще один вопрос: как сделать, чтобы программа запоминала индексы имеено седловой точки, а то например, когда вбиваешь матрицу
4 5 3
6 7 4
5 2 3
седловой точко является А(2,3)=4, а
программа выводит А(1,1), т.к. значение тоже =4. кстати в любым примерах А(1,1) показывает ( задавали current_max = A(1,1) и current_max = A(1,1))
блин, а я думал что если есть седловая - то все элементы с таким же значением - тож седловые... тогда ничо не поделать, придеца индексы сохранять...
Код:
dim a as integer
dim b as integer
dim MAX as double 'максимальное значение в столбце
dim CURRENT_MAX as double 'минимальное значение среди всех максимальных значений в столбцах
dim MIN as double 'аналог, только для строк
dim CURRENT_MIN as double
Dim IND_MAX_A as integer
Dim IND_MAX_B as integer
Dim IND_MIN_A as integer
Dim IND_MIN_B as integer
Dim CURRENT_IND_MAX_A as integer
Dim CURRENT_IND_MAX_B as integer
Dim CURRENT_IND_MIN_A as integer
Dim CURRENT_IND_MIN_B as integer
current_max = A(1,1)
CURRENT_IND_MAX_A = 1
CURRENT_IND_MAX_B = 1
for a = 1 to m
MAX = A(a,1) 'по умолчанию считаем что первый элемент и есть максимальный
CURRENT_MAX = MAX
for b = 1 to n
if MAX < A(a,b) then
MAX = A(a,b)
CURRENT_IND_MAX_A = a
CURRENT_IND_MAX_B = b
end if
next b
if CURRENT_MAX > MAX then 'если текущее минимальное значение среди максимальных больше чем данное максимальное
CURRENT_MAX = MAX 'считаем его наименьшим максимальным :)
IND_MAX_A = CURRENT_IND_MAX_A
IND_MAX_B = CURRENT_IND_MAX_B
end if
next a
'тож самое для строк
CURRENT_MIN = A(1,1)
CURRENT_IND_MIN_A = 1
CURRENT_IND_MIN_B = 1
for b = 1 n
MIX = A(1,b)
for a = 1 to m
if MIN > A(a,b) then
MIN = A(a,b)
CURRENT_IND_MIN_A = a
CURRENT_IND_MIN_B = b
end if
next b
if CURRENT_MIN < MIN then
CURRENT_MIN = MIN 'считаем его наименьшим максимальным :)
IND_MIN_A = CURRENT_IND_MIN_A
IND_MIN_B = CURRENT_IND_MIN_B
end if
next a
if IND_MIN_A = IND_MAX_A and IND_MIN_B = IND_MAX_B then
'седловая точка есть, ее значение = CURRENT_MIN, координаты A(IND_MIN_A, IND_MIN_B)
else
call msgbox("Чота нету седловой, нет в жизни счастья :( ")
end if
но, в этой проге есть один большой минус - она определяет только одну седловую точку
если надо определять все седловые - то нужно заводить другой массив в котором будут храниться нас устраивающие координаты элементов.
спасибо и на этом
Jumpy, теперь вообще всегда выводит (0,0) :huh:
а седловая точка точно есть ?
кстати там ошипка, возможен вариант - даж если седловой нет - он не выдаст сообщения
Всем привет!Помогите подалуйста написать программу.Условия:Определить количество отрицательного значения функция на отрезке заданным шагом y=xcoskx,xE[a,b]
Буду очень благодарен!
Буду очень благодарен!
Здравствуйте! Помогите,пожалуйста,с простенькой задачкой:
Найти сумму элементов массива A(M) находящихся между первым из максимальных и последним из минимальных элементов. Спасибо
Найти сумму элементов массива A(M) находящихся между первым из максимальных и последним из минимальных элементов. Спасибо
- Статус
- Закрыто для дальнейших ответов.
Поиск в обсуждении
Карта ветки
Ещё по теме
- Статья
- Ответы
- 0
- Просмотры
- 2 тыс.
- Статья
- Ответы
- 0
- Просмотры
- 3 тыс.
- Ответы
- 0
- Просмотры
- 2 тыс.
Поделиться: