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

Счетчик элементов массива - C++

Восстановить пароль Регистрация
 
Overwatcher
0 / 0 / 0
Регистрация: 30.07.2016
Сообщений: 18
08.08.2016, 19:51     Счетчик элементов массива #1
Доброго времени суток. Дали задание написать программу, которая считает количество элементов массива.

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
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int main() 
{
    const int x = 99, y = 99, z = 23;
    int A[x][y][z];
    unsigned long long count=0;
 
 
    for (int i = 1; i <= x; i++)
    {
        for (int j = 1; j <= y; j++)
        {
            for (int k = 1; k <= z; k++)
            {
                
                count++;
                
                
            }
 
 
 
 
 
        }
    }
 
    cout << count;
 
 
 
 
 
    _getch();
    return 0;
 
 
}
Логика такая: при каждом прохождении вложенного цикла счетчик увеличивается на 1. Пока значения небольшие (10, 10, 10 и т.д.) считает легко. Но стоит ввести что-то вроде 100 100 100, вылетает по ошибке:

Вызвано исключение по адресу 0x008D1B99 в ConsoleApplication2.exe: 0xC00000FD: Stack overflow (параметры: 0x00000000, 0x00362000).

p.s. если не сложно, не как программисту, а как обычному человеку в чем ошибка?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2016, 19:51     Счетчик элементов массива
Посмотрите здесь:

C++ Счетчик строк массива с использованием Flag
C++ Произведение элементов массива, расположенных между максимальным и минимальным элементами массива
C++ Найти сумму n первых элементов массива и произвидения m посдедних элементов массива
Каждый из элементов массива заменить средним значением первых элементов этого массива. C++
C++ Каждый из элементов x[SUB]i[/SUB] массива X(n) заменить средним значением первых i элементов этого массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sham63
3 / 3 / 2
Регистрация: 23.06.2015
Сообщений: 26
08.08.2016, 20:08     Счетчик элементов массива #2
Пробелы

Добавлено через 1 минуту
Цитата Сообщение от Overwatcher Посмотреть сообщение
unsigned long long
Где то тут скорее всего
HelicopterK52
633 / 176 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
08.08.2016, 20:17     Счетчик элементов массива #3
Цитата Сообщение от Overwatcher Посмотреть сообщение
которая считает количество элементов массива.
C++
1
count = x * y * z;//Всё гениальное просто
Overwatcher
0 / 0 / 0
Регистрация: 30.07.2016
Сообщений: 18
08.08.2016, 20:50  [ТС]     Счетчик элементов массива #4
ладно, попробую по другому:
который считает количество проходов вложенного цикла
На данный момент это просто счетчик, здесь дальше будет код, поэтому x*y*z, увы, не подходит.

unsigned long long потому что подозрение на то, что int count не вмещает в себя (ну это была теория) такое количество значений.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
08.08.2016, 20:56     Счетчик элементов массива #5
Overwatcher, тут проблема в том, что вы создаете int A[100][100][100]; тем самым говорите компилятору - мне нужен стэк на 4 Гигабайта непрерывной памяти

Так понятнее?
Overwatcher
0 / 0 / 0
Регистрация: 30.07.2016
Сообщений: 18
08.08.2016, 20:59  [ТС]     Счетчик элементов массива #6
Ура! Программист!) А как можно запихнуть такое (а может и больше) кол-во значений в массив?
p.s. доходчиво, спасибо.
Хрисипп
 Аватар для Хрисипп
17 / 27 / 8
Регистрация: 09.02.2016
Сообщений: 212
08.08.2016, 21:02     Счетчик элементов массива #7
когда запрашиваешь больше, чем тебе может дать система, место не выделяется, и ты обращаешься к несуществующим объектам. можно убедиться
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>     // std::cout
#include <cstdlib>      // std::exit
#include <new>          // std::set_new_handler
 
void no_memory () {
  std::cout << "Failed to allocate memory!\n";
  std::exit (1);
}
 
int main () {
  std::set_new_handler(no_memory);
  std::cout << "Attempting to allocate 1 GiB...";
  char* p = new char [1024*1024*1024];
  std::cout << "Ok\n";
  delete[] p;
  return 0;
}
пример с http://www.cplusplus.com/reference/new/set_new_handler/
HelicopterK52
633 / 176 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
08.08.2016, 21:13     Счетчик элементов массива #8
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
мне нужен стэк на 4 Гигабайта
100*100*100*4 == 4000000 байт
Где здесь 4 Гб? Вы в тысячу раз ошиблись.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
08.08.2016, 21:17     Счетчик элементов массива #9
HelicopterK52, что-то я запутил)

