1. Co to jest informatyka - dziedzina wiedzy zajmująca się problemem
*Algorytm rekurencyjny – algorytm, którego wynik zależy od swojego przetwarzania i przesyłania danych.
poprzedniego wyniku (funkcja, która odwołuje się do samej siebie).
2. Algorytm - jest to ciąg informacji służących wykonywaniu pewnego 25. S
pecjalizowany układ cyfrowy – nie wymaga programu, układ może 43. *NWD – Podajemy 2 liczby. Sprawdzamy czy obie cyfry są podzielne zadania. W każdym algorytmie można wyróżnić szereg instrukcji które są realizować tylko jeden (konkretny) algorytm przetwarzania informacji
przez kolejne cyfry rozpoczynając od 2. Iloczyn otrzymanych cyfr da NWD.
szczegółowym przepisem do wykonania procedury.
prowadząc do wyników przetwarzania. System mikroprocesorowy, do 36,18|2; 18,9|3; 6,3|3; 2,1|STOP bo nie ma już wspólnych dzielników czyli 3. Języki programowania proceduralne i deklaratywne - wiążą się ze przetworzenia informacji wymaga wprowadzonych danych i szczegółowego
NWD(36,18)=2x3x3
strukturą i reprezentacją danych w komputerze, wykonywaniem działań i
zbioru instrukcji zwanych programem który realizuje proces przetwarzania
*F(n):
F(n)= 1) 0
dla n=0
operacji.
danych prowadząc do otrzymania wyników. System mikroprocesorowy jest
2) 1
dla n=1
J.p. Proceduralne - zapisują procedury które komputer wykonuje
zdolny do szerszego i bardziej uniwersalnego przetwarzania danych, zależnie 3) F(n-1)+F(n-2)
dla n>1
(procedura- moduł programu wykonujący określone zadania)
od wprowadzonego programu.
Ciąg Fibonacciego wyraża się rekurencyjnym wzorem: F(n)=F(n-2)+F(n-1), J.p. Deklaratywne - umożliwiają wyszukiwanie danych w dużych zbiorach.
26. Schemat blokowy systemu mikroprocesorowego:
gdy F(1)=1 oraz F(2)=1.
4. Różnica między obliczeniami numerycznymi i symbolicznymi -
+omów poszczególne części(każdy to musi znać)
Łatwo obliczyć, że:
obliczenia numeryczne to przetwarzanie konkretnych liczb. Obliczenia F(3)=F(1)+F(2)=1+1=2
symboliczne – operacje wykonywane na wyrażeniach(symbolach)
F(4)=F(2)+F(3)=1+2=3 itd.
matematycznych. Programy z grupy obliczeń symbolicznych nazywane są
*2^n – Przyjmujemy założenia dla n: Gdy n należy do l. całkowitych programami algebry komputerowej. Np. Matlab.
n<0, n=0, n>0, gdy n należy do l. wymiernych… Przyjmijmy że algorytm 5. Czym zajmuje się inżynieria oprogramowania - zajmuje się
odnosi się do liczb całkowitych to: Gdy n=0 to n^0=1, gdy n>0 to wynik to doskonaleniem i optymalizacją oprogramowania. Dobre oprogramowanie
n krotny iloczyn cyfry 2, czyli gdy n=3 to wynik=2*2*2. Gdy n<0 to wynik to powinno być: zgodne z wymaganiami użytkownika, niezawodne, efektywne,
1/(n krotny iloczyn cyfry 2).
łatwe w konwersacji, ergonomiczne. Przyczyny powstania: duża złożoność
*n! – Podaj n, gdy n=0 to wynik=1, gdy n>0 to wynik =1*2*3*…*n systemów operacyjnych, niepowtarzalność poszczególnych przedsięwzięć,
czyli iloczyn kolejnych liczb naturalnych kończąc na n.
pozorna łatwość dokonywania poprawek.
*czy n jest liczbą pierwszą – sprawdzam czy n przy dzieleniu przez 6. Co to jest baza danych - zbiór informacji z pewnej dziedziny, wszystkie liczby z zakresu od 2 do n-1 daje resztę z dzielenia, jeśli tak to n prowadzony w taki sposób, aby łatwo je można było analizować. Każdy zbiór jest liczbą pierwszą.
danych to baza danych, nie musi być komputerowa. Komputerowa baza
*równanie kw. Mam równanie w postaci Ax^2+Bx+C=0. Sprawdzam danych jest podzielona na rekordy. Najprostszą bazą danych jest tabela jakie współczynniki ma równanie. Jeżeli A=0 to nie jest to równanie
składająca się z rekordów.
kwadratowe. Jeśli A≠0 i Δ=0 to x= -B/2A, jeśli A≠0 i Δ>0 to x1=(-B-
7. Siec komputerowa – system połączonych ze sobą urządzeń sieciowych sqrΔ)/2A; x2=(-b+sqrΔ)/2A, jeśli A≠0 i Δ<0 to brak rozwiązań.
które pozwalają na wymianę informacji pomiędzy urządzeniami
27.J
przyłączonymi do tej sieci (wymiana danych wewnątrz sieci, korzystanie z 1
ednostka arytmetyczno logiczna ALU - jednostka ta wykonuje operacje C++
drukarki sieciowej, komunikacja użytkowników dzięki oprogramowaniu
takie jak: dodawanie, odejmowanie, przyrównanie bitów, porównanie
sieciowemu). Rodzaje: LAN(lokalna), MAN(miejska), WAN(światowa).
wartości 2 słów, operacje iloczynowe i sumy algebraiczne, negacji,
44. Instrukcje: przypisania, warunkowa, warunkowa zagnieżdżona,
8. I nternet - globalna sieć komputerowa, umożliwiająca wymianę alternatywy, wyboru rodzaju operacji dokonujemy sygnałem sterującym.
instrukcje do realizacji pętli obliczeń, instrukcja wyboru, break,
informacji dzięki jednolitemu sposobowi kodowania i przesyłu informacji Układ nie ma pamięci własnej, dlatego współpracuje z rejestrem.
continua, skoku, typedef – składnia (przykłady).
protokołem TCP/IPv4 obecnie lub w przyszłości TCP/IPv6. I ntranet -
28. Struktura mikroprocesora – w każdym mikroprocesorze możemy
*Przypisania - w językach programowania to instrukcja w której do pewnej wewnętrzna sieć lokalna w przedsiębiorstwie lub instytucji. Serwer WWW
wyróżnić następujące elementy: ALU, interpreter rozkazów, rejestry, szynę lokacji (l-wartości) przypisuje się wartość, która będzie w nim
udostępnia swoje zasoby wewnątrz przedsiębiorstwa lub instytucji.
danych i szynę adresową.
przechowywana.
9. KONWERSJA BIN-DEC-HEX (samemu)
29. Przykładowe rejestry mikroprocesora: rejestry danych, rejestry np. int x=5; a=20; d=a+x;
10. Relacja pomiędzy ilościami informacji - 8bitów= 1bajt,
adresowe, licznik rozkazów, rejestr instrukcji, wskaźnik stosu.
*Warunkowa - umożliwia wykonanie pewnej instrukcji w zależności od 1kbajt=1024bitów, 1Mb=1024^2bajtów, 1Gb=1024^3bajtów.
30. Magistrala – zespół lini oraz układów przełączających służących do wartości wyrażenia. Wszystkie wartości różne od 0 są w języku C++
11. Cyfrowe kodowanie informacji - dowolna informacja w komputerze przesyłania sygnałów między połączonymi urządzeniami w systemach
traktowane jako prawda, równe 0 jako fałsz. Wyrażenia logiczne są liczone występuje tylko w postaci binarnej dlatego potrzebne są zatem reguły które mikroprocesorowych, złożony z trzech współdziałających szyn: sterująca -
tylko do momentu, w którym można określić jego wartość.
przekształcają różne postacie informacji na postać ciągu cyfr binarnych.
mówi, czy sygnał ma zostać zapisany, czy odczytany, adresowa - mówi,
if (warunek)
int a=4;
Proces przekształcenia informacji nazywamy kodowaniem, polega ono na
z(do) jakiej komórki pamięci sygnał ma zostać odczytany(zapisany),
{instrukcja}
if (a > 5)
zamianie każdego kodu na kod binarny. Z kolei skróceniem kodu binarnego danych - tą magistralą przepływają dane. Przykłady: PCI, PCI Express,
else
cout<<”a jest wieksze od 5”;
jest kod hexadecymalny.
PCMCIA, USB, AGP, COM…
{instrukcja}
else if
12. Co to jest kod ASCII- służy do kodowania tekstu i przesyłania go 31. Cykl adresowy - przy realizacji jakiegokolwiek rozkazu procesora z cout<<”a jest mniejsze od 5”;
między urządzeniami cyfrowymi oprócz znaków alfanumerycznych, koduje
pamięci następują: wczytywanie do układu sterowania, realizacji rozkazu.
else
także znaki sterujące pracę drukarki, przyporządkowuje znakom
Faza pobrana: 1.odczytujemy rozkaz z licznika rozkazu, a dokładniej
cout<<”a jest rowne 5”;
alfanumerycznym i znakom sterującym ciąg złożony z 8 cyfr binarnych.
odczytuje się adres komórki z nowym kodem rozkazu, adres ten jest
*Warunkowa zagnieżdżona - instrukcja if...else... wykonuje serię testów Kodowanie ASCI ma 83 znaków. Posługując się kodem ASCI możemy każdy
przesyłany magistralą danych, 2.pobranie kodu rozkazu z pamięci i
aż wystąpi jedna z poniższych sytuacji:
tekst zapisać jako ciąg bitów i na odwrót.
umieszczenie go w IR, 3.modyfikacja licznika rozkazu IPC=PC+1. Faza
-jeden z warunków w instrukcji if lub else if jest prawdziwy. W tym wypadku 13. Porównanie kombinacyjnych i sekwencyjnych - Ukł.
wykonana: 1.zdekodowanie kodu rozkazu 2.wysyłanie sygnałów sterujących wykonują się instrukcje występujące po tym warunku
kombinacyjny - układ w którym stan wyjść układu zależy wyłącznie od realizujących dany rozkaz.
- żaden z testowanych warunków nie jest prawdziwy. Program wykonuje
stanu wejść. Ukł. sekwencyjny – układ w którym stan wyjść zależy od 32. Zadania i rodzaje WE/WY. Układy pośredniczące w wymianie
instrukcję z ostatniej instrukcji else (jeżeli występuje)
stanu wejść oraz od poprzedniego stanu wyjść.
informacji miedzy pamięcią, procesorem, a urządzeniami zewnętrznymi.
-jeżeli warunek jest spełniony, po prostu wykonuje instrukcje. Np.
14. Układ synchroniczny i asynchroniczny - układem
Układy we/wy mogą być dedykowane tylko do pracy z konkretnym
if (warunek)
char c ;
asynchronicznym (niejednoczesnym) nazywamy taki układ cyfrowy
urządzeniem np. mysz PS/2, lub pracować z wieloma urządzeniami np. USB.
{if(warunek2)
clrscr () ;
którego stan wyjść ustala się po kolei. Czas ustalania się stanu wyjść nie jest Wyróżniamy układy we/wy :
{ instrukcja1}
cout << "Podaj znak" ;
sterowany. Układem synchronicznym nazywamy taki układ którego stan
*Współadresowe z pamięcią operacyjna (traktuje się te układy jako else {instrukcja2}
cin >> c ;
każdego z wyjść ustalany jest taktem zegarowym. Eliminuje to błąd mogący pewien zespól rejestrów, które są wybierane za pomocą adresów np. karta
}
if (c >= 'A' && c <= 'Z')
powstać gdy pojawia się impuls wejściowy a układ nie zdąży zadziałać na grafiki-w celu wyświetlenia grafiki.
else {instrukcja3}
cout << "litera duza\n" ;
skutek zbyt długiego czasu propagacji(zadziałania).
*Izolowane-obiekt we/wy wybierany jest poprzez podanie uprzedniego else if (c >= 'a' && c <= 'z')
15. Do czego rejestr i rodzaje - układ cyfrowy służący do krótkotrwałego sygnału sterującego. Przestrzeń adresowa układu we/wy i pamięć może się cout << "litera mala\n" ;
zapamiętywania określonej porcji bitów danych. Na wejście podaję się
pokrywać, o wyborze decyduje sygnał sterujący (sterowanie dysku IDE).
else if (c >= '0' && c <= '9')
informację do zapamiętania w rejestrze. W tym momencie na wejście
33. Tryb DMA - technika pozwalająca niektórym urządzeniom uzyskiwać cout << "cyfra/n" ;
sterujące podaje się sygnał sterujący który zapisuje informację z wejść.
bezpośredni dostęp do modułów pamięci operacyjnej, a więc bez
else
Informacja przechowywana w rejestrze pojawia się na wyjściu. Rodzaje: pośrednictwa procesora, nie zajmując jego mocy obliczeniowej.
cout << "inny znak\n" ;
przesuwny (WE i WY) szeregowy, (WE i WY) równoległy, (WE)szeregowo-
*Adresowanie w trybie rzeczywistym - adresy mają 20 bitów.
(WY)równoległy, (WE)równoległo-(WY)szeregowy, synchroniczny,
*Pętle
Natomiast rejestry mają 16 bitów. Zatem by uzyskać fizyczny adres komórki asynchroniczny.
for (inicjacja; warunek; instrukcja1) instrukcja2 ;
pamięci zawartość rejestru segmentowego mnoży się razy 16 i dodaje
16. Co to jest magistrala - w systemie mikroprocesorowym należy
{
przesunięcie (OFFSET).
zapewnić przesyłanie informacji między różnymi układami w systemie
double a = 10 ;
*Adresowanie w trybie chronionym - rejestry segmentowe
mikroprocesorowym, najprościej każdy układ połączyć z każdym, co jest
int n ;
zawierają selektory, które wskazują na pole w tablicy deskryptorów. Z
jednak fizycznie niemożliwe, więc tych połączeń jest mniej i droga którą cout << "Podaj liczbe z zakresu [1..30]: " ;
wskazanego elementu tablicy deskryptorów procesor pobiera 32-bitowy
komunikują się dane układy nazywana jest magistralą. Składa się ona z 2
cin << n ;
adres bazowy, który sumowany jest z przesunięciem. Tak powstaje adres
lub więcej układów będących nadajnikami lub(i) odbiornikami informacji.
if (n > 0 && n <= 30)
liniowy, który przy włączonym mechanizmie stronicowania zostaje poddany 17. U2(kod uzupełnień do dwóch) obecnie najpopularniejszy sposób
{
transformacji na adres fizyczny.
zapisu liczb całkowitych oraz ułamkowych przedstawionych w formacie
for (int i = 1 ; i <= n ; i++) a += (double)i ;
35. Tablica deskryptorów - w trybie chronionym procesora x86 struktura stałoprzecinkowym na bitach. Operacje dodawania i odejmowania są w nim cout << n << " != " << a << '\n' ;
ulokowana w dedykowanym segmencie, zawierająca deskryptory
wykonywane tak samo jak dla liczb binarnych bez znaku. Nazwa kodu wzięła
}
wszystkich segmentów znajdujących się w pamięci operacyjnej. Dysponując się ze sposobu obliczania liczb przeciwnych. Dla liczb n-bitowych wartości else cout << "Liczba z poza zakresu" ;
rozmiarem tablicy deskryptorów można określić maksymalny rozmiar pamięci przeciwne uzyskujemy odejmując liczbę od dwukrotnej wagi najstarszego
return 0 ;
wirtualnej, którą może zaadresować pojedynczy proces.
bitu (2·2n–1 = 2n).
}
36.Różnice w adresowaniu rzeczywistym a wirtualnym - W trybie
18. Dekodery i kodery priorytetu. Dekoder - układ kombinacyjny dodatkowo pętle:
rzeczywistym procesor 80286 jest kompatybilny z 8086 na poziomie kodu
posiadający n wejść oraz k wyjść (k=2n). Jego działanie polega na
while
do-while
wynikowego, co oznacza, że procesor może wykonywać skompilowane
zamianie kodu binarnego (o długości n), lub każdego innego kodu, na kod programy z systemu 8086 bez dokonywania w nich jakichkolwiek zmian. W
while (zmienna < 100)
do
"1 z k". Koder priorytetu – układ kodera z następującymi zmianami: na trybie adresów wirtualnych zgodność programowa z procesorem ’86 dotyczy
{
{
wejściu kodera może pojawić się więcej niż 1 wyróżniony sygnał, każde
tylko postaci źródłowych programów. Program wynikowy dla 8086 będzie
instrukcja_1;
instrukcja_1;
wejście ma przypisany swój priorytet. Na wyjściu pojawia się zakodowany błędnie wykonywany przez ‘286 pracujący w trybie adresów wirtualnych.
instrukcja_2;
instrukcja_2;
numer tego wejścia wyróżniony sygnałem który posiada najwyższy priorytet.
37.Praca wielozadaniowa w systemie jednoprocesowym - w tym
instrukcja_3;
instrukcja_3;
19. Podział pamięci półprz. RAM- pamięć ulotna służy do zapisu i samym czasie jest wykonywanych kilka zadań współbieżnie, każde na innym
}
}
odczytu. Tą pamięć dzielimy na: DRAM- są to pamięci wolne, tanie, łatwe w etapie zaawansowania. Na ogół jeden proces jest realizowany przez
while (zmienna > 10);
miniaturyzacji stosuje się je jako RAM w komputerach; SDRAM- szybkie,
określony czas, po czym ustępuje miejsca innemu procesowi, który również
*Wyboru – switch
drogie stosuje się je jako pamięci podręczne (cache) w procesorach. ROM -
jest realizowany przez określony czas. System realizuje wielozadaniowość
- instrukcja wymaga wartości całkowitej, wartość ta może być stałą pamięć nieulotna przeznaczone tylko do odczytu. Dzieli się ją na: ROM-tylko drogą przełączania procesora pomiędzy poszczególnymi zadaniami, dzięki zmienną, wywołaniem funkcji lub wyrażeniem. Switch nie działa ze
do odczytu, PROM - jednorazowego zapisu, EPROM – kasowalna(UV) pamięć
czemu każde zadanie zyskuje na swoje potrzeby pewną ilość czasu. Na
zmiennoprzecinkowymi typami danych.
tylko do odczytu, EEPROM - pamięć kasowalna i programowalna
platformach jednoprocesorowych to przełączanie procesora pomiędzy
- wartość występująca po każdej etykiecie case musi być stałą.
elektrycznie(Flash).
poszczególnymi procesami.
- C++ nie zezwala na użycie etykiet case z zakresem wartości, każda
20. Laczenie pamięci - zwiększenie liczby slów, zwiększenie liczby adresów, 38. Cel stosowania pamięci cache i współpraca z mikroprocesorem –
wartość musi występować w oddzielnej etykiecie case.
zwiększenie długości slow, zwiększenie ilości lini w szynie adresowej coraz szybsze procesory wymagają coraz szybszych układów pamięciowych.
- po każdej grupie wykonywanych instrukcji, trzeba użyć instrukcji break.
21. Skracanie czasu dostępu do pamięci. Skracanie czasu dostępu do Doszło do sytuacji w której procesor musiał odczekać kilka cyklów
Powoduje ona wyjście programu z instrukcji switch. Jeżeli nie użyje się pamięci polega na zwiększaniu częstotliwości taktowania pamięci poprzez zegarowych zanim otrzymał dane z pamięci. W celu usunięcia tego
instrukcji break program przejdzie do wykonania instrukcji po kolejnych podnoszenie taktowania szyny FSB. Niektóre płyty główne umożliwiają
ograniczenia wprowadzona została pamięć podręczna stanowiąca bufor o
etykietach case.
modyfikację timingów z jakimi pamięć pracuje (CAS Latency(CL), RAS-to-
krótkim czasie dostępu. Zastosowanie jej zaowocowało zwiększeniem
- zbiór instrukcji dla każdej etykiety lub etykiet musi być zawarty w
CAS Delay(tRCD), RAS Precharge Time(tRP), Cycle Time(Tras), Command
wydajności obliczeniowej procesorów. Sterownik cache cały czas monitoruje nawiasach klamrowych.
Rate(CR), xxxMHz). Wraz ze zmianą częstotliwości pracy magistrali
czy potrzebna informacja jest przechowywana w buforze. Jeżeli tak to mamy
- instrukcja po etykiecie default jest wykonywana gdy nie natrafiono na procesorów parametry pamięci ulegają zmianom.
do czynienia z cache hit tzn. dane nie muszą być wyszukiwane i pobierane żadną etykietę else.
22. Na czym polega odświeżanie pamięci – Odświeżanie pamięci polega od początku ponieważ znajdują się już w pamięci cache i mogą być więc
Przykład:
na okresowym odświeżaniu zawartości pamięci, ponieważ w przeciwnym
bezpośrednio wysłane do CPU, co znacznie zwiększa wydajność. W drugim
char c ;
przypadku dane mogą zaniknąć (kondensatory się rozładują). Odświeżanie przypadku mamy do czynienia z cache miss czyli należy pobrać nie obecne w clrscr () ;
musi następować w regularnych odstępach czasu oraz bezpośrednio po
cach'u adresy i dane potrzebne procesorowi. W tym celu konieczny jest
cout << "Podaj znak" ; cin >> c ;
każdej operacji odczytu i polega na ponownym zapisie odczytanej wartości w dostęp do pamięci (wolniejszej) gdzie owe dane są przechowywane i
switch (c)
tych samych komórkach pamięci.
pobranie ich co w rezultacie spowalnia pracę CPU i owocuje spadkiem
{
23. SDRAM - pamięć dynamiczna, synchroniczna, zbudowana na
wydajności komputera.
case "A":
kondensatorach i tranzystorach. Synchroniczna, ponieważ działa ona zgodnie 39.Praca potokowa procesora - polega na jednoczesnym przetwarzaniu case "B":
z przebiegiem taktu zegara procesora.
kilku zadań. Na każdy takt przypada jedno rozpoczęcie zadania, jedno
…
DRAM - ulotna pamięć półprzewodnikowa o dostępie swobodnym,
przetworzenie wszystkich zadań i jedno zakończenie zadania. Pozwala to na cout << "Duza litera" ;
której bity są reprezentowane przez stan naładowania kondensatorów. Nie maksymalnie efektywne wykorzystanie magistrali procesora oraz
break ;
wymagają stałego zasilania, a jedynie okresowego odświeżania zawartości, zwiększenie wydajności procesora.
case "a":
przez co zużywają mniej energi . Komórka pamięci dynamicznej składa się z 40.*FSB(Front Side Bus) - magistrala łącząca procesor z kontrolerem case "b":
mniejszej liczby elementów niż analogiczna komórka pamięci statycznej.
pamięci.
…
Powyższe cechy pozwalają na większe upakowanie elementów w układach
*FCore - częstotliwość rdzenia procesora (fsb x mnożnik).
cout << "Mala litera" ;
scalonych, niższe koszty produkcji, budowa układów pamięci o większych
*DDR(Double Data Rate) - 2x większa przepustowość(FSBx2).
case "0":
pojemnościach.
41. Złożoność algorytmu –zależność między mocą obliczeniową a
case "1":
24. ROM i rodzaje – pamięć tylko do odczytu. Rodzaje: PROM -
rozmiarami wprowadzonych danych z zakresu danego zagadnienia.
…
jednorazowego zapisu, EPROM – kasowalna(UV) pamięć tylko do odczytu,
42. *Algorytm iteracyjny - algorytm, który uzyskuje wynik przez cout << "Cyfra" ;
EEPROM - pamięć kasowalna i programowalna elektrycznie(Flash).
powtarzanie danej operacji określoną ilość razy.
break ;
default :
cout << "Inny znak" ;
*
Cd 44 instrukcja Break – umożliwia wyjście z pętli Instrukcja ta CD51Koniunkcja bitowa
powoduje przejście programu do końca aktualnej pętli. Składnia dla pętli for: 50. Struktura programu w języku C++
for (inicjalizacja, test, uaktualnienie)
Struktura programu:
CD51 *Koniunkcja bitowa
{
#include <iostream> // dyrektywa preprocesora dołączająca standardową Koniunkcja bitowa jest to mnożenie pojedynczych bitu. Koniunkcja daje
//sekwencja instrukcji nr 1
// bibliotekę wejścia - wyjścia
wynik jeden na danej pozycji, gdy w we wszystkich zmiennych na tej pozycji if (warunek wyjścia z pętli) break ;
using namespace std; // wybór przestrzeni nazw
jest jedynka. Jeżeli tylko na jednym miejscu jest 0 to wynikiem jest 0.
//sekwencja instrukcji nr 2
int main() //główny program
Przykład:
}
{
01101011 - zmienna1
//sekwencja instrukcji nr 3
double a = 3;
11001101 - zmienna2
Przykład:
double b, c;
01001001 - wynik
char s [8], FindChar ;
// Podaj ciąg
Składnia:
zmienna1 & zmienna2
znaków (string) s
cout << "Wprowadz liczbe: "; // wypisujemy na ekran tekst
*Różnica symetryczna
for (i = 0 ; i < strlen (s) ; i++) // strlen() - zwraca długość
cin >> b; // wprowadzamy dane do zmiennej b Wynikiem różnicy symetrycznej jest na danej pozycji jedynka tylko w tedy łańcucha
gdy tylko w jednej zmiennej na danej pozycji jest jedynka. W przeciwnym if (s [i] == findchar) break ;
// znak do wyszukiwania
c = a * b; // obliczanie wartości wyrażenia arytmetycznego wypadku jest 0.
FindChar
01101011 - zmienna1
if (i < strlen (s)) cout << " " << i << '\n' ;
// wyprowadzanie tekstu na ekran
11001101 - zmienna2
*c ontinue - Instrukcja ta kończy działanie przebiegu kodu pętli - czyli jeżeli cout << endl << a << " * " << b << " = " << c; 10100110 - wynik
gdzieś w pętli wystąpi instrukcja continue to program pomija instrukcje return 0;
Składnia:
zmienna1 ^ zmienna2
występujące po niej i przystępuje do ponownego sprawdzenia warunku.
}
*Alternatywa bitowa
Instrukcja ta powoduje przedwczesne, bezwarunkowe zakończenie
51. Operatory arytmetyczne, relacji, logiczne, bitowe.
Wynikiem alternatywy bitowej jest na danej pozycji jedynka w tedy gdy
wykonania wewnętrznej instrukcji pętli i podjęcie próby realizacji następnego Operatory relacji:
przynajmniej w jednej zmiennej na danej pozycji jest jedynka. W
cyklu pętli.
*operator „>” oznacza: większy od..
przeciwnym wypadku jest 0.
*Instrukcje skoku - goto
4 > 2; //prawda
01101011 - zmienna1
Instrukcja goto jest postrzegana przez programistów jako spadek po
3 > 8; //fałsz
11001101 - zmienna2
BASIC'u, ponieważ za jej pomocą możemy wykonywać skoki do
Całe wyrażenie ma wartość prawda, gdy warunek jest prawdziwy
11101111 - wynik
deklarowanej etykiety. Większość domorosłych programistów uważa, że jej
*operator „< ” czyli: mniejszy od..
Składnia:
zmienna1 | zmienna2
stosowanie jest przykładem złej znajomości rzeczy, ale tak na prawdę,
21 < 15; //fałsz
52. Na czym polega inkrementacja i dekrementacja zmiennej?
użycie goto w uzasadnionym przypadku ma swój sens. Konstrukcja goto jest 11 < 23; //prawda
Inkrementacja/dekrementacja polega na dodaniu/odjęciu od zmiennej
prosta:
Wyrażenie jest prawdziwe tylko wtedy, gdy wartość stojąca po lewej stronie jedynki
goto nazwa_etykiety; // a w kodzie programu umieszczamy:
jest mniejsza od wartości będącej po stronie prawej.
#include <iostream>
nazwa_etykiety;
*operator „>=” większy lub równy od..
using namespace std;
instrukcje_etykiety;
2 >= 3; //fałsz
Ograniczenia instrukcji goto nie pozwalają jej na przeskoczenie definicji 14 >= 13; //prawda
int main()
zmiennej, po każdej etykiecie musi wystąpić co najmniej jedna instrukcja.
Wyrażenie jest prawdziwe tylko wtedy, gdy wartość stojąca po lewej stronie
{
Instrukcja ta może przydać się choćby do natychmiastowego opuszczenia
jest większa lub równa wartości będącej po stronie prawej.
int a = 5;
wielokrotnie zagnieżdżonej pętli. Ponadto goto nie może spowodować
*operator „<=” mniejszy lub równy od
cout << a << endl;
przejścia do wykonania instrukcji znajdującej się poza funkcją zawierającą 21 <= 3; //fałsz
cout << ++a << endl; //preinkrementacja
goto.
10 <= 18; //prawda
cout << a++ << endl; //postinkrementacja
*Typedef- Język C++ umożliwia zdefiniowanie swoich własnych typów Wyrażenie jest prawdziwe tylko wtedy, gdy wartość stojąca po lewej stronie cout << a << endl;
danych poprzez
jest mniejsza lub równa wartości będącej po stronie prawej.
return 0;
zastosowanie instrukcji typedef. Instrukcja ta jest środkiem, dzięki któremu
*operator „==” służy do porównywania dwóch wartości. Gdy wartości są
}
program może
równe wyrażenie jest prawdą i odwrotnie.
Powyższy program wypisze nam na ekranie:
rozszerzyć podstawowe typy danych języka C. Ogólna postać instrukcji
42 == 42; //prawda
5
typedef jest na-
4 == 14; //fałsz
6
stępująca,
Jeśli liczby są takie same wyrażenie jest prawdziwe.
6
typedef deklaracja_typu;
*operator „!=” służy do porównywania dwóch wartości. Gdy wartości są 7
gdzie deklaracja_typu jest identyczna jak deklaracja zmiennej, poza tym że jednakowe wyrażenie jest fałszem i odwrotnie.
Jak widać na powyższych przykładach rozróżniamy 2 typy inkrementacji -
zamiast nazwy_
28 != 28; //fałsz
tzw. preinkrementację i postinkrementację. Obie powodują zwiększenie
zmiennej jest użyta nazwa typu. Na przykład instrukcja
6 != 11; //prawda
wartości zmiennej o 1 jednak jest między nimi pewna różnica. Otóż operator typedef int count;
Operatory logiczne:
preinkremencacji
przykład:
Operatory te służą do obliczania wartości "prawda" lub "fałsz". Warunek (++a)
main()
prawdziwy daje wartość 1 natomiast fałszywy 0.
zwraca wartość już zwiększoną o 1 (w tym przypadku będzie to 6) natomiast
{
*Negacja logiczna zamienia prawdę w fałsz, a fałsz w prawdę. Np. jeżeli operator postinkrementacji
typedef int group[10]; /* Utworzenie nowego typu
wyrażenie: a==b jest prawdziwe i do niego
(a++)
'group' */
zastosujemy wyrażenie !(a==b) to w wyniku otrzymamy fałsz.
zwraca wartość zmiennej przed procesem inkrementacji (tutaj zwróci
group totals; /* Przypisanie nowego typu
Składnia:
!argument
wartość 6 natomiast wartość zmiennej 'a' będzie już wynosić 7).
danych zmiennej */
*Iloczyn logiczny
for (i = 0; i < 10; i++)
Wynikiem iloczynu logicznego jest prawda tylko wtedy gdy oba argumenty Dokładnie tak samo sprawa wygląda dla operatora dekrementacji -
totals[i] = 0;
też są prawdziwe. Jeżeli tylko jeden jest
predekrementacji (--a) i postdekrementacji (a--).
return (0);
fałszywy to wynikiem jest fałsz.
}
Składnia:
argument1 && argument2
53. Podaj przykłady wykorzystania operatorów: sizeof, rzutowania.
45. Jakie znasz typy standardowe?
*Suma logiczna
*Operator sizeof
Typ Boolean
Wynikiem sumy logicznej jest prawda wtedy jeżeli przynajmniej jeden
Operator sizeof przekazuje liczbę bajtów będącą rozmiarem wyrażenia lub Typ Integer
argument jest prawdziwy. Tylko jeżeli oba są fałszywe to wynikiem jest specyfikatora typu. Może on występować w jednej z dwóch postaci:
Typ Float
fałsz. Np:
sizeof (specyfikator_typu);
Typ Character
01001010 - zmienna1
sizeof wyrażenie;
*bool - przechowuje informacje typu: prawda lub fałsz. Zajmuje 1 bajt 00101001 - zmienna2
*Operator rzutowania
pamięci.
01101011 - wynik
Zmiana typu danych: operator rzutowania
*char - typ znakowy. Można za jego pomocą przechowywać znaki w kodzie Składnia:
argument1 || argument2
Operator rzutowania służy do zmiany typu danych na inny:
ASCII (American Standard Code for Information Interchange) lub innym
*Równość
(typ_danych)x;
stosowanym na danej maszynie.
Wynikiem jest prawda w tedy gdy wartości obu argumentów są takie same.
gdzie typ_danych oznacza ten typ danych, na który ma zostać zamieniona
*short - short integer, czyli krótki całkowity. Zmienne typu short są Składnia:
argument1 == argument2
wartość zmiennej x.
zapisywane na dwóch bajtach.
*Nierówność
Np. deklaracja:
*int - integer, czyli całkowity. Zapisywany jest na czterech bajtach.
Wynikiem jest prawda w tedy gdy wartości obu argumentów są różne.
(float)5;
*long - long integer, czyli dla odmiany długi całkowity, na 4 bajtach.
Składnia:
argument1 != argument2
spowoduje zmianę stałej całkowitej 5 (typu int) na stałą
*float - typ zmiennoprzecinkowy pojedynczej precyzji, 4 bajty.
Operator arytmetyczne:
zmiennoprzecinkową 5.0 (typu float).
*double - typ zmiennoprzecinkowy zapisywany na 8 bajtach (większa
*Operator if
dokładność)
Jest to jedyny w języku C++ operator, w którym śa wymagane 3
54.W jaki sposób można przesyłać argumenty do funkcji –
*long double - można zapisać duże liczby z ogromną dokładnością (10
argumenty. Ma on następującą składnię:
porównaj te sposoby?
bajtów)
warunek ? wyrażenie1 : wyrażenie2
*Przesyłanie argumentów funkcji przez wartość: występują tutaj
*void - typ pusty oznaczający brak wartości (stosowany w ANSI C). Żadna Zawsze na początku jest obliczany warunek. Jeżeli jest on prawdziwy ( !=
argumenty formalne formalne i aktualne. Argumenty formalne to jest to, jak zmienna nie może być typu void. Tylko parametry przekazywane do funkcji 0 ) to jest obliczany wrażenie1 a jeżeli warunek jest równy 0 to jest
na parametry mówi sobie w środku funkcja, natomiast argumenty aktualne mogą być typu void (oznacza wtedy, że do funkcji nic się nie przekazuje) lub obliczane wyrażenie2.
to te, co aktualnie stosujemy w konkretnym wywołaniu funkcji.
zwracane przez funkcję (funkcja nic nie zwraca). Oprócz tego typ void może
*Operator zwiększania
*Przesyłanie argumentów przez referencje: ( przez przezwisko) , być stosowany przy tworzeniu pewnych typów złożonych.
Dodaje on liczbę 1 do zmiennej przy której ten operator występuje. Jest to przesyłanie argumentów przez referencje pozwala tej funkcji na
*unsigned - typ bez znaku (tylko wartości dodatnie)
skrót ot wyrażenia:
modyfikowanie zmiennych ( nawet lokalnych) znajdujących się poza ta
46. W jaki sposób możesz zdefiniować typy pochodne (własne)?
a = a + 1;
//lub
funkcja.
Typy pochodne – tworzymy na podstawie typów fundamentalnych za
a += 1;
55.Na czym polega przeładowanie funkcji.
pomocą operatorów deklaracji
Składnia:
Przeładowanie funkcji: następuje wtedy, gdy w danym zakresie
* - wskaźnik danego typu – int *w;
++zmienna
ważności jest więcej niż jedna funkcja o tej samej nazwie. To, która z tych
& - referencja do danego typu
zmienna++
funkcji zostanie wykonana, zależy od liczby lub typu argumentów, z którymi
[] – tablice danego typu
*Operator zmniejszania
dana funkcja jest wywoływana.
() – funkcja zwracająca dany typ, o parametrach danego typu
Odejmuje on liczbę 1 do zmiennej przy której ten operator występuje. Jest 56. W jaki sposób definiuje się tablice i w jaki sposób przekazuje
47.Jakie znasz zakresy ważności zmiennej (obiektu)?
to skrót ot wyrażenia:
się je do funkcji (przykłady)?
- czas życia obiektu - od momentu gdy obiekt został zdefiniowany do
a = a - 1; lub
Tablica to ciąg obiektów tego samego typu, które zajmują ciągły obszar w momentu, kiedy przestaje istnieć,
a -= 1;
pamięci. Tablice są typem pochodnym czyli biorąc typ int tablica będzie typy
- zakres ważności nazwy – zakres w którym nazwa jest znana kompilatorowi, Składnia:
int.
- zakres lokalny – od punktu deklaracji do końca bloku,
--zmienna
Tablice przesyła się podając funkcji tylko adres początku tej tablicy. Nazwa
- zakres globalny – dla nazwy zadeklarowanej poza klasą lub funkcją, zasięg zmienna--
tablicy jest równocześnie adresem zerowego jej elementu.
od punktu deklaracji do końca pliku zawierającego tą deklarację,
Operatory bitowe :
definicja np. int liczba[20];
- zakres klasy – nazwa widziana tylko przez metody klasy, klas pochodnych i
*Przesuwanie bitów w lewo
57. Co pojawi się na ekranie monitora w wyniku wykonania
zaprzyjaźnionych
Zakładamy że operacja dzieje się na zmiennych typu unsigned char. Jeżeli fragmentu programu …..
48. Definiowanie(utworzenie) zmiennej. Podczas definiowania najpierw zmienna ma wartość przedstawioną w
58. Zdefiniuj i napisz do czego wykorzystuje się wskaźniki?
podajemy typ zmiennej, później jej nazwę oraz jej wartość.
postaci binarnej:
Wskaźnik to zmienna (zwana zmienna wskaźnikową) która zawiera adres typ zmienna = wartość;
00100100
pierwszej komórki pamięci, w której przechowana jest inna zmienna. Jeśli to wynikiem takiej operacji zmienna << 2 będzie wynik:
zmienna zajmuje więcej niż jedną komórkę pamięci to wskaźnik wskazuje na W ten sposób zdefiniowaliśmy zmienną, którą zainicjalizowaliśmy określoną 10010000
pierwszą z tych komórek. Dla każdego wskaźnika określany jest jego typ.
wartością początkową.
to polecenie przesuwa bity w lewo o dwie pozycje. Argument traci bity które Wskaźnik typu int wskazuje na zmienną typu int. Dzięki temu, kompilator 49. Co to jest enum?
w wyniku przesunięcia znajdą się poza nim. po prawej stronie na miejsce wie ile komórek w pamięci zajmuje zmienna rozpoczynająca się w komórce, Typ wyliczeniowy enum.
brakujących bitów wstawia zera. Składnia:
na którą wskazuje wskaźnik. Nierozłącznie ze wskaźnikami związane są dwa Typ wyliczeniowy jest bardzo sprytnym rozwiązaniem polepszającym
zmienna << liczba bitów
operatory. Są to operator wyłuskania, który jest zapisywany jako gwiazdka czytelność kodu oraz
*Przesuwanie bitów w prawo .
(*) oraz operator pobrania adresu &. Oba te operatory są operatorami zmniejszającym ilość błędów w programie. Stosuje się go w wypadku, gdy Jeżeli zmienna ma wartość przedstawioną w
przedrostkowymi (zapisuje się je przed zmienną) oraz jednoargumentowymi.
znamy ilość pewnych
Zakładamy że operacja dzieje się na zmiennych typu unsigned char
Zastosowanie wskaźników: wskaźniki stosuje się w różnych sytuacjach, stanów układu, oraz jeśli jesteśmy je w stanie wyliczyć. Klasycznym
postaci binarnej:
a mianowicie gdy chodzi nam o:
przypadkiem może być typ
00100100
- ulepszenie pracy z tablicami
użyty do wyliczenia dni tygodnia:
to wynikiem takiej operacji zmienna >> 1 będzie wynik:
- funkcje mogą zmieniać wartość przesyłanych do nich argumentów
00010010
- dostęp do specjalnych komórek pamięci
enum dni_tygodnia = {poniedzialek=1, wtorek, sroda,
to polecenie przesuwa bity w lewo o jedną pozycję. Argument traci bity
- rezerwacje obszarów pamięci
czwartek, piatek, sobota, niedziela};
które w wyniku przesunięcia znajdą się poza nim. po lewej stronie na
int x=1; //deklaracja zmiennej int
miejsce brakujących bitów wstawia zera. Składnia:
int *wskaznik; //deklaracja wskaźnika na typ int
Taka konstrukcja jest jednak mało przydatna. Najlepiej typ enum połączyć z zmienna >> liczba bitów
wskaznik = &x; //przypisanie adresu zmiennej wskaźnikowi
instrukcją typedef, w wyniku której otrzymujemy nowy typ:
*Negacja bitowa
*wskaźnik = 99; //zapis równoważny z "x=99;"
Negacja bitowa zamienia w zmiennej wszystkie zera na jedynki i jedynki na Pierwsza linia przedstawionego kodu jest oczywista więc nie będziemy jej typedef enum { poniedzialek=1, wtorek, środa, czwartek,
zera. Jeżeli mamy zmienną o wartości 10011010 to jej negacja bitowa
spejcajlnie analizować. W drugiej lini zadeklarowaliśmy wskaźnik na typ int.
piątek, sobota, niedziela}dniTygodnia;
wygląda tak: 01100101
Zatem jak można się domyślać deklaracja wskaźnika wygląda następująco: Składnia:
~zmienna
<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