Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Тимошенко Дмитрий
Статус: Студент
Рейтинг: 221
∙ повысить рейтинг >>
Botsman
Статус: Специалист
Рейтинг: 142
∙ повысить рейтинг >>
Чичерин Вадим Викторович
Статус: 9-й класс
Рейтинг: 53
∙ повысить рейтинг >>

∙ / КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 904 от 15.06.2009, 15:05
Администратор рассылки: Калашников О.А., Руководитель
В рассылке: подписчиков - 359, экспертов - 86
В номере: вопросов - 1, ответов - 1

Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
оценить выпуск >>

Вопрос № 169242: Здравствуйте уважаемые эксперты, я вас не прошу решать мне задание, хотябы объясните мне логику решения, что тут к чему. Вот собственно задание. Найти и напечатать индексы максимального элемента главной диагонали матрицы с1(3;3)...



Вопрос № 169242:

Здравствуйте уважаемые эксперты, я вас не прошу решать мне задание, хотябы объясните мне логику решения, что тут к чему.
Вот собственно задание.
Найти и напечатать индексы максимального элемента главной диагонали матрицы с1(3;3)

Отправлен: 10.06.2009, 14:47
Вопрос задал: Полякова Анна Александровна, Посетитель
Всего ответов: 1
Страница вопроса >>


Отвечает Megaloman, Практикант :
Здравствуйте, Полякова Анна Александровна. Чтобы объяснить логику решения, сначала определим хотя бы упрощенно, а что такое матрица?
Двухмерная матрица, например, [C], (в Вашем случае именно такая) - это таблица с N строками и M столбцами.
Сочетание N и M называется размерностью матрицы. Говорят: матрица размерностью N на M.

В Вашем случае N=M=3. Такая матрица, когда N=M называется квадратной,
то есть в Вашем случае это квадратная матрица размерностью 3 на 3.
Для наглядности можете нарисовать табличку на листочке.

Строки и столбцы матрицы нумеруются.
Для определённости,
номер строки обозначим i (где i= 1,2 ... N, в Вашем случае N=3)
номер столбца обозначим j (где j= 1,2 ... N, в Вашем случае N=3)
Эти номера называются индексами.

Элемент матрицы однозначно определяется номером строки и столбца, на пересечении которых он расположен (то есть его индексами).
Записывается C(i,j) (в книгах i и j около обозначения матрицы обыч но пишут без скобок и запятой более мелким шрифтом)
То есть, если пишем С(2,3), то это обозначает элемент во второй строке третьем столбце матрицы.

Главной диагональю квадратной матрицы называется совокупность её элементов, у которых номер строки равен номеру столбца, то есть i=j
При программировании аналогом двухмерной матрицы является двухмерный массив чисел.

Для решения Вашей задачи определим размерность матрицы (обозначим её N), и определим массив, где эта матрица будет храниться.
Предположим, в матрице хранятся целые числа. Тогда:

DIM N AS INTEGER
N = 3

REDIM C1(1 TO N, 1 TO N) AS INTEGER

Для описания массива я применил оператор REDIM, так как он позволяет описать размерность массива в зависимости от переменной (у нас это N)
В описании мы указали, что индексы меняются от 1 до N. Тип чисел в массиве -целый (т.е. INTEGER)

Далее надо каким-то образом занести в массив значения его элементов.
Можно, напри мер, организовать ввод элементов с клавиатуры, прочесть из файла, но я пойду по самому лёгкому пути - определю эти элементы в программе с помощью оператора присваивания.
Значения ставлю самым случайным образом.

Например:
C1(1, 1) = 1
C1(1, 2) = 55
C1(1, 3) = -31

и так далее...

После определения входных данных удобно их отобразить на экране.

А далее - собственно решение задачи: мы должны последовательно просмотреть все элементы на диагонали и выбрать среди них максимальный. При этом запомнить его индексы.
Удобно для такого обзора применить оператор для организации цикла For.
Максимальное значение элемента запомним в переменной СMAX, значение индекса максимального элемента запомним в переменной M.
Для начала перед циклом для определённости напишем, что индекс максимального элемента равен 1,
и, естественно, для начала примем, что максимальное значение СMAX равно значению элемента С1(1,1).

Далее в цикле мы будем просмат ривать все диагональные элементы матрицы (помним, матрица у нас хранится в массиве).
Если некий элемент будет больше, чам имеющееся значение СMAX, мы запомним это значение (то есть переопределим переменную CMAX этим новым значением)
Одновременно запомним индекс найденного элемента (то есть переопределим переменную M новым значением)

После цикла получим искомый результат, который и отобразим на экране.

Вот пример программы.
Код:
DIM N AS INTEGER, i AS INTEGER, j AS INTEGER, CMAX AS INTEGER, M AS INTEGER
N = 3

REDIM C1(1 TO N, 1 TO N) AS INTEGER

C1(1, 1) = 1
C1(1, 2) = 55
C1(1, 3) = -31

C1(2, 1) = 45
C1(2, 2) = 329
C1(2, 3) = 76

C1(3, 1) = -5
C1(3, 2) = -14
C1(3, 3) = 48

CLS
PRIN T
PRINT "Матрица C1(i,j)"
PRINT "------------------"

FOR i = 1 TO N
FOR j = 1 TO N
PRINT USING "######"; C1(i, j);
NEXT
PRINT
NEXT

PRINT "------------------"

M = 1
CMAX = C1(M, M)

FOR i = 1 TO N
IF C1(i, i) > CMAX THEN
CMAX = C1(i, i)
M = i
END IF
NEXT

PRINT "Максимальное значение диагонального элемента матрицы"
PRINT "C1(i,i)=";
PRINT USING "######"; CMAX
PRINT
PRINT "При значении индекса i =";
PRINT USING "##"; M





-----
Нет времени на медленные танцы

Ответ отправил: Megaloman, Практикант
Ответ отправлен: 10.06.2009, 20:34

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 250778 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

    подать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.1 RC от 10.06.2009

    В избранное