matematykaszkolna.pl
program Benny: W pliku BazaOsób.txt zawarte są dane w sposób następujący: imię nazwisko płeć wiek stan cywilny Napisz program, który zapisze do pliku Emeryci.txt dane tylko tych osób z pliku BazaOsób.txt, które mają co najmniej 67 lat. Dane w pliku Emeryci.txt mają być zapisane w ten sam sposób jak w pliku BazaOsób.txt. Na razie mam pomysł, aby w pliku BazaOsób.txt ustawić pozycję na 4 linię, sprawdzić wiek i przeskakiwać cały czas o 5 pozycji. Czy to jest ok? Jak mam zapamiętać te 5 linii, aby je wpisać do pliku?
8 sty 13:49
Benny: #include<iostream> #include<string.h> #include<fstream> using namespace std; main() { ifstream f1; ofstream f2; f1.open("BazaOsób.txt"); f2.open("Emeryci.txt"); char imie[30],nazwisko[30],plec[10],stancywilny[10]; int wiek; while(!f1.eof()) { f1>>imie>>nazwisko>>plec>>wiek>>stancywilny; if(wiek>=67) f2<<imie<<endl<<nazwisko<<endl<<plec<<endl<<wiek<<endl<<stancywilny<<endl; } f1.close(); f2.close(); system("pause"); } jest ok?
8 sty 14:14
Dziadek Mróz: Panie kochanieńki, C++ to język obiektowy, więc darujmy sobie tablice. class Osoba { private: std::string Imie; ... public: Osoba() {} Osoba(std::string imie, ...); ~Osoba() {} friend std::ifstream &operator >>(std::ifstream &ifs, Osoba &o) { ifs >> o.Imie >> ... return ifs; } friend std::ofstream &operator <<(std::ofstream &ofs, const Osoba &o) { ofs << o.Imie << std::endl << ... return ofs; } friend std::ostream &operator <<(... }; int main() { std::vector<Osoba *> osoby; std::ifstream plik_we("bazaOsob.txt"); if (plik_we) { size_t ile = 0; Osoba *temp = new Osoba(); while (plik_we >> (*temp)) { osoby.push_back(temp); std::cout << osoby[ile]; ++ile; } } else { perror("bazaOsob.txt"); } return 0; } Mogłem walnąć byka przy używaniu *temp ale nie mam pod ręką kompilatora
8 sty 18:12
Dziadek Mróz: Później używasz pętli po iteratorze std::vector<Osoba>::iterator i sprawdzasz wiek, jak pasi to używając naszej definicji std::ofstream wysłać dziada do pliku
8 sty 18:14
Dziadek Mróz: for (std::vector<Osoba *>::iterator it = osoby.begin(); it != osoby.end(); ++it) { if ((*it).Wiek >= 67) { plik_wy << (*it); } }
8 sty 18:21
Benny: Trochę ciężko mi się to czyta
8 sty 18:36
Dziadek Mróz: Zacznij od podstaw, skorzystaj z tego: http://www.cs.put.poznan.pl/jkniat/MatDydakt.html Pod Programowaniem obiektowym C++ masz Z1−Z6 Podstawy C: https://dl.dropboxusercontent.com/u/96736379/C.zip
8 sty 18:51
Benny: Dzięki, ale to chyba dopiero po jutrzejszym kolokwium, bo dziś raczej nie ogarnę.
8 sty 19:06
Dziadek Mróz: jak zrobisz zestawy z C w C++ to mozesz sie brac za obiektowe C++
8 sty 19:08
Benny: ok
8 sty 19:19