mam pytanie czy ktos moze zerknac na to zadanie i popraawic je tak by dzialalo
tersc zad
Dla losowo wygenerowanych 20 punktow w przestrzeni trojwymiarowej obliczyc objetosc szeiscianow jakie tworza te punkty z poczatkiem ukladu wspolrzednych wartosc objetosci umiescic w oddzielnej struktore danych wyznaczyc srednia geometryczna objetosci szeiscianow usunac te punkty dla ktorych objetosc tworzonego szeiscanu jest mniejsza od sredniej geometrycznej uzyc algorytmow ogolnych i zasobnikow dostepnych w STL
program
#include<iostream>
#include<list>
#include<iterator>
#include<vector>
#include<functional>
#include<algorithm>
#include<numeric>
using namespace std;
struct punkt{
int x,z,y;
punkt(int x_,int y_, int z_): x(x_),y(y_),z(z_){}
friend ostream& operator << (ostream& out, const punkt& a){
return out<<a.x<<" "<<a.y<<" "<<a.z<<endl;
}
};
struct gen{
int min,max;
gen(int a, int b):min(a),max(b){}
int operator () (){
return rand ()% (max - min) + min; }
};
struct gen_punkt{
gen g;
gen_punkt(const gen g_):g(g_){}
punkt operator () (){
return punkt (g(),g(),g());
}
};
struct objetosc{
double operator () (const punkt& q){
return q.z*q.y*q.x;
}
};
struct sprawdzanie: public unary_function<punkt, double>{
double v;
sprawdzanie(double v_):v(v_){}
punkt operator () (punkt& r)const{
double t = r.x*r.z*r.y;
if(t>v){
return r;
} } };
int main(){
srand(time(0));
list<punkt> l;
generate_n(back_inserter(l),20,gen_punkt(gen(1,20)));
ostream_iterator<punkt> wyjscie (cout,"\n");
ostream_iterator<double> wyjscie2 (cout,"\n");
copy(l.begin(),l.end(),wyjscie);
cout<<"??????????????????"<<endl;
vector<double> v(l.size());
transform(l.begin(),l.end(),v.begin(),objetosc());
copy(v.begin(),v.end(),wyjscie2);
cout<<">>>>>>>>>>>>>"<<endl;
double temp;
temp = accumulate(v.begin(),v.end(),0.0,plus<double>());
double srednia = temp/v.size();
cout<<srednia<<endl;
cout<<">>>>>>>>>>>>>"<<endl;
list<punkt>p;
remove_copy_if(l.begin(),l.end(),back_inserter(p),sprawdzanie(srednia));
system("PAUSE");
return 0; }
|