Informatyka FULL 2009-10, Polibuda, studia, S12, S3, ważne, informatyka, Stare


1.Co to jest informatyka - dziedzina wiedzy zajmująca się problemem przetwarzania i przesyłania danych.

2.Algorytm - jest to ciąg informacji służących wykonywaniu pewnego zadania. W każdym algorytmie można wyróżnić szereg instrukcji które są szczegółowym przepisem do wykonania procedury.

3.Języki programowania proceduralne i deklaratywne - wiążą się ze strukturą i reprezentacją danych w komputerze, wykonywaniem działań i operacji.

J.p. Proceduralne - zapisują procedury które komputer wykonuje (procedura- moduł programu wykonujący określone zadania)

J.p. Deklaratywne - umożliwiają wyszukiwanie danych w dużych zbiorach.

4.Różnica między obliczeniami numerycznymi i symbolicznymi - obliczenia numeryczne to przetwarzanie konkretnych liczb. Obliczenia symboliczne - operacje wykonywane na wyrażeniach(symbolach) matematycznych. Programy z grupy obliczeń symbolicznych nazywane są programami algebry komputerowej. Np. Matlab.

5.Czym zajmuje się inżynieria oprogramowania - zajmuje się doskonaleniem i optymalizacją oprogramowania. Dobre oprogramowanie powinno być: zgodne z wymaganiami użytkownika, niezawodne, efektywne, łatwe w konwersacji, ergonomiczne. Przyczyny powstania: duża złożoność systemów operacyjnych, niepowtarzalność poszczególnych przedsięwzięć, pozorna łatwość dokonywania poprawek.

6.Co to jest baza danych - zbiór informacji z pewnej dziedziny, prowadzony w taki sposób, aby łatwo je można było analizować. Każdy zbiór danych to baza danych, nie musi być komputerowa. Komputerowa baza danych jest podzielona na rekordy. Najprostszą bazą danych jest tabela składająca się z rekordów.

7.Siec komputerowa - system połączonych ze sobą urządzeń sieciowych które pozwalają na wymianę informacji pomiędzy urządzeniami przyłączonymi do tej sieci (wymiana danych wewnątrz sieci, korzystanie z 1 drukarki sieciowej, komunikacja użytkowników dzięki oprogramowaniu sieciowemu). Rodzaje: LAN(lokalna), MAN(miejska), WAN(światowa).

8. Internet - globalna sieć komputerowa, umożliwiająca wymianę informacji dzięki jednolitemu sposobowi kodowania i przesyłu informacji protokołem TCP/IPv4 obecnie lub w przyszłości TCP/IPv6. Intranet - wewnętrzna sieć lokalna w przedsiębiorstwie lub instytucji. Serwer WWW udostępnia swoje zasoby wewnątrz przedsiębiorstwa lub instytucji.

9.DEC=419 BIN=1 1010 0011 HEX=1A3

10.HEX=3F3 BIN=0011 1111 0011 DEC =1011

11.Relacja pomiędzy ilościami informacji - 8bitów= 1bajt, 1kbajt=1024bitów, 1Mb=1024^2bajtów, 1Gb=1024^3bajtów.

12.Cyfrowe kodowanie informacji - dowolna informacja w komputerze występuje tylko w postaci binarnej dlatego potrzebne są zatem reguły które przekształcają różne postacie informacji na postać ciągu cyfr binarnych. Proces przekształcenia informacji nazywamy kodowaniem, polega ono na zamianie każdego kodu na kod binarny. Z kolei skróceniem kodu binarnego jest kod hexadecymalny.

13.Co to jest kod ASCI- służy do kodowania tekstu i przesyłania go między urządzeniami cyfrowymi oprócz znaków alfanumerycznych, koduje także znaki sterujące pracę drukarki, przyporządkowuje znakom alfanumerycznym i znakom sterującym ciąg złożony z 8 cyfr binarnych. Kodowanie ASCI ma 83 znaków. Posługując się kodem ASCI możemy każdy tekst zapisać jako ciąg bitów i na odwrót.

14.Porównanie kombinacyjnych i sekwencyjnych - Ukł. kombinacyjny - układ w którym stan wyjść układu zależy wyłącznie od stanu wejść. Ukł. sekwencyjny - układ w którym stan wyjść zależy od stanu wejść oraz od poprzedniego stanu wyjść.

15.Układ synchroniczny i asynchroniczny - układem asynchronicznym (niejednoczesnym) nazywamy taki układ cyfrowy którego stan wyjść ustala się po kolei. Czas ustalania się stanu wyjść nie jest sterowany. Układem synchronicznym nazywamy taki układ którego stan każdego z wyjść ustalany jest taktem zegarowym. Eliminuje to błąd mogący powstać gdy pojawia się impuls wejściowy a układ nie zdąży zadziałać na skutek zbyt długiego czasu propagacji(zadziałania).

16.Do czego służy rejestr i jego rodzaje - układ cyfrowy służący do krótkotrwałego zapamiętywania określonej porcji bitów danych. Na wejście podaję się informację do zapamiętania w rejestrze. W tym momencie na wejście sterujące podaje się sygnał sterujący który zapisuje informację z wejść. Informacja przechowywana w rejestrze pojawia się na wyjściu. Rodzaje: przesuwny (WE i WY) szeregowy, (WE i WY) równoległy, (WE)szeregowo-(WY)równoległy, (WE)równoległo-(WY)szeregowy, synchroniczny, asynchroniczny.

17.Co to jest magistrala - w systemie mikroprocesorowym należy zapewnić przesyłanie informacji między różnymi układami w systemie mikroprocesorowym, najprościej każdy układ połączyć z każdym, co jest jednak fizycznie niemożliwe, więc tych połączeń jest mniej i droga którą komunikują się dane układy nazywana jest magistralą. Składa się ona z 2 lub więcej układów będących nadajnikami lub(i) odbiornikami informacji.

18.Sumator - cyfrowy układ kombinacyjny, który wykonuje operacje dodawania dwóch (lub więcej) liczb dwójkowych. Rozróżnia się 2 rodzaje: sumator z przeniesieniami równoległymi oraz sumator z przeniesieniami szeregowymi.

19.U2(kod uzupełnień do dwóch) obecnie najpopularniejszy sposób zapisu liczb całkowitych oraz ułamkowych przedstawionych w formacie stałoprzecinkowym na bitach. Operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb binarnych bez znaku. Nazwa kodu wzięła się ze sposobu obliczania liczb przeciwnych. Dla liczb n-bitowych wartości przeciwne uzyskujemy odejmując liczbę od dwukrotnej wagi najstarszego bitu (2·2n-1 = 2n).

20.Dekodery i kodery priorytetu. Dekoder - układ kombinacyjny posiadający n wejść oraz k wyjść (k=2n). Jego działanie polega na zamianie kodu binarnego (o długości n), lub każdego innego kodu, na kod "1 z k". Koder priorytetu - układ kodera z następującymi zmianami: na wejściu kodera może pojawić się więcej niż 1 wyróżniony sygnał, każde wejście ma przypisany swój priorytet. Na wyjściu pojawia się zakodowany numer tego wejścia wyróżniony sygnałem który posiada najwyższy priorytet.

21. Podział pamięci półprz. RAM- pamięć ulotna służy do zapisu i odczytu. Tą pamięć dzielimy na: DRAM- są to pamięci wolne, tanie, łatwe w miniaturyzacji stosuje się je jako RAM w komputerach; SDRAM- szybkie, drogie stosuje się je jako pamięci podręczne (cache) w procesorach. ROM - pamięć nieulotna przeznaczone tylko do odczytu. Dzieli się ją na: ROM-tylko do odczytu, PROM - jednorazowego zapisu, EPROM - kasowalna(UV) pamięć tylko do odczytu, EEPROM - pamięć kasowalna i programowalna elektrycznie(Flash).

22.Laczenie pamięci - zwiększenie liczby slów, zwiększenie liczby adresów, zwiększenie długości slow, zwiększenie ilości linii w szynie adresowej

23. Skracanie czasu dostępu do pamięci. Skracanie czasu dostępu do pamięci polega na zwiększaniu częstotliwości taktowania pamięci poprzez podnoszenie taktowania szyny FSB. Niektóre płyty główne umożliwiają modyfikację timingów z jakimi pamięć pracuje (CAS Latency(CL), RAS-to-CAS Delay(tRCD), RAS Precharge Time(tRP), Cycle Time(Tras), Command Rate(CR), xxxMHz). Wraz ze zmianą częstotliwości pracy magistrali procesorów parametry pamięci ulegają zmianom.

24.Na czym polega odświeżanie pamięci - Odświeżanie pamięci polega na okresowym odświeżaniu zawartości pamięci, ponieważ w przeciwnym przypadku dane mogą zaniknąć (kondensatory się rozładują). Odświeżanie musi następować w regularnych odstępach czasu oraz bezpośrednio po każdej operacji odczytu i polega na ponownym zapisie odczytanej wartości w tych samych komórkach pamięci.

25. SDRAM - pamięć dynamiczna, synchroniczna, zbudowana na kondensatorach i tranzystorach. Synchroniczna, ponieważ działa ona zgodnie z przebiegiem taktu zegara procesora.

DRAM - ulotna pamięć półprzewodnikowa o dostępie swobodnym, której bity są reprezentowane przez stan naładowania kondensatorów. Nie wymagają stałego zasilania, a jedynie okresowego odświeżania zawartości, przez co zużywają mniej energii. Komórka pamięci dynamicznej składa się z mniejszej liczby elementów niż analogiczna komórka pamięci statycznej. Powyższe cechy pozwalają na większe upakowanie elementów w układach scalonych, niższe koszty produkcji, budowa układów pamięci o większych pojemnościach.

26.ROM i rodzaje - pamięć tylko do odczytu. Rodzaje: PROM - jednorazowego zapisu, EPROM - kasowalna(UV) pamięć tylko do odczytu, EEPROM - pamięć kasowalna i programowalna elektrycznie(Flash).

27. Specjalizowany układ cyfrowy - nie wymaga programu, układ może realizować tylko jeden (konkretny) algorytm przetwarzania informacji prowadząc do wyników przetwarzania. System mikroprocesorowy, do przetworzenia informacji wymaga wprowadzonych danych i szczegółowego zbioru instrukcji zwanych programem który realizuje proces przetwarzania danych prowadząc do otrzymania wyników. System mikroprocesorowy jest zdolny do szerszego i bardziej uniwersalnego przetwarzania danych, zależnie od wprowadzonego programu.

28.Schemat blokowy systemu mikroprocesorowego:

+omów poszczególne częsci

0x01 graphic
29.Jednostka arytmetyczno logiczna ALU - jednostka ta wykonuje operacje takie jak: dodawanie, odejmowanie, przyrównanie bitów, porównanie wartości 2 słów, operacje iloczynowe i sumy algebraiczne, negacji, alternatywy, wyboru rodzaju operacji dokonujemy sygnałem sterującym. Układ nie ma pamięci własnej, dlatego współpracuje z rejestrem.

30. Struktura mikroprocesora - w każdym mikroprocesorze możemy wyróżnić następujące elementy: ALU, interpreter rozkazów, rejestry, szynę danych i szynę adresową.

31.Przykładowe rejestry mikroprocesora: rejestry danych, rejestry adresowe, licznik rozkazów, rejestr instrukcji, wskaźnik stosu.

32.Jaką funkcje pełni stos - jest to liniowa struktura danych, w której dane dokładane są na wierzch stosu i z wierzchołka stosu są pobierane. Elementy stosu poniżej wierzchołka stosu można wyłącznie obejrzeć.

33. Magistrala - zespół linii oraz układów przełączających służących do przesyłania sygnałów między połączonymi urządzeniami w systemach mikroprocesorowych, złożony z trzech współdziałających szyn: sterująca - mówi, czy sygnał ma zostać zapisany, czy odczytany, adresowa - mówi, z(do) jakiej komórki pamięci sygnał ma zostać odczytany(zapisany), danych - tą magistralą przepływają dane. Przykłady: PCI, PCI Express, PCMCIA, USB, AGP, COM…

34. Cykl adresowy - przy realizacji jakiegokolwiek rozkazu procesora z pamięci następują: wczytywanie do układu sterowania, realizacji rozkazu. Faza pobrana: 1.odczytujemy rozkaz z licznika rozkazu, a dokładniej odczytuje się adres komórki z nowym kodem rozkazu, adres ten jest przesyłany magistralą danych, 2.pobranie kodu rozkazu z pamięci i umieszczenie go w IR, 3.modyfikacja licznika rozkazu IPC=PC+1. Faza wykonana: 1.zdekodowanie kodu rozkazu 2.wysyłanie sygnałów sterujących realizujących dany rozkaz.

35. Tryby adresowania

*adresowanie natychmiastowe(argument pobierany jest bezpośrednio z rozkazu),

*adresowanie rejestrowe(operandy znajdują się w rejestrach wewnętrznych mikroprocesora),

*adresowanie bezpośrednie(adres operandu znajduje się bezpośrednio w rozkazie),

*adresowanie pośrednie(odwołujemy się do jednego z rejestrów roboczych procesora lub do komórki pamięci),

*adresowanie bazowo-indeksowe(pośredni tryb).

36. Zadania i rodzaje WE/WY. Układy pośredniczące w wymianie informacji miedzy pamięcią, procesorem, a urządzeniami zewnętrznymi. Układy we/wy mogą być dedykowane tylko do pracy z konkretnym urządzeniem np. mysz PS/2, lub pracować z wieloma urządzeniami np. USB. Wyróżniamy układy we/wy :

