Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Суммировние строк в матрице

17K
11 июня 2006 года
Anna82
5 / / 11.06.2006
Подскажите, пожалуйста.
Нужно сосчитать сумму в каждой строчке, а затем поменять местами 1-й столбец со столбцом в котором находится min-я сумма. И новую матрицу вывести на экран
Например: Если min –я сумма во 2-й строчке, то меняем 1 столбец со 2 столбцом.

программа:
Код:
Program k;
const u=100;
var I,sum,n,m:integer;
t:array[1..u,1..u] of integer;
procedure tab_IN (var l,k:integer); {Ввод матрицы R}
var i,j:integer;
begin
for i:=1 to l do
begin
for j:=1 to k do
begin
write('t[',i,',',j,']=');
read(t[i,j])
end;
writeln
end;
end;
procedure TAB_OUT(var L,K:integer); {Вывод матрицы R}
var i,j:integer;
begin
for i:=1 to L do
begin
for j:=1 to K do
write(T[i,j]:6);
writeln
end
end;
begin
writeln ('Введите размер матрицы R');
write ('N=');
read (N);
write ('M=');
read (M);
TAB_IN(N,M);
writeln ('Матрица ',N,'X', M);
TAB_OUT(N,M);
end.

Заранее спасибо.

[COLOR=blue]пользуйся тэгами [ code] [ /code ] пожалуйста[/COLOR]
242
11 июня 2006 года
Оlga
2.2K / / 04.02.2006
1 - пробегаешь по строке массива и находишь сумму всех элементов строки
 
Код:
for i := [COLOR=red]2[/COLOR] to N do begin
  sum = 0;
  for j := 1 to M do sum := sum + T[i,j];
end;

2 - сравниваешь сумму с минимальной суммой ([COLOR=red]изначально min_sum нужно задать сумму 1-ой строки, а затем построить цикл начиная со 2-ой , min_index := 1[/COLOR])
 
Код:
if sum < min_sum then begin
min_sum = sum;
min_index = i; {индекс строки}
end;

3 - снова 1 этап, до тех пор пока не пройдешь все строки (при помощи for-а естественно)
после окончания цикла меняешь местами столбцы: i и 1
только вот надо проверить что [COLOR=blue]i >= 2 [/COLOR]
[COLOR=black][/COLOR]
1.8K
11 июня 2006 года
LastSoul
279 / / 28.12.2005
1 и 2 можно объединить:
 
Код:
for i := 1 to N do
 begin
  sum = 0;
  for j := 1 to M do sum := sum + T[i,j];
  if i=1 then begin min_index=1; min_sum:=sum else
   if min_sum>sum then begin min_sum:=sum; min_index:=i; end;
 end;

а вот насчет 3: мне кажется что здесь должно меняться местами не только со вторым столбцом, а с любым, т.е. с номером столбца чему равен min_index, это может быть и 3 и 4 и даже 1-ый столбец. Если я прав, то следом возникает вопрос к Anna82: а что если количество строк будет больше чем кол-во столбцов???
242
11 июня 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:

1 и 2 можно объединить


я и не думала разделять это на разные циклы,
просто дала возможность Анне самой это написать :)

Цитата:

а вот насчет 3: мне кажется что здесь должно меняться местами не только со вторым столбцом, а с любым, т.е. с номером столбца чему равен min_index, это может быть и 3 и 4 и даже 1-ый столбец.


ну это я не дочитала :), или точнее говоря невнимательно прочла

242
11 июня 2006 года
Оlga
2.2K / / 04.02.2006
внесла поправки в мой предыдущий пост ( [COLOR=red]#2[/COLOR] )
17K
12 июня 2006 года
Anna82
5 / / 11.06.2006
Строчек должно быть столько же, сколько и столбцов.
Привожу пример:
1. Есть матрица
3 3 4
2 3 6
1 2 3
2. нужно сосчитать сумму в строках
3 3 4 = 10
2 3 6 =11
1 2 3 = 6
3. Найти минимальную сумму, в данном примере это 6 (это число находится в 3 -й строчке)
4. т.к min-е число находится в 3-й строчке, то нужно переставить местами 3-й столбец с 1-м столбцом и элементам присвоить "знак -"
-4 3 3
-6 3 2
-3 2 1
5. Снова считаем сумму в строчках, находим min-ю сумму и переставляем уже со 2-м столбцом, затем 3-м и т. д. пока столбцы не кончатся.
242
12 июня 2006 года
Оlga
2.2K / / 04.02.2006
насколько я поняла ты сама пытаться написать решение не хочешь,
поэтому переежаем в раздел Студенты :)
269
12 июня 2006 года
Greenering
892 / / 04.02.2003
[QUOTE=Anna82]Строчек должно быть столько же, сколько и столбцов.
Привожу пример:
1. Есть матрица
3 3 4
2 3 6
1 2 3
2. нужно сосчитать сумму в строках
3 3 4 = 10
2 3 6 =11
1 2 3 = 6
3. Найти минимальную сумму, в данном примере это 6 (это число находится в 3 -й строчке)
4. т.к min-е число находится в 3-й строчке, то нужно переставить местами 3-й столбец с 1-м столбцом и элементам присвоить "знак -"
-4 3 3
-6 3 2
-3 2 1
5. Снова считаем сумму в строчках, находим min-ю сумму и переставляем уже со 2-м столбцом, затем 3-м и т. д. пока столбцы не кончатся.[/QUOTE]
Такс! в чем проблема-то?
Все что надо коды уже дали, надо просто собрать воедино и оформить в виде процедуры (имхо, это будет проще, все равно несколько раз придется обращаться)
Итого: лень? или "не умею"?
242
12 июня 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:

Такс! в чем проблема-то?


да вот еще нет кода как столбцы поменять,
хотя я такой код на форуме уже писала,
как минимум на VB и С.
пару минут назад вот думала:
"может еще и на Pascal написать?", только вот Анна молчит

273
12 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=OlgaKr]да вот еще нет кода как столбцы поменять,
хотя я такой код на форуме уже писала,
как минимум на VB и С.
пару минут назад вот думала:
"может еще и на Pascal написать?", только вот Анна молчит[/quote]
А в "ИСходники" никто не заглядывал? Там вот такая штука завалялась:
http://sources.codenet.ru/download/814/MatrixAPI.html
242
12 июня 2006 года
Оlga
2.2K / / 04.02.2006
вот сейчас заглянула
 
Код:
[SIZE=2]procedure MREPCOLS(var A:TMatrix; Source, Dest:integer);
var i:integer;
m:Real;
begin
for i:=0 to GetRowCount(A)-1 do begin
m:=A[Dest,i];
A[Dest,i]:=A[Source,i];
A[Source,i]:=m;
end;
end;

[/SIZE]
242
12 июня 2006 года
Оlga
2.2K / / 04.02.2006
может твои функции еще на С перевести, и ссылки можно
дать в ФАК,
я давно уже думала что надо сделать набор функций
по матрицам, спискам, тогда может станет меньше одинаковых вопросов
17K
12 июня 2006 года
Anna82
5 / / 11.06.2006
С этим всё понятно, спасибо. Только как мне вывести исходную матрицу + дополнительный столбец с суммой строк? Я делаю так:
writeln ('Матрица с суммой строк',T[sum]);
Но что-то не получается :((
А так всё суммирует, но сумму выводит отдельно от исходной матрицы.
1.8K
12 июня 2006 года
LastSoul
279 / / 28.12.2005
[size=3]
 
Код:
for i:=1 to n do
  for j:=1 to n do
   begin
    write(a[i,j]:4); // выводим элементы матрицы
    if j=n then writeln('  сумма элементов строки = ',T);
       // если достигли конца строки, то выводим сумму ее элементов
   end;

[/size]
242
12 июня 2006 года
Оlga
2.2K / / 04.02.2006
можно без иф-а
 
Код:
for i:=1 to n do[COLOR=red] begin[/COLOR]
  for j:=1 to n do write(a[i,j]:4);{выводим элементы матрицы}
  { достигли конца строки, выводим сумму ее элементов}
  writeln('  сумма элементов строки = ',T);
 [COLOR=red]end;[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог