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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
PostDoc
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 6
#1

Увеличение максимального размера массива - C++

29.03.2010, 14:59. Просмотров 1784. Ответов 12
Метки нет (Все метки)

Дорогие программисты, пожалуйста, помогите!))

Возможно ли увеличить максимальный размер массива???
Как я поняла он ограничен 64500 значениями. А мне необходимо 120000 значений. Может быть это можно сделать программным путем???
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2010, 14:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Увеличение максимального размера массива (C++):

Динамическое увеличение размера динамического массива - C++
Никак не могу понять как это исправить.. Помогите, пожалуйста, разобраться в чём дело: struct myPoint ...

Увеличение размера массива из элементов собственного класса - C++
Добрый день, столкнулся с проблемой, у меня есть собственный класс myClass{ myClass(){ len = 0; ii = new...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента - C++
Помогите пожалуйста решить эту задачу, Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций,...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента. - C++
Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.

Увеличение размера стека - C++
Нет ли какой-либо команды, которая бы "приказала" программе расширить стек, чтобы она не вылетала с ошибкой? Просто я решаю одну задачу и...

Увеличение размера файла - C++
У меня есть на входе файл. Он открывается только для чтения (содержимое НЕ должно изменяться). Для дальнейшей работы необходимо, чтобы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
29.03.2010, 18:39 #2
Какая среда для работы и какой компилятор ?
Покажи код где происходит выделение массива.
Банальный malloc() пробовала ?
1
PostDoc
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 6
30.03.2010, 12:41  [ТС] #3
odip, спасибо за ответ)

среда Windows XP, компиллятор Microsoft Visual C++, version 6.0

malloc не подходит...

я не сильно продвинутый пользователь и, к сожалению, не могу найти код выделения массива...

я попыталась разделить один большой массив на два маленьких - не помогло))), видимо 64500 значений - это ограничение для всех массивов вместе взятых, используемых в программе...
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.03.2010, 12:49 #4
C++
1
2
3
4
5
6
7
8
9
    int * a = new int[120000];
    
    for(int i = 0; i < 120000; ++i)
        a[i] = i;
        
    for(int i = 0; i < 120000; ++i)
        std::cout << a[i] << ' ';
    
    delete [] a;
хмм... все работает xD

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
    int a[120000];
    
    for(int i = 0; i < 120000; ++i)
        a[i] = i;
        
    for(int i = 0; i < 120000; ++i)
        std::cout << a[i] << ' ';
так тоже
1
PostDoc
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 6
30.03.2010, 15:02  [ТС] #5
fasked, у меня организовано чтение из файла... при такой записи 120000 значений не работает...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
float FRQ[120000];
    double SPR[120000];
    long int i,k;
 
                f1=fopen(ppr,"r");
                    
         for(i=0;i<120000;i++)
         {
                
         fscanf(f1," %f",&FRQ[i]);
         fscanf(f1," %lg",&SPR[i]);
                         
         } 
         fclose(f1);
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.03.2010, 15:51 #6
ну тут проблема я думаю не в массивах. а в чтении из файла
0
PostDoc
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 6
31.03.2010, 07:44  [ТС] #7
fasked, а что не так с чтением??? SPR[120000] - массив чисел с большими степенями, может быть с этим связано???

ну в общем, мы обошли эту часть проблемы, разделив массив на два по 60000 значений и работали с каждым отдельно. Из каждого считывались только четные значения, таким образом, число значений уменьшилось ровно в два раза, с которым уже можно работать....
0
easybudda
Модератор
Эксперт CЭксперт С++
9622 / 5570 / 946
Регистрация: 25.07.2009
Сообщений: 10,695
31.03.2010, 10:36 #8
PostDoc, Если правильно понял, что нужно прочитать из файла пары значений с плавающей точкой (которых может быть 120000, а может и не быть), я бы лучше так сделал:
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct tagDOUBLES_PAIR {
    double frq;
    double spr;
    struct tagDOUBLES_PAIR* next;
} DOUBLES_PAIR;
 
DOUBLES_PAIR* newDoublesPair(double f, double s, DOUBLES_PAIR* last){
    DOUBLES_PAIR* dp;
    if ( ( dp = (DOUBLES_PAIR*)malloc(sizeof(DOUBLES_PAIR)) ) == NULL )
        return NULL;
    dp->frq = f;
    dp->spr = s;
    dp->next = NULL;
    if ( last )
        last->next = dp;
    return dp;
}
 
void clearAll(DOUBLES_PAIR* dp){
    DOUBLES_PAIR* tmp;
    while ( dp ){
        tmp = dp->next;
        free(dp);
        dp = tmp;
    }
}
 
/* не придумал, что бы ещё сделать, решил распечатать */
void printAll(const DOUBLES_PAIR* dp){
    while ( dp ){
        printf("%.3f\t%.3f\n", dp->frq, dp->spr);
        dp = dp->next;
    }
}
 
/* если очень нужен произвольный доступ. медленно, но работает */
DOUBLES_PAIR* getAt(DOUBLES_PAIR* dp, size_t pos){
    while ( pos-- ){
        if ( !( dp = dp->next ) )
            break;
    }
    return dp;
}
 
#define FILE_NAME "doubles.txt"
 
int main(void){
    DOUBLES_PAIR* first = NULL, * last = NULL;
    size_t cnt = 0;
    FILE* f;
    double frq, spr;
    
    if ( ( f = fopen(FILE_NAME, "r") ) == NULL ){
        fprintf(stderr, "Can't open input file!\n");
        exit(1);
    }
    
    while ( fscanf(f, "%lf %lf", &frq, &spr) == 2 ){
        if ( ( last = newDoublesPair(frq, spr, last) ) == NULL ){
            fprintf(stderr, "Memory error!\n");
            exit(1);
        }
        if ( !first )
            first = last;
        ++cnt;
    }
    
    if ( ferror(f) ){
        fprintf(stderr, "Can't read from input file!\n");
        exit(1);
    }
    
    fclose(f);
    
    if ( !first ){
        fprintf(stderr, "No values!\n");
        exit(1);
    }
    
    printf("\nAll %u pairs:\n", cnt);
    printAll(first);
    printf("\nRandom accessed (3-th) values:\n");
    if ( ( last = getAt(first, 2) ) == NULL ){
        fprintf(stderr, "Wrong index!\n");
        exit(1);
    }
    printf("%.3f\t%.3f\n", last->frq, last->spr);
    
    /* удалить весь список */
    clearAll(first);
    
    exit(0);
}
1
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
31.03.2010, 14:04 #9
я понимаю, что вопрос исчерпан, но почему бы не использовать vector?
0
PostDoc
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 6
31.03.2010, 15:19  [ТС] #10
easybudda, спасибо большое за помощь, пытаюсь разобраться..)

l_a_m, а как сделать через vector??? спасибо)
0
easybudda
Модератор
Эксперт CЭксперт С++
9622 / 5570 / 946
Регистрация: 25.07.2009
Сообщений: 10,695
31.03.2010, 16:34 #11
Цитата Сообщение от l_a_m Посмотреть сообщение
я понимаю, что вопрос исчерпан, но почему бы не использовать vector?
Почему исчерпан? Вариантов решения ещё вагон с прицепом. В том числе с использованием std::vector. Хотя я бы как-то так сделал:
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
#include <iostream>
#include <fstream>
#include <map>
#include <iomanip>
 
int main(){
    std::multimap<double, double> dd;
    double frq, spr;
 
    std::ifstream ifs("doubles.txt");
    if ( !ifs.is_open() ){
        std::cerr << "Can't open input file!" << std::endl;
        return 1;
    }
 
    while ( ifs >> frq >> spr )
        dd.insert(std::pair<double, double>(frq, spr));
 
    if ( ifs.bad() ){
        std::cerr << "Can't read from file!" << std::endl;
        return 1;
    }
    ifs.close();
 
    std::cout << "FRQ       SPR" << std::endl;
    std::cout.precision(3);
    for ( std::multimap<double, double>::const_iterator i = dd.begin(); i != dd.end(); ++i )
        std::cout << std::left << std::fixed << std::setw(10) << i->first << std::fixed << i->second << std::endl;
 
    return 0;
}
Добавлено через 8 минут
Хотя это неправильное решение, если только не нужно заодно значения по полю FRQ сортировать
1
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.04.2010, 02:05 #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <fstream>
#include <iterator>
 
int main()
{
    std::vector<float> v;
    
    std::ifstream ifs("file.txt");
    
    float f = 0;
    while(ifs >> f)
        v.push_back(f);
    
    ifs.close();
    
    std::copy(v.begin(), v.end(), std::ostream_iterator<float>(std::cout, "\n"));
}
Содержимое файла:
Код
3.333333
2.222222
1.111111
Вывод:
Код
3.33333
2.22222
1.11111
Но это Си++
Я так понимаю автору надо было на Си
1
PostDoc
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 6
01.04.2010, 07:42  [ТС] #13
Я очень-очень всем благодарна за помощь!!!! Эта проблема актуальна для нас довольно давно, и, оказывается, она имеет решение!!!!!!! Большое спасибо!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2010, 07:42
Привет! Вот еще темы с ответами:

Найти квадратную подматрицу максимального размера - C++
Ввести матрицу, которая состоит из 0 и 1. Найти в ней квадратную подматрицу максимального размера, элементы которой имеют значение 1. ...

Найти в прямоугольной матрице подматрицу из единиц максимального размера. - C++
Прямоуголная подматрица. Вводится матрица a(m,n) из 0 и 1. Найти в ней прямоугольную подматрицу из одних единиц максимального размера (т.е....

Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во - C++
Помогите с задачей: Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны...

Увеличение динамического массива - C++
В двумерном динамическом массиве вставить второй столбец после первого столбца, в котором все элементы положительны. Если такого столбца...


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

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

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