Delphi 7 (Pascal) - 2 задачи на матрицы

Аватара пользователя
stinger-post
Сообщения: 3
Зарегистрирован: 24 ноя 2007, 15:44
Откуда: дома

Здравствуйте, уважаемые! Учусь на 1 курсе. Имеются 2 задачи:

1. В каждом столбце заданной матрицы А(m*n) найти наибольший по модулю элемент, а затем вычислить сумму истинных значений этих элементов.

Покажите, пожалуйста, как заставить искаться наибольшие элементы именно по столбцам. Насчет суммы проблемы не вижу, потому как чувствую, что можно истинными значениями забить вспомогательный 1-мерный массив, а сумму его элементов найти легко.

2. Задана матрица А(m*n). Вывести на печать индексы какой-либо седловой точки матрицы или информацию об отсутствии такой точки в матрице. Седловая точка - элемент матрицы, который одновременно является наибольшим в своем столбце и наименьшим в своей строке.

Помогите, пожалуйста, осуществить поиск седловой точки.

Спасибо заранее!
Аватара пользователя
Новенький
Сообщения: 73
Зарегистрирован: 01 июн 2007, 17:35
Откуда: Чусовой (Пермский край)
Контактная информация:

вот поиск по столбцам (в итоге найдется самый большой эл-т матрицы, дороботать думаю не сложно):

Код: Выделить всё

for i:=1 to m do
   for j:=1 to n do
     if a[i,j]>max then max:=a[i,j]
а вот я попробовал написать вторую задачу, только у меня не получалось такой матрицы, где была бы такая точка

Код: Выделить всё

uses crt;
const m=4;
      n=6;
var matr:array[1..m,1..n]of integer;
    i, j, k, max, min, x, y:integer;
begin
  clrscr;
  randomize;
  writeln('Матрица:');
  {заполнение матрицы и вывод на экран}
  for i:=1 to m do
    begin
      for j:=1 to n do
        begin
          matr[i,j]:=random(101)-50;
          write(matr[i,j]:4);
        end;
      writeln;
    end;

  {поиск седловой точки}
  for i:=1 to m do
    begin
      for j:=1 to n do
        if matr[i,j]>max then begin
                           max:=matr[i,j];
                           y:=j;
                         end;
      for k:=1 to m do
        if matr[k,y]<min then min:=matr[k,y];
      if max=min then begin
                   x:=i;
                   y:=j;
                 end;

    end;

  writeln;
  {вывод на экран полученного результата}
  if (x<>0)and(y<>0) then writeln('Координаты седловой точки: (',x,',',y,')')
                      else writeln('Седловых точек нет');
  readln;
end.
Программирование - хорошая штука
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

По поводу седловой точки: http://forum.developing.ru/showthread.php?t=11962
человек выкладывал программу, возможно - это что что тебе надо.
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

повнимательней посмотрите по всему форуму, из года в год одни и те же задачи задают...
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

1. В каждом столбце заданной матрицы А(m*n) найти наибольший по модулю элемент

Берем столбец, допустим, с номером 1:
i_max:=1;
for i:=2 to N do
if abs(A[i,1])>abs(A[imax,1]) then imax:=i;
Так же проходим по всем остальным столбцам.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
stinger-post
Сообщения: 3
Зарегистрирован: 24 ноя 2007, 15:44
Откуда: дома

Ладно, задачу со столбцом я все-таки решила, выставляю ту часть кода, над которой думала (страшно подумать!) два дня.

Код: Выделить всё

for j:=1 to n do {внешний цикл - столбцы}
    for i:=2 to m do {внутренний цикл - строки}
        begin
          c:=abs(a[1,j]); {присваиваем переменной с значение модуля первого элемента столбца}
          If c<abs(a[i,j])
          then b[j]:=a[i,j] {вводим вспомогательный 1-мерный массив b и забиваем его требуемыми элементами}
          else b[j]:=a[1,j]
        end;
Про седло поищу повнимательнее. Всем спасибо за помощь! Самое главное, что я разобралась. :)
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Не совсем понял, что требуется найти в этой задаче, но я не понял, зачем на КАЖДОМ шаге цикла записывать в с значение 1-го элемента j-го столбца? Объясните, что такое истинные значения, может, понятнее будет
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
stinger-post
Сообщения: 3
Зарегистрирован: 24 ноя 2007, 15:44
Откуда: дома

Допустим, а[2,3]=-5, тогда его модуль равен 5. Если этот модуль в своем столбце наибольший, то в массиве b третьему элементу присваивается значение -5 - истинное значение элемента а[2,3].
Насчет переменной с... Мне просто так удобнее показалось. :)
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Допустим, у вас в столбце элементы 2, -5, 0, -4, 6, 1.
В b[j] будет записываться (в цикле) 2, -5, 2, -4, 6, 2
Объясните еще раз, что вы хотите получить этим фрагментом кода? Если переписать в b[j] число из j-й строки с максимальным модулем, это делается так:

Код: Выделить всё

{инициализируем массив b нулями}
for j:=1 to n do {внешний цикл - столбцы}
    for i:=2{почему 2?} to m do {внутренний цикл - строки}
          If abs(b[j])<abs(a[i,j])
          then b[j]:=a[i,j] 
И все.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Дашулька1991
Сообщения: 2
Зарегистрирован: 12 июн 2010, 12:20

Здравствуйте, я студентка 1 курса... вот помоги с матрицей пожалуйста..Если можно напиши подробно после программы что вы брали и делали :( надеюсь мне помогут столько классные программисты (в отличие от меня)
Заполнить матрицу 10×10 следующим образом:
Изображение
Вывести заполненную матрицу на экран компьютера или на принтер. Найти сумму четных элементов матрицы, вывести полученный результат.
Ответить