Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 11:45   #1
WarAngel-alk
 
Регистрация: 30.01.2013
Сообщений: 8
По умолчанию Массив, объявленный как двумерный, является одномерным

Сабж в теме. Объявляю двумерный массив 5х5 строкой
Код:
float mas[5][5];
Затем заполняю его данными с клавиатуры. При компиляции ошибок никаких, но во время дебага тип массива определяется как float[5]*. Притом, с массивом curM, объявленным аналогично в функции det все нормально - двумерный, как и положено.


Код:
#include "stdafx.h"
 
using namespace std;
 
float det(float mas[5][5], int n, int m, int x, int y);
 
int main()
{
    int n, m;
    float mas[5][5];    // Объявление двумерного массива
 
    cout << "Type m and n\n";
    cin >> n >> m;
 
 
    cout << "Type matrix\n";
    for(int i = 0; i < n; ++i){
        for(int j = 0; j < m; ++j){
            cin >> mas[i][j];
        }
    }
 
    cout << "Det of this matrix is " << det(mas, n, m, -1, -1);
    getch();
}
 
float det(float mas[5][5], int n, int m, int x, int y)
{
    float curM[5][5] = {0};  //А здесь - все в порядке
    float res = 0;
 
    for(int i = 0; i < m; ++i){
        for(int j = 0; j < n; ++j){
            if((n != x) && (m != y)){
                curM[i][j] = mas[i][j];
            }
        }
    }
 
    if((n > 1) && (m > 1)){
        for(int i = 0; i < n; ++i){
 
            res += pow(-1.0, i) * det(curM, n - 1, m - 1, i, 0);
        }
        return res;
    }
    else{
        return curM[0][0];
    }
}
Изображения
Тип файла: jpg 20130317-koee-25kb.jpg (25.2 Кб, 129 просмотров)
WarAngel-alk вне форума Ответить с цитированием
Старый 17.03.2013, 14:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

float mas[5][5] лучше заменить на float **mas
И вызов: det(&mas, n, m, -1, -1);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.03.2013, 15:37   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Ну а вопрос то в чем?

Цитата:
Сообщение от Stilet Посмотреть сообщение
float mas[5][5] лучше заменить на float **mas
И вызов: det(&mas, n, m, -1, -1);
Нет, не лучше.

Нет ни одной причины терять информацию о размерностях массивов, если есть возможность её сохранить, и гарантировать безошибочную работу.

А указатели указателей - это вообще зло, которое сбивает многих с толку, усложняя конструкции на ровном месте.

Только упоротые сишники используют такое напрямую.
Православные сишники вуалируют сложность абстракции при помощи typedef.

А вот для приплюснутых это вообще не актуально. Есть туева куча способов, как передавать массивы куда угодно с сохранением знаний о типах хранимых элементов, и о размерностях.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив, как решить на VBA в Excel not_table Помощь студентам 0 14.03.2012 20:22
Двумерный массив, как решить!!! not_table Microsoft Office Excel 1 14.03.2012 17:58
как обработать двумерный массив из файла _LEX_ Помощь студентам 6 02.01.2012 18:56
Stringgrid как двумерный массив Gypsy Общие вопросы Delphi 3 20.01.2010 10:09
Как хранить двумерный массив в таблице DBF ИВэТэшка Помощь студентам 1 04.06.2009 15:31