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.KONWERSJA BIN-DEC-HEX (samemu)
10.Relacja pomiędzy ilościami informacji - 8bitów= 1bajt,
1kbajt=1024bitów, 1Mb=1024^2bajtów, 1Gb=1024^3bajtów.
11.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.
12.Co to jest kod ASCII- 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.
13.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ść.
14.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).
15.Do czego rejestr i 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.
16.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.
17.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).
18.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.
19. 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).
20.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
21. 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.
22.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.
23. 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.
24.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).
25. 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.
26.Schemat blokowy systemu mikroprocesorowego:
+omów poszczególne części(każdy to musi znać)
27.J
ednostka 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.
28. Struktura mikroprocesora – w każdym mikroprocesorze możemy
wyróżnić następujące elementy: ALU, interpreter rozkazów, rejestry, szynę
danych i szynę adresową.
29.Przykładowe rejestry mikroprocesora: rejestry danych, rejestry
adresowe, licznik rozkazów, rejestr instrukcji, wskaźnik stosu.
30. 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…
31. 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.
32. 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).
33. 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.
*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.
35.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.
36.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.
37.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.
38.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.
39.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.
40.*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).
41.Złożoność algorytmu –zależność między mocą obliczeniową a
rozmiarami wprowadzonych danych z zakresu danego zagadnienia.
42. *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).
43.*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 itd.
*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ń.
C++
44.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 - 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 (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
do-while
while (zmienna < 100)
{
instrukcja_1;
instrukcja_2;
instrukcja_3;
}
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" ;
}
*Cd 44 instrukcja 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.
*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);
}
45.Jakie znasz typy standardowe?
Typ Boolean
Typ Integer
Typ Float
Typ Character
*bool - przechowuje informacje typu: prawda lub fałsz. Zajmuje 1 bajt
pamięci.
*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.
*short - short integer, czyli krótki całkowity. Zmienne typu short są
zapisywane na dwóch bajtach.
*int - integer, czyli całkowity. Zapisywany jest na czterech bajtach.
*long - long integer, czyli dla odmiany długi całkowity, na 4 bajtach.
*float - typ zmiennoprzecinkowy pojedynczej precyzji, 4 bajty.
*double - typ zmiennoprzecinkowy zapisywany na 8 bajtach (większa
dokładność)
*long double - można zapisać duże liczby z ogromną dokładnością (10
bajtów)
*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.
*unsigned - typ bez znaku (tylko wartości dodatnie)
46.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
47.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
48. Definiowanie(utworzenie) zmiennej. Podczas definiowania najpierw
podajemy typ zmiennej, później jej nazwę oraz jej wartość.
typ zmienna = wartość;
W ten sposób zdefiniowaliśmy zmienną, którą zainicjalizowaliśmy określoną
wartością początkową.
49.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;
50.Struktura programu w języku C++
Struktura programu:
#include <iostream> // dyrektywa preprocesora dołączająca standardową
// bibliotekę wejścia - wyjścia
using namespace std; // wybór przestrzeni nazw
int main() //główny program
{
double a = 3;
double b, c;
cout << "Wprowadz liczbe: "; // wypisujemy na ekran tekst
cin >> b; // wprowadzamy dane do zmiennej b
c = a * b; // obliczanie wartości wyrażenia arytmetycznego
// wyprowadzanie tekstu na ekran
cout << endl << a << " * " << b << " = " << c;
return 0;
}
51.Operatory arytmetyczne, relacji, logiczne, bitowe.
Operatory relacji:
*operator „>” oznacza: większy od..
4 > 2; //prawda
3 > 8; //fałsz
Całe wyrażenie ma wartość prawda, gdy warunek jest prawdziwy
*operator „<” czyli: mniejszy od..
21 < 15; //fałsz
11 < 23; //prawda
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
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
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
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
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
Operator arytmetyczne:
*Operator if
Jest to jedyny w języku C++ operator, w którym śa wymagane 3
argumenty. Ma on następującą składnię:
warunek ? wyrażenie1 : wyrażenie2
Zawsze na początku jest obliczany warunek. Jeżeli jest on prawdziwy ( !=
0 ) to jest obliczany wrażenie1 a jeżeli 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 :
*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
CD51Koniunkcja bitowa
CD51 *Koniunkcja bitowa
Koniunkcja bitowa jest to mnożenie pojedynczych bitu. 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
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
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
Składnia:
zmienna1 | zmienna2
52.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--).
53.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).
54.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.
55.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.
56. 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];
57.Co pojawi się na ekranie monitora w wyniku wykonania
fragmentu programu …..
58.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.
KONIEC