Вопрос № 109204: Уважаемые эксперты нужна ваша помощь в решении задачи
В квадратном массиве (в константе задаётся имеется в виду матрица должна получится 3 на 3 или 4 на 4), выделить четыре четверти, ограниченные главной и побочной диагонали (без учёта элеме...Вопрос № 109236: А постоянным клиентам скидки есть? Ну реально легкая задача, но что-то я туплю. Дана матрица, найти максимальный элемент в каждой строке. Ввод данных можно не писать....
Вопрос № 109.204
Уважаемые эксперты нужна ваша помощь в решении задачи
В квадратном массиве (в константе задаётся имеется в виду матрица должна получится 3 на 3 или 4 на 4), выделить четыре четверти, ограниченные главной и побочной диагонали (без учёта элементов расположенных на диагоналях) верхнюю, нижнюю, левую и правую. Поменять местами элементы верхней и нижней четверти.
Отвечает: Verena
Здравствуйте, Андрей Логинов!
Понятия главной и побочной диагонали имеют смысл только в квадратных матрицах и выражаются простыми формулами. Главная диагональ: элементы на ней имеют индексы i=j, элементы над ней - j > i, под ней - j < i . Побочная диагональ: элементы на ней имеют индексы i+j=n+1, элементы над ней - i+j < n+1, под ней - i+j > n+1 .
Всё это Вы можете проверить опытным путём, и убедитесь, что это так. При таком раскладе разделить матрицу на четверти проще простого: Верхняя: j > i and i+j < n+1 Нижняя: j < i and i+j > n+1 Левая: j < i and i+j < n+1 Правая: j > i and i+j > n+1
Не знаю, что в Вашей задаче подразумевалось под "выделить четыре четверти" - если надо было вывести элементы этих четвертей на экран, Вы легко сможете сделать это, воспользовавшись в цикле этими формулами. Ну а код, меняющийи местами элементы верхней и нижней четверти смотрите в приложении. Здесь кроме вышесказанного надо заметить, что соответствующий элементу верхней четверти элемент нижней четверти будет иметь тот же самый индекс по столбцу и индекс по строке, выражающийся формулой (n-i+1).
Удачи!
Приложение:
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 13.11.2007, 18:42
Отвечает: Артём1983
Здравствуйте, Андрей Логинов!
Смотрите код программы в приложении. Программа только обозночает главную и побочную диагонали.
Приложение:
--------- Программирование - дело Путное!
Ответ отправил: Артём1983 (статус: 6-ой класс)
Ответ отправлен: 14.11.2007, 19:22
Вопрос № 109.236
А постоянным клиентам скидки есть? Ну реально легкая задача, но что-то я туплю. Дана матрица, найти максимальный элемент в каждой строке. Ввод данных можно не писать.
Задайте матрицу размером в количество столбцов maxArray: array[1..M] of Real;
присвойте первые элементы столбцов исходной матрице NxM isxArray: array[1..N,1..M] of Real
for j:= 1 to M do
maxArray[j]:= isxArray[1, j];
и найдем максимум в каждом столбце
for j:= 1 to M do
for i:= 1 to N do
if maxArray[j] < isxArray[i, j] then maxArray[j]:= isxArray[i,j]
Ответ отправил: Стома С.С. (статус: 2-ой класс)
Ответ отправлен: 13.11.2007, 16:59 Оценка за ответ: 5 Комментарий оценки: Даже если это решение не очень рационально мне оно будет полезно. Для общего развития так сказать.
Отвечает: Gh0stik
Здравствуйте, Артем Глушков!
В предыдущем ответ идея верна, только я не вижу смысла создавать массив в котором хранятся найденные максимумы, а также зачем изначально этот массив заполнять первыми элементами строк...
Посему привожу свое решение, в котором генерируется матрица из произвольных чисел из диапазона [0; 33). А потом просто "пробегаем" матрицу посторочно - находим максимум и сразу выводим его на экран.
const n=3; m=4;
var a:array [1..n,1..m] of real;
mx:real;
i,j:integer;
begin
randomize;
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(33);
write(a[i,j]:6:1);
end;
writeln;
end;
for i:=1 to n do
begin
mx:=a[i,1];
for j:=2 to m do
if mx < a[i,j] then mx:=a[i,j];
writeln(mx:4:1);
end;
end.
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 13.11.2007, 17:28 Оценка за ответ: 5 Комментарий оценки: Я даже не знаю какой комментарий написать. Еще раз спасибо!
Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, Артем Глушков!
for i := 0 to n - 1 do
begin
max := a[0, i];
for j := 1 to m - 1 do
if max < a[i, j] then max := max < a[i, j]; // Если ищет не по строкам, а по столбцам,
//значит мы по разному выводим на экран, значит нужно поменять в массиве i и j
//местами, и в строчке № 3 тоже
WriteLN(max, ' ');
end;
Ответ отправил: Зиновьев Дмитрий Владимирович (статус: 6-ой класс)
Ответ отправлен: 13.11.2007, 22:20 Оценка за ответ: 5 Комментарий оценки: И вам спасибо.