Даны массивы А (30; 20) и В (40;50) из вещ чисел. Найти номер строки с максимальной суммой элементов. В том массиве, где этот номер число нечетное, обнулить элементы данной строки. Если номер окажется нечетным, то выдать соответ сообщение.
помогите, пожалуйста...=) буду рада идеям, потому что не могу понять сам алгоритм.
volvo
15.01.2006 18:50
Могу предложить такой вариант:
type pArr = ^arrType; arrType = array[0 .. ((2 * maxint) div sizeof(real) - 1)] of real;
function get_max_line(const arr: array of real; const rows, cols: integer): integer; var max_s, s: real; i, j, max_ix: integer; begin max_s := - 10000; for i := 1 to rows do begin s := 0; for j := 1 to cols do begin s := s + arr[(i - 1)*cols + (j - 1)]; end; if s > max_s then begin max_s := s; max_ix := i; end; end; get_max_line := max_ix; end;
procedure zero_line(n: integer; var arr: array of real; const rows, cols: integer); var j: integer; begin for j := 1 to cols do begin arr[(n - 1)*cols + (j - 1)] := 0; end; end;
var mx, i, j: integer; begin mx := get_max_line(pArr(@test)^, 5, 6); if odd(mx) then begin writeln('the number is odd'); zero_line(mx, pArr(@test)^, 5, 6); end;
for i := 1 to 5 do begin for j := 1 to 6 do write(test[i, j]:5:0); writeln; end; end.
Заполняешь матрицы A и B и обрабатываешь точно так же, как я показал для Test... В Турбо Паскале работает...
klem4
15.01.2006 19:30
Вот мой вариант, менее гибкий, более громоздкий, но более понятный
uses crt; const Nmax = 5; Mmax = 6; type TMx = array[1..Nmax,1..Mmax] of single;
procedure print_mx(mx : TMx; n,m : byte); var i,j : byte; begin for i := 1 to n do begin writeln; for j := 1 to m do write(mx[i,j]:5:2,' '); end; end; procedure row_zero(var mx : TMx; n,m,row : byte); var j : byte; begin for j := 1 to m do mx[row,j] := 0; end;
function row_sum(mx : TMx; n,m,row : byte) : extended; var j : byte; s : extended; begin s := 0.0; for j := 1 to m do s := s + mx[row,j]; row_sum := s; end;
procedure max_row(var mx : Tmx; n,m : byte); var i,nMax : byte; begin for i := 1 to n do if (nMax = 0) or (row_sum(mx, n, m, i) > row_sum(mx, n ,m, nMax)) then nMax := i; if odd(nMax) then begin readln; writeln('Yes ', nmax); row_zero(mx, n, m, nMax); end; end;
begin clrscr; max_row(test, 5, 6); print_mx(test, 5, 6); readln; end.
volvo
15.01.2006 19:36
Угу, только для обработки твоим вариантом ДВУХ матриц сразу, что будешь делать? Попробуй сразу обработать и А (30; 20) и В (40; 50)...
klem4
15.01.2006 19:42
?
uses crt; const Nmax = 5; Mmax = 6; type TMx = array[1..Nmax,1..Mmax] of single;
procedure input_mx(var mx : TMx; n,m : byte); var i,j : byte; begin for i := 1 to n do for j := 1 to m do begin write('mx[',i,',',j,']='); readln(mx[i,j]); end; end;
procedure print_mx(mx : TMx; n,m : byte); var i,j : byte; begin for i := 1 to n do begin writeln; for j := 1 to m do write(mx[i,j]:5:2,' '); end; writeln; end; procedure row_zero(var mx : TMx; n,m,row : byte); var j : byte; begin for j := 1 to m do mx[row,j] := 0; end;
function row_sum(mx : TMx; n,m,row : byte) : extended; var j : byte; s : extended; begin s := 0.0; for j := 1 to m do s := s + mx[row,j]; row_sum := s; end;
procedure max_row(var mx : Tmx; n,m : byte); var i,nMax : byte; begin for i := 1 to n do if (nMax = 0) or (row_sum(mx, n, m, i) > row_sum(mx, n ,m, nMax)) then nMax := i; if odd(nMax) then begin readln; writeln('Yes ', nmax); row_zero(mx, n, m, nMax); end; end;