fork download
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. // Struktura Aktor przechowujaca dane aktora - lista aktorów.
  6. struct Aktor {
  7. string nazwisko; // Imię i nazwisko razem - dla ułatwienia.
  8. int lf; // Liczba fanów, którzy przestaną oglądać serial po odejściu aktora.
  9. Aktor *next; // Wskaźnik na następny element listy.
  10. Aktor(string nazwisko, int lf);
  11. };
  12.  
  13. struct Lista{
  14. Aktor *first; // wskaźnik na poczatek listy
  15. Lista();
  16. void insert_aktor(string nazwisko, int lf);
  17. void find_aktor(Aktor *first, int p);
  18. };
  19.  
  20. Aktor::Aktor(string nazwisko, int lf){
  21. next = 0;
  22. this->nazwisko = nazwisko;
  23. this->lf = lf;
  24. }
  25.  
  26. Lista::Lista(){
  27. first = 0;
  28. }
  29.  
  30. void Lista::insert_aktor(string nazwisko, int lf){
  31. Aktor *nowy = new Aktor(nazwisko, lf);
  32. nowy->nazwisko = nazwisko;
  33. nowy->lf = lf;
  34. Aktor *pomoc = first, *pomoc2 = NULL; // Wskazniki pomocnicze posłużą do poruszania się po liscie.
  35.  
  36. while ((pomoc != NULL) && ((pomoc->lf) < (nowy->lf))){ // Dopoki nie wyszlismy za liste i nazwisko na liscie jest przed nowym nazwiskiem, poruszamy sie dalej.
  37. pomoc2 = pomoc; // pomoc2 zawsze wskazuje poprzednika pomoc.
  38. pomoc = pomoc->next;
  39. }
  40. if ((pomoc != NULL) && ((pomoc->lf) == (nowy->lf))){
  41. if (((pomoc->nazwisko).compare(nowy->nazwisko) == 0)){ // Aktor z podanym nazwiskiem juz istnieje.
  42. cout << "NIE" << endl;
  43. delete nowy; // Usuniecie nowego obiektu aktora.
  44. }
  45. else if (((pomoc->nazwisko).compare(nowy->nazwisko) < 0)){
  46. //jak nazwisko wieksze:
  47. pomoc2 = pomoc; // pomoc2 zawsze wskazuje poprzednika pomoc.
  48. pomoc = pomoc->next;
  49. //wstawiamy aktora
  50. if (pomoc2 != NULL){
  51. pomoc2->next = nowy;
  52. nowy->next = pomoc;
  53. cout << "TAK" << endl;
  54.  
  55. }
  56. }
  57. else if (((pomoc->nazwisko).compare(nowy->nazwisko) > 0)){
  58. //jak nazwisko mniejsze:
  59. //cofany i wstawiamy aktora
  60. if (pomoc2 != NULL){
  61. pomoc2->next = nowy;
  62. nowy->next = pomoc;
  63. cout << "TAK" << endl;
  64.  
  65. }
  66. }
  67. }
  68. if ((pomoc != NULL) && ((pomoc->lf) > (nowy->lf))){
  69. //to wstaw przed
  70. if (pomoc2 != NULL){
  71. pomoc2->next = nowy;
  72. nowy->next = pomoc;
  73. cout << "TAK" << endl;
  74.  
  75. }
  76. }
  77. else if ((first == NULL) || ((pomoc == first) && ((pomoc->nazwisko).compare(nowy->nazwisko) == 1))){ // Nowy element bedzie początkiem listy.
  78. nowy->next = first;
  79. first = nowy;
  80. cout << "TAK" << endl;
  81. }
  82. else { // Dodajemy Aktora w srodku lub na koncu listy.
  83. if (pomoc2 != NULL){
  84. pomoc2->next = nowy;
  85. nowy->next = pomoc;
  86. cout << "TAK" << endl;
  87. }
  88. }
  89. }
  90.  
  91. void Lista::find_aktor(Aktor *aktor, int p){
  92. bool tmp = false;
  93. while ((aktor != NULL)){
  94. if (p >= aktor->lf){
  95. tmp = true;
  96. cout << aktor->nazwisko << endl;
  97. //wywal tego aktora
  98.  
  99. }
  100. aktor = aktor->next;
  101. }
  102.  
  103. if (tmp == false){
  104. cout << "NIE" << endl;
  105. }
  106.  
  107. }
  108.  
  109. /*
  110. //*****
  111. bool delete_aktor(Aktor **korzen, string a){
  112. if ((*korzen) == NULL) // lista jest pusta
  113. return false;
  114. Aktor *pomoc = (*korzen), *pomoc2 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
  115. while(pomoc != NULL && (pomoc->nazwisko).compare(a) != 0){ // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
  116. pomoc2 = pomoc;
  117. pomoc = pomoc->next;
  118. }
  119. if (pomoc == NULL) // wyszlismy za liste - nie ma takiego nazwiska na liscie
  120. return false;
  121. else if (pomoc == (*korzen)){ // usuwamy koniec
  122. (*korzen) = (*korzen)->next;
  123. delete pomoc;
  124. }
  125. else { // usuwamy ze srodka lub konca listy
  126. pomoc2->next = pomoc->next;
  127. delete pomoc;
  128. }
  129. return true;
  130. }*/
  131.  
  132.  
  133. int main() {
  134.  
  135. int n; // Liczba operacji do wykonania.
  136. int op; // Rodzaj operacji do wykonania.
  137. int p; // Maksymalna liczba fanów, na której stratę można sobie pozwolić.
  138. string nazwisko;
  139. int lf;
  140.  
  141. cin >> n;
  142.  
  143. Lista *lista = new Lista;
  144.  
  145. for (int i = 0; i < n; i++){
  146. cin >> op; // Wczytanie rodzaju operacji.
  147. if (op == 1){
  148.  
  149. cin.ignore();
  150. getline(cin, nazwisko);
  151. cin >> lf;
  152.  
  153. lista->insert_aktor(nazwisko, lf);
  154. }
  155. if (op == 2){ // Wyszukanie aktora do roli.
  156. cin.ignore();
  157. cin >> p; // Podaj liczbę fanów, na której stratę możesz sobie pozwolić.
  158. lista->find_aktor(lista->first, p);
  159. }
  160. }
  161.  
  162. system("pause");
  163. return 0;
  164. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:110:2: warning: "/*" within comment [-Wcomment]
 //*****
 ^
prog.cpp: In function ‘int main()’:
prog.cpp:162:16: error: ‘system’ was not declared in this scope
  system("pause");
                ^
stdout
Standard output is empty