Delphi 7 (Pascal) - 2 задачи на матрицы
- stinger-post
- Сообщения: 3
- Зарегистрирован: 24 ноя 2007, 15:44
- Откуда: дома
Здравствуйте, уважаемые! Учусь на 1 курсе. Имеются 2 задачи:
1. В каждом столбце заданной матрицы А(m*n) найти наибольший по модулю элемент, а затем вычислить сумму истинных значений этих элементов.
Покажите, пожалуйста, как заставить искаться наибольшие элементы именно по столбцам. Насчет суммы проблемы не вижу, потому как чувствую, что можно истинными значениями забить вспомогательный 1-мерный массив, а сумму его элементов найти легко.
2. Задана матрица А(m*n). Вывести на печать индексы какой-либо седловой точки матрицы или информацию об отсутствии такой точки в матрице. Седловая точка - элемент матрицы, который одновременно является наибольшим в своем столбце и наименьшим в своей строке.
Помогите, пожалуйста, осуществить поиск седловой точки.
Спасибо заранее!
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.
Программирование - хорошая штука
По поводу седловой точки: 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>
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
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;
Так же проходим по всем остальным столбцам.
Берем столбец, допустим, с номером 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;

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

Допустим, у вас в столбце элементы 2, -5, 0, -4, 6, 1.
В b[j] будет записываться (в цикле) 2, -5, 2, -4, 6, 2
Объясните еще раз, что вы хотите получить этим фрагментом кода? Если переписать в b[j] число из j-й строки с максимальным модулем, это делается так:
И все.
В 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]
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
-
- Сообщения: 2
- Зарегистрирован: 12 июн 2010, 12:20
Здравствуйте, я студентка 1 курса... вот помоги с матрицей пожалуйста..Если можно напиши подробно после программы что вы брали и делали
надеюсь мне помогут столько классные программисты (в отличие от меня)
Заполнить матрицу 10×10 следующим образом:

Вывести заполненную матрицу на экран компьютера или на принтер. Найти сумму четных элементов матрицы, вывести полученный результат.

Заполнить матрицу 10×10 следующим образом:

Вывести заполненную матрицу на экран компьютера или на принтер. Найти сумму четных элементов матрицы, вывести полученный результат.