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

Одна программа записывает данные в файл, а другая их считывает и выводит на экран - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шаблонный класс очереди. Выводит сначала все индексы, потом все элементы http://www.cyberforum.ru/cpp-beginners/thread1065989.html
#include <iostream> #include <conio.h> using namespace std; const int SIZE=100; template<class X> class queue{ X q; int sloc, rloc;
C++ Строка не передаётся в функцию #include <iostream> #include <stdio.h> #include <string.h> using namespace std; str_while(char* str) { int i=0; while(str) http://www.cyberforum.ru/cpp-beginners/thread1065984.html
Магия со статическими массивами C++
Предисловие: на форуме подняли топик http://www.cyberforum.ru/cpp-beginners/thread1065365.html , в голове сразу мелькнула мысль написать шаблонную функцию, которой не надо было-бы передавать...
C++ Задача с использованием структуры и указателя
Структура содержит поля: имя, фамилия , возраст. Надо заполнить с клавиатуры и передать через указатель в функцию , в к-ой вывести на экран Со структурой мне все понятно, но как к ней сделать...
C++ Непонятен алгоритм: как записывать значения в бинарном файле в обратном порядке? http://www.cyberforum.ru/cpp-beginners/thread1065967.html
Нужно написать программу, которая будет, записывать значения в бинарном файле, в обратном порядке. Кажется легко, НО!!! Нельзя использовать массивы, нужно как-то через fseek И никакой копии...
C++ Определить номер столбца массива, в котором расположен минимальный элемент четвертой строки массива Доброго времени суток, помогите пожалуйста решить задачи по C++ 3)Дан двумерный массив. Определить: a) номер столбца, в котором расположен минимальный элемент четвертой строки массива.Если... подробнее

Показать сообщение отдельно
Layzie
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 89
08.01.2014, 20:24  [ТС]
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
class pset 
{public:
float x,y,z;
void input()
{cout<<"write a: ";
cin>>x;
cout<<"write b: ";
cin>>y;
cout<<"write c: ";
cin>>z;
};
void output()
{cout<<"("<<x<<","<<y<<","<<z<<") \n";
};
};
class object
{public:
virtual void input()=0;
virtual void output()=0;
virtual float S()=0;
};
class uravn: public object
{public:
pset K[2];
float P;
void input()
{
for(int i=0;i<2;i++)
{cout<<"koefficienty "<<i+1<<" uravneniya \n";
K[i].input();
}
};
void output()
{for(int i=0;i<2;i++)
{cout<<"koefficienty "<<i+1<<" uravneniya \n";
K[i].output();
}
}
float S()
{if(K[1].x*K[2].y!=K[1].y*K[2].x) return ((K[2].z*K[1].y-K[1].z*K[2].y)/(K[1].x*K[2].y-K[2].x*K[1].y))+((K[1].x*K[2].z-K[1].z*K[2].x)/(K[1].y*K[2].x-K[1].x*K[2].y));   //x+y
else return 666;
}
};
class triangle: public object
{public:
pset K[4];
float P;
void input()
{for(int i=0;i<4;i++)
{cout<<"vvedite koordinaty "<<i+1<<" vershiny tetraedra \n";
K[i].input();
}
}
 
void output()
{for(int i=0;i<4;i++)
{cout<<"koordinaty "<<i+1<<" vershiny tetraedra \n";
K[i].output();
}
}
float S()
{
pset AB;
pset AC;
pset AD;
AB.x=K[2].x-K[1].x;
AB.y=K[2].y-K[1].y;
AB.z=K[2].z-K[1].z;  
AC.x=K[3].x-K[1].x;
AC.y=K[3].y-K[1].y;
AC.z=K[3].z-K[1].z;
AD.x=K[4].x-K[1].x;
AD.y=K[4].y-K[1].y;
AD.z=K[4].z-K[1].z; 
return (AC.x*(AD.y*AB.z-AD.z*AB.y)+AC.y*(AD.z*AB.x-AD.x*AB.z)+AC.z*(AD.x*AB.y-AD.y*AB.x))/6; //должен возвращать объем тетраедра
}
};

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

Добавлено через 5 минут
полные программы получаются такие
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
#include "stdafx.h"
#include "math.h"
#include <iostream>
#include <stdio.h>
using namespace std;
 
