Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
wolf1396
6 / 6 / 6
Регистрация: 07.05.2013
Сообщений: 220
1

Поясните ошибку, связанную с константой.

04.07.2013, 06:31. Просмотров 414. Ответов 10
Метки нет (Все метки)

Делаю в VS 2012
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int main( int argc, char** argv ) 
{
    const int n=5;
    const int m=5;
    int i,j;
    int a[n], b[m], *c = new int[n+m];
    cout << "vvedite mas A: " << endl;
    for (i=0; i<n; i++)
    {
        cin >> a[i];
    }
    cout << "vvedite mas B: " << endl;
    for (j=0; j<m; j++)
    {
        cin >> b[j];
    }
    for (int i=0; i<n; i++) 
    {                       
       int c[i]=a[i];
       c[i+n]=b[i]; 
    }
    for(int i=0; i < n; i++)
    {
        for(int j = n-1; j > i; j-- )
        {
            if ( a[j-1] > b[i] )
            {      
                int temp=a[j-1]; 
                a[j-1]=b[i]; 
                b[i]=temp; 
            }
        }        
    }
    cout << " massiv C: " << endl;
    for (i=0; i<n+m; i++)
    {
        cout << c[i];
    }
    delete [] c;
    return 0;
}
при компиляции ошибка в строке *int c[i]=a[i]* i-должна быть константой

в чем проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 06:31
Ответы с готовыми решениями:

Выдает ошибку, связанную с функцией isbn
Пишу в Xcode программу из учебника по С++, вроде все правильно, но почему-то...

Поясните ошибку (разделение класса на файлы)
выношу реализацию в отдельный файл, но как только пытаюсь создать в функции...

Проблема с константой!
Помогите додумать код,чтоб не было ошибки. #include &lt;iostream&gt; using...

Case с отрицательной константой
switch (dir) { case 'С': case 'с': switch (cmd) { case '1': dir...

Инициализация объекта строго константой
Пишу class Class { private: const int *Int; public: Class(const...

10
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,992
Завершенные тесты: 1
04.07.2013, 06:45 2
C++
1
int c[i]=a[i];
это вообще что ты хотел этим сказать?
Может лучше так
C++
1
c[i]=a[i];
0
Нету имени
177 / 22 / 7
Регистрация: 16.05.2013
Сообщений: 181
04.07.2013, 06:47 3
Цитата Сообщение от wolf1396 Посмотреть сообщение
в чем проблема?
думаю вот в этом
C++
1
*c = new int[n+m];
я тут понакалдовал, незнаю подойдет ли тебе но работает
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
#include <iostream>
using namespace std;
 
 
int main( int argc, char** argv ) 
{
    const int n=5;
    const int m=5;
    int i,j;
 
 
    int c[10]; // то что я изменил
 
 
    int a[n], b[m];
    cout << "vvedite mas A: " << endl;
    for (i=0; i<n; i++)
    {
        cin >> a[i];
    }
    cout << "vvedite mas B: " << endl;
    for (j=0; j<m; j++)
    {
        cin >> b[j];
    }
    for (int i=0; i<n; i++) 
    {                       
       c[i]=a[i];
       c[i+n]=b[i]; 
    }
    for(int i=0; i < n; i++)
    {
        for(int j = n-1; j > i; j-- )
        {
            if ( a[j-1] > b[i] )
            {      
                int temp=a[j-1]; 
                a[j-1]=b[i]; 
                b[i]=temp; 
            }
        }        
    }
    cout << " massiv C: " << endl;
    for (i=0; i<n+m; i++)
    {
        cout << c[i];
    }
    return 0;
}
1
wolf1396
6 / 6 / 6
Регистрация: 07.05.2013
Сообщений: 220
04.07.2013, 06:52  [ТС] 4
Кликните здесь для просмотра всего текста

Цитата Сообщение от Нету имени Посмотреть сообщение
думаю вот в этом
C++
1
*c = new int[n+m];
я тут понакалдовал, незнаю подойдет ли тебе но работает
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
#include <iostream>
using namespace std;
 
 
int main( int argc, char** argv ) 
{
    const int n=5;
    const int m=5;
    int i,j;
 
 
    int c[10]; // то что я изменил
 
 
    int a[n], b[m];
    cout << "vvedite mas A: " << endl;
    for (i=0; i<n; i++)
    {
        cin >> a[i];
    }
    cout << "vvedite mas B: " << endl;
    for (j=0; j<m; j++)
    {
        cin >> b[j];
    }
    for (int i=0; i<n; i++) 
    {                       
       c[i]=a[i];
       c[i+n]=b[i]; 
    }
    for(int i=0; i < n; i++)
    {
        for(int j = n-1; j > i; j-- )
        {
            if ( a[j-1] > b[i] )
            {      
                int temp=a[j-1]; 
                a[j-1]=b[i]; 
                b[i]=temp; 
            }
        }        
    }
    cout << " massiv C: " << endl;
    for (i=0; i<n+m; i++)
    {
        cout << c[i];
    }
    return 0;
}


Спасибо
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
04.07.2013, 07:31 5
Цитата Сообщение от wolf1396 Посмотреть сообщение
int c[i]=a[i];
этим ты объявил массив и присвоил ему значение элемента другого массива
естественно компилятор сошел с ума
Цитата Сообщение от wolf1396 Посмотреть сообщение
int i,j;
..........................
for (i=0; i<n; i++)
.........................
for (j=0; j<m; j++)
* * {
Цитата Сообщение от wolf1396 Посмотреть сообщение
for (int i=0; i<n; i++)
Цитата Сообщение от wolf1396 Посмотреть сообщение
for(int i=0; i < n; i++)
* * {
* * * * for(int j = n-1; j > i; j-- )
"Вы, уж, Абрам Моисеевич, определитесь, или штаны оденьте или крестик снимите"(с)
зачем два разных подхода к объявлению i, j??
так в последнем цикле у тебя будет ДВЕ i и ДВЕ j

Добавлено через 4 минуты
Цитата Сообщение от Нету имени Посмотреть сообщение
думаю вот в этом
C++
1
*c = new int[n+m];
и чем не нравится динамическое выделение памяти
0
l_lenskaya
10 / 10 / 3
Регистрация: 02.07.2013
Сообщений: 52
04.07.2013, 07:32 6
C++
1
int c[i]=a[i];
это мы в этой строке судя по коду объявили целочисленный массив размером i (которая должна быть const int) да еще присвоили массиву! значение элемента a[i].
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
04.07.2013, 07:34 7
wolf1396, Нету имени, а теперь попробуйте поменять
C++
1
2
const int n=15
const int m=4
не переписывая остальную часть программы
1
wolf1396
6 / 6 / 6
Регистрация: 07.05.2013
Сообщений: 220
04.07.2013, 11:28  [ТС] 8
Цитата Сообщение от ValeryS Посмотреть сообщение
этим ты объявил массив и присвоил ему значение элемента другого массива
естественно компилятор сошел с ума



"Вы, уж, Абрам Моисеевич, определитесь, или штаны оденьте или крестик снимите"(с)
зачем два разных подхода к объявлению i, j??
так в последнем цикле у тебя будет ДВЕ i и ДВЕ j

Добавлено через 4 минуты

и чем не нравится динамическое выделение памяти
сортировка игнорируется вообще, т.ч. ее можно убрать, а вот переполнение С меня напрягает

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
wolf1396, Нету имени, а теперь попробуйте поменять
C++
1
2
const int n=15
const int m=4
не переписывая остальную часть программы
переполнение D:

а почему оно вдруг появилось?

я не брал вариант "Нет имени" я поменял int c[10] на int c[n+m] больше ошибки не было
0
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,992
Завершенные тесты: 1
04.07.2013, 11:32 9
wolf1396, Слушай, я же тебе написал в чем ошибка.
У тебя программа по крайней мере подстраивала массив под размер данных, Нету имени, сделал тебе этот массив статическим, отсюда и косяк с переполнением..... все логично.
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
04.07.2013, 11:34 10
Цитата Сообщение от wolf1396 Посмотреть сообщение
а почему оно вдруг появилось?
а потому что
Цитата Сообщение от wolf1396 Посмотреть сообщение
C++
1
2
3
4
5
for (int i=0; i<n; i++) 
  { 
   int c[i]=a[i];
    c[i+n]=b[i]; 
 }
тупо заложились что n==m;
а в общем случае это не так
нужно два цикла
примерно так
C++
1
2
3
4
5
for (int i=0; i<n; i++) 
    c[i]=a[i];
 
for (int i=0; i<m; i++) 
   c[i+n]=b[i];
0
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,992
Завершенные тесты: 1
04.07.2013, 11:48 11
wolf1396, Кроме того массив с у тебя, судя по записи в него данных, может быть до 2n или n+m.

Добавлено через 10 минут
wolf1396, Да и записывать одним циклом два массива с разной размерностью это как то странно. Тут у тебя всегда будет ошибка если размерности отличаются.
0
04.07.2013, 11:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 11:48

Массивы, инициализация размера не константой
Здравствуйте. Только начал вливаться в Ваши стройные ряды ;) Вопроса два...

Как обычную переменную сделать константой
Как можно константой сделать обычную переменную, а то хочу создать матрицу nxn...

Массивы C++. Ошибка: M должна быть константой
Пытаюсь сделать массив, вот что вышло. Выбивает ошибку, что M должна быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru