Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2009, 18:49   #1
medic357
 
Регистрация: 13.03.2009
Сообщений: 6
По умолчанию Массив с подпрограммами

Найти суммы компонент целочисленной матрицы m[n,k] в ее четвертях и записать их в одномерный массив v[4]. Если количество строк и (или) столбцов матрицы нечетное, то при суммировании компоненты средних строк и (или) столбцов исключить.
Заменить значения компонент в четвертях матрицы m[n,k] на 1, если сумма соответствующей четверти окажется нечетной, и на 0, если сумма – четная.
Найти максимальное значение компонент массива n[4]. Если максимумов в массиве несколько, то запомнить индекс последнего при переборе из максимумов.
На экран вывести исходную матрицу m[n,k], массив n[4], измененную матрицу m[n,k], последнюю встречную максимальную компоненту с индексом.
Над матрицей m[n,k], у которой количество строк n и столбцов k может быть от двух до десяти.
В программе должен быть предусмотрен ввод пользователем количества строк и столбцов матрицы при исполнении программы.
Значения компонент матрицы следует задавать случайным образом в таком диапазоне, чтобы получаемые данные были не тривиальными, т.е. неочевидными, не лежащими на поверхности. Отнюдь не с клавиатуры.
Program pascal;
Var m:array[1..10,1..10] of integer;
v:array[1..4] of integer;
n,k,i,j,h,g,max,l:integer;
begin
writeln('Введите размерность матрицы m[n,k]');
write('n= ');readln(n);
write('k= ');readln(k);
for i:=1 to n do
for j:=1 to k do begin
write('m[',i,',',j,']= ');
readln(m[i,j]);
end;
writeln('Матрица M');
for i:=1 to n do begin
for j:=1 to k do write(m[i,j],' ');
writeln;
end;
{разбивка по четвертям}
{1 четверть}
for i:=1 to n div 2 do
for j:=1 to k div 2 do v[1]:=v[1]+m[i,j];
if v[1] mod 2 =0 then
for i:=1 to n div 2 do
for j:=1 to k div 2 do m[i,j]:=0
else
for i:=1 to n div 2 do
for j:=1 to k div 2 do m[i,j]:=1;
if n mod 2 <> 0 then h:=n div 2+2
else h:=n div 2+1;
if k mod 2 <> 0 then g:=k div 2+2
else g:=k div 2+1;
{2 четверть}
for i:=1 to n div 2 do
for j:=g to k do v[2]:=v[2]+m[i,j];
if v[2] mod 2 =0 then
for i:=1 to n div 2 do
for j:=g to k do m[i,j]:=0
else
for i:=1 to n div 2 do
for j:=g to k do m[i,j]:=1;
{3 четверть}
for i:=h to n do
for j:=1 to k div 2 do v[3]:=v[3]+m[i,j];
if v[3] mod 2 =0 then
for i:=h to n do
for j:=1 to k div 2 do m[i,j]:=0
else
for i:=h to n do
for j:=1 to k div 2 do m[i,j]:=1;
{4 четверть}
for i:=h to n do
for j:=h to k do v[4]:=v[4]+m[i,j];
if v[4] mod 2 =0 then
for i:=h to n do
for j:=h to k do m[i,j]:=0
else
for i:=h to n do
for j:=h to k do m[i,j]:=1;
writeln('Вектор V');
l:=1;
max:=v[l];
for i:=1 to 4 do begin
write(v[i],' ');
if max<v[i] then begin
max:=v[i];
l:=i;
end;
end;
writeln;
writeln('Максимальный элемент Вектора V: ',max);
writeln('Индекс максимального элемента: ',l);
writeln('Преобразованная Матрица M');
for i:=1 to n do begin
for j:=1 to k do write(m[i,j],' ');
writeln;
end;
write('Нажмите Enter');
readln;
end.

Что я сделал не так.
Помогите разобраться.

Заранее всех благодарю за любую помощь!

medic357@inbox.ru
medic357 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив Walter Помощь студентам 3 02.01.2009 17:21
Массив Hworang Паскаль, Turbo Pascal, PascalABC.NET 8 23.12.2008 22:50
Массив юра 3 Паскаль, Turbo Pascal, PascalABC.NET 1 23.12.2008 18:15
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06
Массив Elizaveta Паскаль, Turbo Pascal, PascalABC.NET 1 10.11.2008 02:35