class pset 
{public:
float x,y,z;
void input()
{cout<<"write a: ";
cin>>x;
cout<<"write b: ";
cin>>y;
cout<<"write c: ";
cin>>z;
};
void output()
{cout<<"("<<x<<","<<y<<","<<z<<") \n";
};
};
class object
{public:
virtual void input()=0;
virtual void output()=0;
virtual float S()=0;
};
class uravn: public object
{public:
pset K[2];
float P;
void input()
{
for(int i=0;i<2;i++)
{cout<<"koefficienty "<<i+1<<" uravneniya \n";
K[i].input();
}
};
void output()
{for(int i=0;i<2;i++)
{cout<<"koefficienty "<<i+1<<" uravneniya \n";
K[i].output();
}
}
float S()
{if(K[1].x*K[2].y!=K[1].y*K[2].x) return ((K[2].z*K[1].y-K[1].z*K[2].y)/(K[1].x*K[2].y-K[2].x*K[1].y))+((K[1].x*K[2].z-K[1].z*K[2].x)/(K[1].y*K[2].x-K[1].x*K[2].y));   //x+y
else return 666;
}
};
class triangle: public object
{public:
pset K[4];
float P;
void input()
{for(int i=0;i<4;i++)
{cout<<"vvedite koordinaty "<<i+1<<" vershiny tetraedra \n";
K[i].input();
}
}
 
void output()
{for(int i=0;i<4;i++)
{cout<<"koordinaty "<<i+1<<" vershiny tetraedra \n";
K[i].output();
}
}
float S()
{
pset AB;
pset AC;
pset AD;
AB.x=K[2].x-K[1].x;
AB.y=K[2].y-K[1].y;
AB.z=K[2].z-K[1].z;  
AC.x=K[3].x-K[1].x;
AC.y=K[3].y-K[1].y;
AC.z=K[3].z-K[1].z;
AD.x=K[4].x-K[1].x;
AD.y=K[4].y-K[1].y;
AD.z=K[4].z-K[1].z; 
return (AC.x*(AD.y*AB.z-AD.z*AB.y)+AC.y*(AD.z*AB.x-AD.x*AB.z)+AC.z*(AD.x*AB.y-AD.y*AB.x))/6; //должен возвращать объем тетраедра
}
};
int main(int argc,char* argv[])
{FILE* F;
object** A;
if(argc==2)
    {
    F=fopen(argv[1],"rb");
    int N;
    char p;
    fread(&N,sizeof(int),1,F);
    cout<<N;
    A=new object*[N];
    for(int i=0;i<N;i++)
        {fread(&p,sizeof(char),1,F);
        if(p=='t') {A[i]=new triangle; cout<<p;};
        if(p=='u') {A[i]=new uravn; cout<<p;};
        if(p=='t') {fread(A[i],sizeof(triangle),1,F);};
        if(p=='u') {fread(A[i],sizeof(uravn),1,F);};
        };
    for(int i=0;i<N;i++)
        {cout<<"objekt "<<i+1<<":\n";
    cout<<A[i]->S();
    }
//sortirovka 
/*for(int i=0; i<N; ++i)
    for(int j=i+1; j<N; ++j)
        if(A[j]->S()<A[i]->S()) swap(A[i],A[j]); 
cout<<"\n otsortirovannie massivi: \n";
*/
/*for(int i=0;i<N;i++)
{cout<<"\n objekt "<<i+1<<":\n";
A[i]->output();
if((A[i]->S())==666) cout<<"\n net kornei";
else cout<<"\n S= "<<A[i]->S();
}                                  //vivod*/
    }
return 0;
};
это та что вылетает, и должна выводить на экран данные
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
// input.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "math.h"
#include <iostream>
using namespace std;
 
class pset 
{public:
float x,y,z;
void input()
{cout<<"write a: ";
cin>>x;
cout<<"write b: ";
cin>>y;
cout<<"write c: ";
cin>>z;
};
void output()
{cout<<"("<<x<<","<<y<<","<<z<<") \n";
};
};
class object
{public:
virtual void input()=0;
virtual void output()=0;
virtual float S()=0;
};
class uravn: public object
{public:
pset K[2];
float P;
void input()
{
for(int i=0;i<2;i++)
{cout<<"koefficienty "<<i+1<<" uravneniya \n";
K[i].input();
}
};
void output()
{for(int i=0;i<2;i++)
{cout<<"koefficienty "<<i+1<<" uravneniya \n";
K[i].output();
}
}
float S()
{if(K[1].x*K[2].y!=K[1].y*K[2].x) return ((K[2].z*K[1].y-K[1].z*K[2].y)/(K[1].x*K[2].y-K[2].x*K[1].y))+((K[1].x*K[2].z-K[1].z*K[2].x)/(K[1].y*K[2].x-K[1].x*K[2].y));   //x+y
else return 666;
}
};
class triangle: public object
{public:
pset K[4];
float P;
void input()
{for(int i=0;i<4;i++)
{cout<<"vvedite koordinaty "<<i+1<<" vershiny tetraedra \n";
K[i].input();
}
}
 
void output()
{for(int i=0;i<4;i++)
{cout<<"koordinaty "<<i+1<<" vershiny tetraedra \n";
K[i].output();
}
}
float S()
{
pset AB;
pset AC;
pset AD;
AB.x=K[2].x-K[1].x;
AB.y=K[2].y-K[1].y;
AB.z=K[2].z-K[1].z;  
AC.x=K[3].x-K[1].x;
AC.y=K[3].y-K[1].y;
AC.z=K[3].z-K[1].z;
AD.x=K[4].x-K[1].x;
AD.y=K[4].y-K[1].y;
AD.z=K[4].z-K[1].z; 
return (AC.x*(AD.y*AB.z-AD.z*AB.y)+AC.y*(AD.z*AB.x-AD.x*AB.z)+AC.z*(AD.x*AB.y-AD.y*AB.x))/6; //должен возвращать объем тетраедра
}
};
int main(int argc,char* argv[])
{FILE* F;
F=fopen(argv[1],"wb+");
char p;
cout<<"vvedite kol-vo elementov";
int N;
cin>>N;
object** A;
A= new object* [N];
fwrite(&N,sizeof(int),1,F);
for(int i=0;i<N;i++)
    {cout<<"vvedite tip objekta t-triangle, u-uravneniya \n";
    cin>>p;
    if(p=='t') *(A+i)=new triangle;
    if(p=='u') *(A+i)=new uravn;
    cout<<"vvedite objekt "<<i+1<<"\n";
    A[i]->input();
    if(p=='t') {fwrite(&p,sizeof(char),1,F); fwrite(A[i],sizeof(triangle),1,F);};
    if(p=='u') {fwrite(&p,sizeof(char),1,F); fwrite(A[i],sizeof(uravn),1,F);};
    };
fclose(F);
return 0;
}
а это та что работает вроде бы нормально и заполняет файл для другой
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru