Docsity
Docsity

Przygotuj się do egzaminów
Przygotuj się do egzaminów

Studiuj dzięki licznym zasobom udostępnionym na Docsity


Otrzymaj punkty, aby pobrać
Otrzymaj punkty, aby pobrać

Zdobywaj punkty, pomagając innym studentom lub wykup je w ramach planu Premium


Informacje i wskazówki
Informacje i wskazówki

Pytania do egzaminu z informatyki - Notatki - Informatyka, Notatki z Informatyka

Notatki dotyczące tematów z dziedziny informatyki: pytania do egzaminu z informatyki

Typologia: Notatki

2012/2013

Załadowany 08.03.2013

Kowal_86
Kowal_86 🇵🇱

3.7

(3)

109 dokumenty

Podgląd częściowego tekstu

Pobierz Pytania do egzaminu z informatyki - Notatki - Informatyka i więcej Notatki w PDF z Informatyka tylko na Docsity!

1. Wymień i krótko opisz fazy kompilacji programu w języku C++.

Plik źródłowy jest kompilowany do pliku zawierającego kod pośredni. Następnie pliki te są łączone w program wykonywalny.

2. Jaka wygląda struktura poprawnego programu? Od jakiej instrukcji rozpoczyna się wykonywanie każdego programu w C++?

#include <iostream.h> (dyrektywy preprocesora)

main()

Return 0; }

Wykonywanie każdego programu zaczyna się od instrukcji main( )

3. Wymień cechy charakteryzujące każdą zmienną.

-nazwa

-jest określonego typu

  • przechowuje określoną wartość jaką jej nadano np. w operacji przypisania 4. W jakich systemach liczbowych mogą być zapisane stałe reprezentujące liczby całkowite w języku C++?
    • w systemie dziesiątkowym
    • w systemie ósemkowym

-w systemie szestnastkowym

10 = 10 010= 8 0x10=

5. Omów operatory, które umożliwiają tworzenie obiektów typów pochodnych.

[ ] tablica obiektów danego typu (macierz, wektor obiektów danego typu

  • wskaźnik do pokazywania na obiekty danego typu (to obiekt w którym można umieścić adres innego typu w pamięci)

( ) funkcja zwracająca wartość danego typu (podprogram realizujący określony algorytm)

& referencja (adres) obiektu danego typu (inaczej inne nazwanie „pseudonim” jakiegoś obiektu)

6. Omów operator inkrementacji i dekrementacji.

i „++” operator inkrementacji (i=i+1)

i „—„ operator dekremntacji (i=i-1)

Jeżeli operator „++” lub „—„ stoi przed zmienną, to najpierw jest ona zwiększona o 1, a następnie liczy się wartość wyrażenia w której ona występuje.

7. Co to jest operator rzutowania? Jaką wartość przyjmie zmienna b po wykonaniu sekwencji: int a = 0xAE9C; char b; b = (char) a;

Działanie operatora polega na tym, że brany jest obiekt jakiegoś typu i jak rezultat zwracany jest obiekt innego typu.

Zmienna b typu char przyjmie wartość 0x9C

8. Omów pojęcie zakres ważności obiektu w programie; wyjaśnij pojęcie zasłanianie nazw****.

Zakres ważności obiektu to ta część programu w której nazwa obiektu znana jest kompilatorowi

a)zakres lokalny dot. bloku , np.: main( ) { ...; ...; ...; { // początek bloku wewnętrznego Int x, y ; // zmienne x oraz y obowiązują x = 10; y = sin(x); // w bloku wewnętrznym ...; ... ; }; ...; ...; ...; ...; return 0; }

b) zakres „blok funkcji” Zakres ważności ograniczony do bloku funkcji. Int fun1(int k, double x) { Int n, m; double x1, y, w; ...; ...; ...; E: w = 10; y = sin(w); ...; ...; if(...) goto E; ...; ...; return n+m; }

Zasłanianie nazw - Nowa definicja zasłania definicję poprzednią, np.: int

14. W jakim przypadku w programie można pominąć deklarację funkcji?

Jeżeli definicja funkcji wystąpi przed jej wywołaniem to jej deklaracje można pominąć.

15. Czy deklaracje funkcji i definicje funkcji jeżeli jednocześnie występują w programie, mogą być zapisane w dowolnej kolejności, czy też obowiązują stosowne reguły? Jeżeli tak, opisz je?

Najpierw deklaracja potem definicja. Jeżeli definicja funkcji wystąpi przed jej wywołaniem to jej deklaracje można pominąć. Nie jest to jednak zaleca. Deklarujemy wiec wszystkie funkcje. Pozwala to uniknąć problemu pamiętania w jakiej kolejności funkcje są wywoływane i czy wywołana funkcja była już wcześniej definiowana.

16. Jakie obowiązują zasady przy definiowaniu funkcji, która nie oddaje wartości, podaj przykład definicji takiej funkcji?

Przed nazwą funkcji słowo void funkcja nie może zwracać wartości czyli return 7; źle return; dobrze

17. W jakich sytuacjach definicja funkcji może zastąpić deklarację funkcji?

Jeżeli definicja funkcji wystąpi przed jej wywołaniem to jej deklaracje można pominąć.

18. Co to oznacza, że argumenty przesyłamy do funkcji przez wartość lub przez referencję (adres)****? Czy ma to jakieś znaczenie w programie?

Przesłanie argumentów do funkcji przez referencję pozwala w treści tej funkcji modyfikowanie zmiennych (nawet lokalnych) znajdujących się poza tą funkcją.

19. Jak przesyłamy tablice do funkcji (tablica jest argumentem wywoływanej funkcji)?

Przez referencję , wskaźnik, nazwę tablicy (bo stanowi adres jej zerowego elementu)

20. Co rozumiesz przez pojęcie funkcja rekurencyjna - podaj conajmniej dwa przykłady takich funkcji.

Funkcja jest rekurencyjna, gdy definicja funkcji zawiera ją samą np. silnia, ciąg Fibonacciego

21. Omów instrukcję postaci { warunkowej / pętli / przełącznika }. Podaj przykład.

Instrukcja warunkowa „if” 0=fałsz, 1=prawda np. if(wyrażenie)instrukcja1; lub if(wyrażenie)instrukcja1; else instrukcja2;

Instrukcja pętli „while”. Oblicza się wartość obiektu wyrażenie i jeżeli ma ono wartość różną od 0, to wykonuje się instrukcja

Instrukcja „switch” umożliwia wielokrotne sprawdzenie wyrażenia

Instrukcja for(int i; i<k; i++); do instrukcja 1 while (wyrażenie)

22. Wymień operacje wykonywane na plikach, co to jest deskryptor pliku?

Operacje na plikach

otwieranie pliku do zapisu funkcja open

otwieranie pliku do odczytu funkcja open

odczyt z pliku funkcja read

zapisywanie do pliku funkcja write

zamykanie plików funkcja close

23. Wymień zasadnicze etapy związane z budową biblioteki statycznej.

a) piszemy pliki w C++ zawierające funkcje b) tworzymy z tych plików pliki objektowe c) Stosujemy narzędzie „ar” do utworzenia biblioteki statycznej o określonej nazwie i rozszerzeniu „a” d) Tworzymy plik nagłówkowy do naszej biblioteki

24. Co to są identyfikatory PID i PPID procesu. Do czego one służą systemowi operacyjnemu?

PID identyfikator (własny) procesu (ang. Process IDentifier) to unikalny identyfikator procesu w wielozadaniowych systemach operacyjnych (np. Unix, Microsoft Windows NT), wyrażony jako liczba całkowita z określonego przedziału.Dzięki PID jest możliwe działanie na procesach przez użytkownika: na przykład pod powłoką uniksową PID podaje się przy takich funkcjach jak wait() (zawieszenie) czy kill() (zabicie procesu).W systamach uniksowych PID 0 to proces bezczynności systemu, a PID 1 to proces init, odpowiedzialny za inicjalizację innych procesów. Wszystkie procesy są procesami potomnymi względem inita. Maksymalne PID w systamach Uniksowych można ustalić odczytując je z pliku /proc/sys/kernel/pid_max (często wynosi 32768). Po zakończeniu procesu PID jest zwalniane, nie jest jednak wykorzystywane aż do czasu kiedy nie jest to bezwględnie potrzebne, to znaczy do czasu kiedy wykorzystywanie puli PID rozpocznie się od nowa.

PPID- identyfikator procesu macierzystego

(czyli PID nadrzędnego, inaczej wywołującego), Aby uzyskać aktualną wartość każdego z ww. identyfikatoró w należy wywołać właściwą funkcję systemową,

PID -identyfikator (własny) procesu

PPID - identyfikator procesu macierzystego (czyli PID nadrzędnego, inaczej wywołującego),

GID - identyfikator grupy procesów

UID - identyfikator użytkownika procesu.

27. Jakie funkcje pozwalają na powoływanie procesów potomnych?

Nowy proces, czyli potomny jest kopią procesu wywołującego, czyli procesu macierzystego.Funkcja fork(), funkcja waitpid(),funkcje rodziny exec,funkcja kill(),

28. Do czego służy funkcja fork? Jaką istotną cechę posiada funkcja fork, która odróżnia ją od wszystkich innych funkcji?

Do powoływania procesów potomnych służy unikalna funkcja fork( )

Funkcja fork( ) tworzy nowy proces .Nowy proces, czyli potomny jest kopią procesu wywołującego, czyli procesu macierzystego. Będzie on natomiast realizowany od miejsca w ktorym zostala wywolana funkcja fork().Funkcja jest specyficzną funkcją w systemieoperacyjnym Unix/Linux powodującą, że pojedynczemu programowi, któremu do jego wykonania przypisany jest pojedynczy proces w systemie operacyjnym, przypisuje się dwa procesy poprzez rozwidlenie na:macierzysty ( zwany rodzic) i potomny (zwany dziecko) - czyli tworzy się nowy proces zwany procesem potomnym (dziecko),

który jest dokładną kopią procesu macierzystego (rodzica) Wywołując funkcję fork, proces powoduje utworzenie jego kopii, tak aby jeden proces mógł obsługiwać jedno zadanie, podczas gdy drugi proces będzie wykonywać inne zadanie i obydwa pozostają w systemie. Jest to typowe zastosowanie funkcji fork w serwerach sieciowych. Proces potomny ma za zadanie wykonać inny istniejący program w systemie. Ale ponieważ jedynym sposobem utworzenia nowego procesu jest wywołanie funkcji fork, więc proces macierzysty najpierw wywołuje tę funkcję, aby została utworzona jego kopia (potomek). Następnie jeden z dwóch procesów, zazwyczaj potomek, wywołuje jedną z funkcji grupy exec i dzięki temu potomek zostaje zastąpiony

nowym programem, który jest pierwszym argumentem tej funkcji. Takie

zachowanie jest typowe np. dla programu shella.. Macierzysty pozostaje

29. Ile wartości, jakie i gdzie oddaje funkcja fork?

Służy ona do powoływania procesów potomnych. wywołanie fork( ) zwraca więc wartości:

  • 1 w procesie macierzystym, przy nieudanym powołaniu procesu potomnego, np. uruchomionych jest zbyt wiele procesów,lub

0 w procesie potomnym przy jego udanym powołaniu,

PID procesu potomnego w procesie macierzystym przy udanym powołaniu

procesu potomnego

30. Co nam pozwala "zorientować się" w wykonywanym programie czy realizowany jest program macierzysty czy potomny?

Obserwując zapisy na konsoli (monitorze) możemy śledzić PID aktualnie wykonywanego procesu i w ten sposób możemy łatwo stwierdzić, który proces jest aktualnie wykonywany (macierzysty czy potomny)

31. Co rozumiesz przez powiedzenie, że proces potomny jest dokładną kopią programu macierzystego.

Nowy proces, czyli potomny jest kopią procesu wywołującego, czyli procesu macierzystego. Będzie on realizowany od miejsca w którym została wywołana funkcja fork( )

32. Do czego służy funkcja waitpid?

Jeżeli zależy nam aby proces potomny wykonał swoje zadanie i zakończył się wcześniej niż proces mcierzysty możemy sprawić, aby proces macierzysty zaczekał na zakończenie pracy procesu potomnego, wywołując w prociesie macierzystym funkcję wait( ) lub waitpid( )

33. Co to jest proces zombi, jakie są skutki pozostawania tych procesów w systemie?

O procesach, które pozostają w systemie, mimo iż formalnie się zakończyły i zwolniły zasoby systemu mówimy „proces zombie” Oznacza to, że pozostał wpis w tablicy procesów opisujący program, którego wykonanie w systemie operacyjnym zostało zakończone, ale którego zamknięcie nie zostało jeszcze obsłużone przez proces macierzysty

34. Do czego służą funkcje rodziny exec?

Funkcje z rodziny exec (tj. execlp() i execvp() pobierają argumenty i tworzą proces, który zastępuje proces aktualnie wykonywany (podstawia się on w jego miejsce)

35. Omów cechy protokołu połączeniowego TCP.

Przesyłane dane są bezpieczne, kontrolowane, jest zachowana kolejność pakietów, pakiety nie giną, pakiety mogą być powtórnie wysłane, przy wystąpieniu błędu jesteśmy o tym poinformowani

36. Omów cechy protokołu bezpołączeniowego UDP.

Wysyłane pakiety mogą nie dotrzeć do odbiorcy, o błędach nie jesteśmy informowani, kolejność pakietów może nie być zachowana, dane nie zawsze są kontrolowane, pakiety mogą zaginąć i nikt nie zareaguje, przesłanie danych jest raczej wolne.

37. Jakie warunki komunikacji zapewniają gniazda datagramowe a jakie strumieniowe?

SOCK_STREAM – gniazda połączeniowe, strumieniowe oferują dwukierunkowe połączenie w postaci uporządkowanego i niezawodnego strumienia bajtów. Mamy gwarancję, że przesyłane dane nie zostaną zagubione, zduplikowane albo przemieszane. Duże komunikaty są fragmentowane i ponownie składane. Działanie gniazd strumieniowych jest przewidywalne.

Gniazda datagramowe – bezpołączeniowe. Nie nawiązują one i nie podtrzymują połączenia. Istnieje limit datagramu, który można przesłać przez sieć. Datagram jest transmitowany jako pojedynczy komunikat sieciowy, który może zostać zagubiony, zduplikowany, bądź nadejść w niewłaściwej kolejności

43. Jaka funkcja (opisz jej argumenty) po stronie serwera tworzy tzw. gniazdo bierne i do czego ono służy?

Gniazdo bierne tworzy funkcja socket() jest to gniazdo nasłuchujące, które jest zasobem systemu operacyjnego przypisanym do procesu serwera.

44. Jaka funkcja (opisz jej argumenty) po stronie serwera tworzy tzw. gniazdo aktywne i do czego ono służy?

funkcja accept() tworzy nowe aktywne gniazdo zwane gniazdem połączonym. Jest używane tylko do komunikacji z danym klientem

45. Omów cykl przetwarzania poleceń po stronie klienta i serwera związanych z przygotowaniem i utrzymaniem komunikacji przez gniazda strumieniowe.

Funkcje (czynności ) wykonywane przez serwer:

A) aplikacja serwera używając funkcji systemowej socket( ) tworzy nienazwane bierne gniazdo tzw. ( gniazdo nasłuchujące ang. listening socket), które jest po prostu zasobem systemu operacyjnego przypisanym do procesu serwera. Po stworzeniu gniazda żaden inny proces na razie nie ma do niego dostępu.

B) za pomocą wywołania systemowego bind( ) serwer nadaje gniazdu nazwę. Lokalne gniazda otrzymują nazwę pliku w systemie plików Uniksa, zazwyczaj zazwyczaj katalogu /tmp albo /user/tmp. W przypadku gniazd sieciowych będzie to identyfikator usługi ( numer portu/ punkt dostępu) właściwy dla sieci z którą łączy się klient.

C) proces serwera oczekuje na połączenie klienta z nazwanym gniazdem. Jeżeli z gniazdem chce się połączyć jednocześnie wielu klientów, wówczas wywołanie systemowe listen( ) tworzy kolejkę, przeznaczoną dla nadchodzących połączeń. Serwer może je zaakceptować przy użyciu funkcji systemowej akcept( ).

D) wywołanie przez serwer funkcji systemowej akcept( ) tworzy nowe aktywne gniazdo zwane gniazdem połączonym (ang. connected socket), nie zależnie od utworzonego(pkt a oraz b) Gniazdo to jest używane wyłącznie do komunikacji z danym klientem.

Natomiast nazwane nasłuchujące gniazdo ( pkt. b ) oczekuje na dalsze połączenie z innymi klientami. Jeżeli serwer jest odpowiednio napisany wówczas może obsługiwać wiele połączeń jednorazowo ( współbieżnie, tzn. wielu klientów). W przypadku serwera iteracyjnego (zw. Także sekwencyjnym) pozostali klienci czekają w kolejce utworzonej przez funkcję listen( ), aż serwer będzie ponownie gotowy do obsługi kolejnego klienta.

Funkcje (czynności ) wykonywane przez klienta:

A) aplikacja klienta używając funkcji systemowej socket( ) tworzy nie nazwane gniazdo,

B) za pomocą wywołania funkcji systemowej bind ( ) może ale nie musi nadać gniazdu nazwę

C) wywołując funkcje systemową connect ( ) „usiłuje nawiązać kontakt z serwerem, używając nazwanego gniazda serwera jako adresu ( IP + port ). I jeżeli serwer był na tzw. „nasłuchu” kontakt zostaje nawiązany.

Po nawiązaniu połączenia, gniazda są używane w podobny sposób jak niskopoziomowe deskryptory plików, zapewniając dwukierunkową komunikację np. przy użyciu funkcji write ( ) oraz read ( ).

**46. Podaj sekwencję wywołań funkcji systemowych po stronie klienta i serwera związanych z przygotowaniem i utrzymaniem komunikacji przez gniazda strumieniowe.

  1. Czy różni się serwer sekwencyjny(iteracyjny) od współbieżnego?**

Tak różni się serwer iteracyjny używa się do prostych usług nie angażując klienta (np. podanie przez serwer czasu dobowego, czyli nie wykorzystanie funkcji fork). Natomiast serwer współbieżny tworzy proces potomny przy użyciu funkcji fork w celu wykonania usługi dla zgłaszającego się klienta.