Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/120: Рейтинг темы: голосов - 120, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117

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

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

Студворк — интернет-сервис помощи студентам
Всем здравствуйте! Помогите, пожалуйста, чайнику. В программе надо сделать, чтобы массив читался из файла, а не вводился в ручную и чтобы 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2017, 08:51
Ответы с готовыми решениями:

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

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

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

11
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.02.2017, 08:59
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  [ТС]
Цитата Сообщение от 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.02.2017, 13:00
Оно не может зациклиться со счётчиком. Что-то неправильно делаешь. Покажи актуальный вариант.
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
28.02.2017, 13:03  [ТС]
Цитата Сообщение от 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.02.2017, 13:10
Я же тебе написал, что sz (у тебя i) - фактическое количество чисел, а не size. Значит все функции должны вызываться с этим параметром.
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
28.02.2017, 13:16  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Я же тебе написал, что sz (у тебя i) - фактическое количество чисел, а не size. Значит все функции должны вызываться с этим параметром.
С sz тоже выходит так же...
Миниатюры
Чтение массива из файла  
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.02.2017, 13:18
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  [ТС]
Цитата Сообщение от 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.02.2017, 14:00
Пустая строка в конце. Так сделай:
C++
1
    for (i = 0; i < 100000 && (ifs >> arr[i]); ++i);
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 117
28.02.2017, 17:47  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Пустая строка в конце. Так сделай:
Спасибо большое! Извините, а Вы не подскажите, как сделать чтобы выводилось не на экран этапы, а в файл?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.02.2017, 19:07
ofstream исаользуй.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2017, 19:07
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru