Помогите решить три задачки пожалуйста. Двумерные массивы.
Первая:
Задана матрица А размерностью 3х6. Сделать поворот относительно главной диагонали.
Вторая:
Задана матрица А размерностью 15х10. Найти рядок с наименьшим элементом и поменять его местами с последним.
Третья:
Задана матрица А размерностью 7х5 та матрица В размерностью 7х4. Сделать добавление А+В, результат записать в матрицу С.
Спасибо за внимание.
[Прошу прощение, если тема не в том разделе. По возможности прошу перенести данную тему в нужный раздел]
Кайма-то какого цвета? :facepalm:
Размерности статические, задачки элементарные.
В чём проблема-то? Не знаете как объявить массив? Как обратиться к элементу массива? Или ничего не знаете?
В последнем случае, было бы неплохо узнать хоть что-нибудь.
Читать здесь и здесь.
А не лучше ли вправо? ;)
(Она не работает, компилятор выбивает много различных ошибок, которые мне не удается исправить. Если кто-то заметит ошибку в написанном ниже тексте, прошу, помогите исправить)
c:array[1..7,1..5] of integer;
b:array [1..7,1..4] of integer;
i,j:integer;
begin
randomize();
for a:=1 to 7 do
for a[j]:=1 to 5 do
begin
for b:=1 to 7 do
for b[j]:=1 to 4 do
begin
a[i,j]:=random();
b[i,j]:=random();
c[i,j]:=a[i,j]+b[i,j];
write (c[i,j]);
end;
end;
end
Тема еще актуальна. Помогите решить задачи пожалуйста:)
Какие ошибки я допустил? Помогите пожалуйста.
Какие ошибки я допустил? Помогите пожалуйста.
Компилятор выдаёт сообщения для того, чтобы их читали. Это на заметку.
Я, честно говоря, не знаток pascal'а, но ещё со школы помню, что после end, завершающего точку входа, ставится точка. Это во-первых.
Во-вторых: кто учил Вас так организовывать циклы? :facepalm: У Вас в цикле должна фигурировать только индексная переменная:
for j := 1 to 4 do
begin
{ Impl }
end
Я один думаю, что в задании имелась ввиду конкатенация?
Если человек пытается разобраться, то можно и помочь:
var
a : array[1..7,1..5] of integer;
b : array[1..7,1..4] of integer;
c : array[1..7,1..9] of integer;
i,j : integer;
begin
randomize();
{ a, b initialization }
for i := 1 to 7 do
begin
for j := 1 to 5 do
a[i,j] := random(100);
for j := 1 to 4 do
b[i,j] := random(100);
end;
{ copying }
for i := 1 to 7 do
begin
for j := 1 to 5 do
c[i,j] := a[i,j];
for j := 1 to 4 do
c[i,j+5] := b[i,j];
end;
{ printing }
for i := 1 to 7 do
begin
for j := 1 to 9 do
begin
write( c[i,j] );
write( ' ' );
end;
writeln('');
end;
end.
С форматированием вывода уже сами разбирайтесь. Не помню, что там за функции для этого используются, - сделал как смог;)
В FPC мне тяжело работать, да и все ошибки, которые он выдает - у меня не получается исправить.
На счет "Во-вторых: кто учил Вас так организовывать циклы?" отвечаю: На практичных занятиях было выделено очень мало времени на объяснение организации циклов и тому подобного, и вообще организации всего программного кода, а если учесть то, что я глупыш, то это вообще кардинально препятствует усвоению материала в моей головушке. Если Вам не составит труда, прошу, дайте мне почитать какой-нибудь материал по этой теме.
Прошу прощение за плохой перевод. Задание переводил с украинского, не очень качественно получилось, как видите. Попробую растолковать. Нужно сделать A+B, то бишь сложить их, как 2+2=4, то есть если есть матрица A
2 2
2 2
и матрица B
2 2
2 2
то в итоге должна получится матрица С, вот как она должна выглядеть:
4 4
4 4
Надеюсь, я смог понятно объяснить суть задания.
asmforce, большое спасибо Вам за проделанную работу:)
Перейдем к решению первой задачи.
Я не уверен, что правильно понимаю суть задания.
Если у нас есть матрица 3х3:
а11 а12 а13
а21 а22 а23
а31 а32 а33
То после проведения операции с помощью Паскаля, у нас должно получится следующее:
а11 а12 а33
а21 а22 а23
а13 а32 а33
Я правильно понял?
Я правильно понял?
Это называется транспонированием (почти). (Но матрица должна быть квадратной)
a11 a12 a13 -> a11 a21 a31
a21 a22 a23 -> a12 a22 a32
a31 a32 a33 -> a13 a23 a33
Читайте тут.
Не получается правильно настроить Geany...
Попробуйте это. Проверено. Есть ограничения, но Вас они врядли затронут, учитывая уровень заданий.
Возможно, кому-нибудь понадобится.
Задача №2.
n=15;
m=10;
type
matr=array[1..n,1..m] of integer;
var
a:matr;
i,j,imin,jmin,i_point,buf:integer;
begin
randomize;
{Vyvod}
writeln('Ishodnaya matritsa:');
for i:=1 to n do
for j:=1 to m do
begin
a[i,j]:=random(100)+5;
write(a[i,j]:4);
if j=m then
writeln;
end;
writeln;
{Poisk min, stroki min}
imin:=1;jmin:=1;
for i:=1 to n do
for j:=1 to m do
begin
if a[i,j]<a[imin,jmin] then
begin
imin:=i;
jmin:=j;
i_point:=i;
end;
end;
writeln('Min:',a[imin,jmin],' ego stroka: ',i_point,' Press enter...');
readln;
if i_point=n then{nomer stroki s min posledniy}
writeln('Element nahoditsa v poslednei stroke. Nichego ne menyaem.')
else
begin
{Obmen}
for j:=1 to m do
begin
buf:=a[i_point,j];
a[i_point,j]:=a[n,j];
a[n,j]:=buf;
end;
{Vyvod}
writeln('Posle obmena:');
for i:=1 to n do
for j:=1 to m do
begin
write(a[i,j]:4);
if j=m then
writeln;
end;
writeln;
end;
end.
Пробую сделать первую задачу.
а11 а12 а13 а14 а15 а16
а21 а22 а23 а24 а25 а26
а31 а32 а33 а34 а35 а36
Как можно в этой матрице сделать поворот относительно главной диагонали. Матрица же неправильно формы, вроде бы :О
Объясните пожалуйста.
Замечание принято.:p
Для транспонирования - не обязана. Для задачи ТС - никак иначе.
В принципе, задано то же самое, что и транспонировать, только [COLOR="paleturquoise"]зелёное[/COLOR] не трогая главную диагональ. Разница влияет на вердикт об апликабельности к НЕ квадратным матрицам.
Я переходил по Вашим ссылкам и прочел информацию о транспонировании, но так и не смог понять, как же должна выглядеть матрица после операции в Паскале.
Изучая новую ссылку, я пришел к такому результату.
Исходная матрица:
а11 а12 а13 а14 а15 а16
а21 а22 а23 а24 а25 а26
а31 а32 а33 а34 а35 а36
После транспонирования:
а11 а21 а31
а12 а22 а23
а13 а23 а33
а14 а24 а34
а15 а25 а35
а16 а26 а36
Всё правильно?
Не сердитесь на меня, пожалуйста, за мои ошибки ><
Исходная матрица:
а11 а12 а13 а14 а15 а16
а21 а22 а23 а24 а25 а26
а31 а32 а33 а34 а35 а36
После транспонирования:
а11 а21 а31
а12 а22 а23
а13 а23 а33
а14 а24 а34
а15 а25 а35
а16 а26 а36
Всё правильно?
Это пример транспонирования. Всё правильно.
Но поворот относительно гл. диагонали - это не транспонирование (виноват).
Так что, либо задание неверно, либо одно из двух.:confused:
Сделал поворот при условии: "Матрица 6х6". Надеюсь, преподаватель простит меня)
Вот мой ремейк первой задачи.
№1
const n=6;m=6;
var
a:array[1..n,1..m] of integer;
b:array[1..n,1..m] of integer;
i,j:integer;
begin
clrscr;
{Vyvod nachal`nogo massiva}
for i:=1 to n do begin
for j:=1 to m do begin
a[i,j]:=random(100);
write(a[i,j]:4);
end;
writeln;
end;
writeln;
{Zapolnenie novogo massiva z povorotom}
for i:=1 to n do begin
for j:=1 to m do begin
b[j,i]:=a[i,j];
end;
end;
{Pechat` poluchivshegosya massiva}
for i:=1 to n do begin
for j:=1 to m do begin
write(b[i,j]:4);
end;
writeln;
end;
readln;
end.