Переписать код для обращения к элементам матрицы, находящимся выше главной диагонали - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Тут пример решения матрицы который содержит нули ниже главной диагонали; А мне нужно сделать наоборот выше главной диагонали
Листинг программы
  1. /********************** Файл LAB2.H *************************/
  2. /* Описание функций и внешних переменных файла LAB2.C */
  3. extern int L2_RESULT; /* Глобальна переменна - флаг ошибки */
  4. /***** Выделение памяти под матрицу */
  5. int creat_matr ( int N );
  6. /***** Чтение элемента матрицы по заданным координатам */
  7. int read_matr ( int x, int y );
  8. /***** Запись элемент в матрицу по заданным координатам */
  9. int write_matr ( int x, int y, int value );
  10. /***** Уничтожение матрицы */
  11. int close_matr ( void );
  12. /***************** Конец файла LAB2.H *************************/
  13. /************************* Файл LAB2.C *************************/
  14. /* В этом файле определены функции и переменные для обработки
  15. матрицы, заполненной нулями ниже главной диагонали */
  16. #include <alloc.h>
  17. static int NN; /* Размерность матрицы */
  18. static int SIZE; /* Размер памяти */
  19. static int *m_addr=NULL; /* Адрес сжатой матрицы */
  20. static int lin(int, int); /* Описание функции линеаризации */
  21. static char ch_coord(int, int); /* Описание функции проверки */
  22. int L2_RESULT; /* Внешняя переменная, флаг ошибки */
  23. /*********************************************************/
  24. /* Выделение памяти под сжатую матрицу */
  25. int creat_matr ( int N ) {
  26. /* N - размер матрицы */
  27. NN=N;
  28. SIZE=N*(N-1)/2+N;
  29. if ((m_addr=(int *)malloc(SIZE*sizeof(int))) == NULL )
  30. return L2_RESULT=-1;
  31. else
  32. return L2_RESULT=0;
  33. /* Возвращает 0, если выделение прошло успешно, иначе -1 */
  34. }
  35. /**************************************************************/
  36. /* Уничтожение матрицы (освобождение памяти) */
  37. int close_matr(void) {
  38. if ( m_addr!=NULL ) {
  39. free(m_addr);
  40. m_addr=NULL;
  41. return L2_RESULT=0;
  42. }
  43. else return L2_RESULT=-1;
  44. /* Возвращает 0, если освобождение пршло успешно, иначе - -1 */
  45. }
  46. /***********************************************************/
  47. /* Чтение элемента матрицы по заданным координатам */
  48. int read_matr(int x, int y) {
  49. /* x, y -координати (строка, столбец) */
  50. if ( ch_coord(x,y) ) return 0;
  51. /* Если координаты попадают в нулевой участок - возвращается
  52. 0, иначе - применяется функция линеаризации */
  53. return (x > y) ? 0 : m_addr[lin(x,y)];
  54. /* Проверка успешности чтения - по переменной
  55. L2_RESULT: 0 - без ошибок, -1 - была ошибка */
  56. }
  57. /*************************************************************/
  58. /* Запись элемента матрицы по заданным координатам */
  59. int write_matr(int x, int y, int value) {
  60. /* x, y -координати, value - записываемое значение */
  61. if ( chcoord(x,y) ) return;
  62. /* Если координаты попадают в нулевой участок - записи нет,
  63. иначе - применяется функция линеаризации */
  64. if ( x > y ) return 0;
  65. else return m_addr[lin(x,y)]=value;
  66. /* Проверка успешности записи - по L2_RESULT */
  67. }
  68. /************************************************************/
  69. /* Преобразование 2-мерних координат в линейную */
  70. /* (вариант 3) */
  71. static int lin(int x, int y) {
  72. int n;
  73. n=NN-x;
  74. return SIZE-n*(n-1)/2-n+y-x;
  75. }
  76. /***************************************************************/
  77. /* Проверка корректности обращения */
  78. static char ch_coord(int x, int y) {
  79. if ( ( m_addr==NULL ) ||
  80. ( x>SIZE ) || ( y>SIZE ) || ( x<0 ) || ( y<0 ) )
  81. /* Если матрица не размещена в памяти, или заданные
  82. координаты выходят за пределы матрицы */
  83. return L2_RESULT=-1;
  84. return L2_RESULT=0;
  85. }
  86. /*********************Конец файла LAB2.C ***********************/
  87. /************************ Файл MAIN2.C **************************/
  88. /* "Программа пользователя" */
  89. #include "lab2.h"
  90. main(){
  91. int R; /* размерность */
  92. int i, j; /* номера строки и столбца */
  93. int m; /* значения элемента */
  94. int op; /* операция */
  95. clrscr();
  96. printf('Введите размерность матрицы >'); scanf("%d",R);
  97. /* создание матрицы */
  98. if ( creat_matr (R) ) {
  99. printf("Ошибка создания матрицы\n");
  100. exit(0);
  101. }
  102. /* заполнение матрицы */
  103. for ( m=j=0; j<R; j++)
  104. for ( i=о; i<R; i++)
  105. write_matr(i,j,++m);
  106. while(1) {
  107. /* вывод матрицы на экран */
  108. clrscr();
  109. for (j=0; j<R; j++) {
  110. for (i=0; i<R; i++)
  111. printf("%3d ",read_matr(i,j));
  112. printf("\n");
  113. }
  114. printf("0 - выход\n1 - чтение\n2 - запись\n>")
  115. scanf("%d",&op);
  116. switch(op) {
  117. case 0:
  118. if (close_matr()) printf("Ошибка при уничтожении\n");
  119. else printf("Матрица уничтожена\n");
  120. exit(0);
  121. case 1: case 2:
  122. printf("Введите номер строки >");
  123. scanf("%d",&j);
  124. printf("Введите номер столбца >");
  125. scanf("%d",&i);
  126. if (op==2) {
  127. printf("Введите значение элемента >");
  128. scanf("%d",&m);
  129. write_matr(j,i,m);
  130. if (L2_RESULT<0) pritnf("Ошибка записи\n");
  131. }
  132. else {
  133. m=read_matr(j,i);
  134. if (L2_RESULT<0) pritnf("Ошибка считывания\n");
  135. else printf("Считано: %d\n",m);
  136. }
  137. printf("Нажмите клавишу\n"); getch();
  138. break;
  139. }
  140. }
  141. }
  142. /********************Конец файла MAIN2.C **********************/
Помогите пожалуйста подскажите что и где нужно поменять?
Я понимаю что у вас есть и более важные дела, но пожалуйста если это для вас не тяжело помогите пожалуйста Тут наверняка есть супер мега программисты...для них ведь это расплюнуть

Решение задачи: «Переписать код для обращения к элементам матрицы, находящимся выше главной диагонали»

textual
Листинг программы
  1. #include <stdio.h>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы