test cpp, sem 1


1 Co wydrukuje instrukcja if(x>y) printf(''A''); else printf(''B''); gdy x=5, y=6?

Odpowiedź: Napis ''B''

2 Ułóż elementy definicji funkcji w kolejności takiej, w jakiej występują one w definicji

Pozycja 1 -> Typ wyniku funkcji

Pozycja 2 -> Nazwa funkcji

Pozycja 3 -> Lista parametrów

Pozycja 4 -> Instrukcja kodująca algorytm

3 Od wywołania jakiej funkcji zaczyna wywoływać się program?

Odpowiedź: od funkcji main

4 Dopasuj opisy do elementów instrukcji for(i=0; i<n; i++) S+=A[i];

Jest wykonywana po każdej iteracji -> i++

Gdy prawdziwe (różne od zera) nakazuje wykonać iterację -> i<n

Wykonuje się jeden raz na początku pętli -> i=0

Jest powtarzaną instrukcją -> S+=A[i]

5 Dopasuj nazwy strumieni i obiektów strumieniowych do opisów:

Obiekt strumieniowy wyprowadzający dane do strumienia stderr -> cerr

Strumień wyjściowy skojarzony domyślnie z ekranem -> stdout

Obiekt strumieniowy wyprowadzający dane do strumienia stdout -> cout

Strumień wejściowy skojarzony domyślnie z klawiaturą -> stdin

Strumień wyjściowy skojarzony na stałe z ekranem -> stderr

6 Dopasuj opisy pól konwersji do typów argumentów funkcji printf

char* (wskaźnik na znak) -> %s

double -> %f

int -> %d

char (typ znakowy) -> %c

7 Połącz instrukcje w języku C z interpretacją wyniku S

S=0; for(i=0; i<n; i++) S+=A[i]; -> Suma n liczb A[0]+A[1]+...+A[n-1]

S=A[0]; for(i=1; i<n; i++) if(S>A[i])S=A[i]; -> Minimum z n liczb A[0], A[1],...,A[n-1]

S=0; for(i=0; i<n; i++) if(A[i]>0) S+=A[i]; -> Suma tylko dodatnich liczba z A[0], A[1],...,A[n-1]

S=A[0]; for(i=1; i<n; i++) if(S<A[i])S=A[i]; -> Maksimum z n liczb A[0], A[1],...,A[n-1]

8 Instrukcja for(i=0; i<n; i++) S+=A[i]; nakazuje wykonać instrukcję S+=A[i]; dla:

Odpowiedź: i=0,1,2,...,n-1

9 Jakie wartości zmiennej n pozwala wprowadzić instrukcja

do scanf(''%d'', &n); while (n<2 || n>50);

Odpowiedź: Od 2 do 50 włącznie

10 Zaznacz prawdziwe zdania, jeśli zdefiniowano double Y[50]:

Odpowiedź: Y+5 wskazuje na zmienną Y[5]

Odpowiedź: Y jest stałą wskazującą na zmienną Y[0]

11 Dlaczego argumentami funkcji scanf nazwy prostych zmiennych poprzedza się znakiem & - np. scanf(''&d'',&n)?

Odpowiedź: Aby do funkcji przekazać wartość wskaźnika na zmienną

12 Ile zmiennych typu double tworzy definicja double X[100]; i jak te zmienne należy indeksować?

Odpowiedź: 100 zmiennych indeksowanych od 0 do 99

13 Dopasuj słowa kluczowe do opisów:

W instrukcji if poprzedza instrukcję wykonywaną, gdy warunek if okazuje się fałszywy (zerowy)-> else

Typ całkowity (liczba całkowita) -> int

Poprzedza warunek powtarzania instrukcji w instrukcji pętli (repetycyjnej) -> while

Typ pusty - funkcja bez wyniku -> void

Typ rzeczywisty(liczba z ułamkiem) -> double

Rozpoczyna instrukcję wyboru z warunkiem typu prawda/fałsz (zero/nie zero) -> if

14 Zaproszenie do wprowadzania danych wysyłamy używając funkcji:

Odpowiedź: fprintf(stderr,...

15 Dopasuj specyfikatory klasy pamięci i kwalifikatory do ich interpretacji.

Zmienna, która została zdefiniowana w innej części programu (np. w innym pliku) -> extern

Definicja nazwy typu -> typedef

Zmienna przeznaczona do umieszczenia w rejestrze procesora -> register

Zmienna, która powstaje i znika w zależności od potrzeby -> auto

Zainicjowana zmienna, której wartości nie można zmieniać -> const

Zmienna, która istnieje przez cały czas pracy programu -> static

16 Które napisy są stałymi rzeczywistymi w C lub C++?

Odpowiedź: 2e-3

Odpowiedź: 0.05F

17 W jakim systemie można pisać stałe całkowite?

Odpowiedź: dziesiętnym

Odpowiedź: ósemkowym

Odpowiedź: szesnastkowy

18 Wartością stałej tekstowej ''Przykład'' jest:

Odpowiedź: Wskazanie początkowego znaku tekstu - znak P

19 Dopasuj słowa kluczowe i operatory do wyjaśnień.

Umieszcza w pamięci wszystkie swoje zmienne jedna na drugiej w tym samym obszarze pamięci -> union

Lewym argumentem tego operatora jest zmienna strukturowa -> . (kropka)

Umieszcza w pamięci wszystkie swoje zmienne jedna po drugiej -> struct

Lewym argumentem tego operatora jest wskaźnik na zmienną strukturową -> -> (strzałka)

20 Zaznacz poprawne definicje tablic z tekstami.

Odpowiedź: char *T[]={''Tekst 1'', ''Tekst 2''};

Odpowiedź: char T[10]=''Tekst'';

Odpowiedź: char T[]=''Tekst'';

21 Które napisy są stałymi całkowitymi w C lub C++

Odpowiedź: 0x12

Odpowiedź: 'A' (znak A w apostrofach)

22 W wyliczeniu

enum Figura {Kolo, Trojkat = 3, Kwadrat, Czworokat};

zdefiniowano wartości Kolo, Trojkat, Kwadrat, Czworokat. Jakie to są wartości?

Odpowiedź: Kolo=0, Trojkat=3, Kwadrat=4, Czworokat=5

23 Ile bajtów zajmuje tekst ''\n\tANSI-C\n'' ?

Odpowiedź: 10

24 Zaznacz poprawne definicje inicjujące tablice

Odpowiedź: int M[][4]={{1,2},{0},{3,4,5,6}};

Odpowiedź: int K[]={3,7,2,1};

25 Zdefiniowano strukturę Osoba, zmienną A i wskaźnik p na tę zmienną:

struct Osoba { . . . //tu jakieś dane

Data D; //gdzie struct Data {short d,m,r; };

Osoba *ojciec, *matka;

} A, *p=&A;

W zmiennej A zawarto Twoje dane osobowe. Które instrukcje wyznaczą poprawnie rok urodzenia Twojego ojca?

Odpowiedź: R=A.ojciec->d.r

Odpowiedź: R=p->ojciec->d.r

26 Dopasuj definicje parametru k funkcji Fun

W instrukcji Fun(n); funkcja posługuje się zmienną n używając do niej nazwy k -> Fun(int &k)

-,,- funkcja posługuje się zmienną k tak jak nazwą tablicy -> Funk(int k[])

-,,- funkcja posługuje się zmienną n używając do niej nazwy k, ale nie wolno jej zmieniać wartości tej zmiennej -> Fun(const int & k)

W instrukcji Fun(n+5); funkcja przypisuje własnej lokalnej zmiennej k wartość n+5 -> Fun(int k)

27 Dopasuj określenia:

Instrukcja powodująca wyjście z funkcji -> return

Instrukcja, która powoduje wyjście z instrukcji powtarzania (for, do-while oraz while) -> break

Instrukcja nakazująca natychmiastowe przejście do następnej iteracji w instrukcji powtarzania -> continue

Etykieta, do której nastąpi skok w instrukcji switch, gdy na liście etykiet case nie znaleziono żądanej wartości całkowitej -> default

28 Którym elementom tablicy A poniższe instrukcje nadadzą wartości?

k=3;

A[k++]=8;

A[++k]=12;

Odpowiedź: A[3]=8, A[5]=12

29 double Funkcja(int n) {

Jaką instrukcję może tu zawierać poprawna funkcja rekurencyjna (jeżeli jest to jedyna brakująca instrukcja)?

return S;

}

Odpowiedź: if(n>1) S=n*Funkcja(n-1); else S=1;

Odpowiedź: S=n>1 ? n*Funkcja(n-1) : 1;

30 Dopasuj wyrażenie do określeń zakładając, że x,y są zmiennymi typu double

Wartość bezwzględna z x -> x<0 ? -x:x

Maksimum z {x,y} -> x>y ? x:y

Odległość (nieujemna różnica) między x a y -> x>y ? x-y : y-x

Minimum z {x,y} -> x<y ? x:y

31 Zaznacz 2 reguły, które określają kolejność wykonywania operacji (opracowywania operatorów).

Z dwóch sąsiadujących operatorów najpierw opracowuje się operator:

Odpowiedź: z lewej lub prawej strony zależnie od łączności (jeśli priorytety są jednakowe)

Odpowiedź: o wyższym priorytecie (jeśli ich priorytety są różne)

32 Zdefiniowano int k=29, n=10; oraz double x,y; Jakie wartości otrzymają zmienne x oraz y po wykonaniu instrukcji

x=k/n;

y=(double)k/n;

Odpowiedź: x=2.0, y=2.9

33 Zakładając, że zmienna K jest całkowita i nieujemna, dopasuj wyrażenia do określeń:

Wartość K/8(8=2 do potęgi 3) -> K>>3

Słowo mające trzy ustawione bity na pozycjach 3,4 i 5 -> 7

Wartość K z wyzerowanymi trzema najmłodszymi bitami -> (K>>3)

Wartość 8*K (8=2 do potęgi 3) -> K

34 Dopasuj wyrażenia do opisów warunków logicznych

x równe zeru lub równe 80 -> x== 0 || x==80

x różne od zera i różne od 80 -> x!=0 && x!=80

0 < x < 80 -> x>0 && x<80

x < 0 lub x > 80 -> x<0 || x>80

35 W programie Prog zdefiniowano int main(int argc, char *argv[])

Linia wywołania programu ma postać... \Prog.exe 12 dane wyniki

Jaką wartość otrzyma zmienna argc i zmienna argv[1]?

Odpowiedź: argc=4, argv[1] wskazuje na tekst ''12''

36 Dopasuj określenia

Zależnie od warunku wykonuje jedną z dwóch instrukcji -> if-else

Pętla, która musi co najmniej jeden raz wykonać jedną z dwóch instrukcji -> do-while

Realizuje skok do instrukcji poprzedzonej wybraną etykietę case lub default zależnie od wartości całkowitej -> instrukcja switch

Średnik, którego nie poprzedza wyrażenie -> instrukcja pusta

Wyrażenie zakończone średnikiem -> instrukcja

37 Co obliczają następujące instrukcje?

S=0;

for (i=0; i<n; i++) S=x*S+A[i]; -> wartość wielomianu

S=A[0];

for (i=0; i<n; i++)

if (S>A[i]) S=A[i]) -> Minimum z A[0],A[1],...,A[n-1]

S=0;

for (i=0; i<n; i++) S+=A[i]; -> Suma A[0]+A[1]+...+A[n-1]

S=A[0];

for(i=0; i<n; i++)

if (S<A[i]) S=A[i]) -> Maksimum z A[0],A[1],...,A[n-1]

38 Dopasuj, jakie wyrażenia dają w wyniku opisane wartości, jeśli zdefiniowano:

double A[10][8], (*p)[4], B[]={2,3,5,7,9,4,1};

Rozmiar tablicy 4 zmiennych typu double -> sizeof(p[0])

Rozmiar zmiennej wskaźnikowej -> sizeof(p)

Rozmiar tablicy w bajtach -> sizeof(B)

Rozmiar 8 zmiennych typu double -> sizeof(A[0])

Liczba elementów tablicy -> sizeof(B)/sizeof(B[0])

39 Jeżeli zdefiniowano

double A[100], p, B[20][4], (*s)[4];

i przypisano

p=A;

s=B;

to na co wskazują p+1 oraz s+1?

Odpowiedź: s+1 wskazuje na wiersz B[1][0],...,B[1][3]

Odpowiedź: p+1 wskazuje na A[1]

40 Czym są nazwy A i B, jeżeli zdefiniowano

double A[50], B[8][4];

Odpowiedź: A - stała wskazująca na pierwszy element tablicy - A[0]

Odpowiedź: B - stała wskazująca na pierwszy wiesz tablicy (4 zmienne)

41 Dopasuj definicje wskaźników do opisów

Wskaźnik na tablicę 8 zmiennych typu int -> int (*P)[8]

Wskaźnik na zmienną typu int -> int *p

Wskaźnik na tablicę 8 wskaźników na zmienne typu int -> int *(*P)[8]

Wskaźnik na wskaźnik na zmienną typu int -> int **p

Tablica 8 wskaźników na zmienne typu int -> int *P[8]

42 Jeśli P i S są wskaźnikami, to kiedy różnica P-S ma sens i co daje w wyniku?

Odpowiedź: P i S muszą wskazywać elementy tej samej tablicy

Odpowiedź: P-S= ile elementów dalej wskazuje P niż S

43 W programie zdefiniowano int n; i wczytano wartość do zmiennej n. Jak poprawnie przydzielić programowi pamięć na tablicę n zmiennych typu double?

Odpowiedź: double *A; A=new double[n];

Odpowiedź: double A; A=(double)calloc(n, sizeof(*A))

44 Otwarto plik tekstowy zawierający tylko poprawnie zapisane liczby rzeczywiste. Jaki będzie efekt wykonania instrukcji for (n=0; fscanf(fp, ''%lf'', &x)==1; n++); jeśli zmienne n, fp, x są kolejno typu int, FILE*, double?

Odpowiedź: Plik ustawi się w pozycji końcowej

Odpowiedź: Wartość n mówi, ile liczb jest w pliku

45 Drugim argumentem funkcji fopen jest tekst, który określa tryb otwarcia pliku. Dopasuj teksty do podanych warunków otwarcia.

Otwierany plik jest przewijany na koniec (gdy istnieje) lub jest kreowany -> ''a''

Otwierany jest plik do edycji (odczytu i zapisu) danych binarnych -> ''rb+''

Otwierany plik musi istnieć -> ''r''

Otwierany plik jest kasowany, jeśli istnieje, a następnie jest kreowany jako pusty -> ''w''

Otwierany jest plik do dopisywania danych binarnych -> ''ab''

46 Czym są wyrażenie A, *A, A[i], jeśli zdefiniowano

double A[50][8];

Odpowiedź: A[i] - stała wskazująca na zmienną A[i][0]

Odpowiedź: *A - stała wskazująca na zmienną A[0][0]

Odpowiedź: A - stała wskazująca na pierwszy wiersz tablicy A, czyli na 8 zmiennych - A[0],...,A[7]

47 Jeśli zdefiniowano double (*F)(double); oraz przypisano F=sin, to suma F+1:

Odpowiedź: Jest niepoprawna, bo do wskaźnika F, nie można dodać liczby całkowitej

48 Który ciąg instrukcji nada zmiennej n wartość równą ilości liczb w pliku binarnym skojarzonym ze strumieniem fp?

Odpowiedź: fseek(fp,0,2); n=ftell(rp)/sizeof(double);

49 Plik binarny poprawnie otwarty instrukcją FILE*fp=fopen(nazwa,''rb''); zawiera dane typu double. Jak poprawnie wczytać te dane do tablicy zdefiniowanej double X[100];?

Odpowiedź: n=fread(X, sizeof(X[0]), 100,fp);

50 Dopasuj definicje wskaźników do definicji tablic tak, aby arytmetyka na wskaźniku była zgodna z arytmetyką na nazwie tablicy (aby wskaźnik wskazywał na taki sam typ, na jaki wskazuje nazwa tablicy)

double **q; -> double *D[40];

double (*s)[40]; -> double C[8][40];

double (*r)[8]; -> double B[40][8];

double *p; -> double A[40];

51 Zdefiniowano wskaźnik na funkcje:

double (*f)(double);

Które operacje na wskaźniku f są dozwolone i nie wygenerują błędu kompilatora?

Odpowiedź: f(x) (wywołanie wskazanej funkcji)

Odpowiedź: f==NULL (przyrównanie do wskaźnika zerowego)

Odpowiedź: (*f)(x) (wywołanie wyłuskanej funkcji)

52 W programie zdefiniowano int n; i wczytano do zmiennej n. Jak poprawnie przydzielić programowi pamięć na tablicę typu double ułożonych w n wierszach i 4 kolumnach?

Odpowiedź: double (*A)[4]; A=(double(*)[4])calloc(n, sizeof(*A));

Odpowiedź: double (*A)[4]; A=new double[n][4];

53 Uniwersalny wskaźnik p zdefiniowany

const void *p;

przechowuje wskazanie na zmienną wskaźnikową wskazującą na początkowy znak tekstu, czyli na typ char. Jak za pomocą tego wskaźnika zainicjować definiowaną zmienną wskaźnikową, aby wskazywała ona początkowy znak tego tekstu?

Odpowiedź: char s=*(char **p);

54 Po wczytaniu liczby wierszy i liczby kolumn tablicy A do zmiennych n oraz m należy dokonać alokacji pamięci tak, aby zmienna double w i-tym wierszu i j-tej kolumnie była wynikiem wyrażenia A[i][j]. Jak zaalokować taką tablicę? (W odpowiedziach pominięto rzutowania typów wskaźników)

Odpowiedź: double **A=calloc(n, sizeof(*A)); for(i=0; i<n; i++) A[i]=calloc(m, sizeof(**A));

55 Jeśli P i S są wskaźnikami, to kiedy relacja P<S ma sens i co daje w wyniku?

Odpowiedź: P<S, gdy P wskazuje na element o mniejszym indeksie niż S

Odpowiedź: P i S muszą wskazywać na elementy tej samej tablicy

56 Zdefiniowano wskaźnik uniwersalny

void *P;

Które operacje na wskaźniku P są dozwolone i nie wygenerują błędu kompilatora?

Odpowiedź: (double*)P (rzutowanie na typ double)

Odpowiedź: P==NULL (przyrównanie do wskaźnika zerowego)

57 Plik binarny zawiera liczby typu double. Jak poprawnie wczytać te liczby do tablicy A, która zawiera 500 zmiennych typu double (nie wolno wczytać więcej niż 500 liczb) i nadać zmiennej n wartość równą ilości wczytanych liczb?

Odpowiedź: n=fread(A, sizeof(*A), 500, fp);

58 Aby funkcja qsort mogła posortować teksty, należy posortować tablicę wskaźników na początkowe znaki tych tekstów. Argument s funkcji porównującej jest typu const void *s i wskazuje na element sortowanej tablicy wskaźników. Jak należy zainicjować wskaźnik ps, aby wskazywał na początkowy znak rozważanego tekstu?

Odpowiedź: char ps=(char**)s

59 Uniwersalny wskaźnik p zdefiniowany const void *p; przechowuje wskazanie zmiennej całkowitej typu int. Jak za pomocą tego wskaźnika zainicjować definiowaną zmienną całkowitą?

Odpowiedź: int k= (int*)p;

60 Jeżeli klasa bazowa jest dziedziczona publicznie, to jej dane i funkcje prywatne są w klasie pochodnej:

Odpowiedź: niedostępne

61 Co realizuje podane zadania? Dopasuj nazwy do opisów

Tworzy obiekt na wzór innego obiektu tej samej klasy -> Konstruktor kopiujący

Przygotowuje obiekt do usunięcia go z pamięci -> Destruktor

Definiuje konwersję z innego typu do typu swojej klasy -> Konstruktor jednoargumentowy

Definiuje konwersję z typu swojej klasy do innego typu -> Konwerter

62 Zaznacz funkcje, które mają predefiniowaną zmienną this

Odpowiedź: Konstruktory

Odpowiedź: Niestatyczne funkcje klasy

Odpowiedź: Operatory przypisania

63 Co należy koniecznie oprogramować w destruktorze, jeśli konstruktory alokują pamięć?

Odpowiedź: Wyzerowanie wskaźników na zwolnioną pamięć

Odpowiedź: Zwolnienie zaalokowanej pamięci

64 Co deklarują w klasie ABC następujące deklaracje? Dopasuj odpowiedzi

ABC(double); -> Konwersja konstruktorowa

double() const; -> Konwerter

ABC(const ABC&); -> Konstruktor kopiujący

ABC(char *p=0); -> Konstruktor bezargumentowy

virtual ~ABC(); -> Destruktor

65 Hermetyzacja klasy polega na:

Odpowiedź: Ukryciu danych i funkcji w sekcjach: private lub protected

66 Zaznacz prawdziwe zdania o zmiennych i funkcjach statycznych

Odpowiedź: Zmienne statyczne nie wchodzą w skład obiektów

Odpowiedź: Zmienna statyczna jest wspólna wszystkim obiektom swojej klasy

67 Zaznacz funkcje, jakie należy zdefiniować w klasie, której konstruktory alokują pamięć do dyspozycji obiektów:

Odpowiedź: Konstruktor kopiujący

Odpowiedź: Destruktor

Odpowiedź: Operator przypisania

68 W klasach Bazowa i Pochodna (class Pochodna: public Bazowa {…};) funkcja Fun1 jest zwykłą funkcją, a Fun2 jest funkcją polimorficzną (virtual). Zdefiniowano

Bazowa *p;

Pochodna X;

Z której klasy funkcje będą wywoływane w instrukcjach:

p=&X;

p->Fun1(...);

p->Fun2(...);

Odpowiedź: Fun1 z klasy Bazowa

Odpowiedź: Fun2 z klasy Pochodna

69 Dziedziczenie polega na przejęciu z klasy bazowej... (wybierz co jest przejmowane)

Odpowiedź: danych wraz z ich algorytmami przetwarzania

70 Niech klasa o nazwie Pochodna ma upublicznioną klasę bazową o nazwie Bazowa. Dopasuj konwersje do opisów

Konwersja musi być zdefiniowana odpowiednim konstruktorem -> Z Bazowa do Pochodna

Standardowa konwersja wskaźników -> Z Pochodna* do Bazowa*

Konwersja standardowa ze stratą danych zdefiniowanych w klasie pochodnej -> Z Pochodna do Bazowa

Konwersja standardowa bez straty danych -> Z Pochodna& do Bazowa&

71 Zaznacz prawdziwe zdania o konstruktorach klas pochodnych

Odpowiedź: W liście inicjacyjnej należy wywołać konstruktor klasy bazowej

Odpowiedź: Funkcje wirtualne w konstruktorach zachowują się jak funkcje zwykłe

72 Co oznacza zapis =0 w deklaracji funkcji polimorficznej?

Virtual Typ Funkcja(...)=0;

Odpowiedź: Klasa z tą funkcją jest klasą abstrakcyjną

Odpowiedź: W tej klasie funkcja nie ma zdefiniowanego algorytmu

73 Jakie pola występują w obiekcie klasy pochodnej?

Odpowiedź: Podobiekt bazowy i niestatyczne dane klasy pochodnej

74 Co można przedefiniować przeciążając operatory w klasie?

(Zaznaczyć tylko to, co dotyczy wszystkich operatorów, a nie szczególnych przypadków)

Odpowiedź: Algorytm

75 Dopasuj słowo kluczowe do opisu

Rozpoczyna sekcję, której komponenty są dostępne wszędzie -> public

Rozpoczyna sekcję, której komponenty są dostępne tylko w obrębie tej klasy -> private

Rozpoczyna sekcję, której komponenty są dostępne tylko w obrębie tej klasy oraz klas pochodnych od niej -> protected



Wyszukiwarka

Podobne podstrony:
TEST NR 1 SEM III, POP
RACHUNKOWOŚĆ TEST, GWSH, 3 sem, Rachunkowość finansowa
test z organizacji, Sem III
Anatomia test kosmetologia 1 sem., technik usług kosmetycznych
Próbny test egzaminacyjny sem, poli, 1 sem, matematyka
test wykladowy sem letni 11
Egzamin test, biotechnologia 2 sem rok2, pobrane z góry DS 7, z góry, Rok III, Fizjologia zwierząt
test (3), Zarządzanie, Sem III, MARKETING
STAWY I WIĘZOZROSTY KOŃCZYNY GÓRNEJ test, mięśnie sem 2
test wolanin, 7 sem od Jacka, Dla Kamila, VII SEMESTR, Analiza ryzyka, wykład, kuczu, Wolanin, Anal
Chów test II, Sem. III, Chów i Hodowla Zwierząt
Z.O.O. test, WOiO, sem I, podstawy oceanotechniki
Nadzór Korporacyjny test 4, Zarządzanie, sem V marketing, Nadzór korporacyjny
1genetyka test, farmacja, I sem, egzamin z biologii i genetyki i kolokwia
Test z egzaminu, sem 3, statystyka

więcej podobnych podstron