C++ Bc. 19 cpp: Porovnání verzí
Bez shrnutí editace |
m odstranen redundatni priklad vystupu |
||
(Nejsou zobrazeny 3 mezilehlé verze od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
#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); | |||
} | |||
} | |||
} | |||
[ [[C plus plus Bc. 19 | Zpět]] ] | [ [[C plus plus Bc. 19 | Zpět]] ] | ||
[[Kategorie:Programování]] | |||
[[Kategorie:C++]] |
Aktuální verze z 20. 10. 2006, 21:53
#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 ]