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

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

Войти
Регистрация
Восстановить пароль
 
Layzie
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 89
#1

Работа с файлом - C++

02.03.2014, 22:07. Просмотров 311. Ответов 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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include "stdafx.h"
#include "math.h"
#include <iostream>
using namespace std;
 
class pset
    {public:
    float x,y,z;
    void input();
    void output();
//  float smeshproiz(pset a,pset b, pset c);
    };
float SP(pset a,pset b, pset c) //смешанное произведение чтобы проверять являются ли введенные данные вершинами параллелограмма
    {pset d;
    d.x=b.y*c.z-b.z*c.y;
    d.y=b.z*c.x-b.x*c.z;
    d.z=b.x*c.y-b.y*c.x;
    return d.x*a.x+d.y*a.y+d.z*a.z;
    }
class paral
    {public:
    pset A1,B1,C1,D1,A2,B2,C2,D2;
    float kx,ky,kz;
    void input();
    void output();
    float diag();
    };
void pset::input()
    {cout<<"x=";
    cin>>x;
    cout<<"y=";
    cin>>y;
    cout<<"z=";
    cin>>z;
    }
void paral::input()
    {cout<<"\nvvedite A1: \n";
    A1.input();
    cout<<"\nvvedite B1: \n";
    B1.input();
    cout<<"\nvvedite C1: \n";
    C1.input();
    cout<<"\nvvedite D1: \n";
    D1.input();
    pset ab,ac,ad;
    ab.x=B1.x-A1.x;
    ab.y=B1.y-A1.y;
    ab.z=B1.z-A1.z;
    ac.x=C1.x-A1.x;
    ac.y=C1.y-A1.y;
    ac.z=C1.z-A1.z;
    ad.x=D1.x-A1.x;
    ad.y=D1.y-A1.y;
    ad.z=D1.z-A1.z;
    while(SP(ab,ac,ad)!=0)
        {cout<<"\nnevernie dannie";
        cout<<"\nvvedite A1: \n";
        A1.input();
        cout<<"\nvvedite B1: \n";
        B1.input();
        cout<<"\nvvedite C1: \n";
        C1.input();
        cout<<"\nvvedite D1: \n";
        D1.input();
        ab.x=B1.x-A1.x;
        ab.y=B1.y-A1.y;
        ab.z=B1.z-A1.z;
        ac.x=C1.x-A1.x;
        ac.y=C1.y-A1.y;
        ac.z=C1.z-A1.z;
        ad.x=D1.x-A1.x;
        ad.y=D1.y-A1.y;
        ad.z=D1.z-A1.z;
        }
    cout<<"\nvvedite A2: \n";
    A1.input();
    cout<<"\nvvedite B2: \n";
    B1.input();
    cout<<"\nvvedite C2: \n";
    C1.input();
    cout<<"\nvvedite D2: \n";
    D1.input();
    ab.x=B2.x-A2.x;
    ab.y=B2.y-A2.y;
    ab.z=B2.z-A2.z;
    ac.x=C2.x-A2.x;
    ac.y=C2.y-A2.y;
    ac.z=C2.z-A2.z;
    ad.x=D2.x-A2.x;
    ad.y=D2.y-A2.y;
    ad.z=D2.z-A2.z;
        while(SP(ab,ac,ad)!=0)
            {   cout<<"\nvvedite A2: \n";
            A1.input();
            cout<<"\nvvedite B2: \n";
            B1.input();
            cout<<"\nvvedite C2: \n";
            C1.input();
            cout<<"\nvvedite D2: \n";
            D1.input();
            pset ab,ac,ad;
            ab.x=B2.x-A2.x;
            ab.y=B2.y-A2.y;
            ab.z=B2.z-A2.z;
            ac.x=C2.x-A2.x;
            ac.y=C2.y-A2.y;
            ac.z=C2.z-A2.z;
            ad.x=D2.x-A2.x;
            ad.y=D2.y-A2.y;
            ad.z=D2.z-A2.z;
            }
 
    }
