Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MEHTAJlUCT
Сообщений: n/a
#1

Представление в памяти массивов и матриц - C++

22.09.2011, 22:44. Просмотров 584. Ответов 0
Метки нет (Все метки)

Здравствуйте. Помогите исправить код, в нем матрица содержит нули ниже главной диагонали, а мне нужно чтобы все нулевые элементы были размещены в нижней части матрицы.



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

Представление в памяти массивов и матриц - C++
Для разряженной матрицы целых чисел создать модуль доступа к ней: -все нулевые элементы размещены на главной диагонали и в верхней...

Представление в памяти массивов и матриц - C++
Помогите решить эту задачу в С++ Для разряженной матрицы целых чисел в соответствии с индивидуальным заданием создать модуль доступа к...

Представление в памяти массивов и матриц - C++
Здравствуйте всем!!!Помогите пожалуйста, нужно написать код программы на следующую задачу: Цель работы – получение практических...

Представление в памяти массивов и матриц - C++
Помогите разработать модуль доступа к разреженной матрице, где все нулевые элементы размещены на местах с нечетными индексами строк и...

Задача по представлению в памяти массивов и матриц. Системное программирование - C++
Существенные сложности в задаче. Прошу помочь в написании кода Для разряженной матрицы целых чисел в соответствии с индивидуальным...

Исправить n. Представление матриц векторами - C++
Приветствую вас, форумчане! Помогите исправить ошибку, пожалуйста. #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2011, 22:44
Привет! Вот еще темы с ответами:

Представление класса в памяти - C++
Всем доброго времени суток! Подскажите ка,как класс представляется в памяти?и как представляется структура? Простите за столь...

Представление чисел в памяти! - C++
нужна сделать реализацию числа в памяти получилось для одного числа, а как сделать для нескольких, т.е передаю {1,1,0,0} выдаст {0,0,1,1},...

Представление памяти, указатели - C++
Доброго времени суток, форумчане. Практика языка и программирования уже есть, но всё на начальном уровне. Сейчас вплотную столкнулся с...

Внутреннее представление числа в памяти - C++
нужно сделать реализацию числа в памятиfloat d1 = 72.9e-8;... а как??? это нужно число перевести в двоичную систему, или как???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru