Переписать код для обращения к элементам матрицы, находящимся выше главной диагонали - 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>

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


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

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

8   голосов , оценка 4.375 из 5
Похожие ответы