0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
1

Чтение массива из файла

28.02.2017, 08:51. Показов 22460. Ответов 11

Author24 — интернет-сервис помощи студентам
Всем здравствуйте! Помогите, пожалуйста, чайнику. В программе надо сделать, чтобы массив читался из файла, а не вводился в ручную и чтобы size был допустимый размер (к примеру, 100000), а строк в файле, естественно, могло быть гораздно меньше.


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
#include <time.h>
#include <iostream>
 
 
using namespace std;
void Print(int *arr, int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}
void ShellsSort(int *A, unsigned N)
{
    int t, step = 0;
    for (unsigned k = N / 2; k > 0; k /= 2)
    {
        step++;
        int substep = 1;
        for (unsigned i = k; i < N; i += 1)
        {
            t = A[i];
            unsigned j;
            for (j = i; j >= k; j -= k)
            {
                if (t < A[j - k])
                    A[j] = A[j - k];
                else
                    break;
            }
 
            A[j] = t;
            cout << "Step " << step << ", substep " << substep << endl;
            substep++;
            Print(A, N);
            cout << endl;
        }
    }
}
int main(int argc, char* argv[])
{
    srand(time(0));
    const int size = 8;
    int *arr = new int[size];
 
    for (int i = 0; i < size; i++)
            cin >> arr[i];
 
 
    cout << " Before: ";
    Print(arr, size);
    cout << endl;
    ShellsSort(arr, size);
    cout << " After: ";
    Print(arr, size);
    cout << endl << endl; 
    return 0;
        system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2017, 08:51
Ответы с готовыми решениями:

Чтение массива из файла
Здравствуйте! Возникла проблема со считыванием матрицы... for(int i=0;i&lt;y;i++){ for(int...

Чтение массива из файла
В интернете целая куча статей по чтению из текстового файла, но насколько я понял все сводится к...

Чтение массива из файла
Здравствуйте, подскажите, пожалуйста почему не происходит чтение из файла #include &lt;cstdlib&gt;...

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

11
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.02.2017, 08:59 2
C++
1
2
3
4
5
6
7
    const int size = 100000;
    int *arr = new int[size];
    int sz; // количество чисел.
 
    ifstream ifs("data.txt");
    for (sz = 0; sz < 100000 && ifs; ++sz)
            ifs >> arr[sz];
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
28.02.2017, 12:58  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
const int size = 100000;
* * int *arr = new int[size];
* * int sz; // количество чисел.
ifstream ifs("data.txt");
* * for (sz = 0; sz < 100000 && ifs; ++sz)
* * * * * * ifs >> arr[sz];
Спасибо большое, но у меня зацикливается...
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.02.2017, 13:00 4
Оно не может зациклиться со счётчиком. Что-то неправильно делаешь. Покажи актуальный вариант.
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
28.02.2017, 13:03  [ТС] 5
Цитата Сообщение от nmcf Посмотреть сообщение
Оно не может зациклиться со счётчиком. Что-то неправильно делаешь. Покажи актуальный вариант.
Вот весь код.
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
#include <time.h>
#include <iostream>
#include <fstream>
 
 
using namespace std;
void Print(int *arr, int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}
void ShellsSort(int *A, unsigned N)
{
    int t, step = 0;
    for (unsigned k = N / 2; k > 0; k /= 2)
    {
        step++;
        int substep = 1;
        for (unsigned i = k; i < N; i += 1)
        {
            t = A[i];
            unsigned j;
            for (j = i; j >= k; j -= k)
            {
                if (t < A[j - k])
                    A[j] = A[j - k];
                else
                    break;
            }
            A[j] = t;
            cout << "Step " << step << ", substep " << substep << endl;
            substep++;
            Print(A, N);
            cout << endl;
        }
    }
}
int main(int argc, char* argv[])
{
    srand(time(0));
    const int size = 20;
    int *arr = new int[size];
    int i; // количество чисел.
 
    ifstream ifs("1.txt");
    for (i = 0; i < 20 && ifs; ++i)
        ifs >> arr[i];
    
 
 
 
 
    cout << " Before: ";
    Print(arr, size);
    cout << endl;
    ShellsSort(arr, size);
    cout << " After: ";
    Print(arr, size);
    cout << endl << endl; 
 
    
    return 0;
}
Я, возможно, не так сперва понял... Программа добавляет, видимо, недостающие цифры. К примеру, у меня написано size 100000, а в самом файле всего чисел 10-15
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.02.2017, 13:10 6
Я же тебе написал, что sz (у тебя i) - фактическое количество чисел, а не size. Значит все функции должны вызываться с этим параметром.
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
28.02.2017, 13:16  [ТС] 7
Цитата Сообщение от nmcf Посмотреть сообщение
Я же тебе написал, что sz (у тебя i) - фактическое количество чисел, а не size. Значит все функции должны вызываться с этим параметром.
С sz тоже выходит так же...
Миниатюры
Чтение массива из файла  
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.02.2017, 13:18 8
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
int main(int argc, char* argv[])
{
    srand(time(0));
    const int size = 20;
    int *arr = new int[size];
    int i; // количество чисел.
 
    ifstream ifs("1.txt");
    for (i = 0; i < 20 && ifs; ++i)
        ifs >> arr[i];
    
 
 
 
 
    cout << " Before: ";
    Print(arr, i);
    cout << endl;
    ShellsSort(arr, i);
    cout << " After: ";
    Print(arr, i);
    cout << endl << endl; 
 
    
    return 0;
}
Остальное зависит от того, что в файле, от правильности функций.
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
28.02.2017, 13:28  [ТС] 9
Цитата Сообщение от nmcf Посмотреть сообщение
Остальное зависит от того, что в файле, от правильности функций.
получилось вот так
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
#include <time.h>
#include <iostream>
#include <fstream>
 
 
using namespace std;
void Print(int *arr, int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}
void ShellsSort(int *A, unsigned N)
{
    int t, step = 0;
    for (unsigned k = N / 2; k > 0; k /= 2)
    {
        step++;
        int substep = 1;
        for (unsigned i = k; i < N; i += 1)
        {
            t = A[i];
            unsigned j;
            for (j = i; j >= k; j -= k)
            {
                if (t < A[j - k])
                    A[j] = A[j - k];
                else
                    break;
            }
            A[j] = t;
            cout << "Step " << step << ", substep " << substep << endl;
            substep++;
            Print(A, N);
            cout << endl;
        }
    }
}
int main(int argc, char* argv[])
{
    srand(time(0));
    const int size = 100000;
    int *arr = new int[size];
    int i; // количество чисел.
 
    ifstream ifs("1.txt");
    for (i = 0; i < 100000 && ifs; ++i)
        ifs >> arr[i];
    
 
 
 
 
    cout << " Before: ";
    Print(arr, i);
    cout << endl;
    ShellsSort(arr, i);
    cout << " After: ";
    Print(arr, i);
    cout << endl << endl; 
 
    
    return 0;
}
Но все равно почему то добавил последнее число. Вот что в файле и что вышло
Миниатюры
Чтение массива из файла  
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.02.2017, 14:00 10
Пустая строка в конце. Так сделай:
C++
1
    for (i = 0; i < 100000 && (ifs >> arr[i]); ++i);
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
28.02.2017, 17:47  [ТС] 11
Цитата Сообщение от nmcf Посмотреть сообщение
Пустая строка в конце. Так сделай:
Спасибо большое! Извините, а Вы не подскажите, как сделать чтобы выводилось не на экран этапы, а в файл?
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.02.2017, 19:07 12
ofstream исаользуй.
0
28.02.2017, 19:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2017, 19:07
Помогаю со студенческими работами здесь

Чтение массива из файла
Здравствуйте, у меня есть массив arr, как я могу прочитать в него из файла следующую запись...

Чтение из файла массива
Пожалуйста помогите разобрать чтение двумерного масиива из файла(не могу найти чтото понятное(

Чтение массива структур из файла
есть структура typedef struct { unsigned short codeContribution; unsigned short...

Чтение из файла массива структур
/* 4. Дана информация о семи студентах. Структура имеет вид: фамилия, имя, отчество и 4 оценки...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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