*Współadresowe z pamięcią operacyjna (traktuje się te układy jako pewien zespól rejestrów, które są wybierane za pomocą adresów np. karta grafiki-w celu wyświetlenia grafiki.

*Izolowane-obiekt we/wy wybierany jest poprzez podanie uprzedniego sygnału sterującego. Przestrzeń adresowa układu we/wy i pamięć może się pokrywać, o wyborze decyduje sygnał sterujący (sterowanie dysku IDE).

37. Tryb DMA -  technika pozwalająca niektórym urządzeniom uzyskiwać bezpośredni dostęp do modułów pamięci operacyjnej, a więc bez pośrednictwa procesora, nie zajmując jego mocy obliczeniowej.

38. Rodzina procesorów INTEL 80x86 obejmuje procesory INTEL 8086, 8088, 80186, 80188, 80286, 80386, 80486 oraz Pentium(-, 2, 3, 4). Ich wspólna cecha to kompatybilność w dół. Charakterystyka: *64-bitowa magistrala danych i 32-bitowa magistrala adresowa, *Praca w trzech trybach(rzeczywisty, chroniony tryb wirtualny, tryb wirtualny 8086), *Sprzętowe mechanizmy ułatwiające projektowanie systemów operacyjnych wspomagające (pamięć wirtualną, pracę wielozadaniową, ochronę zasobów), *Architektura superskalarna (praca potokowa, dwa potoki przetwarzania instrukcji stałoprzecinkowych), *Przewidywanie realizacji rozgałęzień programu, *Segmentacja i stronicowanie pamięci, *Wewnętrzna jednostka arytmetyki zmiennoprzecinkowej pracująca w trybie potokowym, *Dwie wewnętrzne, rozdzielone pamięci podręczne (CACHE): dla danych, dla kodu programu, *Możliwość współpracy z pamięcią CACHE drugiego poziomu.

39. Główne elementy schematu blokowego proc. Pentium: Magistrale zewnętrzne: danych, adresowa, CU: MMU: jednostka zarządzająca pamięcią , CODE CACHE, stronicowanie CODE TLB, OREFETCHER+BTP, BIU - jednostka zapewniająca komunikacje z otoczeniem, UKLAD STEROWANIA, POTOK V i U: ( kolejkowanie 64b, dekoder, poziom 1 i 2)

EU: DATA CACHE, STRONNICOWANIE DATA TLB, UKLAD GENERACJI ADRESU, ALU POTOK U i V i REJESTRY, KOPROCESOR.

40.Rejestry segmentowe - rejestry procesora stworzone do przechowywania adresu początkowego obszaru pamięci, w którym umieszczone są rozkazy, dane albo stos programu. Rozróżnia się: CS(rejestr segmentu kodu programu), DS(rejestr segmentu danych), SS (rejestr segmentu stosu), ES, FS, GS (rejestry pomocnicze dla danych).

41.*Adresowanie w trybie rzeczywistym - adresy mają 20 bitów. Natomiast rejestry mają 16 bitów. Zatem by uzyskać fizyczny adres komórki pamięci zawartość rejestru segmentowego mnoży się razy 16 i dodaje przesunięcie (OFFSET).

* Adresowanie w trybie chronionym - rejestry segmentowe zawierają selektory, które wskazują na pole w tablicy deskryptorów. Z wskazanego elementu tablicy deskryptorów procesor pobiera 32-bitowy adres bazowy, który sumowany jest z przesunięciem. Tak powstaje adres liniowy, który przy włączonym mechanizmie stronicowania zostaje poddany transformacji na adres fizyczny. 

42.Tablica deskryptorów - w trybie chronionym procesora x86 struktura ulokowana w dedykowanym segmencie, zawierająca deskryptory wszystkich segmentów znajdujących się w pamięci operacyjnej. Dysponując rozmiarem tablicy deskryptorów można określić maksymalny rozmiar pamięci wirtualnej, którą może zaadresować pojedynczy proces.

43.Różnice w adresowaniu rzeczywistym a wirtualnym - W trybie rzeczywistym procesor 80286 jest kompatybilny z 8086 na poziomie kodu wynikowego, co oznacza, że procesor może wykonywać skompilowane programy z systemu 8086 bez dokonywania w nich jakichkolwiek zmian. W trybie adresów wirtualnych zgodność programowa z procesorem '86 dotyczy tylko postaci źródłowych programów. Program wynikowy dla 8086 będzie błędnie wykonywany przez `286 pracujący w trybie adresów wirtualnych.

44. Praca wielozadaniowa w systemie jednoprocesowym - w tym samym czasie jest wykonywanych kilka zadań współbieżnie, każde na innym etapie zaawansowania. Na ogół jeden proces jest realizowany przez określony czas, po czym ustępuje miejsca innemu procesowi, który również jest realizowany przez określony czas. System realizuje wielozadaniowość drogą przełączania procesora pomiędzy poszczególnymi zadaniami, dzięki czemu każde zadanie zyskuje na swoje potrzeby pewną ilość czasu. Na platformach jednoprocesorowych to przełączanie procesora pomiędzy poszczególnymi procesami.

45.Cel stosowania pamięci cache i współpraca z mikroprocesorem - coraz szybsze procesory wymagają coraz szybszych układów pamięciowych. Doszło do sytuacji w której procesor musiał odczekać kilka cyklów zegarowych zanim otrzymał dane z pamięci. W celu usunięcia tego ograniczenia wprowadzona została pamięć podręczna stanowiąca bufor o krótkim czasie dostępu. Zastosowanie jej zaowocowało zwiększeniem wydajności obliczeniowej procesorów. Sterownik cache cały czas monitoruje czy potrzebna informacja jest przechowywana w buforze. Jeżeli tak to mamy do czynienia z cache hit tzn. dane nie muszą być wyszukiwane i pobierane od początku ponieważ znajdują się już w pamięci cache i mogą być więc bezpośrednio wysłane do CPU, co znacznie zwiększa wydajność. W drugim przypadku mamy do czynienia z cache miss czyli należy pobrać nie obecne w cach'u adresy i dane potrzebne procesorowi. W tym celu konieczny jest dostęp do pamięci (wolniejszej) gdzie owe dane są przechowywane i pobranie ich co w rezultacie spowalnia pracę CPU i owocuje spadkiem wydajności komputera.

46.Praca potokowa procesora - polega na jednoczesnym przetwarzaniu kilku zadań. Na każdy takt przypada jedno rozpoczęcie zadania, jedno przetworzenie wszystkich zadań i jedno zakończenie zadania. Pozwala to na maksymalnie efektywne wykorzystanie magistrali procesora oraz zwiększenie wydajności procesora.

47.*FSB(Front Side Bus) - magistrala łącząca procesor z kontrolerem pamięci.

*FCore - częstotliwość rdzenia procesora (fsb x mnożnik).

*DDR(Double Data Rate) - 2x większa przepustowość(FSBx2).

48.Złożoność algorytmu -zależność między mocą obliczeniową a rozmiarami wprowadzonych danych z zakresu danego zagadnienia.

49. *Algorytm iteracyjny - algorytm, który uzyskuje wynik przez powtarzanie danej operacji określoną ilość razy.

*Algorytm rekurencyjny - algorytm, którego wynik zależy od swojego poprzedniego wyniku (funkcja, która odwołuje się do samej siebie).

50.*NWD - Podajemy 2 liczby. Sprawdzamy czy obie cyfry są podzielne przez kolejne cyfry rozpoczynając od 2. Iloczyn otrzymanych cyfr da NWD. 36,18|2; 18,9|3; 6,3|3; 2,1|STOP bo nie ma już wspólnych dzielników czyli NWD(36,18)=2x3x3

* F(n): F(n)= 1) 0 dla n=0

2) 1 dla n=1

3) F(n-1)+F(n-2) dla n>1

Ciąg Fibonacciego wyraża się rekurencyjnym wzorem: F(n)=F(n-2)+F(n-1), gdy F(1)=1 oraz F(2)=1.

Łatwo obliczyć, że:

F(3)=F(1)+F(2)=1+1=2

F(4)=F(2)+F(3)=1+2=3

F(5)=F(3)+F(4)=2+3=5

*2^n - Przyjmujemy założenia dla n: Gdy n należy do l. całkowitych n<0, n=0, n>0, gdy n należy do l. wymiernych… Przyjmijmy że algorytm odnosi się do liczb całkowitych to: Gdy n=0 to n^0=1, gdy n>0 to wynik to n krotny iloczyn cyfry 2, czyli gdy n=3 to wynik=2*2*2. Gdy n<0 to wynik to 1/(n krotny iloczyn cyfry 2).

*n! - Podaj n, gdy n=0 to wynik=1, gdy n>0 to wynik =1*2*3*…*n czyli iloczyn kolejnych liczb naturalnych kończąc na n.

*czy n jest liczbą pierwszą - sprawdzam czy n przy dzieleniu przez wszystkie liczby z zakresu od 2 do n-1 daje resztę z dzielenia, jeśli tak to n jest liczbą pierwszą.

*równanie kw. Mam równanie w postaci Ax^2+Bx+C=0. Sprawdzam jakie współczynniki ma równanie. Jeżeli A=0 to nie jest to równanie kwadratowe. Jeśli A≠0 i Δ=0 to x= -B/2A, jeśli A≠0 i Δ>0 to x1=(-B-sqrΔ)/2A; x2=(-b+sqrΔ)/2A, jeśli A≠0 i Δ<0 to brak rozwiązań.

51.Instrukcje: przypisania, warunkowa, warunkowa zagnieżdżona, instrukcje do realizacji pętli obliczeń, instrukcja wyboru, break, continua, skoku, typedef - składnia (przykłady).

*Przypisania - w językach programowania to instrukcja w której do pewnej lokacji (l-wartości) przypisuje się wartość, która będzie w nim przechowywana.

np. int x=5; a=20; d=a+x;

*Warunkowa - umożliwia wykonanie pewnej instrukcji w zależności od wartości wyrażenia. Wszystkie wartości różne od 0 są w języku C++ traktowane jako prawda, równe 0 jako fałsz. Wyrażenia logiczne są liczone tylko do momentu, w którym można określić jego wartość.

if (warunek)

{instrukcja}

else

{instrukcja}

int a=4;

if (a > 5)
cout<<”a jest wieksze od 5”;

else if

cout<<”a jest mniejsze od 5”;

else

cout<<”a jest rowne 5”;

* Warunkowa zagnieżdżona cd51

cd51 * Warunkowa zagnieżdżona - instrukcja if...else... wykonuje serię testów aż wystąpi jedna z poniższych sytuacji:

-jeden z warunków w instrukcji if lub else if jest prawdziwy. W tym wypadku wykonują się instrukcje występujące po tym warunku

- żaden z testowanych warunków nie jest prawdziwy. Program wykonuje instrukcję z ostatniej instrukcji else (jeżeli występuje)

-jeżeli warunek jest spełniony, po prostu wykonuje instrukcje.

np.

if (warunek)

{if(warunek2)

{ instrukcja1}

else {instrukcja2}

}

else {instrukcja3}

char c ;

clrscr () ;

cout << "Podaj znak" ;

cin >> c ;

if (c >= 'A' && c <= 'Z')

cout << "litera duza\n" ;

else if (c >= 'a' && c <= 'z')

cout << "litera mala\n" ;

else if (c >= '0' && c <= '9')

cout << "cyfra/n" ;

else

cout << "inny znak\n" ;

*Pętle

for - pętla ta w C ma bardzo rozpowszechnione zastosowanie może obsługiwać zarówno stałe jak i warunkowe iteracje.

for (inicjacja; warunek; instrukcja1) instrukcja2 ;

{

double a = 10 ;

int n ;

cout << "Podaj liczbe z zakresu [1..30]: " ;

cin << n ;

if (n > 0 && n <= 30)

{

for (int i = 1 ; i <= n ; i++) a += (double)i ;

cout << n << " != " << a << '\n' ;

}

else cout << "Liczba z poza zakresu" ;

return 0 ;

}

dodatkowo pętle:

while :

while (zmienna < 100)

{

instrukcja_1;

instrukcja_2;

instrukcja_3;

}

do-while:

do

{

instrukcja_1;

instrukcja_2;

instrukcja_3;

}

while (zmienna > 10);

*Wyboru - switch

- instrukcja wymaga wartości całkowitej, wartość ta może być stałą zmienną, wywołaniem funkcji lub wyrażeniem. Switch nie działa ze zmiennoprzecinkowymi typami danych.

- wartość występująca po każdej etykiecie case musi być stałą.

- C++ nie zezwala na użycie etykiet case z zakresem wartości, każda wartość musi występować w oddzielnej etykiecie case.

- po każdej grupie wykonywanych instrukcji, trzeba użyć instrukcji break. Powoduje ona wyjście programu z instrukcji switch. Jeżeli nie użyje się instrukcji break program przejdzie do wykonania instrukcji po kolejnych etykietach case.

- zbiór instrukcji dla każdej etykiety lub etykiet musi być zawarty w nawiasach klamrowych.

- instrukcja po etykiecie default jest wykonywana gdy nie natrafiono na żadną etykietę else.

Przykład:

char c ;

clrscr () ;

cout << "Podaj znak" ; cin >> c ;

switch (c)

{

case "A":

case "B":

cout << "Duza litera" ;

break ;

case "a":

case "b":

cout << "Mala litera" ;

case "0":

case "1":

cout << "Cyfra" ;

break ;

default :

cout << "Inny znak" ;

}

*Break - umożliwia wyjście z pętli Instrukcja ta powoduje przejście programu do końca aktualnej pętli. Składnia dla pętli for:

for (inicjalizacja, test, uaktualnienie)

{

//sekwencja instrukcji nr 1

if (warunek wyjścia z pętli) break ;

//sekwencja instrukcji nr 2

}

//sekwencja instrukcji nr 3

Przykład:

char s [8], FindChar ; // Podaj ciąg znaków (string) s

for (i = 0 ; i < strlen (s) ; i++) // strlen() - zwraca długość łańcucha

if (s [i] == findchar) break ; // znak do wyszukiwania FindChar

if (i < strlen (s)) cout << " " << i << '\n' ;

*continue - Instrukcja ta kończy działanie przebiegu kodu pętli - czyli jeżeli gdzieś w pętli wystąpi instrukcja continue to program pomija instrukcje występujące po niej i przystępuje do ponownego sprawdzenia warunku. Instrukcja ta powoduje przedwczesne, bezwarunkowe zakończenie wykonania wewnętrznej instrukcji pętli i podjęcie próby realizacji następnego cyklu pętli.

cd51 *Instrukcje skoku - goto

Instrukcja goto jest postrzegana przez programistów jako spadek po BASIC'u, ponieważ za jej pomocą możemy wykonywać skoki do deklarowanej etykiety. Większość domorosłych programistów uważa, że jej stosowanie jest przykładem złej znajomości rzeczy, ale tak na prawdę, użycie goto w uzasadnionym przypadku ma swój sens. Konstrukcja goto jest prosta:
goto nazwa_etykiety; // a w kodzie programu umieszczamy:
nazwa_etykiety:
instrukcje_etykiety;
Ograniczenia instrukcji goto nie pozwalają jej na przeskoczenie definicji zmiennej, po każdej etykiecie musi wystąpić co najmniej jedna instrukcja. Instrukcja ta może przydać się choćby do natychmiastowego opuszczenia wielokrotnie zagnieżdżonej pętli. Ponadto goto nie może spowodować przejścia do wykonania instrukcji znajdującej się poza funkcją zawierającą goto.

*Typedef- Język C++ umożliwia zdefiniowanie swoich własnych typów danych poprzez

zastosowanie instrukcji typedef. Instrukcja ta jest środkiem, dzięki któremu program może

rozszerzyć podstawowe typy danych języka C. Ogólna postać instrukcji typedef jest na-

stępująca,

typedef deklaracja_typu;

gdzie deklaracja_typu jest identyczna jak deklaracja zmiennej, poza tym że zamiast nazwy_

zmiennej jest użyta nazwa typu. Na przykład instrukcja

typedef int count;

przykład:

main()

{

typedef int group[10]; /* Utworzenie nowego typu 'group' */

group totals; /* Przypisanie nowego typu danych zmiennej */

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

totals[i] = 0;

return (0);

}

52.Jakie znasz typy standardowe?

Typ Boolean

Typ Integer

Typ Float

Typ Character

*char - typ znakowy. Można za jego pomocą przechowywać znaki w kodzie ASCII (American Standard Code for Information Interchange) lub innym stosowanym na danej maszynie. Bezpiecznie można więc przechowywać liczby z zakresu 0 .. 127. Na ogół typ char ma 1 bajt długości w związku z czym można za jego pomocą przechowywać liczby z zakresu -128 .. 127 (jeśli jest ze znakiem) lub 0 .. 255 (jeśli jest bez znaku).

*int - typ całkowity. Zmienne tego typu typu mogą przyjmować wartości całkowite dodatnie lub ujemne.

*short int - typ całkowity krótki

*long int - typ całkowity długi

*float - typ zmiennoprzecinkowy pojedynczej precyzji.

*double - typ zmiennoprzecinkowy podwójnej precyzji.

*long double - typ zmiennoprzecinkowy podwójnej precyzji długi.

*void - typ pusty oznaczający brak wartości (stosowany w ANSI C). ¯adna zmienna nie może być typu void. Tylko parametry przekazywane do funkcji mogą być typu void (oznacza wtedy, że do funkcji nic się nie przekazuje) lub zwracane przez funkcję (funkcja nic nie zwraca). Oprócz tego typ void może być stosowany przy tworzeniu pewnych typów złożonych.

Dla każdego z typów całkowitych: int, short int, long int oraz char możliwe są następujące modyfikatory:

*unsigned - typ bez znaku (tylko wartości dodatnie)

*bool - zwraca wartość true (1) lub false (0)

53.W jaki sposób możesz zdefiniować typy pochodne (własne)?

Typy pochodne - tworzymy na podstawie typów fundamentalnych za pomocą operatorów deklaracji

* - wskaźnik danego typu - int *w;

& - referencja do danego typu

[] - tablice danego typu

() - funkcja zwracająca dany typ, o parametrach danego typu

54.Jakie znasz zakresy ważności zmiennej (obiektu)?

- czas życia obiektu - od momentu gdy obiekt został zdefiniowany do momentu, kiedy przestaje istnieć,

- zakres ważności nazwy - zakres w którym nazwa jest znana kompilatorowi,

- zakres lokalny - od punktu deklaracji do końca bloku,

- zakres globalny - dla nazwy zadeklarowanej poza klasą lub funkcją, zasięg od punktu deklaracji do końca pliku zawierającego tą deklarację,

- zakres klasy - nazwa widziana tylko przez metody klasy, klas pochodnych i zaprzyjaźnionych

55.Co to jest enum?

Typ wyliczeniowy enum.

Typ wyliczeniowy jest bardzo sprytnym rozwiązaniem polepszającym czytelność kodu oraz

zmniejszającym ilość błędów w programie. Stosuje się go w wypadku, gdy znamy ilość pewnych

stanów układu, oraz jeśli jesteśmy je w stanie wyliczyć. Klasycznym przypadkiem może być typ

użyty do wyliczenia dni tygodnia:

enum dni_tygodnia = {poniedzialek=1, wtorek, sroda, czwartek, piatek, sobota, niedziela};

Taka konstrukcja jest jednak mało przydatna. Najlepiej typ enum połączyć z instrukcją typedef, w wyniku której otrzymujemy nowy typ:

typedef enum { poniedzialek=1, wtorek, środa, czwartek, piątek, sobota, niedziela}dniTygodnia;

56.Struktura programu w języku C++

Struktura programu:

#include <iosteram>

#include <studio.h> //obszar dyrektywy #include

//obszar deklaracji i/lub definicji

int main (void) //nagłówek funkcji main

{ //początek instrukcji złożonej

cout<<”Cześć!”; //instrukcja

return 0; //instrukcja

} //koniec instrukcji złożonej

//obszar deklaracji i/lub definicji

57.Operatory arytmetyczne, relacji, logiczne, bitowe.

Operatory relacji

większe od.. >

mniejsze od.. <

większe lub równe z.. >=

mniejsze lub równe z.. <=

równe z.. ==

rózne od.. !=

*operator „>” oznacza: większy od..

4 > 2; //prawda

3 > 8; //fałsz

1 > 1; //fałsz

zmienna > 6;

zmienna > zmienna;

Całe wyrażenie ma wartość prawda, gdy warunek jest prawdziwy

*operator „<” czyli: mniejszy od..

21 < 15; //fałsz

11 < 23; //prawda

84 < 84; //fałsz

zmienna < 8;

zmienna < zmienna;

Wyrażenie jest prawdziwe tylko wtedy, gdy wartość stojąca po lewej stronie jest mniejsza od wartości będącej po stronie prawej.

*operator „>=” większy lub równy od..

2 >= 3; //fałsz

14 >= 13; //prawda

13 >= 13; //prawda

zmienna >= 17;

zmienna >= zmienna;

Wyrażenie jest prawdziwe tylko wtedy, gdy wartość stojąca po lewej stronie jest większa lub równa wartości będącej po stronie prawej.

*operator „<=” mniejszy lub równy od

21 <= 3; //fałsz

10 <= 18; //prawda

19 <= 19; //prawda

zmienna <= 42;

zmienna <= zmienna;

Wyrażenie jest prawdziwe tylko wtedy, gdy wartość stojąca po lewej stronie jest mniejsza lub równa wartości będącej po stronie prawej.

*operator „==” służy do porównywania dwóch wartości. Gdy wartości są równe wyrażenie jest prawdą i odwrotnie.

42 == 42; //prawda

4 == 14; //fałsz

zmienna == 1;

zmienna == zmienna;

Jeśli liczby są takie same wyrażenie jest prawdziwe.

*operator „!=” służy do porównywania dwóch wartości. Gdy wartości są jednakowe wyrażenie jest fałszem i odwrotnie.

28 != 28; //fałsz

6 != 11; //prawda

zmienna != 15;

zmienna != zmienna;

Operatory logiczne

Operatory te służą do obliczania wartości "prawda" lub "fałsz". Warunek prawdziwy daje wartość 1 natomiast fałszywy 0.

*Negacja logiczna zamienia prawdę w fałsz, a fałsz w prawdę. Np. jeżeli wyrażenie: a==b jest prawdziwe i do niego

zastosujemy wyrażenie !(a==b) to w wyniku otrzymamy fałsz.

Składnia:

!argument

*Iloczyn logiczny

Wynikiem iloczynu logicznego jest prawda tylko wtedy gdy oba argumenty też są prawdziwe. Jeżeli tylko jeden jest

fałszywy to wynikiem jest fałsz.

Składnia:

argument1 && argument2

*Suma logiczna

Wynikiem sumy logicznej jest prawda wtedy jeżeli przynajmniej jeden argument jest prawdziwy. Tylko jeżeli oba są

fałszywe to wynikiem jest fałsz. Np:

01001010 - zmienna1

00101001 - zmienna2

01101011 - wynik

Składnia:

argument1 || argument2

*Równość

Wynikiem jest prawda w tedy gdy wartości obu argumentów są takie same. Składnia:

argument1 == argument2

*Nierówność

Wynikiem jest prawda w tedy gdy wartości obu argumentów są różne. Składnia:

argument1 != argument2

Operatory przypisania

Argument występujący po lewej stronie przypisania (po lewej stronie znaku =) musi być jedną wartością. Oprócz operatora = istnieją inne. Mają one znaczenie według poniższego schematu:

a op= b

Jest to równe:

a = a op b

gdzie op jest operatorem który znajduje się po lewej stronie znaku =. Np: a *= b;

jest równe zapisowi (albo jak kto woli jest skróconym zapisem):

a = a * b;

Operator arytmetyczne:

*Operator if

Jest to jedyny w języku C++ operator, w którym są wymagane 3 argumenty. ma on

warunek ? wyrażenie1 : wyrażenie2

Zawsze na początku jest obliczany warunek. Jeżeli jest on prawdziwy ( != 0 ) to jest

warunek jest równy 0 to jest obliczane wyrażenie2.

*Operator zwiększania

Dodaje on liczbę 1 do zmiennej przy której ten operator występuje. Jest to skrót ot wyrażenia:

a = a + 1; //lub

a += 1;

Składnia:

++zmienna

zmienna++

*Operator zmniejszania

Odejmuje on liczbę 1 do zmiennej przy której ten operator występuje. Jest to skrót ot wyrażenia:

a = a - 1; lub

a -= 1;

Składnia:

--zmienna

zmienna--

Operatory bitowe cd57

cd57Operatory bitowe

Operatory bitowe działają osobno na poszczególnych bitach zmiennych

*Przesuwanie bitów w lewo

Zakładamy że operacja dzieje się na zmiennych typu unsigned char. Jeżeli zmienna ma wartość przedstawioną w

postaci binarnej:

00100100

to wynikiem takiej operacji zmienna << 2 będzie wynik:

10010000

to polecenie przesuwa bity w lewo o dwie pozycje. Argument traci bity które w wyniku przesunięcia znajdą się poza nim. po prawej stronie na miejsce brakujących bitów wstawia zera. Składnia:

zmienna << liczba bitów

*Przesuwanie bitów w prawo .

Jeżeli zmienna ma wartość przedstawioną w

Zakładamy że operacja dzieje się na zmiennych typu unsigned char

postaci binarnej:

00100100

to wynikiem takiej operacji zmienna >> 1 będzie wynik:

00010010

to polecenie przesuwa bity w lewo o jedną pozycję. Argument traci bity które w wyniku przesunięcia znajdą się poza nim. po lewej stronie na miejsce brakujących bitów wstawia zera. Składnia:

zmienna >> liczba bitów

*Negacja bitowa

Negacja bitowa zamienia w zmiennej wszystkie zera na jedynki i jedynki na zera. Jeżeli mamy zmienną o wartości:

10011010

to jej negacja bitowa wygląda tak:

01100101

Składnia:

~zmienna

*Koniunkcja bitowa

Koniunkcja bitowa jest to mnożenie pojedynczych bitUw. Koniunkcja daje wynik jeden na danej pozycji, gdy w we wszystkich zmiennych na tej pozycji jest jedynka. Jeżeli tylko na jednym miejscu jest 0 to wynikiem jest 0. Przykład:

01101011 - zmienna1

11001101 - zmienna2

01001001 - wynik

Działa on na argumentach całkowitych

Składnia:

zmienna1 & zmienna2

*Różnica symetryczna

Wynikiem różnicy symetrycznej jest na danej pozycji jedynka tylko w tedy gdy tylko w jednej zmiennej na danej pozycji jest jedynka. W przeciwnym wypadku jest 0.

01101011 - zmienna1

11001101 - zmienna2

10100110 - wynik

Działa on na argumentach całkowitych

Składnia:

zmienna1 ^ zmienna2

*Alternatywa bitowa

Wynikiem alternatywy bitowej jest na danej pozycji jedynka w tedy gdy przynajmniej w jednej zmiennej na danej pozycji jest jedynka. W przeciwnym wypadku jest 0.

01101011 - zmienna1

11001101 - zmienna2

11101111 - wynik

Działa on na argumentach całkowitych

Składnia:

zmienna1 | zmienna2

58.Na czym polega inkrementacja i dekrementacja zmiennej?

Inkrementacja/dekrementacja polega na dodaniu/odjęciu od zmiennej jedynki

#include <iostream>

using namespace std;

int main()

{

int a = 5;

cout << a << endl;

cout << ++a << endl; //preinkrementacja

cout << a++ << endl; //postinkrementacja

cout << a << endl;

return 0;

}

Powyższy program wypisze nam na ekranie:

5

6

6

7

Jak widać na powyższych przykładach rozróżniamy 2 typy inkrementacji - tzw. preinkrementację i postinkrementację. Obie powodują zwiększenie wartości zmiennej o 1 jednak jest między nimi pewna różnica. Otóż operator preinkremencacji

(++a)

zwraca wartość już zwiększoną o 1 (w tym przypadku będzie to 6) natomiast operator postinkrementacji

(a++)

zwraca wartość zmiennej przed procesem inkrementacji (tutaj zwróci wartość 6 natomiast wartość zmiennej 'a' będzie już wynosić 7).

Dokładnie tak samo sprawa wygląda dla operatora dekrementacji - predekrementacji (--a) i postdekrementacji (a--).

59.Podaj przykłady wykorzystania operatorów: sizeof, rzutowania.

*Operator sizeof

Operator sizeof przekazuje liczbę bajtów będącą rozmiarem wyrażenia lub specyfikatora typu. Może on występować w jednej z dwóch postaci:
sizeof (specyfikator_typu);
sizeof wyrażenie;

*Operator rzutowania

Zmiana typu danych: operator rzutowania

Operator rzutowania służy do zmiany typu danych na inny:

  (typ_danych)x;

gdzie typ_danych oznacza ten typ danych, na który ma zostać zamieniona wartość zmiennej x.

Np. deklaracja:

  (float)5;

spowoduje zmianę stałej całkowitej 5 (typu int) na stałą zmiennoprzecinkową 5.0 (typu float).

60.W jaki sposób można przesyłać argumenty do funkcji - porównaj te sposoby?

*Przesyłanie argumentów funkcji przez wartość: występują tutaj argumenty formalne formalne i aktualne. Argumenty formalne to jest to, jak na parametry mówi sobie w środku funkcja, natomiast argumenty aktualne to te, co aktualnie stosujemy w konkretnym wywołaniu funkcji.

*Przesyłanie argumentów przez referencje: ( przez przezwisko) , przesyłanie argumentów przez referencje pozwala tej funkcji na modyfikowanie zmiennych ( nawet lokalnych) znajdujących się poza ta funkcja.

61.Na czym polega przeładowanie funkcji.

Przeładowanie funkcji: następuje wtedy, gdy w danym zakresie ważności jest więcej niż jedna funkcja o tej samej nazwie. To, która z tych funkcji zostanie wykonana, zależy od liczby lub typu argumentów, z którymi dana funkcja jest wywoływana.

62. W jaki sposób definiuje się tablice i w jaki sposób przekazuje się je do funkcji (przykłady)?

Tablica to ciąg obiektów tego samego typu, które zajmują ciągły obszar w pamięci. Tablice są typem pochodnym czyli biorąc typ int tablica będzie typy int.

Tablice przesyła się podając funkcji tylko adres początku tej tablicy. Nazwa tablicy jest równocześnie adresem zerowego jej elementu.

definicja np. int liczba[20];

63.Co pojawi się na ekranie monitora w wyniku wykonania fragmentu programu …..

64.Zdefiniuj i napisz do czego wykorzystuje się wskaźniki?

Wskaźnik to zmienna (zwana zmienna wskaźnikową) która zawiera adres pierwszej komórki pamięci, w której przechowana jest inna zmienna. Jeśli zmienna zajmuje więcej niż jedną komórkę pamięci to wskaźnik wskazuje na pierwszą z tych komórek. Dla każdego wskaźnika określany jest jego typ. Wskaźnik typu int wskazuje na zmienną typu int. Dzięki temu, kompilator wie ile komórek w pamięci zajmuje zmienna rozpoczynająca się w komórce, na którą wskazuje wskaźnik. Nierozłącznie ze wskaźnikami związane są dwa operatory. Są to operator wyłuskania, który jest zapisywany jako gwiazdka (*) oraz operator pobrania adresu &. Oba te operatory są operatorami przedrostkowymi (zapisuje się je przed zmienną) oraz jednoargumentowymi. Zastosowanie wskaźników: wskaźniki stosuje się w różnych sytuacjach, a mianowicie gdy chodzi nam o:

- ulepszenie pracy z tablicami

- funkcje mogą zmieniać wartość przesyłanych do nich argumentów

- dostęp do specjalnych komórek pamięci

- rezerwacje obszarów pamięci

int x=1; //deklaracja zmiennej int

int *wskaznik; //deklaracja wskaźnika na typ int

wskaznik = &x; //przypisanie adresu zmiennej wskaźnikowi

*wskaźnik = 99; //zapis równoważny z "x=99;"

Pierwsza linia przedstawionego kodu jest oczywista więc nie będziemy jej spejcajlnie analizować. W drugiej lini zadeklarowaliśmy wskaźnik na typ int. Zatem jak można się domyślać deklaracja wskaźnika wygląda następująco:

<modyfikator> <typ> *nazwa;

Zatem sama deklaracja wskaźnika na zmienną danego typu różni się od deklaracji zmiennej jedynie dodatkowym znakiem '*' poprzedzającym nazwę zmiennej.

65.W jaki sposób definiuje się tablice dynamiczne?

Tablice dynamiczne - ich rozmiar mógł być ustalany w trakcie działania programu.

Coś w tym stylu

int *t;

int rozmiar;

cin>>rozmiar;

t = new int[rozmiar];

lub

int rozmiar;

cin>>rozmiar;

int t[rozmiar];

66.Podaj przykład definicji struktury. W jaki sposób mamy dostęp do elementów składowych struktury?

Struktura- Struktura jest typem zawierającym w sobie zmienne dowolnego typu (tzw. pola). Struktura umożliwia zapakowanie powiązanych ze sobą logicznie danych w jednym obszarze pamięci, który może być przesyłany jako jeden argument.

Struktura w języku C++:

Struktury w C++ są deklarowane tak jak w C, jednak oprócz pól mogą zawierać także funkcje (tzw. Metody) i mogą dziedziczyć z innych klas i struktur. Struktura różni się w C++ od klasy wyłącznie domniemanym zakresem widoczności jej pól i metod - dla klasy jest to private a dla struktur public. Używanie struktur zamiast klas nie jest jednak dobrą praktyką programowania gdyż zaciemnia budowę programu.

/* deklaracja */

struct miasto {

long ludnosc;

char* rzeka;

miasto(long ludnosc,char *rzeka):

ludnosc(ludnosc), rzeka(strdup(rzeka)) {}; /*konstruktor*/

inline char* wez_rzeke() {return rzeka};

~miasto() {free( (void*)rzeka );} /*destruktor*/

};

W takich strukturach dostęp do składowych podstawowych wykonuje się przy pomocy operacji:
struci rect ekran;

a1 = ekran.p1.x

b1 = ekran.p1.y;

67.Podaj przykład definicji klasy i definicji obiektu klasowego.

*Definicja klasy: Definicja klasy zawiera dwie części: nagłówka składającego się ze słowa kluczowego class, po którym następuje nazwa klasy oraz z ciała klasy ograniczonego parą nawiasów klamrowych i zakończonego średnikiem.

class TPunkt

{

};

*Tworzenie obiektów: To co było do tej pory napisane odnosiło się do klasy, czyli naszego przepisu na stworzenie obiektu. Sam proces tworzenia obiektu nazywamy instancjonowaniem lub konkretyzacją klasy. Tworzenie obiektów dokonuje się tak samo jak tworzenie zmiennych. np.

//nazwa_klasy nazwa_instancji

int i; //zmienna typu int o nazwie i

TPunkt p1; //obiekt klasy TPunkt o nazwie p1

Do obiektów odwołujemy się poprzez kropkę „ . ” lub poprzez „ ->

68.W jaki sposób możemy odwołać się do składników klasy?

W samym kodzie programu dostęp do zmiennych wewnątrz klasy , które są nazywane polami jest uzależniony od tego czy mamy do czynienia ze zmienną typu klasowego, czy wskaźnikiem na ten obiekt:

- W przypadku zmiennej o typie klasa, dostęp do pól uzyskuje się operatorem wyłuskania którym jest (.)

obiekt.pole = wartosc; //przypisanie wartości polu w obiekcie

