Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/55: Рейтинг темы: голосов - 55, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 30.07.2016
Сообщений: 49
1

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

08.08.2016, 19:51. Показов 10932. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Дали задание написать программу, которая считает количество элементов массива.

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. если не сложно, не как программисту, а как обычному человеку в чем ошибка?)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2016, 19:51
Ответы с готовыми решениями:

Не работает счетчик в методе определения различающихся элементов массива
#include &quot;stdio.h&quot; int main() { const int n=29; double massiv; int i,j; int proverka=0;...

Количество максимальных элементов массива (счетчик)
Написать программу, которая спрашивает количество элементов массива (вводим значение с клавиатуры)....

Счетчик элементов
Доброго времени суток! Помогите разобраться. Нужно реализовать счетчик дивов, тоесть у меня есть...

Счётчик элементов
Здравствуйте! Имеется некий класс Node...в мейне генерим аналог односвязного списка. Нужно...

17
3 / 3 / 3
Регистрация: 23.06.2015
Сообщений: 38
08.08.2016, 20:08 2
Пробелы

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

unsigned long long потому что подозрение на то, что int count не вмещает в себя (ну это была теория) такое количество значений.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.08.2016, 20:56 5
Overwatcher, тут проблема в том, что вы создаете int A[100][100][100]; тем самым говорите компилятору - мне нужен стэк на 4 Гигабайта непрерывной памяти

Так понятнее?
1
2 / 2 / 0
Регистрация: 30.07.2016
Сообщений: 49
08.08.2016, 20:59  [ТС] 6
Ура! Программист!) А как можно запихнуть такое (а может и больше) кол-во значений в массив?
p.s. доходчиво, спасибо.
0
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
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/refer... w_handler/
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
08.08.2016, 21:13 8
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
мне нужен стэк на 4 Гигабайта
100*100*100*4 == 4000000 байт
Где здесь 4 Гб? Вы в тысячу раз ошиблись.
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.08.2016, 21:17 9
HelicopterK52, что-то я запутил)

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

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

Не выделять память, т.е. не объявлять что мой массив int?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
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();
}
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
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 и размер
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.08.2016, 02:03 17
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
мне нужен стэк на 4 Гигабайта непрерывной памяти
В данном случае скромнее всего лишь 2MB
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
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;
0
09.08.2016, 10:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2016, 10:10
Помогаю со студенческими работами здесь

Одномерные массивы. Вставка, удаление элементов массива. Перестановка элементов массива. Сортировка массива методом пузырька
Помогите пожалуйста! Дан массив, состоящий из N букв латинского алфавита а) Заполнить массив...

Счетчик по элементам массива
есть массив p. В нем числа от 0 до 7. Элементы не повторяют друг друга. Например, {5, 6, 7, 0, 1,...

Внутренний счётчик массива
Как получить доступ к внутреннему счётчику массива напрямую, чтобы изменить его (не +1, а 3, 6 и т....

Счетчик значений строкового массива
Добрый день. Пишу простейший парсер, нужно вывести счетчик напарсенных ссылок, комментарии в чем...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru