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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Считывание значений двумерного вектора http://www.cyberforum.ru/cpp-beginners/thread355189.html
ну вот собственно и проблема не массива, а вектора именно #include <vector> using namespace std; int main() { vector< vector<int> > Graf; for(int i=0;i<N;i++) for(int j=0;j<N;j++)
C++ легкий алгоритм нужно составить алгоритм на С. С клавиатуры ввести число.Определить, сколько раз оно делится на 2. http://www.cyberforum.ru/cpp-beginners/thread355186.html
C++ Нужна помощь (одномерный статический массив)
В массиве нужно удалить элементы кратные 7. Не получается удалить со сдвигом (массив статический). И ещё добавить после каждого нечётного элемента массива элемент со значением 4. Помогите, пожалуйста! )
Сравнение со строкой из файла C++
Подскажите пожалуйста,как написать сравнение введённой информацией с каждой строкой в имеющемся файле,потому что у меня сравнивается только последняя строка,спасибо
C++ Генератор псевдослучайных чисел http://www.cyberforum.ru/cpp-beginners/thread355154.html
Всем привет. Как такое "чудо" пишеться, примерный алгоритм, если можно на псевдокоде: Написать генератор псевдослучайных чисел по алгоритму f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-4) ( f0 = f1 = f2 = f3 = 1) r = fn mod 211. ( 0 - 210) Подсчитать частоту каждого числа при выборке 100000 Спасибо. Добавлено через 24 минуты
C++ помогите откомпилировать! помогите пожалуйста откомпилировать! #include <stdafx.h> #include <iostream> #class TA{ int a; int b; public: int d; TA (int x=3,int y=4){a=x;b=y;} friend void print(TA&); подробнее

Показать сообщение отдельно
MEHTAJlUCT
Сообщений: n/a
22.09.2011, 22:44     Представление в памяти массивов и матриц
Здравствуйте. Помогите исправить код, в нем матрица содержит нули ниже главной диагонали, а мне нужно чтобы все нулевые элементы были размещены в нижней части матрицы.



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]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru