Форум программистов, компьютерный форум CyberForum.ru

Массивы (нужен совет) - C++

Восстановить пароль Регистрация
 
mario69
 Аватар для mario69
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 26
03.12.2012, 18:54     Массивы (нужен совет) #1
вот программа
в подчеркнутой строке выдает ошибку "выражение должно иметь константное значение" (это касается n)
как исправить то?

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <stdlib.h>
using namespace std;
int main() {
    srand(time(NULL)); //делаем rand() зависящим от текущего времени, по сути аналог randomize()
    
    int n, k; //размер массива, сколько затем добавить
    int min, max; //минимальный и максимальные элементы
    int min_pos, max_pos; //их позиции
    cout << "Введите размер массива:" << endl;
    cin >> n; //считываем его
   [U][B] int a[n];[/B][/U] //объявляем массив нужного размера
    
    cout << "Массив имеет вид:" << endl;
    for (int i = 0; i < n; i++) { //заполняем массив случайными числами от 0 до 99 и печатаем
        a[i] = rand() % 100 - rand() % 100;
        cout << a[i] << " ";
    }
    cout << endl;
    cout << "Удаляем из массива элементы с четными индексами:" << endl;
    for (int i = 0; i < n / 2; i++) { //удаление нечетных индексов
        a[i] = a[i * 2 + 1];
        cout << a[i] << " ";
    }
    n /= 2; //уменьшаем n, ведь якобы удалили элементы
    cout << endl;
    
    cout << "Сколько элементов добавить в конец массива:" << endl;
    cin >> k;
    if ((k > n && n) || (k > 1 && !n)) //проверка на переполнение
        cout << "Нельзя добавить так много элементов!" << endl;
    else {
        for (int i = n; i < n+k; i++) { //добавляем еще случайных элементов в конец
            a[i] = rand() % 100 - rand() % 100;
        }
        n += k; //увеличиваем n, ведь якобы добавили элементы
        cout << "Массив теперь имеет вид:" << endl;
        for (int i = 0; i < n; i++) //печатаем наш новый массив
            cout << a[i] << " ";
        cout << endl;
    }
    min = a[0], min_pos = 0;
    max = a[0], max_pos = 0;
    for (int i = 0; i < n; i++) { //ищем минимальный и максимальный элементы
        if (a[i] < min) {
            min = a[i];
            min_pos = i;
        }
        if (a[i] > max) {
            max = a[i];
            max_pos = i;
        }
    }
    cout << "Минимальный элемент текущего массива:" << endl;
    cout << min << endl;
    cout << "Максимальный элемент текущего массива:" << endl;
    cout << max << endl;
    a[min_pos] = max; //меняем местами минимальный и максимальный
    a[max_pos] = min;
    cout << "Массив после перестановки:" << endl;
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    
    cout << "Первый отрицательный элемент:" << endl;
    int j = 0;
    while (a[j] >= 0 && j < n) j++;
    if (a[j] >= 0) 
        cout << "В массиве нет отрицательных элементов!";
    else {
        cout << a[j] << endl;
        cout << "Количество сравнений для его поиска:" << endl;
        cout << j + 1 << endl;
    }
 
    cout << "Массив, отсортированный включением:" << endl;
    for (int i = 1; i < n; i++) { //сортируем включением
        for (int m = i; m >= 0; m--) {
            if (a[i] < a[m]) {
                a[i] ^= a[m];
                a[m] = a[i] ^ a[m];
                a[i] = a[i] ^ a[m];
                if (i != 0) i--;
            }
        }
    }
    
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    } 
    cout << endl;
    cout << "Первый отрицательный элемент:" << endl;
    if (a[0] >= 0) 
        cout << "В массиве нет отрицательных элементов" << endl;
    else {
        cout << a[0] << endl;
        cout << "Количество сравнений для его поиска:" << endl;
        cout << 1 << endl;
    }
    return 0;
}
 Комментарий модератора 
Напишите номер строки с ошибкой, и не забывайте про теги форматирования кода.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 18:54     Массивы (нужен совет)
Посмотрите здесь:

C++ нужен совет!!!
Нужен совет! C++
C++ Нужен совет
C++ Нужен совет
Нужен совет C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
03.12.2012, 18:59     Массивы (нужен совет) #2
Динамически выделять память под массив. То есть
C++
1
2
int* a; 
a = new int[n];

Не по теме:

Когда вставляете код, пользуйтесь тегами.

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.12.2012, 19:01     Массивы (нужен совет) #3
1) #include <time.h>
2) память под массив надо выделять динамически. Если не знаешь, что такое динамические массивы, лучше сделай статический. Иначе работать не будет.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
03.12.2012, 19:07     Массивы (нужен совет) #4
И да Kuzia domovenok прав, надо ещё подключить #include <ctime>
mario69
 Аватар для mario69
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 26
03.12.2012, 19:17  [ТС]     Массивы (нужен совет) #5
спасибо вам за советы и подсказки)
Yandex
Объявления
03.12.2012, 19:17     Массивы (нужен совет)
Ответ Создать тему
Опции темы

Текущее время: 01:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru