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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2013, 22:53   #1
blacktener
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 78
По умолчанию Почему не работает программа?

Код:
#include <iostream>
#include <ctime>

using namespace std;

int main() {
    srand(time(0));
    
    const int n = 5 + rand() % 5;
    int **A = new int[n][n]; // вот тут ошибку выдает
    
    system("PAUSE");
    return 0;    
}
Выдает ошибку
Код:
10  `n' cannot appear in a constant-expression
blacktener вне форума Ответить с цитированием
Старый 08.09.2013, 23:31   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
const int n = 5 + rand() % 5;   //По идее не должна константа инициализироваться значением времени исполнения
int **A = new int*[n];
for (unsigned i = 0; i < n; ++i)
 A[i] = new int[n];
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 09.09.2013, 01:17   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от blacktener Посмотреть сообщение
Код:
#include <iostream>
#include <ctime>

using namespace std;

int main() {
    srand(time(0));
    
    const int n = 5 + rand() % 5;
    int **A = new int[n][n]; // вот тут ошибку выдает
    
    system("PAUSE");
    return 0;    
}
Выдает ошибку
Код:
10  `n' cannot appear in a constant-expression
Размер массива может быть указан только константой времени компиляции.
_Bers вне форума Ответить с цитированием
Старый 09.09.2013, 02:18   #4
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
По идее не должна константа инициализироваться значением времени исполнения
Это неверная идея)

Цитата:
Размер массива может быть указан только константой времени компиляции.
Wat? А динамические массивы?

Там ошибка, потому что new может выделить память только для массива элементов, чьи типы известны на этапе компиляции. А в данном случае при неконстантной второй размерности это не так.
still_alive вне форума Ответить с цитированием
Старый 09.09.2013, 07:42   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Это неверная идея)
Да, пожалуй. Все никак не могу привыкнуть к мысли, что const - просто модификатор доступа, а не особый сипипишный мэджик.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 09.09.2013, 09:37   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Вот так нужно:

Код:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

void fillArray(int **array, int size) {
    srand (time(NULL));
    for (int row = 0; row < size; row++) {
        for (int col = 0; col < size; col++) {
            array[row][col] = rand() % 10;
        }
    }
}

void printArray(int **array, int size) {
    srand (time(NULL));
    for (int row = 0; row < size; row++) {
        for (int col = 0; col < size; col++) {
            cout << array[row][col];
            if (col != size-1) {
                cout << ' ';
            }
            else {
                cout << '\n';
            }
        }
    }
}

int main(int argc, char** argv) {
    srand(time(NULL));
    
    const int n = 5 + rand() % 5;
    
    // Allocation
    int **A;
    A = new int*[n];
    for (int i = 0; i < n; ++i) {
        A[i] = new int[n];
    }
    
    // Fill the array
    fillArray(A, n);
    
    // Print the array
    printArray(A, n);

    // Deletion
    for (int i = 0; i < n; i++) {
        delete [] A[i];
    }
    delete [] A;

    return 0;
}
Output:
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему не работает программа? nazar_vol Паскаль, Turbo Pascal, PascalABC.NET 2 09.06.2013 19:55
Почему не работает программа? forged Паскаль, Turbo Pascal, PascalABC.NET 1 12.03.2013 17:40
почему не работает программа? Miles Помощь студентам 1 20.12.2011 20:19
Почему не работает программа на си СергейАС Помощь студентам 0 08.12.2011 14:32
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56