Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // WGL to ma być
- /*
- Dane wyjściowe:
- Krzysztof
- Antoni
- Waclaw
- Anna
- Helena
- Dawid
- */
- // a ja mam więcej wyników
- /*
- Drzewo genealogiczne
- W pliku wejściowym ‘drzewo_genealogiczne.txt’ zadane są relacje macierzyństwa (m) i ojcostwa (o) pomiędzy członkami pewnej dużej rodziny.
- Relacje zapisano w postaci:
- (Ewa, m, Maciej)
- (Adam, o, Maciej)
- Utwórz drzewo genealogiczne (o strukturze niejednorodnej) wiedząc, że nikt z członków rodziny nie ma więcej niż 4 potomków.
- Znajdź wszystkie prawnuki protoplastów rodu. Zauważ, że w pierwszym kroku trzeba odkryć protoplastów rodu!
- */
- // zrobiłem to tak, że jak ktoś jest rodzicem ma potomka
- // więc na końcu szukam osób które nie mają potomka
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <fstream>
- #include <string>
- using namespace std;
- class Person
- {
- string ID;
- bool ISparent;
- public:
- string getID(){
- return ID;
- }
- bool getIsParent(){
- return ISparent;
- }
- Person(string ID, bool IS);
- Person(){};
- void set(string ID, bool IS){
- this->ID = ID;
- ISparent = IS;
- }
- };
- int main(){
- vector <Person * > Family;
- string name; // parent
- string relation;
- string rel_name;// children
- char chars[] = "(),";
- fstream tree("drzewo_genealogiczne.txt", ios::in);
- for (int j = 0; tree.good(); j++){
- Person * person1 = new Person();
- Person * person2 = new Person();
- tree >> name;
- for (int i = 0; i < strlen(chars); i++)
- name.erase(std::remove(name.begin(), name.end(), chars[i]), name.end());
- tree >> relation;
- for (int i = 0; i < strlen(chars); i++)
- relation.erase(std::remove(relation.begin(), relation.end(), chars[i]), relation.end());
- tree >> rel_name;
- for (int i = 0; i < strlen(chars); i++)
- rel_name.erase(std::remove(rel_name.begin(), rel_name.end(), chars[i]), rel_name.end());
- // cout << name << endl << relation << endl << rel_name << endl;
- person1->set(name, true); // have children
- Family.push_back(person1);
- bool findrelation = false;
- for (int f = 0; f < Family.size(); f++)
- {
- if (Family[f]->getID() == rel_name)
- findrelation = true;
- }
- person2->set(rel_name, findrelation);
- Family.push_back(person2);
- }
- for (int i = 0; i < Family.size() - 1; i++)
- {
- if (Family[i]->getIsParent() == false)
- {
- cout << Family[i]->getID() << endl;
- }
- }
- }
- /*
- "drzewo_genealogiczne.txt"
- (Maciej, o, Jan)
- (Maciej, o, Filip)
- (Elzbieta, m, Filip)
- (Elzbieta, m, Jan)
- (Elzbieta, m, Barbara)
- (Maciej, o, Barbara)
- (Katarzyna, m, Janina)
- (Katarzyna, m, Beata)
- (Tomasz, o, Janina)
- (Tomasz, o, Beata)
- (Ewa, m, Maciej)
- (Adam, o, Maciej)
- (Filip, o, Krzysztof)
- (Daria, m, Krzysztof)
- (Filip, o, Antoni)
- (Daria, m, Antoni)
- (Barbara, m, Waclaw)
- (Piotr, o, Waclaw)
- (Beata, m, Anna)
- (Beata, m Helena)
- (Beata, m, Dawid)
- (Jerzy, o, Dawid)
- (Jerzy, o, Helena)
- (Jerzy, o, Anna)
- (Waclaw, o, Patrycja)
- (Lidia, m, Patrycja)
- (Ewa, m, Katarzyna)
- (Adam, o, Katarzyna)
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement