C++ Bc. 19 cpp
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iomanip>
struct Bod
{
int cislo;
int kod;
double x, y, z;
};
void cti_xy(std::istream&, std::vector<Bod>& z);
int main()
{
using namespace std;
istringstream
data("# vstupni soubor obsahuje seznam souradnic \n"
"# * komentare zacinaji znakem '#' \n"
"# * na jednom radku muze byt cislo bodu a souradnice \n"
"# * cb x y z \n"
"# * cb x y \n"
"# * cb z \n"
" 101 234.32 664.22 333.32 # xyz \n"
" 257 743.23 734.83 # xy \n"
" 142 456.26 # z \n"
" 232 643.53 324.63 263.73 \n"
" 183 232.43 392,12 \n");
vector<Bod> seznam;
cti_xy(data, seznam);
int ix = 0;
int iz = 0;
double sx = 0;
double sy = 0;
double sz = 0;
cout.precision(2);
cout.setf(ios_base::fixed, ios_base::floatfield);
for (vector<Bod>::iterator i=seznam.begin(), e=seznam.end(); i!=e; ++i)
{
Bod b = *i;
cout << setw(6) << b.cislo;
if (b.kod == 2 || b.kod == 3)
{
cout << " " << setw(8) << b.x << " " << setw(8) << b.y;
sx += b.x;
sy += b.y;
ix++;
}
if (b.kod == 1)
cout << setw(18) << " ";
if (b.kod == 3 || b.kod == 1)
{
cout << " " << setw(8) << b.z;
sz += b.z;
iz++;
}
cout << endl;
}
if (ix) { sx /= ix; sy /= ix; }
if (iz) { sz /= iz; }
cout << "\nprumer:"
<< setw(8) << sx << " " << setw(8) << sy << " "
<< setw(8) << sz << "\n";
}
void cti_xy(std::istream& inp, std::vector<Bod>& seznam)
{
using namespace std;
int cb;
string radek;
while(getline(inp, radek))
{
for (int i=0; i<radek.size(); i++)
if (radek[i] == '#')
{
// pokud existuje, vymazu komentar
radek.erase(i, radek.size());
break;
}
// vytvorim vstupni pametovy proud pro dany radek
istringstream irad(radek);
int cb;
double a, b, c;
int pocet = 0;
irad >> cb;
if (irad >> a) pocet++;
if (irad >> b) pocet++;
if (irad >> c) pocet++;
if (pocet)
{
Bod tmp;
tmp.cislo = cb;
tmp.kod = pocet;
if (pocet == 1)
{
tmp.z = a;
}
else if (pocet == 2)
{
tmp.x = a; tmp.y = b;
}
else if (pocet == 3)
{
tmp.x = a; tmp.y = b; tmp.z = c;
}
seznam.push_back(tmp);
}
}
}
[ Zpět ]