Переписать код для обращения к элементам матрицы, находящимся выше главной диагонали - C (СИ)
Формулировка задачи:
Тут пример решения матрицы который содержит нули ниже главной диагонали; А мне нужно сделать наоборот выше главной диагонали
Помогите пожалуйста подскажите что и где нужно поменять?
Листинг программы
- /********************** Файл LAB2.H *************************/
- /* Описание функций и внешних переменных файла LAB2.C */
- extern int L2_RESULT; /* Глобальна переменна - флаг ошибки */
- /***** Выделение памяти под матрицу */
- int creat_matr ( int N );
- /***** Чтение элемента матрицы по заданным координатам */
- int read_matr ( int x, int y );
- /***** Запись элемент в матрицу по заданным координатам */
- int write_matr ( int x, int y, int value );
- /***** Уничтожение матрицы */
- int close_matr ( void );
- /***************** Конец файла LAB2.H *************************/
- /************************* Файл LAB2.C *************************/
- /* В этом файле определены функции и переменные для обработки
- матрицы, заполненной нулями ниже главной диагонали */
- #include <alloc.h>
- static int NN; /* Размерность матрицы */
- static int SIZE; /* Размер памяти */
- static int *m_addr=NULL; /* Адрес сжатой матрицы */
- static int lin(int, int); /* Описание функции линеаризации */
- static char ch_coord(int, int); /* Описание функции проверки */
- int L2_RESULT; /* Внешняя переменная, флаг ошибки */
- /*********************************************************/
- /* Выделение памяти под сжатую матрицу */
- int creat_matr ( int N ) {
- /* N - размер матрицы */
- NN=N;
- SIZE=N*(N-1)/2+N;
- if ((m_addr=(int *)malloc(SIZE*sizeof(int))) == NULL )
- return L2_RESULT=-1;
- else
- return L2_RESULT=0;
- /* Возвращает 0, если выделение прошло успешно, иначе -1 */
- }
- /**************************************************************/
- /* Уничтожение матрицы (освобождение памяти) */
- int close_matr(void) {
- if ( m_addr!=NULL ) {
- free(m_addr);
- m_addr=NULL;
- return L2_RESULT=0;
- }
- else return L2_RESULT=-1;
- /* Возвращает 0, если освобождение пршло успешно, иначе - -1 */
- }
- /***********************************************************/
- /* Чтение элемента матрицы по заданным координатам */
- int read_matr(int x, int y) {
- /* x, y -координати (строка, столбец) */
- if ( ch_coord(x,y) ) return 0;
- /* Если координаты попадают в нулевой участок - возвращается
- 0, иначе - применяется функция линеаризации */
- return (x > y) ? 0 : m_addr[lin(x,y)];
- /* Проверка успешности чтения - по переменной
- L2_RESULT: 0 - без ошибок, -1 - была ошибка */
- }
- /*************************************************************/
- /* Запись элемента матрицы по заданным координатам */
- int write_matr(int x, int y, int value) {
- /* x, y -координати, value - записываемое значение */
- if ( chcoord(x,y) ) return;
- /* Если координаты попадают в нулевой участок - записи нет,
- иначе - применяется функция линеаризации */
- if ( x > y ) return 0;
- else return m_addr[lin(x,y)]=value;
- /* Проверка успешности записи - по L2_RESULT */
- }
- /************************************************************/
- /* Преобразование 2-мерних координат в линейную */
- /* (вариант 3) */
- static int lin(int x, int y) {
- int n;
- n=NN-x;
- return SIZE-n*(n-1)/2-n+y-x;
- }
- /***************************************************************/
- /* Проверка корректности обращения */
- static char ch_coord(int x, int y) {
- if ( ( m_addr==NULL ) ||
- ( x>SIZE ) || ( y>SIZE ) || ( x<0 ) || ( y<0 ) )
- /* Если матрица не размещена в памяти, или заданные
- координаты выходят за пределы матрицы */
- return L2_RESULT=-1;
- return L2_RESULT=0;
- }
- /*********************Конец файла LAB2.C ***********************/
- /************************ Файл MAIN2.C **************************/
- /* "Программа пользователя" */
- #include "lab2.h"
- main(){
- int R; /* размерность */
- int i, j; /* номера строки и столбца */
- int m; /* значения элемента */
- int op; /* операция */
- clrscr();
- printf('Введите размерность матрицы >'); scanf("%d",R);
- /* создание матрицы */
- if ( creat_matr (R) ) {
- printf("Ошибка создания матрицы\n");
- exit(0);
- }
- /* заполнение матрицы */
- for ( m=j=0; j<R; j++)
- for ( i=о; i<R; i++)
- write_matr(i,j,++m);
- while(1) {
- /* вывод матрицы на экран */
- clrscr();
- for (j=0; j<R; j++) {
- for (i=0; i<R; i++)
- printf("%3d ",read_matr(i,j));
- printf("\n");
- }
- printf("0 - выход\n1 - чтение\n2 - запись\n>")
- scanf("%d",&op);
- switch(op) {
- case 0:
- if (close_matr()) printf("Ошибка при уничтожении\n");
- else printf("Матрица уничтожена\n");
- exit(0);
- case 1: case 2:
- printf("Введите номер строки >");
- scanf("%d",&j);
- printf("Введите номер столбца >");
- scanf("%d",&i);
- if (op==2) {
- printf("Введите значение элемента >");
- scanf("%d",&m);
- write_matr(j,i,m);
- if (L2_RESULT<0) pritnf("Ошибка записи\n");
- }
- else {
- m=read_matr(j,i);
- if (L2_RESULT<0) pritnf("Ошибка считывания\n");
- else printf("Считано: %d\n",m);
- }
- printf("Нажмите клавишу\n"); getch();
- break;
- }
- }
- }
- /********************Конец файла MAIN2.C **********************/
Я понимаю что у вас есть и более важные дела, но пожалуйста если это для вас не тяжело помогите пожалуйста
Тут наверняка есть супер мега программисты...для них ведь это расплюнуть
Решение задачи: «Переписать код для обращения к элементам матрицы, находящимся выше главной диагонали»
textual
Листинг программы
- #include <stdio.h>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д