Дана квадратная матрица порядка n(n=10). Если заданная квадратная
матрица является симметричной относительно главной диагонали, то
переставить местами две строки матрицы. Помогите пожалуйста, даже не знаю как к ней подобраться. Может быть подскажите хотя бы логическую цепочку ее выполнения
Другие языки программирования и технологии
Задача квадратная матрица, паскаль.
> Помогите пожалуйста, даже не знаю как к ней подобраться.
Желательно скрытно, чтобы не заметила. :)
> Может быть подскажите хотя бы логическую цепочку ее выполнения
По сути, здесь две задачи. Какая конкретно вам не понятна? Как проверить матрицу на симметричность или как поменять строки местами?
Для проверки матрицы вводим вспомогательную логическую переменную, которой присваиваем значение ИСТИНА, т. е. считаем, что матрица изначально симметрична. Затем два цикла. Внешний от первой строки до предпоследней и внутренний от столбца с номером, равным номеру текущей строки, увеличенному на единицу и до последнего. В теле внутреннего цикла проверка на неравенство элементов A[i,j] и A[j,i]. При выполнении условия логической переменной присваивается значение ЛОЖЬ. Все, значение этой переменной дает однозначный ответ о симметричности матрицы.
Ну а дальше перестановка строк, при необходимости. Проще всего ее сделать, если объявить массив не совсем "традиционно". Сначала объявляется пользовательский тип "строка", а затем и сам массив, как одномерный массив таких строк. Кроме того потребуется еще переменная с таким же типом для использования в качестве буфера.
type Row = array[1..n] of Integer;
var A : array[1..n] of Row;
var Buf : Row;
А дальше меняем строки по аналогии с обменом значениями для обычных переменных (для первой и второй строк)
Buf := A[1];
A[1] := A[2];
A[2] := Buf;
Вот и вся логическая цепочка. :)
Желательно скрытно, чтобы не заметила. :)
> Может быть подскажите хотя бы логическую цепочку ее выполнения
По сути, здесь две задачи. Какая конкретно вам не понятна? Как проверить матрицу на симметричность или как поменять строки местами?
Для проверки матрицы вводим вспомогательную логическую переменную, которой присваиваем значение ИСТИНА, т. е. считаем, что матрица изначально симметрична. Затем два цикла. Внешний от первой строки до предпоследней и внутренний от столбца с номером, равным номеру текущей строки, увеличенному на единицу и до последнего. В теле внутреннего цикла проверка на неравенство элементов A[i,j] и A[j,i]. При выполнении условия логической переменной присваивается значение ЛОЖЬ. Все, значение этой переменной дает однозначный ответ о симметричности матрицы.
Ну а дальше перестановка строк, при необходимости. Проще всего ее сделать, если объявить массив не совсем "традиционно". Сначала объявляется пользовательский тип "строка", а затем и сам массив, как одномерный массив таких строк. Кроме того потребуется еще переменная с таким же типом для использования в качестве буфера.
type Row = array[1..n] of Integer;
var A : array[1..n] of Row;
var Buf : Row;
А дальше меняем строки по аналогии с обменом значениями для обычных переменных (для первой и второй строк)
Buf := A[1];
A[1] := A[2];
A[2] := Buf;
Вот и вся логическая цепочка. :)
Похожие вопросы
- Как написать функцию возведения квадратной матрицы в степень? Язык Паскаль
- возведение квадратной матрицы в степень на паскале
- ХЕЛП Дана квадратная матрица порядка n. на языке C или C ++
- Как ответ на эту задачу записать в паскале, либо просто в алгоритм?
- Дана символьная квадратная матрица...Ваши идеи
- С++ Передать в функцию квадратную матрицу и вычислить сумму элементов на ее главной диагонали и вернуть эту сумму.
- Помогите решить задачу на Турбо паскале
- Дана действительная матрица размера n * m организовать однонаправленный список матрицы. Паскаль
- «Двумерные массивы» Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие на побочной диагонали и ниже
- Помогите с ассемблером (задачей про матрицы) внутри...