Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Квадратная матрица - задача. 
:(
    Опции темы
olegg95
Дата 10.10.2012, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 10.10.2012

Репутация: нет
Всего: нет



Помогите решить задачу, пожалуйста:  
 Построить квадратную матрицу n на n элементов. Элементы выше главной диагонали заполнить единицами, ниже - двойками, саму главную диагональ - нулями.  
 
 Так всё работает: 
Код
#include<iostream>
using namespace std;
int main()
{
    const int n=10;
    int matr [n][n];
    for (int i=0; i<n; ++i)
        for (int j=0; j<n; ++j)
            if (i==j) matr[i][j]=0;
            else if (i<j) matr[i][j]=1;
            else if (i>j) matr [i][j]=2;
    for (int i=0; i<n; ++i)
    {
        for (int j=0; j<n; ++j)
        cout<<matr [i][j];
        cout <<'\n';
    }
            system("pause");
            return 0;
}

  
 Но как взять значение n у пользователя, если оно должно быть константным?

Пытался сделать так , но выдаёт ошибку: 
Код
    int m;
    cin>>m;
    const int n=m;
    int matr [n][n];


Модератор: Не забываем пользоваться кнопочкой "Код"
PM MAIL   Вверх
feodorv
Дата 10.10.2012, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Можно так сделать:
Код

    int n=10;
    int **matr = new int *[n];
    for ( int i=0; i<n; ++i)
      matr[i] = new int [n];



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
NoviceF
Дата 10.10.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Можно так:

Код

    int m;
    cin >> m;
    const int n(m);

PM MAIL   Вверх
feodorv
Дата 10.10.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(olegg95 @  10.10.2012,  17:28 Найти цитируемый пост)
            if (i==j) matr[i][j]=0;
            else if (i<j) matr[i][j]=1;
            else if (i>j) matr [i][j]=2;

А зачем последнее if (i>j)? Оно может быть как-то иначе?



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
baldina
Дата 11.10.2012, 13:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



NoviceF, константу так инициализировать можно, а размер массива должен быть известен во время компиляции
PM MAIL   Вверх
NoviceF
Дата 11.10.2012, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Цитата(baldina @  11.10.2012,  14:10 Найти цитируемый пост)
 размер массива должен быть известен во время компиляции 


Сейчас нет ide под рукой, но вчера дома запускал авторский код с такой инициализацией константы, и всё компилировалось и работало.. или что имеется ввиду?

Это сообщение отредактировал(а) NoviceF - 11.10.2012, 13:39
PM MAIL   Вверх
baldina
Дата 11.10.2012, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



интересно, какой у вас компилятор?
а под рукой - вот, попробуйте
PM MAIL   Вверх
NoviceF
Дата 11.10.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Цитата(baldina @ 11.10.2012,  15:08)
интересно, какой у вас компилятор?
а под рукой - вот, попробуйте

gcc, версию не знаю, но должен быть не совсем древний.. В общем проверю вечером.


Это сообщение отредактировал(а) NoviceF - 11.10.2012, 21:13
PM MAIL   Вверх
NoviceF
Дата 11.10.2012, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Цитата(baldina @  11.10.2012,  15:08 Найти цитируемый пост)
какой у вас компилятор?


gcc 4.5.3

Код

#include<iostream>
using namespace std;

int main() {
    int m = 10;    // работает и так
//    cin >> m;    // и так
    const int n(m);
    
    int matr [n][n];
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            if (i == j) matr[i][j] = 0;
            else if (i < j) matr[i][j] = 1;
            else if (i > j) matr [i][j] = 2;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j)
            cout << matr [i][j];
        cout << '\n';
    }
    
    return 0;
}


Компилируется и выполняется без ворнингов и ошибок. Почему так происходит? 
PM MAIL   Вверх
586
Дата 11.10.2012, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



vs2010 выдаст ошибку: "error C2057: expected constant expression".
PM   Вверх
Фантом
Дата 11.10.2012, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(NoviceF @  11.10.2012,  22:14 Найти цитируемый пост)

Компилируется и выполняется без ворнингов и ошибок. Почему так происходит?  

Можно и проще. На GCC компилироваться и выполняться будет даже такой код:
Код

#include<iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int A[n];
    for(int i=0;i<n;++i) A[i]=i*i;
    cout << A[n-2] << endl;
}

Просто есть стандарт языка, а есть его реализация в компиляторе (и они далеко не всегда точно совпадают).  smile 
PM   Вверх
KaZepKa
Дата 11.10.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2011

Репутация: нет
Всего: нет



Цитата(Фантом @  11.10.2012,  22:53 Найти цитируемый пост)
На GCC компилироваться и выполняться будет даже такой код:

Да вроде бы ща на всех компилях такое можно и без проблем
PM MAIL   Вверх
math64
Дата 12.10.2012, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Это допустипо по стандарту C99. gcc поддерживает дополнения C99 и в C++, но в стантдарте C++ такого нет.
Чтобы соблюдался стандарт, придётся разделить на 2 файла:
Код

//C++
#include<iostream>
using namespace std;
extern "C" void calc(int)
extern "C" void print(int)
int main()
{
    int n;
    cin >> n;
    calc(n);
}
void print(int a) {
    cout << a << endl;
}

Код

// На C99
void print(int);
void calc(int n) {
    int A[n];
    for(int i=0;i<n;++i) A[i]=i*i;
    print(A[n-2]);
}


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.