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