void pset::output()
    {
    cout<<"("<<x<<","<<y<<","<<z<<")";
    }
void paral::output()
    {   cout<<"A1=";
    A1.output();
    cout<<"\n";
    cout<<"B1=";
    B1.output();
    cout<<"\n";
    cout<<"C1=";
    C1.output();
    cout<<"\n";
    cout<<"D1=";
    D1.output();
    cout<<"\n";
    cout<<"A2=";
    A2.output();
    cout<<"\n";
    cout<<"B2=";
    B2.output();
    cout<<"\n";
    cout<<"C2=";
    C2.output();
    cout<<"\n";
    cout<<"D2=";
    D2.output();
    cout<<"\n";
    }
float paral::diag()
    {return sqrt((A2.x-C1.x)*(A2.x-C1.x)+(A2.y-C1.y)*(A2.y-C1.y)+(A2.z-C1.z)*(A2.z-C1.z));
    }
 
int _tmain(int argc, _TCHAR* argv[])
{   //vvod
    int n;
    cout<<"vvedite kolichestvo parallelepipedov";
    cin>>n;
    paral* A;
    A=new paral[n];
    for(int i=0;i<n;i++)
        {cout<<"vvedite parallelepiped"<<i+1<<":";
        A[i].input();
        }
    //sortirovka 
    for(int i=0; i<n; ++i)
        for(int j=i+1; j<n; ++j)
            if(A[j].diag()<A[i].diag()) swap(A[i],A[j]); 
    //vivod
    for(int i=0;i<n;i++)
        {cout<<"parallelepiped "<<i+1<<":\n";
        A[i].output();
        cout<<"ego diagonal: "<<A[i].diag()<<"\n";
        }
    return 0;
}
P.S. если возможно то желательно работать не с потоками а с обычными функциями типа fputs fgets
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2014, 22:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с файлом (C++):

Работа с файлом - C++
ofstream file1(&quot;C:\\Users\\User\\Desktop\\jewelry.txt&quot;); Ошибка 6 error C2146: синтаксическая ошибка: отсутствие &quot;;&quot; перед...

Работа с файлом - C++
Поясню: записываю файл из двумерного целочисленного вектора вот такой строкой: fprintf(f2, &quot;%c&quot;, dinom); да да именно со спецификатором...

работа с файлом - C++
объясните, пожалуйста, что тут происходит. особенно строчку, где ofs.write(reinterpret_cast&lt;char const*&gt;(arr), n * sizeof(*arr)); ...

Работа с файлом - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; struct STUDENT // структура STUDENT { string name; ...

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

c++ работа с файлом - C++
Здраствуйте,в си знания - средненькие,мне предоставилась задача - нужно згенерировать файл для ипфильтра торрента,с сайта провайдера мне...

8
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.03.2014, 22:42 #2
Цитата Сообщение от Layzie Посмотреть сообщение
когда подавали вроде бы файловую переменную как параметр на эти функции
Это сделать можно(передаётся ссылка на поток), но дело в том, что у вас в файл будет много лишнего записываться, что потом не будет обработано при чтении. Например:
C++
1
2
3
4
void pset::output(ostream& out)
{
       out<<"("<<x<<","<<y<<","<<z<<")";
}
Эти запятые, при выводе на консоль, никак не мешают, но если читать содержимое файла, так записанное, этим кодом:
C++
1
2
3
4
5
6
7
8
9
void pset::input(istream& in)
{
    cout<<"x=";
    in>>x;
    cout<<"y=";
    in>>y;
    cout<<"z=";
    in>>z;
}
, то эти запятые уже будут ломать поток.
0
Layzie
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 89
02.03.2014, 22:49  [ТС] #3
для считывания мне все равно придется распознавание координат из текста писать потому что по условию данные в файле из которого считывать лежат как раз в формате со скобочками и запятыми, можете рассказать по подробней тогда как сделать ввод вывод с помощью потоков?
0
kiborgdelto
71 / 73 / 27
Регистрация: 23.03.2011
Сообщений: 141
02.03.2014, 22:52 #4
Цитата Сообщение от alsav22 Посмотреть сообщение
то эти запятые уже будут ломать поток.
в данном случае можно попробовать удалить лишние символы из потока

