Консультация № 95660
19.07.2007, 11:42
0.00 руб.
0 3 3
Уважаемые эксперты! Помогите, пожалуйста, решить три задачи.
1. Дан двумерный массив. Выполнить сдвиг элементов по внешнему квадрату.
Например: 1 1 1 1 1 2
4 0 0 0 0 2
4 0 0 0 0 2
4 0 0 0 0 2
4 3 3 3 3 3
Результат:
4 4 4 4 4 1
3 0 0 0 0 1
3 0 0 0 0 1
3 0 0 0 0 1
3 2 2 2 2 2

2. Дан двумерный массив. Начиная с первой строки сдвинуть на две вниз, а последние две перенести на место первых двух строк.
3. Дан двумерный массив. Выполнить слудующие преобразования с ним:
А) в каждой строке сменить знак максимального по модулю элемента на противоположный.
Б) последний отрицательный элемент каждого столбца заменить нулём.
В) положительные элементы умножить на первый элемент соответствующей строки, а отрицательные - на последний
Г) Заменить все элементы строки с номером k и столбца с номером l на противоположные по знаку
Д) К элементам столбца с номером k1 прибавить элементы столбца k2
Если это возможно, то в наиболее упрощённом варианте и с пояснениями. Заранее огромное спасибо. Swallow.

Обсуждение

Неизвестный
19.07.2007, 12:22
общий
это ответ
Здравствуйте, Ласточка!

Вот решение задачи №2.
<code>const n=5; nn=4;
type tip=integer;
var a:array [1..n,1..nn] of tip;
b:array[1..nn] of tip;
i,j,t:integer;
begin
randomize;
for i:=1 to n do
begin
for j:=1 to nn do
begin
a[i,j]:=random(10)-random(10); <font color=green>{блок формирования матрицы случайных чисел, Вы можете его заменить ручным вводом данных}</font>
write(a[i,j]:3); <font color=green>{выводим элементы массива на экран}</font>
end;
writeln;
end;

for t:=1 to 2 do <font color=green>{блок сдвига строк матрицы, число 2 - количество строк на которое нужно сдвинуть строки}</font>
begin
for j:=1 to nn do b[j]:=a[n,j]; <font color=green>{сохраняем элементы последней строки во вспомогательном массиве}</font>
for i:=n downto 2 do
for j:=1 to nn do a[i,j]:=a[i-1,j]; <font color=green>{делаем циклический сдвиг строк начиная с последней}</font>
for j:=1 to nn do a[1,j]:=b[j]; <font color=green>{записываем значение вспомогательного массива в первую строку}</font>
end;

writeln; <font color=green>{выводим полученный результат}</font>
for i:=1 to n do
begin
for j:=1 to nn do write(a[i,j]:3);
writeln;
end;
readln;
end.</code>

Good Luck!!!
давно
Старший Модератор
31795
6196
19.07.2007, 13:50
общий
это ответ
Здравствуйте, Ласточка!

В приложении 1-я задача.
В задании ошибка куда делись 1 и 3,
и откуда взялись 2 и 4.
Удачи!

Приложение:
program q95660;const maxX=5; maxY=6; maxR=5;var z:packed array[1..maxX,1..maxY]of integer; y:integer; a,b,c,d,e,f:integer;begin {обнуляем весь массив} for a:=1 to maxX do for b:=1 to maxY do z[a,b]:=0; {формируем 2 и 4} for a:=1 to maxY-1 do begin z[a,maxY]:=2; z[a+1,1]:=4; end; {формируем 1 и 3} for a:=1 to maxY-1 do begin z[1,a]:=1; z[maxX,a+1]:=3; end; {начинаем сдвиг} for e:=0 to maxR do begin {выводим массив} for a:=1 to maxX do begin for b:=1 to maxY do write(z[a,b]); writeln; end; writeln; {begin rotate} c:=z[1,1]; {сдвигаем верхнюю сторону} for b:=2 to maxY do begin d:=z[1,b]; z[1,b]:=c; c:=d; end; {сдвигаем правую сторону} for b:=2 to maxX do begin d:=z[b,maxY]; z[b,maxY]:=c; c:=d; end; {сдвигаем нижнюю сторону} for b:=1 to maxY-1 do begin d:=z[maxX,maxY-b]; z[maxX,maxY-b]:=c; c:=d; end; {сдвигаем левую сторону} for b:=1 to maxX-1 do begin d:=z[maxX-b,1]; z[maxX-b,1]:=c; c:=d; end; readln; end;end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
19.07.2007, 15:16
общий
это ответ
Здравствуйте, Ласточка!
Решение задачи 3 в приложении. Действия А - Д сделаны в виде процедур.

Приложение:
program Project2;const n = 4; m = 5;var a: array[1..n, 1..m] of integer; i, j: integer;procedure maxabs;var maxabs, jmaxabs: integer;begin for i := 1 to n do begin maxabs := abs(a[i, 1]); jmaxabs := 1; for j := 1 to m do if abs(a[i, j]) > maxabs then begin maxabs := a[i, j]; jmaxabs := j; end; a[i, jmaxabs] := a[i, jmaxabs] * (-1); end;end;procedure last;var ilast: integer;begin for j := 1 to m do begin ilast := 0; for i := 1 to n do if a[i, j] < 0 then ilast := i; if ilast > 0 then a[ilast, j] := 0; end;end;procedure mul;var first, last: integer;begin for i := 1 to n do begin first := a[i, 1]; last := a[i, m]; for j := 1 to m do begin if a[i, j] > 0 then a[i, j] := a[i, j] * first else if a[i, j] < 0 then a[i, j] := a[i, j] * last; end; end;end;procedure replace;var k, l: integer;begin writeln(‘Vvedite k‘); readln(k); writeln(‘Vvedite l‘); readln(l); for j := 1 to m do a[k, j] := a[k, j] * (-1); for i := 1 to n do a[i, l] := a[i, l] * (-1);end;procedure add;var k1, k2: integer;begin writeln(‘Vvedite k1‘); readln(k1); writeln(‘Vvedite k2‘); readln(k2); for i := 1 to n do inc(a[i, k1], a[i, k2]);end;begin //randomize; {инициализация} for i := 1 to n do for j := 1 to m do a[i, j] := random(12) - 3; {вывод} for i := 1 to n do begin for j := 1 to m do write(a[i, j], ‘ ‘); writeln; end; writeln; maxabs;{А} last;{Б} mul;{В} replace;{Г} add;{Д} {вывод} for i := 1 to n do begin for j := 1 to m do write(a[i, j], ‘ ‘); writeln; end; readln;end.
Форма ответа