Logické obvody (Hardvérová časť)
Logické obvody (Hardvérová časť)
Boolová Algebra
- Zahŕňa logické funkcie
,ktoré sa využívajú v informatike a elektrotechnike.
- Na základe týchto funkcií sa vytvárajú logické hradlá ,z ktorých
sú zostavené tranzistory, integrované obvody a procesory.
- Boolová algebra využíva binárnu
sústavu.
- Premenné v boolovej algebre teda môžu nadobúdať hodnoty 0 alebo 1.
- Vstupné hodnoty premenných
a výslednú hodnotu funkcie zapisujeme do pravdivostnej tabuľky.
- Vstupné hodnoty označujeme ako nezávislé premenné,
výstupnú hodnotu označujeme ako závislo-premennú.
Negácia
– Je najjednoduchšou
boolovskou operáciou, pri negácií nadobúda premenná opačnú hodnotu.
– Pravdivostná tabuľka:
–
Negácia sa označuje rovnou vodorovnou čiarou nad premennou.
Logický súčet
– Je operácia
disjunkcie (zjednotenie).
– Býva tiež označovaná
– Schematicky ju môžeme znázorniť
takto:
–
Pre operáciu logického súčtu je charakteristická spojka alebo.
A OR B
A +
B
A alebo B
A ∨
B
Logický súčet
– Je operácia konjunkcie alebo prieniku, označuje sa aj
takýmto znakom ∧.
– Pre logický súčin sú typické spojky a, aj,
i.
A ∧ B
A &
B
A · B
A AND B
– Výsledná hodnota funkcie je jedna len vtedy, ak všetky nezávislé premenné majú hodnotu 1.
Ďalšie
Boolovské funkcie
NAND (Negovaný súčin)
– Funkcia NAND má hodnotu 1, ak aspoň 1
nezávislá premenná má hodnotu 0.
NOR
(Negovaný súčet)
– Funkcia NOR má hodnotu 1, ak všetky vstupy majú hodnotu 0.
XOR
(Exkluzívny súčet)
– Funkcia XOR má hodnotu 1, ak vstupy majú rozdielne hodnoty.
Karnaughové
mapy
- Slúži na zjednodušený zápis funkcie.
- Aby bola mapa karnaughovou mapou musí spĺňať tieto
podmienky:
- Karnaughová mapa má toľko políčok koľko má pravdivostná tabuľka riadkov (2n).
n=počet vstupov
- V Karnaughovej mape musí existovať 1 bunka, v ktorej majú všetky nezávislé vstupy
hodnotu 0.
- V Karnaughovej mape musí existovať 1 bunka, v ktorej majú všetky nezávislé vstupy hodnotu 1.
- Pre
každý nezávislý vstup musí platiť ,že pre polovicu buniek Karnaughovej mapy má vstup hodnotu 0 a pre polovicu buniek Karnaughovej mapy má
vstup hodnotu 1.
2 spôsoby zápisu Karnaughovej mapy
- Do Karnaughovej mapy zapisujeme
hodnotu funkcie, nie hodnotu vstupov.
Preklápacie obvody
- Je to obvod, ktorý sa dokáže
dostať zo stavu 0 do stavu 1 a naopak.
- Monostabilný
– Má stabilný iba jeden
stav, ak mu dáme povel (impulz), preklopí sa do opačného stavu a po určitom čase sa vráti do svojho stabilného stavu.
–
Napríklad: svetlá vchodoch bytovke sú v stabilnej 0, po stlačení vypínača sa dajú do stabilnej 1 a po určitom čase sa vrátia do stabilnej
0 (zhasnú) a infrasnímač.
- Bistabilný
– Má stabilné oba stavy, ak je v nule
a dostane povel, preklopí sa do jednotky a na ďalší povel sa preklopí do nuly.
– Napríklad: mikrospínač na
televízory.
- Astabilný
– Tento klopný obvod nemá stabilný ani jeden stav a preklápa
sa z 0 do 1 alebo z 1 do 0.
– Napríklad: blikač na bicykli.
Hradlá
- Sú
základnými stavebnými prvkami logických obvodov.
- Každé hradlo má vstupy a jeden výstup.
- Pokiaľ hradlo
funguje správne, jeho výstupná hodnota je závislá iba na vstupoch a môžeme ju popísať ako jednu zo základných funkcií boolovej
algebry.
B) Programovanie (Softvérová
časť)
Programovanie
Programovacie
jazyky
- Programovacie jazyky sú jazyky, ktoré slúžia k tvorbe počítačových programov.
- Možno
ich rozdeliť z mnohých hľadísk.
- Najčastejšie sa však delia takto:
- Programovacie jazyky
nižšej úrovne
- Sú primitívne jazyky, ktorých príkazy sú zhodné s príkazmi procesora. To znamená, že
procesor vykonáva presne tie inštrukcie, ktoré programátor napíše.
- Tieto jazyky sú závislé na svojom procesore a sú
neprenositeľné na iný nepríbuzný procesor (napríklad: program z 386-tky na Pentiu pôjde, ale na Atari s procesorom Motorola už nie).
- V praxi to vyzerá tak, že programátor musí vypisovať každý detail a aj jednoduchý program má neúmerne zložitý zdrojový
kód.
- Na druhej strane sa takto programátor dostane i k funkciám počítača ku ktorým sa pomocou vyššieho programovacieho
jazyka nedostane.
- Patrí sem jazyk symbolických adries ASSEMBLER a strojový kód ( to je to čo vidíme, keď sa nám podarí
natiahnuť obsah .exe súboru do textového editora).
- Programovacie jazyky vyššej
úrovne
- Problémovo orientované programovacie jazyky.
- Ich zdrojový kód je oveľa
zrozumiteľnejší, jeho štruktúra je logická a nie sú závislé na type procesora, či strojových princípoch
počítača.
- Patria sem všetky programovacie jazyky okrem ASSEMBLERA, napríklad: Pascal, Basic, Fortran, Prolog, Algol, Imagine,
C++, C#, Java a iné.
- Často sa uvádza, že jazyk C je akýmsi prechodom medzi nižšími a vyššími programovacími jazykmi, ale
bližšie má k vyšším.
- Podľa spôsobu prekladania programu delíme programovacie jazyky
na:
- Interpretované programovacie jazyky
- Sú programovacie jazyky, ktoré sa
prekladajú do strojového kódu priebežne, po riadkoch, teda po jednotlivých príkazoch. Takto preložené príkazy sa hneď aj vykonávajú, preto
je vykonávanie programov v interpretovaných programovacích jazykoch pomalšie.
- Kompilované programovacie
jazyky
- Tieto jazyky sú prekladané do strojového kódu pomocou kompilátora, ktorý neprekladá každý príkaz
samostatne, ale preloží celý zdrojový kód naraz a vytvorí z neho spustiteľný exe súbor a až potom sa tento exe súbor spustí a my vidíme
čo sme naprogramovali.
- Ďalej môžeme programovacie jazyky rozdeliť na:
-
Štruktúrované programovacie jazyky
- Využívajú programové štruktúry, ktoré sa dajú graficky znázorniť
pomocou štrukturogramov. Tieto štruktúry vytvárajú nemennú kostru celého programu, tvoria telo hlavnej časti programu a aj telá vnorených
podprogramov. U týchto programovacích jazykoch nie je možné vytvárať vlastné dátové štruktúry.
- Objektovo
orientované programovacie jazyky
- Pracujú s objektami, ktoré obsahujú premenné a s nimi súvisiace funkcie.
Majú svoje vlastnosti alebo zdedené vlastnosti a komunikujú s ostatnými objektami.
Programovacie jazyky
C
- Jazyk C je štruktúrovaný kompilovaný programovací jazyk.
- Programovací jazyk vyššej
úrovne.
- Základná štruktúra programu DEV C++
Jazyk C
- Jazyk C je
univerzálny štruktúrovaný programovací jazyk.
- Bol navrhnutý a implementovaný pod operačným systémom UNIX a takmer celý
UNIX je aj v C-čku napísaný. Na UNIX sa ale nijako neviaže a neviaže sa ani na žiadne hardvérové alebo softvérové vybavenie počítača
(hovoríme že je MULTIPLATFORMNÝ).
- Jazyk C je jazykom kompilovaným.
- Priebeh kompilácie súboru. Ako prebieha
kompilácia, od zdrojového kódu napísaného v nejakom vhodnom editore (odporúčam DEV C++) až po spustiteľný EXE súbor, je znázornené na
obrázku.
- Tento jazyk patrí k štruktúrovaným programovacím jazykom, čo znamená že využíva iba dané údajové štruktúry
nie je možné v ňom vytvárať objekty z reálneho sveta.
Základné pojmy a zásady v jazyku
C
- C-čko je case sensitive jazyk, z toho vyplýva že
rozlišuje malé a veľké písmená. V praxi to znamená, že premenna, Premenna a PREMENNA sú tri rôzne
identifikátory.
- Kľúčové slová jazyka C (napr. if, while, register….) MUSIA byť písané
malými písmenami. Ak sú písané veľkými písmenami alebo kombináciou veľkých a malých písmen, neberú sa
ako príkazy ale ako identifikátory.
- Zdrojový súbor .c ktorý je vytvorený v editore je nutné dopĺňať o
hlavičkové a zdrojové súbory. Hlavičkové súbory sú súbory, ktoré obsahujú štandardné funkcie
vstupu/výstupu, matematické funkcie, operácie na úpravu textových reťazcov a podobne. Tieto súbory .h používame najčastejšie. Vkladáme ich
príkazom #include, napríklad #include
- Biele znaky (white spaces) sú znaky, ktoré sú dôležité ale na
obrazovke ich nevidíme. Sú to tzv. oddeľovacie znaky ako medzera, tabulátor, nový riadok, nová stránka, návrat na začiatok riadka a
pod.
- Komentáre sú dôležitou súčasťnou zdrojového kódu, pretože sprehľadňujú program. Komentár
slúži k tomu aby sa v našom zdrojovom kóde vyznal ktokoľvek cudzí alebo i my sami, keď sa k tomuto programu vrátime po nejako čase. Komentár
môže byť jednoriadkový //toto je jednoriadkový komentár, alebo viac riadkový /* toto je viac riadkový komentár, ktorý môže byť
ľubovoľne dlhý */.
Dátové
typy
Premenná
- Premenná je miesto v pamäti, ktoré má svoje meno, adresu,
dátový typ a hodnotu.
- Počas behu programu môže premenná nadobúdať rôzne hodnoty.
- Od dátového typu
závisi aké veľké miesto v pamäti bude zaberať a aké hodnoty môžeme do nej
vkladať.
Konštanta
- Konštanta je rovnako ako premenná miesto v pamäti, ktoré má svoje
meno, adresu, dátový typ, ale na rozdiel od premennej nemôže počas behu programu meniť svoju hodnotu.
- Hodnotu konštantnej
môžeme zmeniť pred spustením programu alebo po jeho ukončení.
Dátové typy v jazyku
C
- Najbežnejší a najpoužívanejší dátový typ je celé
číslo.
- Int (integer)
- Celé
číslo.
- Zaberá v pamäti 2B ( – 35 000 až 35 000 ).
- Tento integer môže
byť short integer (short int) alebo long integer (long int).
-
Float
- Reálne číslo.
- Zaberá v pamäti 4B.
-
Double
- Dvojnásobok reálneho číslo.
- Long
double
- Char
- Zaberá v pamäti 1B.
- Napríklad: „ A “, „ X
“, „ & “, „ * “
Deklarácia a definícia premennej
Deklarácia
premennej
- Oznamuje procesoru, že budeme používať danú premennú, aby sme na ňu vyhradili v pamäti
miesto.
dátový typ názov premennej;
int vek; ← deklarácia
Definícia
premennej
- Pri definovaní premennej priradzujeme k premennej hodnotu.
- Je
možné urobiť súčasne deklaráciu a definíciu premennej súčasne.
int vek = 18; ← deklarácia s
definíciou
Operátor
Matematické
operácie
- Operátor sčítania +
- Operátor odčítania -
- Operátor násobenia
*
- Operátor delenia /
- Operátor zvyšku po celočíselnom delení % (nazýva sa
modulo)
Typy delenia:
int/int => int
celočíselné
delenie
7 / 2 = 3 12 / 2 = 6
zvyšok => 7 % 2 = 1 12 % 2 = 0
float/float => float
7 / 2.0 = 3.5
float/int => float
7 / 2 = 3.5
rovná sa = =
Logické
operátory
- Rovná sa = =
- Priradenie =
- Nerovná sa ! =
- Väčší
>
- Menší <
- Väčší alebo rovný > =
- Menší alebo rovný < =
- And
&&
- OR ||
Inkrementácia
- Zvyšovanie hodnoty premennej
o jedna.
- a++ => postfixový zápis
- ++a => prefixový zápis
a = 6;
b =
a;
b => 6
- Najprv sa vykoná priradenie a až potom inkrementácia.
- Najprv sa a inkrementuje
a až následne priradí hodnotu premennej b.
Dekrementácia
- Znižovanie hodnoty
premennej o jedna.
- a-- => postfixový zápis
- --a => prefixový zápis
- Strácame
efektívnosť, pretože používame moc prostriedkov.
- Printf vypisuje na obrazovku.
Formáty
načítavania a výpisu premenných
- Pred každým formátom sa udáva znak %.
%c => char
=> znak
%d => int => desiatková sústava
%x => int => šestnástková sústava, malé
písmená
%X => int => šestnástková sústava, veľké písmená
%o => int => osmičková
sústava
%s => reťazec => niekoľko znakov
%f => float => reálne
čísla
Načítanie hodnoty premennej
- Hodnoty načítame do premennej z klávesnice
príkazom scanf.
Syntax:
Vetvenie
- Vetvenie
používame v programe vtedy, ak máme viacero možností akými môže program pokračovať ďalej.
- Vetvenie delíme na jednoduché
a úplné.
Jednoduché vetvenie
- Používa sa vtedy, ak sa má vykonať nejaká
činnosť, ak je podmienka splnená.
- Ak podmienka splnená nie je, program ďalej pokračuje vo vykonávaní
príkazov.
- Príkazy za IF sa vykonajú iba vtedy, ak je podmienka splnená. Ak podmienka splnená nie je, príkazy
ignorujú.
Syntax:
if
(podmienka)
{príkaz(y);}
Úplné vetvenie
- Úplné vetvenia sa používa
vtedy, ak má program niečo vykonať, ak je podmienka splnená a ak má program niečo vykonať aj keď podmienka splnená nie
je.
- Teda či podmienka splnená je alebo nie je, program vždy vykoná nejaké príkazy.
Zložené
podmienky
- Sú podmienky, ktoré pozostávajú z dvoch a viacerých podmienok.
- Môžeme ich spojiť
logickým operátorom AND alebo OR.
- Ak ich spojíme logickým operátorom AND, musia byť splnené všetky podmienky v zloženej
podmienke, aby sa príkaz vykonal.
- Ak je spojená logickým operátorom OR, stačí keď bude splnená iba jedna
podmienka.
Case switch
- V prípadoch, keď máme niekoľko možností, že premenná môže
nadobúdať konkrétnu hodnotu, nie je výhodné používať príkaz if, ale príkaz switch case.
- Tento príkaz, sa ale nedá
použiť, ak chceme premennej nadefinovať nejaký interval, dá sa použiť jedine vtedy, ak premennej definujeme nejakú
hodnotu.
Názorný príklad na ukážku tejto funkcie:
switch-case
switch
(premenná) {
case ’a‘: printf („Ahojn“); break;
case ’b‘: printf („Čavesn“);
break;
case ’c‘: printf („Sewan“); break;
default: printf („Nezadal si žiadnu
z možnostín“);
}
Praktický príklad na ukážku tejto funkcie:
switch (typ)
{
case ’k‘: if (váha<=20) {printf („Spaľovňan“);}
else {if (váha<=200) {printf („Lokálne
smetiskon“);}
else {printf („Centrálne smetiskon“);}}
break;
case ’s‘: if (váha<=10)
{printf („Recyklácian“);}
else {printf („Triedenien“);}
break;
default: printf („Nezadali ste
korektné údaje.n“);
}
Cykly
- Cyklus je opakovanie sa nejakého algoritmu
(postupnosti príkazov).
- Rozlišujeme tri druhy cyklov:
- Cyklus so známym počtom opakovaní
(FOR)
- Používame ho vtedy, ak vopred vieme koľkokrát potrebujeme aký cyklus
zbehol.
- Cyklus s podmienkou na začiatku (WHILE)
- Cyklus sa vykoná iba vtedy,
ak je podmienka splnená, to znamená, že sa nemusí vykonať ani raz.
- Cyklus s podmienkou na konci
(DO-WHILE)
- Cyklus sa vykonáva dovtedy, kým je podmienka platná.
- POZOR tento cyklus zbehne vždy
aspoň raz.
Cyklus so známym počtom opakovaní (FOR)
- ZADANIE PRÍKLADU: Vytvorte program,
ktorý načíta tri premenné a vypíše najväčšiu.
#include
int main () {
int cislo; int max
= – 30 000;
int i;
for (i=1; i<4; i++) {
scanf („%d“, &cislo);
if
(cislo>max) {max=cislo;}
}
printf („Najväčšie číslo je %dn“,
max);
Syntax:
Generovanie náhodného
čísla
Cyklus s podmienkou na začiatku
(WHILE)
Syntax:
while (podmienka)
{
telo cyklu (príkazy;)
}
while (a<10)
{
b++;
a++;
}
Cyklus s podmienkou na konci
(DO-WHILE)
Syntax:
do {
príkaz (y);
} while
(podmienka);
do {
scanf („%d“, &x);
} while
(x<10);
Polia
Praktický príklad na ukážku tejto
funkcie:
#include
//Vytvorte program ,ktorý vygeneruje 30 náhodných čísel do 100 a uloží ich do poľa.
Ďalej program načíta 10 čísel od užívateľa a tiež ich vloží do ďalšieho poľa. Program zistí či sú čísla ,ktoré sú v jednom aj
druhom poli vypíše ich.
int main () {
srand (time(NULL));
int i, j=0;
int nacitane
[10];
int gener [30];
int cisla [40];
printf ("Zadaj 10 nahodnych cisel.n");
for (i=0;
i<10; i++) {
scanf ("%d", &nacitane[i]);
printf (" * %d * n", nacitane [i]);
}
printf ("nProgram vygeneruje 30 nahodnych cisel do 100.n");
for (j=1; j<31; j++) {
gener [j] = rand () %100;
+1;
printf ("Hodnota %d premennej gener je: * %d *n", j, gener [j]);
}
for (j=0; j<30; j++)
{
for (i=0; i<10; i++) {
if (nacitane [i]==gener [j]) {printf ("* %d * ", nacitane
[i]);}
}}
system ("pause");
return
0;
}
Funkcie
- Funkcie sú vlastne podprogramy, ktoré nám uľahčujú prácu tým,
že funkciu nedefinujeme iba raz, ale v tele programu ju môžeme zavolať (použiť) ľubovoľný počet krát.
- Tým prechádzame
k tomu, aby sme v zdrojovom kóde opakovali, písali tie isté príkazy.
- Funkciu nikdy nedefinujeme v inej
funkcii.
Názorný príklad na ukážku tejto funkcie:
Funkcie s
parametrom
- Funkcia s parametrom narozdiel od funkcie bez parametra posiela funkcii vstupné hodnoty, ktoré je potrebné
spracovať.
Praktický príklad na ukážku tejto funkcie:
//Vytvorte program ,ktorý vypočíta
priemer z dvoch načítaných známok.
#include
float priemer (float a, float b);
int main ()
{
float c1, c2;
float priemer1;
scanf ("%f", &c1);
scanf ("%f",
&c2);
priemer1 = priemer (c1, c2);
printf ("Priemer známok je %0.02f.n", priemer1);
system
("pause");
return 0;
}
float priemer (float a, float b) {
return
((a+b)/2);
}
Zones.sk – Zóny pre každého študenta