- Jeżeli mamy do czynienia ze wskaźnikiem, operatorem wyłuskania jest strzałka -> (myślnik i symbol większości)

obiekt->pole = wartosc;

69.Do czego służą etykiety private, protected i public?

Etykiety public, private, protected

Tworząc nową klasę możemy decydować, co ma udostępniać, a co nie. Przykład:

class zmywarka

{

public:

int nr_programu ;

float temp_wody ;

char nazwa[80] ;

bool plukaj( nr_programu, temp_wody ) ;

bool susz( nr_programu ) ;

private:

int cisnienie_wody ;

int obciazenie ;

bool zwolnijzawory( nr_programu ) ;

} ;

Oto rodzaje dostępu do składników klasy:

public - jest dostępny bez ograniczeń.

private - jest dostępny tylko dla funkcji składowych danej klasy i funkcji zaprzyjaźnionych tej klasy.

protected - jest dostępny tak, jak składnik private, ale jest jeszcze dodatkowo dostępny dla klas wywodzących się od tej klasy.

Etykiety te można umieszczać w dowolnej kolejności, mogą też się powtarzać.

Domniemanie - zakłada się, że dopóki nie wystąpi żadna z powyższych etykiet, to składniki mają dostęp private.

Definiując klasę możemy ograniczyć dostęp do niektórych składników klasy. Są trzy rodzaje dostępu do składników:

public 

oznacza, że składniki deklarowane po tej etykiecie są dostępne z każdego miejsca programu,

private 

oznacza, że składniki deklarowane po tej etykiecie dostępne są tylko dla funkcji składowych tej klasy; funkcje globalne (zwykłe) nie mają dostępu do tych składników, a więc z funkcji main również nie ma dostępu do tych danych,

protected 

tak jak w przypadku private z tą tylko różnicą, że dostęp do takich składników mają jeszcze klasy wywodzące się z tej klasy (będzie to wytłumaczone przy dziedziczeniu)

70.Do czego służą konstruktor i destruktor?

*Konstruktor w programowaniu obiektowym to specjalna metoda danej klasy, mająca za zadanie utworzyć obiekt tej klasy.

Zadania konstruktora:

Wywołanie konstruktora powoduje wykonanie następujących zadań:

- obliczenie rozmiaru obiektu

- alokacja obiektu w pamięci

- wyczyszczenie (zerowanie) obszaru pamięci zarezerwowanej dla obiektu (tylko w niektórych językach)

- wpisanie do obiektu informacji łączącej go z odpowiadającą mu klasą (połączenie z metodami klasy)

- wykonanie kodu klasy bazowej ( w niektórych językach nie wymagane)

- wykonanie kodu wywołanego konstruktora

Z wyjątkiem ostatniego punktu powyższe zadania są wykonywane wewnętrznie i są wszyte w kompilator lub interpreter języka, lub w niektórych językach stanowią kod klasy bazowej.

*Destruktor - w obiektowych językach programowania specjalna metoda, wywoływana przez program przed usunięciem obiektu i niemal nigdy nie jest wywoływana wprost w kodzie używającym obiektu. Pod względem funkcjonalnym jest to przeciwieństwo konstruktora. Destruktor ma za zadanie wykonać czynności składające się na jego "zniszczenie", inne niż zwolnienie pamięci zajmowanej przez sam obiekt, przygotowujące obiekt do fizycznego usunięcia. Po jego wykonaniu obiekt znajduje się w stanie osobliwym i zazwyczaj nie można już z tym obiektem zrobić nic poza fizycznym usunięciem. Destruktor zwykle wykonuje takie czynności, jak zamknięcie połączenia z plikiem/gniazdem/potokiem, odrejestrowanie się z innych obiektów, czasem również zanotowanie faktu usunięcia, a także usunięcie obiektów podległych, które obiekt utworzył lub zostały mu przydzielone jako podległe (jeśli jest ich jedynym właścicielem) lub wyrejestrowanie się z jego użytkowania (jeśli jest to obiekt przezeń współdzielony).

71.Do czego wykorzystuje się wskaźnik this?

Czemu służy wskaźnik this ? Każdy obiekt danej klasy posiada własną kopię zestawu pól. Natomiast funkcje składowe są przechowywane w jednym egzemplarzu; Wskaźnik this pozwala na zidentyfikowanie właściciela danych, do których odwołuje się funkcja składowa; Jeśli chcesz uniknąć kłopotów, nigdy nie zmieniaj wartości wskaźnika this!

72.Wyjaśnij istotę dziedziczenia?

Dziedziczenie (ang. inheritance) to w programowaniu obiektowym operacja polegająca na stworzeniu nowej klasy na bazie klasy już istniejącej. Załóżmy, że w naszym programie wynikła potrzeba użycia dodatkowej klasy, która różni się od tej jedynie w kilku szczegółach. Dzięki dziedziczeniu nie musimy tworzyć takiej klasy od zera, a możemy zamiast tego wprowadzić jedynie konieczne modyfikacje do klasy już istniejącej.

73.Podaj przykład klasy abstrakcyjnej.

W C++ klasą abstrakcyjną jest klasa, która posiada zadeklarowaną co najmniej jedną metodę czysto wirtualną. Każda klasa, która dziedziczy po klasie abstrakcyjnej i sama nie chce być abstrakcyjną, musi implementować wszystkie odziedziczone metody wirtualne.

class Abstrakcyjna {

public:

virtual void metodaCzystoWirtualna() = 0; }; // metoda czysto wirtualna

class Nieabstrakcyjna : public Abstrakcyjna { // dziedziczenie

public:

void metodaCzystoWirtualna() { // implementacja metody czysto wirtualnej

// instrukcje metody

return; }};

int main() {

// Abstrakcyjna obiektX; // błąd, klasa jest abstrakcyjna

Nieabstrakcyjna obiektY; // poprawne

return 0;

}



Wyszukiwarka

Podobne podstrony:
SIECI KOMPUTEROWE, Polibuda, studia, S12, S3, ważne, informatyka, Stare, infasem2
Informatyka odpowiedzi, Polibuda, studia, S12, S3, ważne, informatyka, Stare
moje sprawko, Polibuda, studia, S12, S3, ważne, TP, TP
ET info, Polibuda, studia, S12, S3, Laby automatyka
302brudnopis fiza, Polibuda, studia, S12, Fiza, Lab
100t, Polibuda, studia, S12, Fiza, Lab, Fizyka- laboratoria, Laborki- inne2
to poprawka opr www.przeklej.pl, Polibuda, studia, S12, TO
101t, Polibuda, studia, S12, Fiza, Lab, Fizyka- laboratoria, Laborki- inne2
Kolokwium ZAL 2009 -10 WIOSNA, Studia, Systemy operacyjne
310, Polibuda, studia, S12, Fiza, Lab, Fizyka- laboratoria, Laborki- inne1
sprawko100, Polibuda, studia, S12, Szkołą aktualne pierdoły
201t, Polibuda, studia, S12, Fiza, Lab, Fizyka- laboratoria, Laborki- inne2
304, Polibuda, studia, S12, Fiza, Lab, Fizyka- laboratoria, Laborki- (Bob 2k2 2k3)

więcej podobnych podstron