Переписать код для обращения к элементам матрицы, находящимся выше главной диагонали - 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>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д