C++
1
2
3
4
5
6
7
8
9
10
void pset::input(istream& in)
{
    in.ignore(1);
    in>>x;
    in.ignore(1);
    in>>y;
    in.ignore(1);
    in>>z;
    in.ignore(1);
}
P.S. зачем выводить бессмысленные сообщения о вводе значения переменной если мы читаем из файла? в результате мы просто при чтении выведем на экран x=y=z=
0
Layzie
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 89
02.03.2014, 22:58  [ТС] #5
не знаю, просто так привык

Добавлено через 2 минуты
Цитата Сообщение от kiborgdelto Посмотреть сообщение
в данном случае можно попробовать удалить лишние символы из потока

C++
1
2
3
4
5
6
7
8
9
10
void pset::input(istream& in)
{
    in.ignore(1);
    in>>x;
    in.ignore(1);
    in>>y;
    in.ignore(1);
    in>>z;
    in.ignore(1);
}
P.S. зачем выводить бессмысленные сообщения о вводе значения переменной если мы читаем из файла? в результате мы просто при чтении выведем на экран x=y=z=
а если я буду просто писать так
C++
1
in>>x
разве я смогу в качестве данных вводить дробные и отрицательные числа, просто раньше я писал разбор строки в ручную с помощью while'a, а про потоки ничего не знаю.
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.03.2014, 23:04 #6
Код я особо не изучал, что там и куда пишется, но, например, если кроме чисел в файле присутствуют другие символы (запятые, скобки), то их, перед чтением чисел, нужно извлекать. Как-то так (в файле: (x,y,z)):

C++
1
2
3
4
5
6
7
8
9
10
void pset::input(istream& in)
{
    in.get();
    in>>x;
    in.get();
    in>>y;
    in.get();
    in>>z;
    in.get();
}
Добавлено через 3 минуты
Цитата Сообщение от Layzie Посмотреть сообщение
а если я буду просто писать так:
C++
1
in>>x;
разве я смогу в качестве данных вводить дробные и отрицательные числа
Если x - это float или double, то почему нет?

Добавлено через 54 секунды
Разделять числа в файле пробельными символами.
0
kiborgdelto
71 / 73 / 27
Регистрация: 23.03.2011
Сообщений: 141
02.03.2014, 23:14 #7
если число записано подряд(т.е. без пробелов) то оно прочитается и неважно какого оно типа целое или дробное, при этом читаться будет до 1-го пробела либо другого символа не относящегося к числу, если этот символ не пробел (или интер, хотя с интером не всё так гладко, в некоторых случаях его нужно считывать отдельно) то его нужно либо удалить из потока либо считать и сразу забыть чтобы непроизошло несоответстиве типов, как это сделать было приведено выше
1
Layzie
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 89
02.03.2014, 23:17  [ТС] #8
спасибо)
0
alsav22
02.03.2014, 23:25     Работа с файлом
  #9

Не по теме:

Цитата Сообщение от Layzie Посмотреть сообщение
спасибо)
Спасибо и вам...

0
02.03.2014, 23:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2014, 23:25
Привет! Вот еще темы с ответами:

Работа с файлом - C++
Ранее уже выкладывал код. Поизменял. Поиск разработал. Но ни фига не работает)). Помогите найти. пожалуйста ошибку. В майне цикл не...

Работа с файлом - C++
Пожалуйста, помогите решить задачку.. Написать на чистом C (без использования C++) консольную программу, которая: - Считывает с диска...

Работа с файлом - C++
char *FileName =&quot;123.txt&quot;; int h=fileno(fopen(FileName,&quot;r+&quot;)); FileName=&quot;\0&quot;; Как мне теперь используя только h работать с файлом?...

Работа с файлом - C++
Мне требуется подключить текстовый файл ко всей программе. Прежде поключал файл только к конкретной процедуре. Благодарю за помощь.


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

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

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