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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.92
tretstoun
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 11
#1

большие массивы - C++

10.02.2010, 22:12. Просмотров 5198. Ответов 22
Метки нет (Все метки)

Кто-нибудь сталкивался с большими V данных?

Программа ничего сложного из себя не представляет - посчитать по формуле в каждой точке. Надо прочитать из txt файла.

Проблема в том что массив требуется [160000][3]. Борланд с++ пишет стэйк оверфлоу.

Кто-нибудь может помочь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2010, 22:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос большие массивы (C++):

Большие числа в C - C++
можно ли в языке С работать с большими целыми? Существует ли некое подобие BigInteger C#?

Большие числа - C++
Здравствуйте. Как в С++ работать с большими числами (600851475143, например)? Честно гуглил, но там ничего толкового не нашел. ...

Большие факториалы - C++
Помогите написать программу,котороя щитает большые фактуриалы(100!,200! и тд)

Большие-маленькие - C++
На входе строка содержащая большие и маленькие буквы, необходимо большие сделать маленькими, а маленькие большими. Например...

большие числа - C++
скажите пожалуйсто есть ли какая нибудь библиотека в си++ для работы с большими числами (до 10^18), если нет то может у кого класс...

Слишком большие программы! - C++
Я начинаю писать консольные приложения на Dev C++. Компилирую. Я раньше не смотрел на размер, а сейчас увидел, что он больше 400 Кб!!! и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.02.2010, 16:42 #16
Цитата Сообщение от tretstoun Посмотреть сообщение
то он будет уже 480000.
Нет не будет.
Считываете из файла по три значения в переменные x, y, z. Затем вызываете функцию (которая преобразует из нормальной записи координат в объединенную), например такую:
C++
1
2
3
4
5
6
7
8
9
int func(int x, int y, int z)
{
    int temp=z;
    temp*=1000;
    temp+=y;
    temp*=1000;
    temp+=x;
    return temp;
}
и записываете значение которая вернет функция уже в одномерный массив, размером 160000
Day
1155 / 960 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
17.02.2010, 19:13 #17
Я бы все-таки для такого массива использовал бинарный файл.
Создаешь файл FILE *f = fopen(Name, "wb");
Заполняшь его нулями.
Потом
fclose(f);
f = fopen(Name, "rb+"); - Можно будет и читать и писать
Пишешь так:
fseek(f, off, 0); - Подвод к нужной точке
fwrite(&d, sizeof(double), 1, f); // d - записываемое число (double),
а можно писать и блоками по 3 числа, например, тут ты - хозяин
(Надеюсь, элементарную работу с файлами ты сечешь)
Нужно достать число из "массива" - fread..., Засунуть его тыда - fwrite...
Все равно, даже если транслятор или программа во время исполнения,
сделает вид, что им такие размеры - нипочем, массив твой будет скорее всего находиться
в виртуальной памяти и в файле подкачки. Т.е. фактически - на диске.
Уж лучше управлять этим процессом самому. Тем более, что при современных скоростях
дисководов и методах кэширования доступа ты разницу и не заметишь.
А главное - не будешь зависеть от конкретного компа и его операционки, решай задачу
хоть в ДОСе, хоть на 286-ой
Удачи!
tretstoun
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 11
18.02.2010, 23:27  [ТС] #18
Day, я не совсем понял как мне поможет перевод в бинарный файл? когда я буду с него читать всё равно потребуется большой массив, который компиллятор не потянет, или я неправильно понял?
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.02.2010, 23:33 #19
tretstoun, Day имеет ввиду, что данные нужно хранить в файле. Считывать нужно не все данные сразу в массив, а только те которые нужны на данный момент для вычислений.
Day
1155 / 960 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
19.02.2010, 11:36 #20
Цитата Сообщение от valeriikozlov Посмотреть сообщение
tretstoun, Day имеет ввиду, что данные нужно хранить в файле. Считывать нужно не все данные сразу в массив, а только те которые нужны на данный момент для вычислений.
Именно так!
Чуть подробнее - нужна тебе строчка -
Код
double x[3];
fseek(f, 3*I*sizeof(double),0); 
fread(x, sizeof(double), 3, f);
Посчитал, что-то изменил в ней -
Код
fseek(f, 3*I*sizeof(double),0); 
fwrite(x, sizeof(double), 3, f);
Чуть посложнее, чем прямое обращение к элементам массива в памяти,
ну да можно функции написать "Взять I-тую строчку", "Записать I-тую строчку",
ну а если охота, можно на С++ класс придумать и операции перегрузить
(хотя тут я тебе не помощник)
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2010, 11:40 #21
Миша Оборин делал программу с матрицей коэффициентов [1000][1000], а я даже [17000][17000]. У тебя же всего [160000][3]. Я вообще не понимаю, что за задачу можно решать с такой маленькой матрицей.
tretstoun
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 11
23.02.2010, 15:27  [ТС] #22
taras atavin, на 2 странице я описал коротко свою задачу. Я её решал сначал на ещё меньшем поле 100 на 100. Теперь перешёл на 400#400 и не получается.

вы не поделитесь секретом как удалось создать такой массив?

Добавлено через 31 минуту
Day, я знаю функцию fseek, но не очень понял:

fseek(f, 3*I*sizeof(double),0) - зачем 3*I*sizeof(double), разве нам не к началу строки надо подойти? и я не понял что значит здесь "I"
Day
1155 / 960 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
23.02.2010, 17:54 #23
tretstoun,
fseek(f, 3*I*sizeof(double),0) - зачем 3*I*sizeof(double), разве нам не к началу строки надо подойти? и я не понял что значит здесь "I"
Я считаю, что массив записан строками по 3 числа типа double в строке
Значит кажная строка занимает 3*sizeof(double) байт.
I - номер строки (нумерация с 0)
I-тая строка расположена в файле с 3*I*sizeof(double)-го байта
(если I=0 - то с начала файла)
Если у тебя точки не double, а int, значит надо sizeof(int)
Обрати внимание, что 3-й параметр fseek равен 0, т.е. отсчет производится сначала файла
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2010, 17:54
Привет! Вот еще темы с ответами:

Не большие операции с массивом. - C++
Доброго дня. Ни как не могу понять в чем причина не исполнения следующей программы. Код ищет минимальный и максимальный элементы в...

Массивы. Циклические алгоритмы (Заполнить массивы случайными числами, лежащими в интервале 0 до 100) - C++
Доброго дня, уважаемые форумчане, помогите пожалуйста решить задание. Заполнить массивы случайными числами, лежащими в интервале 0 до...

Выбираем маленькие и большие буквы - C++
l6hIun# c2/4l3H5# LHhKj87Gt^# Дано какой-то такой набор символов. С первой строки нужно вывести маленькие буквы, с второй большие с...

упорядочить по возростанию числа большие 2 - C++
упорядочить по возростанию числа больше 2 , а остальные оставить на своих же местах


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.02.2010, 17:54
Ответ Создать тему
Опции темы

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