#include #include #include using namespace std; struct element { int atno; string sym, name; double atwt; element(int an, string sy, string nm, double aw) { atno = an; sym = sy; name = nm; aw = atwt; } void print() { cout << "(" << atno << ", " << atno << ", '" << sym << "', '" << name << "', " << atwt << ")"; } }; element makeel(int an, string sy, string nm, double aw) { element e; e.atno = an; e.sym = sy; e.name = nm; e.atwt = aw; return e; } int read_table(element pt[]) { ifstream inf; inf.open("/home/www/class/een118/a3010b.txt"); if (inf.fail()) { cerr << "Can't open file\n"; exit(1); } int atno = 0; while (true) { string sym, name; double atwt; inf >> sym >> name >> atwt; if (inf.fail()) break; atno += 1; element e(atno, sym, name, atwt); pt[atno] = e; } pt[0] = makeel(0, "XXX", "XXXXXXXXX", 0.0); inf.close(); return atno; } element findel(string sy, element pt[], int n) { for (int i = 1; i <= n; i += 1) if (pt[i].sym == sy) return pt[i]; return pt[0]; } int main() // this function has grown far too big { string sym, name; double atwt; element pt[120]; int atno = read_table(pt); const int entries = atno; for (atno = 1; atno <= entries; atno += 1) { pt[atno].print(); cout << "\n"; } double molwt = 0; int num; while (true) { cout << "> "; cin >> sym; if (cin.fail()) break; element e = findel(sym, pt, entries); if (e.atno == 0) { cout << "'" << sym << "' not found\n"; break; } cout << "number? "; cin >> num; e.print(); cout << " * " << num << "\n"; molwt += e.atwt * num; } cout << "Molecular weight " << molwt << "\n"; }