Overwatcher, да там не гигайбайты, а мегабайты - а в вашем случаи вроде бы стэк максимум 20 КБ, а вы хотите туда положить 4 МБ. Как фиксить? Не выделять память просто так - только по требованию к примеру по 100 байт в цикле в куче через new int[100]
HelicopterK52
633 / 176 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
08.08.2016, 21:19     Счетчик элементов массива #10
Хрисипп, это может не сработать, памяти может не быть, но система об этом не скажет до фактического обращения.
Хрисипп
 Аватар для Хрисипп
17 / 27 / 8
Регистрация: 09.02.2016
Сообщений: 212
08.08.2016, 21:33     Счетчик элементов массива #11
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
но система об этом не скажет до фактического обращения.
так это при динамическом выделении и выключенной подкачке на жестик
HelicopterK52
633 / 176 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
08.08.2016, 21:36     Счетчик элементов массива #12
Цитата Сообщение от Хрисипп Посмотреть сообщение
так это при динамическом выделении и выключенной подкачке на жестик
Всё зависит от реализации конкретной платформы.
Например, та же убунту с дефолтными настройками выдаст Вам хоть сто гигов - пофигу, в т.ч. и на подкачку.
Я, например, эту стратегию распределения памяти сразу вырубаю.
Хрисипп
 Аватар для Хрисипп
17 / 27 / 8
Регистрация: 09.02.2016
Сообщений: 212
08.08.2016, 21:40     Счетчик элементов массива #13
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
Всё зависит от реализации конкретной платформы.
да, тут правда. всё забываю про остальные ос, при использовании wind'ы
Overwatcher
0 / 0 / 0
Регистрация: 30.07.2016
Сообщений: 18
08.08.2016, 21:44  [ТС]     Счетчик элементов массива #14
я потерялась (с) Гадя Петрович Хренова

Мне то что делать?)

Не выделять память, т.е. не объявлять что мой массив int?
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
09.08.2016, 00:51     Счетчик элементов массива #15
Цитата Сообщение от Overwatcher Посмотреть сообщение
Мне то что делать?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
const size_t x = 99, y = 99, z = 23;
int A[x][y][z];
 
int main() 
{
    unsigned long long count=0;
 
    for (size_t i = 1; i < x; ++i)
        for (size_t j = 1; j < y; ++j)
            for (size_t k = 1; k < z; ++k)
                ++count;
 
    cout << count;
    _getch();
}
Krock21rus
73 / 73 / 19
Регистрация: 18.11.2013
Сообщений: 369
Завершенные тесты: 2
09.08.2016, 01:11     Счетчик элементов массива #16
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
4 Гигабайта
1(4) миллион байт это 1(4) мегабайт, не?
100*100*100*4, не?

Добавлено через 1 минуту
тебе нужно написать
C++
1
#pragma comment(linker,"/STACK:256000000")
и всё должно заработать
а так же можно при компиляции добавить --stack и размер
Fulcrum_013
 Аватар для Fulcrum_013
393 / 566 / 60
Регистрация: 14.12.2014
Сообщений: 4,769
Завершенные тесты: 2
09.08.2016, 02:03     Счетчик элементов массива #17
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
мне нужен стэк на 4 Гигабайта непрерывной памяти
В данном случае скромнее всего лишь 2MB
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2016, 10:10     Счетчик элементов массива
Еще ссылки по теме:

C++ Не работает счетчик в методе определения различающихся элементов массива
Даны два массива. Сформируйте массив С, состоящий из общих элементов массива А и В C++
C++ Нахождение суммы всех элементов массива и суммы первых 3-х элементов массива

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
09.08.2016, 10:10     Счетчик элементов массива #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int count_x = 0, count_y = 0, count_z = 0;
 
for (size_t i = 1; i < x; ++i)
    {
    for (size_t j = 1; j < y; ++j)
        {
        for (size_t k = 1; k < z; ++k)
            count_z++;
        count_y++;
        }
    count_x++;
    }
 
cout << "count=" << count_z << 'x' << count_y << 'x' << count_x;
Yandex
Объявления
09.08.2016, 10:10     Счетчик элементов массива
Ответ Создать тему
Опции темы

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