Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Матрица


Автор: Strumok 4.5.2009, 12:08
Народ помогите я делаю курсовую в bcpp 3.0 и мне нужна матрица n*m  так чтоб n i m вводились  с клавы при этом вся матрица заполняется вручную а не случайно! помогите а то моих мозгов на это явно мало smile 

Автор: zim22 4.5.2009, 12:15
http://forum.vingrad.ru/forum/topic-189118/0.html

Автор: Acer 4.5.2009, 12:21
Код

    int n, m, v;
    std::vector<int> arr;
    std::cout << "n = ";
    std::cin >> n;
    std::cout << "m = ";
    std::cin >> m;
    for ( int i = 0; i < n; i++ ){
        for ( int j = 0; j < m; j++ ){
            std::cout << "[" << i << ":" << j << "] = ";
            std::cin >> v;
            arr.push_back( v );
        }
    }

Автор: zim22 4.5.2009, 12:39
Acer
Цитата(Strumok @  4.5.2009,  12:08 Найти цитируемый пост)
 мне нужна матрица n*m

Цитата(Acer @  4.5.2009,  12:21 Найти цитируемый пост)
std::vector<int> arr;


Из вышеуказанного фака:
Код

int n = 10, m = 20;
typedef std::vector< std::vector<int> > Int2dArray; //так несколько удобней
Int2dArray array(n, Int2dArray::value_type(m)); //Int2dArray::value_type - это std::vector<int> в данном случае
array[0][1] = 10;

Автор: mrbrooks 4.5.2009, 14:03
zim22
Цитата(Strumok @  4.5.2009,  12:08 Найти цитируемый пост)
мне нужна матрица n*m

а чем плохо представление двухмерного массива одним вектором?  smile 
подход Acer'a достаточно кошерный имхо.

Автор: Soah 4.5.2009, 14:23
Цитата(mrbrooks @  4.5.2009,  14:03 Найти цитируемый пост)
подход Acer'a достаточно кошерный имхо.

Цитата(Strumok @  4.5.2009,  12:08 Найти цитируемый пост)
курсовую в bcpp 3.0


http://forum.vingrad.ru/index.php?showtopic=242282&view=findpost&p=1744230
там квадратная матрица, но думаю разберёшься, раз курсовую пишешь.

P.S. пользуйтесь поиском.

Автор: math64 4.5.2009, 14:29
Цитата(mrbrooks @  4.5.2009,  14:03 Найти цитируемый пост)
а чем плохо представление двухмерного массива одним вектором?   

А почему тогда не int* array = new int[n*m] ?
Код

int** array  = new int*[n];
for (int i = 0; i < n; i++) {
  array[i] = new int[m];
  for(int j = 0; j < m; j++) {
    int v;
    std::cout << "[" << i << ":" << j << "] = ";
    std::cin >> v;
    array[i][j]= v;
  }
}
for (int i = 0; i < n; i++) {
  delete[] array[i];
}
delete array;
array = NULL;

Автор: zim22 4.5.2009, 15:22
Цитата(mrbrooks @  4.5.2009,  14:03 Найти цитируемый пост)
а чем плохо представление двухмерного массива одним вектором?

В принципе ничем. Но я где-то читал про накладные расходы, связанные с тем, что нам приходится индекс высчитывать.  Ну и форма записи ненаглядная.
Код

int n = 5, m = 10;
int *p = new int[n * m];
for (int i = 0; i != n; ++i)
  for (int j = 0; j != m; ++j)
    p[i * m + j] = 99; // ненаглядная ))
delete p;

Автор: math64 4.5.2009, 15:52
Этот код можно соптимизировать так:
Код

int n = 5, m = 10;
int *p = new int[n * m];
for (int i = 0, I=0; i != n; ++i, I += m)
  for (int j = 0; j != m; ++j)
    p[I + j] = 99;
delete p;

Автор: Strumok 13.5.2009, 14:37
спс вам ребята...но у меня еще одна проблема...моя курсовая это Л У разложение..я написал программу но почему то она не подсчитывает так как маткад:( может кто то делал такой курсач и мог бы подкинуть формулу по которой вычислял.... 


P.S  smile с++ для меня что то не земное....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)