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

Массив на 300000 элементов вывод в файл

30.01.2019, 16:52. Показов 2112. Ответов 9

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
int main() {
    std::ifstream in("INPUT.TXT");
    int* arr = new int[300001];
    int* arr1 = new int[300001];
    int* arr2 = new int[300001];
    unsigned N, M;
    in >> N;
    for (int i = 0; i < N; i++)in >> arr[i];
    in.close();
    std::ofstream out("OUTPUT.TXT");
    for (int i = 0; i < N; i++)arr2[i] = arr[i];
    for (int i = 0; i < N; i++)out<<arr2[i];
    out.close();
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2019, 16:52
Ответы с готовыми решениями:

Массив: Записать в файл массив из 6 элементов таких, что являются суммами элементов столбцов исходного массива
Помогите, пожалуйста, написать программу на языке Pascal В текстовом файле записан набор чисел...

Как сделать поиск значений больше 300000? Куда вставить в моем коде?
procedure TForm2.N4000001Click(Sender: TObject); var i,j,k:integer; S:string; begin...

Вывод данных из Memo в файл и в массив
КАК МОЖНО ВЫВЕСТИ ДАННЫЕ ИЗ МЕМО В ФАЙЛ И В МАССИВ...

Вывод элементов на экран и в файл
Помогите разобраться с выделенными строками // Объект вывода сделан элементом данных класса,...

9
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
30.01.2019, 17:14 2
Цитата Сообщение от dibicooper Посмотреть сообщение
Выскакивает исключение
Не плохо было бы узнать, что за исключение.

Так же, зачем вам 3 массива на 300'001 элементов? Для чего нужно копирование, почему сразу не выводить это в файл? Предположу, что исключение может появляться из-за того, что вы не освободили память.

Добавлено через 1 минуту
Цитата Сообщение от dibicooper Посмотреть сообщение
массивы в глобальную область, то ничего не происходит, просто компилируется и черный экран
А чего вы хотели? Вы ничего не выводите на консоль и ничего не запрашиваете с клавиатуры.
1
6 / 6 / 1
Регистрация: 19.07.2016
Сообщений: 52
30.01.2019, 17:25 3
отладчика нет? хотя бы в консоль пару сообщений выведите чтобы понять где сыпется..
не очень красиво что проверку не делает что вы считали в N
1
1 / 1 / 0
Регистрация: 27.11.2018
Сообщений: 12
30.01.2019, 17:38  [ТС] 4
Cortas, Ну во первых есть файл INPUT.TXT в котором есть два числа количество элементов первого и второго массива M и N (1 ≤ N, М ≤ 300 000) и идут элементы. Вы спросили чего я хотел, я хочу что бы в выходном файле что-то появилось, а он пустой. Я написал про консоль, потому что она должна закрыться, этого не происходит. В выходной файл OUTPUT.TXT нужно записать в возрастающем порядке без повторений все числа, которые входят как в первый, так и во второй набор. Числа разделять одним пробелом. Если таких чисел нет, то выходной файл должен оставаться пустым. Вызвано исключение по адресу 0x505E591C (msvcp140d.dll) в Пересечение множеств1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00DCE000. Я просто остальное не дописал, потому что ошибка уже сейчас появилась.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
30.01.2019, 18:35 5
dibicooper, для начала, проверь открытие файла для чтения (это всегда нужно делать).
1
1 / 1 / 0
Регистрация: 27.11.2018
Сообщений: 12
30.01.2019, 19:41  [ТС] 6
nd2, Добавил строку
C++
1
 if (!in)std::cout << "ERROR";
пишет Error и вылетает исключение на записи в цикле
0
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
30.01.2019, 19:51 7
Лучший ответ Сообщение было отмечено dibicooper как решение

Решение

Код не тестил, но должен быть рабочий:
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
#include <iostream>
#include <set>
#include <fstream>
 
using namespace std;
 
int main()
{
    //объявляем два множества
        set<int> s1, s2;
    //и размеры множества значений в файле
    int size1, size2;
    ifstream fin("input.txt");
    //если открыть файл не получается, то просто выводим сообщение об ошибке
    if(!fin) { cout << "Can't open the file!"; return 0; }
 
    //считываем размер первого множества и просто запихиваем все туда.
    //Класс set сделан так, что он автоматически кладет в себя только тот
    //элемент, которого в нем ещё нет, а так же сортирует его по переданному
    //компоратору, в данном случае используется компоратор по умолчанию,
    //т.е. по возрастанию
    fin >> size1;
    for(int i = 0, temp; i < size1; i++)
        fin >> temp, s1.insert(temp);
 
    //Теперь считываем размер второго множества чисел
    fin >> size2;
    for(int i = 0, temp; i < size2; i++)
    {
        //запихивать туда будем только такой, что не встретился 
        //в первом множестве, используя метод find класса set
        cin >> temp;
        if(s1.find(temp) == s1.end())
            s2.insert(temp);
    }
    //закрываем файл
    fin.close();
    
    //открываем файл для вывода и просто записываем туда
    //все элементы, которое имеются в s2
    ofstream fout("output.txt");
    for(auto it = s2.begin(); it != s2.end(); it++)
        fout << *it << ' ';
    //закрываем
    fout.close();
        return 0;
}
Если set'ами пользоваться нельзя, то делайте то же самое с обычными массивами: вместо метода find класса set используйте find из библиотеки algorithm (find(arr1, arr1 + size1) == arr1 + size1); вместо автосортировки класса set используйте сортировку sort из той же библиотеки; вместо игнорирования классом set дубликатов, так же пользуйтесь функцией find, при записи первого массива.

Добавлено через 2 минуты
Цитата Сообщение от dibicooper Посмотреть сообщение
пишет Error и вылетает исключение на записи в цикле
значит имя файла неправильно указали. Напишите полный путь:
C++
1
ifstream fin("C:\\SomeFolder\\SomeSubFolder\\input.txt");
1
1 / 1 / 0
Регистрация: 27.11.2018
Сообщений: 12
30.01.2019, 20:17  [ТС] 8
Cortas, Все хорошо скомпилировалось, но все равно не выводит в output даже через путь. Входные данные имеют следующий вид (это первый тест):
11 6
2 4 6 8 10 12 10 8 6 4 2
3 6 9 12 15 18
Вывод:
6 12
0
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
30.01.2019, 20:34 9
Цитата Сообщение от dibicooper Посмотреть сообщение
11 6
Ну правильно, что же вы не поправили код тогда (или как минимум не сказали об этом)? Очевидно же по моему коду, что я сначала читаю размер первого множества, потом само множество, затем размер второго множества и эл. второго множества.
Переместите строчку уберите 27 строчку, 22 замените на
C++
1
fin >> size1 >> size2;
Добавлено через 6 минут
А, и поправьте 32 строчку, я случайно написал поток ввода консоли, а не файла.
У меня рез. следующий:
Код
3 9 15 18
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
30.01.2019, 20:36 10
Цитата Сообщение от dibicooper Посмотреть сообщение
пишет Error и вылетает исключение на записи в цикле
Раз Error, то дальше код не нужно выполнять. Если запуск из среды, то файл должен быть в папке проекта.
1
30.01.2019, 20:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2019, 20:36
Помогаю со студенческими работами здесь

Дописать вывод найденных элементов в файл
Type Stud = record Fio: string; {Поле Ф.И.О.} God: integer; {Поле номера группы} Gor:...

Ввод и вывод элементов массива в файл
Ввод элементов массива нужно взять с файла и вывод элементов записать в файл #include &lt;stdio.h&gt;...

Вывод элементов из ComboBox в текстовый файл
Необходимо записать текстовое представление элементов ComboBox в текстовый файл построчно. Есть...

Двумерный массив - вывод в текстовый файл и Text.Box
Добрый день. Пишу программу для расчета гидравлического удара. Опыта программирования нет. Все...


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

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