Помощь - Поиск - Пользователи - Календарь
Полная версия: Подпрограммы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Камтугеза
Даны массивы А (30; 20) и В (40;50) из вещ чисел. Найти номер строки с максимальной суммой элементов. В том массиве, где этот номер число нечетное, обнулить элементы данной строки. Если номер окажется нечетным, то выдать соответ сообщение.

помогите, пожалуйста...=)
буду рада идеям, потому что не могу понять сам алгоритм.
volvo
Могу предложить такой вариант:
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
a: array[1 .. 30, 1 .. 20] of real;
b: array[1 .. 40, 1 .. 50] of real;
const
test: array[1 .. 5, 1 .. 6] of real =
(
(1, 2, 3, 4, 5, 6), { 21 }
(6, 9, 0, 1, 2, 10), { 28 }
(6, 3, 9, 9, 6, 0), { 33 }
(4, 7, 3, 9, 8, 8), { 39 }
(5, 4, 2, 8, 1, 3) { 23 }
);

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
Вот мой вариант, менее гибкий, более громоздкий, но более понятный

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;

var
test: TMx =
(
(1, 2, 3, 4, 5, 6), { 21 }
(6, 9, 0, 1, 2, 10), { 28 }
(6, 3, 9, 9, 6, 0), { 33 }
(4, 7, 3, 9, 8, 8), { 39 }
(5, 4, 2, 8, 1, 30) { 50 }
);

begin
clrscr;
max_row(test, 5, 6);
print_mx(test, 5, 6);
readln;
end.

volvo
Угу, только для обработки твоим вариантом ДВУХ матриц сразу, что будешь делать? blum.gif Попробуй сразу обработать и А (30; 20) и В (40; 50)...
klem4
?

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;

var
test: TMx =
(
(1, 2, 3, 4, 5, 6), { 21 }
(6, 9, 0, 1, 2, 10), { 28 }
(6, 3, 9, 9, 6, 0), { 33 }
(4, 7, 3, 9, 8, 8), { 39 }
(5, 4, 2, 8, 1, 30) { 50 }
);

test1 : TMx;

a,b : TMx;

begin
clrscr;
writeln('Массив test : ');
print_mx(test, 5, 6);
writeln('Введите массив test1');
input_mx(test1,2,3);
print_mx(test1, 2, 3);

max_row(test, 5, 6);
print_mx(test, 5, 6);

max_row(test1, 2, 3);
print_mx(test1, 2, 3);
readln;
end.



вобщем юзай прогу volvo, она правильная, моя - нет
Камтугеза
ойойой, спасибо=)
пойду буду искать ошибки в своей=)
спасиббооооооо=))
wub.gif wub.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.