MeehoweCK

Untitled

Aug 23rd, 2018
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. struct rekord
  2. {
  3.     double liczba;
  4.     string napis;
  5.     char znak;
  6.     rekord* next;
  7. };
  8.  
  9. double funkcja(rekord* &lista, double l, string n, char z, double& srednia)
  10. {
  11.     rekord* nowy = new rekord;          // alokacja pamięci na nowy rekord
  12.  
  13.     // przypisywanie wartości z funkcji do nowego rekordu:
  14.     nowy->liczba = l;
  15.     nowy->napis = n;
  16.     nowy->znak = z;
  17.     nowy->next = nullptr;
  18.  
  19.     srednia = n.size();         // pobieranie do zmiennej średnia długości napisu dodawanego elementu
  20.     int licznik = 1;            // zainicjowanie zliczania liczby elementów w liście
  21.  
  22.     // jeżeli lista jest dotychczas pusta:
  23.     if(lista == nullptr)
  24.         lista = nowy;
  25.  
  26.     // jeżeli lista nie jest pusta (dopisywanie elementu na koniec)
  27.     else
  28.     {
  29.         rekord* tmp = lista;                    // tworzenie zmiennej tymczasowej (aby nie nadpisywać listy)
  30.         srednia += tmp->napis.size();           // dodawanie długości napisu z głowy listy
  31.         ++licznik;
  32.  
  33.         // pętla szukająca końca listy
  34.         while(tmp->next)                        // dopóki istnieje następny element...
  35.         {
  36.             tmp = tmp->next;                    // ... przejdź do niego
  37.             srednia += tmp->napis.size();
  38.             ++licznik;
  39.         }
  40.         tmp->next = nowy;                       // dopisywanie na koniec listy nowo utworzonego elementu
  41.     }
  42.  
  43.     srednia = srednia / licznik;                // zliczenie sredniej (suma długości wszystkich napisów jest podzielona przez liczbę elementów)
  44.  
  45.     // trzecia część funkcji (usuwanie elementu) - wykonuje się tylko gdy liczba elementów jest co najmniej równa 2
  46.     if(licznik >= 2)
  47.     {
  48.         bool pf = lista->liczba > lista->next->liczba;      // zmienna przechowująca informację czy pierwszy element ma wyższą liczbę niż drugi element
  49.  
  50.         double zwracana;                        // utworzenie zmiennej, która ma przechowywać liczbę większą z dwóch pierwszych elementów (będzie ona kasowana, więc musimy ją gdzieś przechować)
  51.  
  52.         if(pf)                                  // jeżeli liczba w pierwszym elemencie jest większa...
  53.         {
  54.             zwracana = lista->liczba;
  55.             lista = lista->next;                // nadpisanie na miejscu pierwszego elementu jego syna (w ten sposób pozbywamy się pierwszego elementu)
  56.         }
  57.  
  58.         // analogicznie jak wyżej:
  59.         else
  60.         {
  61.             zwracana = lista->next->liczba;
  62.             lista->next = lista->next->next;
  63.         }
  64.         return zwracana;
  65.     }
  66.     return 0;                                   // jeżeli lista posiada mniej niż dwa elementy, zwracamy 0
  67. }
Advertisement
Add Comment
Please, Sign In to add comment