Politechnika Wrocławska, Wydział Elektroniki, Kierunek: Informatyka

MATERIAŁY POMOCNICZE
Zadania, które były realizowane podczas 30-sto godzinnego laboratorium w roku 2006
( prow. dr Marek Piasecki

Treści zadań:

Lab 1  ,  Lab 2 ,   Lab 3Lab 4Lab 5Lab 6Lab 7Lab 8Lab 9Lab 10Lab 11Lab 12Lab 13


 Podstawowe informacje:

Przykładowe zadania  Opis poznawanych zagadnień
Laboratorium 1 Środowisko programowania C++ Builder,
(edycja, kompilacja, uruchomienie programu)
Pierwsze programy z użyciem zmiennych prostych.
Komunikacja z użytkownikiem - konsolowe operacje wejścia/wyjścia
wykorzystujące biblioteki <stdio.h> lub <iostream>
Laboratorium 2 Instrukcje warunkowe if, if else, zagnieżdżanie warunków,
instrukcja wyboru switch.
Funkcje bezparametrowe, zmienne lokalne,
przekazywanie parametrów przez zmienne globalne
Laboratorium 3 Instrukcje pętlowe while, do while, for
Proste algorytmy iteracyjne: zliczanie, sumowanie, wybieranie.
Laboratorium 4 Tablice - dostęp do elementów za pomocą indeksu,
standardowe algorytmy przetwarzania tablic za pomocą pętli
Laboratorium 5 Wskaźniki, arytmetyka wskaźników,
Dostęp do elementów tablicy za pomocą wskaźników
Laboratorium 6 Definiowanie własnych funkcji z parametrami,
Przekazywanie parametrów przez wartość, referencję i adres
Budowa złożonych programów składających się z wielu funkcji.
Menu sterujące przebiegiem programu.
Laboratorium 7 Reprezentacja łańcuchów znaków,
Metody przetwarzania tekstów.
Standardowe funkcje z biblioteki string.h
Laboratorium 8 Dynamiczna alokacja pamięci na tablice jednowymiarowe i łańcuchy
Laboratorium 9 Typ strukturalny - "Baza danych" zaimplementowana jako tablica struktur
Laboratorium 10 cd. "Bazy danych" oraz zaawansowane funkcje komunikacji z użytkownikiem:
funkcja edit / menu podświetlane / przeglądanie pełnoekranowe
Laboratorium 11 Plikowe operacje wejścia/ wyjścia
z wykorzystaniem standardowej biblioteki <stdio.h>.
Przetwarzanie ciągu elementów zapisywanych w pliku.
Archiwizacja stanu "Bazy danych" na dysku
Laboratorium 12 Dynamiczne struktury danych - dynamiczna tablica dwuwymiarowa 
Laboratorium 13 Dynamiczne-rekurencyjne struktury danych: stos / kolejka
Laboratorium 14 SPRAWDZIAN ZALICZENIOWY
Laboratorium 15 Zaliczenia i poprawki

 


 

 

PRZYKŁADOWE ZADANIA DO REALIZACJI

 

LABORATORIUM  NR  1.
  1. Napisz program wyświetlający na ekranie swoją "Wizytówkę"
    tzn. nazwisko, imię, adres, telefon, e-mail, itp.

  2. Napisz program wczytujący kilka liczb z klawiatury a następnie obliczający
     i wyświetlający na ekranie ich sumę, iloczyn, itp. (np. potęgę, pierwiastek, eksponentę)

  3. Napisz program dialogowy wczytujący z klawiatury podstawowe dane dwóch pracowników
    a następnie wyświetlający je "kolumnami" w ten sposób 
    aby zawartość wytłuszczonych pól "nazwisko", "imię", "data" 
    zajmowała zawsze tyle samo miejsca niezależnie od wartości czy ilości liter: 
    np. 
      Nazwisko: Kowalski         Imię: Jan         Urodzony: 21. 3.1980   Staż:   3 lata  Stawka: 15.50 zł/godz 
      Nazwisko: Sienkiewicz    Imię: Tomasz   Urodzony: 8.11.1985    Staż: 15 lat   Stawka: 123.00 zł/godz 
    Dobierz odpowiednie typy zmiennych do reprezentowania w/w danych. 

  4. Napisz wyrażenia matematyczne wyznaczające:
    - pole okręgu i promień okręgu o promieniu r
    - kartezjańską odległość pomiędzy dwoma punktami o współrzędnych (x1,y1 ) oraz (x2,y2


LABORATORIUM  NR  2.
  1. Napisz program klasyfikujący wzrost osób tzn. pytający się o wzrost w cm
     a następnie wyświetlający jeden z podanych tekstów
     w zależności od przynależności do przedziału wartości: niski < 150cm < średni < 180cm < wysoki

  2. Napisz program wprowadzający trzy liczby z klawiatury a następnie wyświetlający na ekranie:
    - największą z tych liczb 
    - medianę 
    - sekwencję tych trzech liczb uporządkowaną rosnąco lub malejąco 
    - informację czy przynajmniej dwie z tych liczb mają identyczną wartość. 
    Uwzględnij przypadki gdy wszystkie liczby są różne oraz że mogą wystąpić powtórzenia. 

  3. Program wczytujący z klawiatury długości trzech odcinków
     i sprawdzający czy da się z nich zbudować trójkąt.

  4.   Napisz program wczytujący z klawiatury dwie daty kalendarzowe
     (zapisywane za pomocą trzech liczb całkowitych: dzień, miesiąc, rok)
     i sprawdzający czy pierwsza data jest wcześniejsza od drugiej

  5. Napisz program klasyfikujący klawisze naciskane na klawiaturze
    i wyświetlający jeden z napisów:
    - mała litera 
    - duża litera 
    - cyfra 
    - klawisz ENTER 
    - klawisz ESC 
    - strzałka w lewo 
    - strzałka w prawo 
    - klawisz funkcyjny F1 
    - inny klawisz 
    do pobierania kodu klawisza wykorzystaj funkcję getch() z biblioteki <conio.h>

 

LABORATORIUM  NR  3.
  1. Napisz program rysujący na ekranie poziomą kreskę (ze znaków minus)
     o długości zadawanej z klawiatury. 

  2. Napisz program wczytujący znaki z klawiatury aż do momentu naciśnięcia klawisza 'k'.
    W trakcie wczytywania należy zliczać ilość podanych znaków. 
    Na zakończenie należy wyświetlić informacje:
    - ile było podanych znaków (przed naciśnięciem 'k') 
    - ile z tych znaków było dużymi literami. 

     
  3. Napisz program wczytujący liczby z klawiatury,
    z jednoczesnym zadawaniem pytania "Czy koniec wprowadzania T/N ?"
    Na zakończenie program powinien wyświetlić wartość: 
    średnią, maksymalną, minimalną z podanych liczb. 

     
  4. Napisz program wyświetlający na ekranie kolejne 100 liczb parzystych 

  5. Napisz program wyświetlający na ekranie kolejne liczby całkowite typu int,
    które są podzielne bez reszty przez n (gdzie n jest zadawane z klawiatury)

  6. Napisz program wyświetlający na ekranie sekwencje kolejnych liczb całkowitych
    najpierw od 1 do 10, a następnie od 10 do 1. Do spowolnienia operacji wydruku
    wykorzystaj dodatkową pętlę od 1 do 10000. Na zakończenie dodaj jeszcze jedną pętlę,
    która spowoduje, że cały proces odliczania powtórzy się trzy razy.
    Zaznacz na listingu, które pętlę tworzą połączenie sekwencyjne (szeregowe)
    a które z nich są zagnieżdżone (wykonują się równolegle).

  7. Napisz program wyznaczający iteracyjnie (numerycznie) sumę szeregu:
    1/x + 1/x 2 + 1/x3 + 1/x4 +  . . .  + 1/xn

  8. Napisz pętlę wczytującą kolejne liczby z klawiatury i kończącą się gdy:
    - suma tych liczb przekroczy 100,
    - ilość podanych liczb ujemnych przekroczy 10,
    - dwie kolejne podane liczby będą miały identyczną wartość,

  9. Napisz program wyświetlający na ekranie "choinkę" o wysokości zadawanej z klawiatury

                *
               ***
              *****
             *******
                #

 

LABORATORIUM  NR  4.
  1. Napisz program umożliwiający wczytanie a następnie wyświetlenie kilku (np. 10)
    liczb rzeczywistych przechowywanych w tablicy.
    Podczas wczytywania i przeglądania proszę wyświetlać teksty pomocnicze
    informujące o numerze wprowadzanego/wyświetlanego elementu. 
    np.    Tab[1] = 12.0 
             Tab[2] = -1.0 
             Tab[3] =  ....... 

  2. Rozbuduj program z zadania (a) o zestaw operacji realizujących
    proste obliczenia statystyczne dla danych zapisanych w tablicy:
    - suma elementów 
    - wartość średnia, błąd średniokwadratowy 
    - wartości ekstremalne (minimum, maksimum) 
    - zliczanie elementów (np. ujemnych, zerowych i dodatnich) 

  3. Napisz program definiujący N-elementową tablicę liczb całkowitych
    a następnie inicjujący jej zawartość losowymi liczbami z przedziału od –30 do 50.
    Odpowiedz: czy rozmiar tablicy N może być wczytywany z klawiatury ?

  4. Napisz program, który wczyta dane z klawiatury do 10-cio elementowej
    tablicy liczb double, a następnie sprawdzi:
    - czy te liczby są uporządkowane rosnąco lub malejąco,
    - czy elementy tablicy mają symetryczną zawartość
       (tzn. pierwszy element równy ostatniemu, drugi równy przedostatniemu, itd. )
    - czy w tablicy występuje chociaż jedno powtórzenie wartości,

  5. Zaproponuj i oprogramuj algorytm, który przesunie zawartość N-elementowej tablicy
    cyklicznie o jedną pozycję „w górę”.
    (tzn. pierwszy element na miejsce drugiego, drugi na trzeci, ..., ostatni na pierwszy)

  6. Napisz program, który będzie wczytywał i analizował tekst (ciąg liter)
    wprowadzany z klawiatury aż do momentu naciśnięcia klawisza ESC,
    Po zakończeniu wczytywania program powinien wyświetlić na ekranie
    histogram występowania poszczególnych liter alfabetu np.

   A   17 #################
   B    2 ##
   C    1 #
   D    0
   E    5 #####
   . . .
   
Z   3 ###

           Do gromadzenia informacji o ilości podanych liter wykorzystaj tablicę 26 „liczników”
  1. Napisz program zawierający funkcje: WCZYTAJ_TAB(x),
    SUMA_TAB(x,y,z), WYPISZ_TAB(z) umozliwiający: 
    - wczytanie dwóch tablic N-elementowych A i B 
    - wyznaczenie zawartości trzeciej tablicy C jako sumę lub róznicę 
        wczytanych tablic A i B 
    - wydrukowanie wyniku końcowego: tablic A, B i C

 

LABORATORIUM  NR  5.
  1. Ćwiczenie wykorzystania wskaźników jako alternatywnej metody dostępu
    do zmiennych tworzonych przez kompilator tzn. zmiennych globalnych i lokalnych.
    ( Patrz przykład z wykładu nr 5 strona nr 3 )
    - Utwórz zmienne różnych typu: char, int, long, ...
    - Napisz instrukcje wyświetlające zawartości i adresy w/w zmiennych
       (porównaj czym różnią się adresy zmiennych: globalnych, lokalnych, inicjowanych)
    - Napisz instrukcje zapisu wartości do jednej zmiennej (np. typu long)
      za pomocą adresu innej zmiennej (tego samego typu lub innego)
    - Kontrolnie wyświetlaj zawartości zmiennych po dokonaniu tych zapisów

  2. Napisz program, który wyświetli w kodzie szesnastkowym (heksadecymalnie)
    zawartości poszczególnych bajtów kodujących zmienne z zadania (a)

  3. Ćwiczenie w wykorzystaniu zapisu wskaźnikowego (z operatorem *)
    jako metody dostępu do kolejnych elementów tablicy/pamięci.

    Zmodyfikuj wybrane zadania z laboratorium nr 4 w ten sposób,
    aby we wszystkich pętlach przetwarzających tablice,
    zamiast zapisu indeksowego (wykorzystującego operator indeksu [ ] )
    używać zapisu wskaźnikowego (wykorzystującego operator wyłuskania * )
    np.zamiast  
       float tab[10];
       for( int i=0; i<10; i++)
           tab[ i ] = tab[ i ] + 1;
    napisz
       for( float* w=tab; w<tab+10; w++)
           *w = *w + 1;


LABORATORIUM  NR  6.
  1. Przebuduj wybrane programy zrealizowane na pierwszych laboratoriach 1-3 na funkcje.
    Jeżeli uznasz to za sensowne, to dodatkowo rozdziel w postaci osobnych funkcji
    operacje komunikacji z użytkownikiem (np. wczytywanie danych / wyświetlanie wyników)
    oraz operacje wykonywania obliczeń (np. szukanie największej z trzech liczb A,B,C;
    policzenie średniej z trzech liczb A,B,C; rozwiązanie trójmnianu o współczynnikach A,B,C)

  2. Napisz program łączący w jedną całość wszystkie napisane dotychczas programy.
    W najprostszej wersji, ten nadrzędny program, wywoływał by sekwencyjnie funkcje
    napisane w zadaniu (a)
    (Uwaga: do połączenia kodu dotychczasowych programów możesz wykorzystać
    polecenia operujące na schowku edytora: Cut / Copy / Paste ).

  3. Rozbuduj program (b) o „Menu” umożliwiające sterowanie przebiegiem wywoływania
    funkcji składowych i zakończeniem programu. Przykładowe menu może mieć postać: 
       1. Suma liczb 
       2. Iloczyn liczb
       3. Klasyfikacja wzrostu
       4. Koniec programu
       Twoj wybór : ... ?

    Studenci bardziej zaawansowani mogą napisać trudniejszą wersję MENU
    w której wybór opcji będzie dokonywany poprzez przesuwanie podświetlenia
    za pomocą strzałek i wybór poprzez naciśniecie klawisza ENTER
    (tak jak opcje w menu środowiska C++ Builder).


LABORATORIUM  NR  7.
  1. Operacje na łańcuchach znaków.
    Napisz własne wersje funkcji:
       int moje_strlen( char* );
       char* moje_strupr(char* );
       char* moje_strcpy( char*, char* )

    realizujące te same operacje co standardowe funkcje strlen, strupr, strcpy
    z biblioteki <string.h>.

  2. Napisz funkcję:

    void str_zamien( char* tekst, char* stary_wzorzec, char* nowy_wzorzec);

    realizującą operację zamiany w podanym tekście starego wzorca na nowy np.
    <tekst> == "ala ma kota a ola ma asa"
    <stary_wzorzec> == "ma"
    <nowy_wzorzec> == "miala"
    rezultat zamiany: "ala miala kota a ola miala asa"

    (Osoby mniej wprawne w programowaniu mogą napisać uproszczoną
    wersję tej funkcji, zamieniającą tylko wzorce o tej samej długości.
    Wówczas nie ma potrzeby "rozsuwania" lub "zsuwania" starego tekstu)

 

LABORATORIUM  NR  8.
  1. Napisz program umożliwiający wczytanie do pamięci komputera
    jednowymiarowej tablicy liczb o rozmiarze zadawanym przez użytkownika.
    Obszar tablicy powinien być dynamicznie przydzielany za pomocą funkcji
    calloc( ), malloc( ), free()  lub operatorów new , delete.

  2. Napisz program wykonujący proste obliczenia na dynamicznej tablicy liczb
    o rozmiarze zmienianym przez użytkownika w czasie działania programu.
    Program powinien posiadać MENU umożliwiające:
      - zadawanie (lub zmianę) rozmiaru tablicy przez użytkownika
      - wypełnienie tablicy liczbami losowanymi lub wczytywanymi z klawiatury,
      - dopisywanie nowych liczb na końcu tablicy (z rezerwacją nowego miejsca)
      - usunięcie dowolnego elementu z tablicy (ze zwolnieniem niewykorzystywanej pamięci)
      - wyznaczenie wartości średniej ze wszystkich elementów tablicy
      - wyznaczenie wartości maksymalnej

  3. Napisz funkcję, która odfiltrowuje (usuwa) z zadanej dynamicznej tablicy liczb rzeczywistych
    wszystkie elementy o wartości ujemnej.
    Parametrem wejściowym tej funkcji powinien być początkowy adres tablicy oraz jej rozmiar.
    Efektem końcowym powinien być adres tablicy wynikowej (zawierającej tylko liczby nieujemne)
    oraz jej rozmiar (najczęściej różny od rozmiaru tablicy wejściowej).
    Uwzględnij przypadek, gdy tablica wejściowa zawiera tylko liczby ujemne!

  4. Napisz program pozwalający przechowywać w pamięci komputera dowolnej wielkości tablicę tekstów.
    Oprogramuj operacje: wczytywania, wyświetlania, wyszukiwania i sortowania
    tekstów przechowywanych w tej tablicy.

 

LABORATORIUM  NR  9.
  1. Zdefiniuj strukturę pozwalającą przechowywać dane pojedynczego elementu
    wybranej bazy danych np. katalogu książek w bibliotece, spisu samochodów w auto-komisie, itp.
    Zdefiniuj tablice w/w struktur pozwalającą przechowywać dane N elementów
    oraz licznik przechowujący ilość wpisanych danych.

  2. Napisz funkcje pozwalające wczytywać i wyświetlać zawartość w/w bazy.
    Uwaga:  tablice / struktury / liczniki elementów - powinny być przekazywane jako parametry !!!

  3. Napisz funkcję pozwalającą wyszukać w bazie element o zadanych parametrach np.
     - samochód wybranej marki np. FIAT,
     - rocznik nie starszy niż zadany rok np. 1990,
     - o cenie z zadanego przedziału np. 5000<  <10000.

 

LABORATORIUM  NR  10.
  1. Rozbuduj program bazy danych z laboratorium nr.9 o sterowanie programem
    za pomocą  podświetlanego MENU.  W tym celu napisz funkcję:
        int Menu(int x, int y, char*opcje[], int liczba_opcji, int podswietlona)
    której parametry umożliwiają:
    • zadawanie położenia MENU na ekranie, za pomocą współrzędnych (x,y)
      lewego górnego narożnika menu,
    • tekstów wyświetlanych opcji, jako tablicy łańcuchów,
    • ilości wyświetlanych opcji,
    • numeru opcji, która ma być podświetlona na początku
      zaraz po wywołaniu MENU.

    W/w funkcja powinna kończyć działanie po naciśnięciu jednego z klawiszy:

    • ENTER - oznacza wybór podświetlonej opcji i zwrócenie jego numeru porządkowego,
    • ESC - oznacza rezygnację z wyboru - zwrócenie wartości 0 lub (-1)
      a w rezultacie powrót do menu wyższego poziomu lub zakończenie programu.

    Przesuwanie zaznaczenia wyboru - podświetlenia - powinno być realizowane
    za pomocą klawiszy strzałek w górę i w dół. 
    Po naciśnięciu klawisza innego niż w/w powinno być generowane ostrzeżenie
    za pomocą sygnału dźwiękowego.

  2. Rozbuduj program bazy danych z laboratorium nr.9 o własną funkcję EDIT
    umożliwiającą wprowadzanie i edycję danych w bardziej kontrolowany sposób
    niż to robią standardowe funkcje z bibliotek <stdio.h> lub <iostream.h> np.
        bool EditTekst( int x, int y, int dlugosc, char edytowanay_tekst[ ], char dopuszczalne_znaki[ ])
    o parametrach sterujących:
     - położeniem na ekranie (x,y),
     - maksymalną długością wprowadzanego tekstu,
     - początkową zawartością pola edycyjnego
     - ograniczeniem rodzaju wprowadzanych znaków.
    W/w funkcja powinna obsługiwać klawisze funkcyjne zadające zmianę pozycji
    mrugającego kursora: BackSpace, LeftArrow, RightArrow, Home, End, Delete
    oraz kończyć działanie po naciśnięciu jednego z klawiszy:
     - ENTER - zatwierdzenie danych
     - ESC - anulowanie zmian - zwrócenie tekstu początkowego

 

LABORATORIUM  NR  11.
Archiwizacja stanu bazy na dysku (odczyt i zapis do pliku tekstowego lub binarnego pliku struktur)
  1. Napisz dwie funkcje:
    bool ZapamietajBaze( struct TDane baza[], int il_elem, char* nazwa_pliku)
    bool OdczytajBaze( struct TDane baza[], int& il_elem, char* nazwa_pliku)

    realizujące operacje zapisania stanu bazy w pliku dyskowym
    (np. przed zakończeniem programu)
    oraz wczytanie stanu bazy z pliku (np. podczas inicjalizacji bazy przy starcie programu).

    Uniwersalnym rozwiązaniem byłoby umożliwienie wyboru nazwy
    odczytywanego/zapisywanego pliku. W tym celu można wykorzystać
    napisaną wcześniej funkcję edycyjna z tekstem początkowym
    zawierającym "domyślną" nazwę pliku danych.

  2. Zmodyfikuj program bazy danych tak aby wszystkie operacje były
    wykonywane bezpośrednio na binarnym pliku struktur
    (bez wykorzystywania bardzo dużej tablicy struktur w pamięci operacyjnej)

 

LABORATORIUM  NR  12.
  1. Napisz program wczytujący z klawiatury teksty o różnej długości
    i przechowujący je w pamięci komputera w postaci tablicy tekstów.
    W jednej wersji programu wykorzystaj reprezentacje w postaci statycznej tablicy
    30-sto elementowych tablic znaków: char [10][30].
    W drugiej wersji wykorzystaj reprezentację w postaci tablicy wskaźników
    na dynamicznie tworzone tablice znaków: char* [10]

  2. Napisz program realizujący podstawowe obliczenia macierzowe
    (np. Wczytywanie, Wyświetlanie, Dodawanie, Mnożenie)
    na macierzach o zmiennej ilości wierszy i kolumn
    zadawanych w trakcie działania programu
    ( reprezentowanych wskaźnikiem float** )

 

LABORATORIUM  NR  13.
  1. Napisz funkcje: NA_STOS(wsk_stosu,dane), ZE_STOSU(wsk_stosu,dane)
    umożliwiające dodawanie nowych i usuwanie starych elementów (np. liczb)
    z własnego "stosu" w pamięci ( utworzonego poprzez dynamiczna alokacje zmiennych
    na stercie i połączenie ich w łańcuch za pomocą wskaźników na następny element).

  2. Napisz program umożliwiający zapamiętywanie w postaci "stosu elementów"
    dowolną ilość linii tekstu wpisywanych z klawiatury przez użytkownika programu.

    Poszczególne linie należy zapamiętywać w strukturach przydzielanych dynamicznie
    w trakcie działania programu.
    Uwaga: należy uwzględnić obsługę sytuacji szczególnych np gdy nie można przydzielić
    pamięci na kolejny element (z powodu braku wolnego miejsca na stercie)

    Program powinien zawierać następujące opcje:
    - dodanie nowego tekstu,
    - usuniecie ostatnio wprowadzonego tekstu,
    - wyświetlenie zawartości wszystkich pamiętanych linii,
    - wyświetlenie zawartości i-tej linii (uwaga na sytuacje,
       gdy podane "i" będzie większe niż rzeczywista liczba elementów)

  3. Przygotuj program zapamiętujący dowolną ilość linii tekstu
    w postaci listy dwukierunkowej.
    W poprzednim ćwiczeniu nowa linia (element listy) była zawsze dodawana na
    początek listy. Podobnie usuwany był zawsze pierwszy element listy.
    W tym ćwiczeniu należy przygotować bardziej złożone wersje funkcji
    umożliwiające dodawanie i usuwanie dowolnych elementów listy:
    • Wstawianie nowej linii na i-ta pozycje (po i-1 linii) tekstu.
    • Usuniecie i-tej linii (pozycja "i" jest zadawana przez użytkownika).
    • Tworzenie listy uporządkowanej alfabetycznie - nowa linia wstawiana
      jest po ostatniej linii, której tekst jest alfabetycznie wcześniejszy.
    • Usuwanie linii spełniającej zadany warunek.
      Np. linii zawierających zadany fragment tekstu. 

    Można również przygotować funkcję umożliwiającą przeglądanie
    zawartości listy po jednej linii tekstu.
    Klawisze strzałek w górę i w dół powinny umożliwiać przechodzenie do
    poprzednich lub następnych linii tekstu.
    Zakończenie przeglądania powinno nastąpić po naciśnięciu klawisza ESC.

UWAGA !!!
Jednym z najczęstszych błędów jest niewłaściwe inicjowanie wskaźników
łączących kolejne elementy. W ogólnym przypadku, wstawiając nowy element
do listy dwustronnej trzeba zmienić wartość czterech wskaźników.
Zazwyczaj studenci zapominają o zmianie któregoś ze wskaźników,
a czasem modyfikują je w niewłaściwej kolejności lub nie uwzględniają
przypadków szczególnych, gdy nowy element będzie pierwszym lub ostatnim.

  Literatura: