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

Файловый ввод/вывод - C++

Восстановить пароль Регистрация
 
Malaua
 Аватар для Malaua
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 23
04.04.2013, 00:10     Файловый ввод/вывод #1
Программа сортирует массив таким образом, чтобы сначала стояли нули, а затем все остальные элементы массива. Помогите переделать так, чтобы ввод инфы был из файла. И результат записывался в новый.
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
#include <iostream>
#include <dos.h>
#include <Windows.h>
using namespace std;
int main()
{
 setlocale (0,"RUS");
 double sum = 0; 
    int size; // размер массива
 double x = 0;
  cout << " Введите размерность массива: ";
  cin >> size; // получение от пользователя размера массива
  if(cin.good() && size>0 ){//проверка на правильность введения данных
 double *mas = new double [size]; // Выделение памяти для массива
 // Заполнение массива и вывод значений его элементов
 cout << "Введите значения элементов массива:\n";
    for (int i = 0; i < size; i++)
 {
  cout << " Введите " << i+1 << " элемент массива: ";
        cin >> mas[i];
        if(mas[i]==0)sum++;
    if (cin.good())//проверка на правильность введения данных
        cout <<""<<endl ;
    else
    {   
    cout << ("\n Некорректные данные\n");
    delete [] mas;
    Sleep(2600);
    return 0;
    
    }
 }
    if(sum==0)cout<<"Не введено ни одного элемента равного нулю\n";//проверка на наличие нулей в массиве
    else{//упорядочиваение массива методом шелла
    int step = size / 2;//инициализируем шаг.
    while (step > 0)//пока шаг не 0
    {
        for (int i = 0; i < (size - step); i++)
        {
                    int j = i;
                     //будем идти начиная с i-го элемент
                    while (j >= 0 && mas[j+step] == 0)
                     //пока не пришли к началу массива
                     //и пока рассматриваемый элемент больше
                     //чем элемент находящийся на расстоянии шага
                    {
                         //меняем их местами
                        int temp = mas[j];
                        mas[j] = mas[j + step];
                        mas[j + step] = temp;
                        j--;
                    }
        }
        step = step / 2;//уменьшаем шаг
    }    
            
            
 
         for (int i = 0; i < size; i++)
             cout<<mas[i]<<endl;
 delete [] mas;
    }}
 else 
{   
cout << ("\n некорректные данные\n"); 
    Sleep (2600);
    return 0;
    
}
  
 system ("pause");
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 00:10     Файловый ввод/вывод
Посмотрите здесь:

Файловый ввод-вывод C++
файловый ввод\вывод C++
Файловый ввод/вывод в С++ C++
Файловый ввод/вывод C++
Файловый ввод-вывод C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Саня gamer
04.04.2013, 00:12
  #2

Не по теме:


C++
1
2
3
#include <iostream>
#include <dos.h>
#include <Windows.h>
а вы не под Linux случайно пишите?

Malaua
 Аватар для Malaua
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 23
04.04.2013, 00:22  [ТС]     Файловый ввод/вывод #3
Цитата Сообщение от Саня gamer Посмотреть сообщение
а вы не под Linux случайно пишите?
Нет
Програмер_80лвл
15 / 15 / 1
Регистрация: 17.10.2012
Сообщений: 96
Записей в блоге: 1
04.04.2013, 00:26     Файловый ввод/вывод #4
давайте вы мне покажете что имено хотите закидывать в файл
и загружать ?
но вот пример С++
а по примеру думаю и сам розберешся если нет то тогда я те помогу ты токо обьясни что и куда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
#include<fstream>// для работы с файлом (вообщето есть оч много примеров но я дам тот который помню)
void main()
{
wchar_t *tSaveFile=new wchar_t[100];
tSaveFile=L"TEXT";
fstream file("name.txt");
f.write((char*)&tSaveFile,sizeof(wchar_t));// по сюти так можно записать что угодно даже целый клас в твой файл
// но в фале оно будет хранится в виде какого мусора но ты не переживай
 
// дальше пойдет зчитывание из файла :
wchar_t *LoadFile=new wchar_t[101];
f.read((char*)&tSaveFile,sizeof(wchar_t));
//посути все да можно пустить циклом чтоб он считывал все что ты туда записал но так как в примеру мы записали
//одну строку
}
Malaua
 Аватар для Malaua
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 23
04.04.2013, 00:38  [ТС]     Файловый ввод/вывод #5
В текстовом файле из которого будет считываться инфа должен быть одномерный массив с различными элементами.
А после того как произойдет сортировка, (Так, чтобы нули стояли впереди) записать в новый текстовый файл.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.04.2013, 01:00     Файловый ввод/вывод #6
Если данные в файле в текстовом виде:
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
 ifstream fin("infile.txt");
 if (!fin.is_open())
 {
     cout << "Error!" << endl;
     system ("pause");
     return 1;
 }
 
 int size = 0; // размер массива
 double temp;
 while (!fin.eof()) // Подсчёт количества чисел в файле (после последнего числа в файле - сразу конец файла)
 {
    fin >> temp;
    ++size;
 }
 fin.clear();
 fin.seekg(0);
 
 double *mas = new double [size]; // Выделение памяти для массива
 
 for (int i = 0; i < size; ++i) // Чтение из файла в массив
    fin >> mas[i];
    
fin.close();
 
 // после сортировки 
 ofstream fout("outfile.txt");
 for (int i = 0; i < size; ++i) // запись в файл
 {
    fout << mas[i];
    if (i < (size - 1)) fout << ' ';
 }
 
 fout.close();
 
 delete [] mas;
Програмер_80лвл
15 / 15 / 1
Регистрация: 17.10.2012
Сообщений: 96
Записей в блоге: 1
04.04.2013, 01:03     Файловый ввод/вывод #7
тобто тебе нада загнать в файл масив и потом считать его ?
ну тогда Вот :
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
//Теже библиотеки ...
 
 
void main()
{
// зделаю с типом int а ты там по примеру измениш токо инициализацию и тип даных у пер. tSave и LoadFile
 
int *tSave=new int[100][100];// для того чтоб было прикольно давай занесем туда random
for(int i=0;i<100;i++)
{
    for(int j=0;j<100;j++)
    {
        tSave[i][j]=rand()%30+70;
    }
}
 
// Выводим то что : срандомило, и будет сохранятся в name.txt
for(int i=0;i<100;i++)
{
     for(int j=0;j<100;j++)
     {
          cout<<tSave[i][j]<" ";
     }
     cout<<endl;
} 
 
//а теперь будем записывать в файл
fstream file("name.txt");
file.write((char*)&tSave,10000*sizeof(char));
// посути теперь утебя в файле name.txt должен быть твой масив
ну а тепрь давай его зчитаем :
int *LoadFile=new int[100][100];
 
file.read((char*)&LoadFile,10000*sizeof(char));
//Выводим загруженый масив из фала
for(int i=0;i<100;i++)
{
     for(int j=0;j<100;j++)
     {
          cout<<LoadFile[i][j]<" ";
     }
     cout<<endl;
}
 
 
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.04.2013, 01:04     Файловый ввод/вывод #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
27
28
29
30
31
ifstream fin("infile.dat", ios::binary);
 if (!fin.is_open())
 {
     cout << "Error!" << endl;
     system ("pause");
     return 1;
 }
 
 fin.seekg(0, ios::end);
 int size = (fin.tellg() / sizeof(double)); // размер массива
 fin.seekg(0);
 
 double *mas = new double [size]; // Выделение памяти для массива
 
 int i = 0;
 while (true) // Чтение из файла в массив
 {
    fin.read((char*)&mas[i], sizeof(double));
    if (fin.eof()) break;
    ++i;
 }
 fin.close();
 
 // после сортировки
 ofstream fout("outfile.dat", ios::binary);
 for (int i = 0; i < size; ++i)
    fout.write((const char*)&mas[i], sizeof(double));
 
 fout.close();
 
 delete [] mas;
Програмер_80лвл
15 / 15 / 1
Регистрация: 17.10.2012
Сообщений: 96
Записей в блоге: 1
04.04.2013, 01:08     Файловый ввод/вывод #9
alsav22, я Думаю что ваш код (первый) не подойдет там возможна потеря памяти...
а если возможна потеря памяти то тогда он не практичен...
а для чего он тогда практичен я думаю чтоб записывать туда 1 цифру или какойто маленький блок памяти но не масив...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.04.2013, 01:19     Файловый ввод/вывод #10
Цитата Сообщение от Програмер_80лвл Посмотреть сообщение
alsav22, я Думаю что ваш код (первый) не подойдет там возможна потеря памяти...
Каким образом там возможна потеря памяти?

Добавлено через 1 минуту
Цитата Сообщение от Програмер_80лвл Посмотреть сообщение
а для чего он тогда практичен я думаю чтоб записывать туда 1 цифру или какойто маленький блок памяти но не масив...
С чего это вы взяли?
Програмер_80лвл
15 / 15 / 1
Регистрация: 17.10.2012
Сообщений: 96
Записей в блоге: 1
06.04.2013, 03:42     Файловый ввод/вывод #11
Цитата Сообщение от alsav22 Посмотреть сообщение
alsav22, я Думаю что ваш код (первый) не подойдет там возможна потеря памяти...
Каким образом там возможна потеря памяти?
Добавлено через 1 минуту
Цитата Сообщение от Програмер_80лвл Посмотреть сообщение
а для чего он тогда практичен я думаю чтоб записывать туда 1 цифру или какойто маленький блок памяти но не масив...
С чего это вы взяли?
Поверь тому человеку который с языками такими как С\С++ работает уже как 18-19 лет.
и вот почему :
когда ты записуеш по элементу... Верно вот вопрос как Компилятор будет знать сколько ему считывать... точнее Ты незаписуеш первых 4 байта для того чтоб при зчитывании компилятор знал что это имено был имено масив, из скольких-то символов
там где-то на 10 100 раз может вилететь ошибка в твоем первом коде !
так-что не думаю кому-то захочется видеть эту БАГу усебя
думаю тебе стоит почитать книжку Шилда и, Страус Тру

удачи =)
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
06.04.2013, 04:15     Файловый ввод/вывод #12
Цитата Сообщение от Програмер_80лвл Посмотреть сообщение
Поверь тому человеку который с языками такими как С\С++ работает уже как 18-19 лет.
человек с колосальным опытом в С++ пишет такое

C++
1
2
3
int *LoadFile=new int[100][100];
 
file.read((char*)&LoadFile,10000*sizeof(char));
ну я извиняюсь )))
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 05:20     Файловый ввод/вывод #13
Цитата Сообщение от Програмер_80лвл Посмотреть сообщение
Поверь тому человеку который с языками такими как С\С++ работает уже как 18-19 лет.
и вот почему :
когда ты записуеш по элементу... Верно вот вопрос как Компилятор будет знать сколько ему считывать... точнее Ты незаписуеш первых 4 байта для того чтоб при зчитывании компилятор знал что это имено был имено масив, из скольких-то символов
там где-то на 10 100 раз может вилететь ошибка в твоем первом коде !
так-что не думаю кому-то захочется видеть эту БАГу усебя
думаю тебе стоит почитать книжку Шилда и, Страус Тру
удачи =)
Если это мне ответ, то мысль не уловил...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2013, 06:04     Файловый ввод/вывод
Еще ссылки по теме:

Файловый ввод\вывод C++
C++ Файловый ввод / вывод
C++ Файловый ввод вывод

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
06.04.2013, 06:04     Файловый ввод/вывод #14

Не по теме:

alsav22, куда уж нам, наш лвл где-нибудь на уровне 65, а он вот Страус Тру читает, наверное это сразу +15 лвл дает



ТС, в чем проблема, потоки они везде одинаковые. Просто создать объект ifstream, проверить на существование вообще файла, далее писать с него как с cin с помощью операторов >> после записать в ofstream с помощью o, как если бы это был cout. Все.

Добавлено через 1 минуту
Цитата Сообщение от abit Посмотреть сообщение
человек с колосальным опытом в С++ пишет такое
и не пишет такое delete[]
Yandex
Объявления
06.04.2013, 06:04     Файловый ввод/вывод
Ответ Создать тему
Опции темы

Текущее время: 21:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru