2013 m. rugsėjo 23 d., pirmadienis

Skriptinis programavimas

Shell – komandinės eilutės aplinka – sąsaja su operacine
sistema, užtikrinanti vartotojo įvestų komandų
interpretavimą.
 Aplinka turi savo scenarijų kalbos interpretatorių.
 Dažniausiai yra naudojama bash (Bourne Again Shell)
aplinka.
 Scenarijai (Script) sudaromi pagal tam tikras taisykles iš
atskirų komandų.

Aplinkos
 sh (Bourne Shell)
 bash (Bourne-again Shell)
 csh (C Shell)
 ksh (Korn Shell)
 ash (Almquist Shell)
 tcsh (TENEX C Shell)
 zsh (Z Shell)

Aplinkos komandos
 Aplinkos skiriasi scenarijų interpretavimo kalbomis.
 Dauguma elementarių komandų sutampa.
 Komandų pavadinimai paprastai sudaromi iš atitinkamą
veiksmą nusakančių žodžių, pvz., cp iš žodžio copy.

Aplinkos komandos
 Į komandos eilutę įvesti žodžiai traktuojami tokiu būdu:
 Pirmas žodis suprantamas kaip komanda,
 Visa kita – komandos parametrai.
 Aplinka atlieka keletą dalykų:
 Patikrinama ar tai vidinė aplinkos komanda, t.y. ar aplinka
moka ją įvykdyti.
 Jei ne, tikrinama, gal tai komandos pavadinimo pakaitalas;
 Arba ieško programos nurodytu vardu ir perduoda eilutėje nurodytus
parametrus.

Teisės į failą
 Vienas iš failo atributų.
 Teisės gali būti:
 Priklausomybės, nusakomos savininkui, grupei ar visiems
kitiems;
 Veiksmų, leidžiančios skaityti, rašyti ir vykdyti.
 Kiekvienas failas turi savininką;
 Kiekvienas failas priklauso tam tikrai grupei;

Teisės į failą
 Savininkas su savo failu gali daryti viską, tačiau jis negali
pakeisti failo savininko, tai gali padaryti tik
administratorius;
 Vykdymo teisės į failą leidžia įvykdyti programą ar
scenarijų.
 Vykdymo teisės į katalogą leidžia pažiūrėti jo turinį.
 Norint ištrinti failą, reikia turėti rašymo teisę.

Teisės į failą
 Teisės į failą užrašomos tokio tipo eilute:
-rwxr-xr-x
 Pirmasis minuso ženklas reiškia, kad tai paprastas failas, o ne
katalogas (žymimas d raide);
 Likę simboliai grupuojami po 3:
 Pirmoji grupė nusako autoriaus teises,
 Antroji – grupės teises,
 Trečioji – visų kitų vartotojų teises.
 Simbolių reikšmės:
 r reiškia teisę skaityti,
 w – rašyti,
 x – vykdyti,
 “-” ženklas atitinkamoje pozicijoje reiškia, kad tokia teisė nesuteikta

Teisės į failą
 Teisės keičiamos tokia komanda:
chmod {+,-}{r,w,x} failai
 +/- simboliai nusako ar teisę suteikti, ar atimti.

Pagalbinės komandos
 cal [[mėnesis] metai] – konkretaus mėnesio ar
visų metu kalendorius
 cal 9 2012

Pagalbinės komandos
 date [+”datos_formatas”] – data ir laikas:
 %m – mėnuo (01-12)
 %d – mėnesio diena (1-31)
 %Y – paskutiniai du metų skaitmenys
 %H, %M, %S – valandos, minutės ir sekundės
 %D – data (formatas mm/dd/yy)
 date +”%Y-%m-%d, %H:%M:%S”

Pagalbinės komandos
 echo “Labas, pasauli”
 printf “Suma lygi %d\n”, 100

Pagalbinės komandos
 bc – tekstinės sąsajos skaičiuoklio iškvietimas
 darbo pabaiga nurodoma klavišų kombinacija Ctrl+D

Pagalbinės komandos
 man [komandos_vardas] – informacija apie
komandas

Kintamųjų vardų apsirašymo taisyklės
 Tarp kintamojo vardo ir reikšmės neturi būti tarpų:
 no=10 – kintamojo apsirašymas
 no =10 – neteisingas kintamojo deklaravimo pavyzdys
 no= 10 – neteisingas kintamojo deklaravimo pavyzdys
 no = 10 – neteisingas kintamojo deklaravimo pavyzdys
 Kintamųjų varduose skiriamos didžiosios ir mažosios raidės:
 no=10 – echo $no – išves 10
 No=11 – echo $No – išves 11
 NO=20 – echo $NO – išves 20
 nO=21 – echo $nO – išves 21
 Galima apsibrėžti kintamuosius, turinčius NULL reikšmę:
 kint=
 kint=“”
 Įvykdžius komandą echo $kint – nieko nerodys, nes kintamasis
neturi reikšmės

Komanda echo
 Naudojama teksto, kintamųjų reikšmių atvaizdavimui
ekrane:
 echo [parinktys] [tekstas, kintamieji]
 a=123
 echo $a # išves 123
 echo a # išves a, bet ne kintamojo reikšmę 123
 Kaip apibrėžti kintamąjį x su reikšme 10 ir jo reikšmę
atspausdinti ekrane?
 Kaip apibrėžti kintamąjį xn su reikšme Studentas ir jo
reikšmę atspausdinti ekrane?Komanda expr
 Naudojama aritmetikos veiksmams atlikti:
 expr a + b – dviejų skaičių sudėtis
 expr a – b – dviejų skaičių skirtumas
 expr a / b – dviejų skaičių dalyba
 expr a % b – liekana a mod b
 expr a \* b – dviejų skaičių daugyba
 echo `expr a + b` - atspausdins aritmetinio veiksmo
rezultatą
 echo “expr a + b” – atspausdins expr a + b
 Kaip atspausdinti dviejų kintamųjų dalybos rezultatą?
 Dalybos rezultatą pateikti kaip trečią kintamąjį.Nurodyti klaidas scenarijuje
Vardas=Petriukas
ManoOS=Linux
ManoNr=10
echo “Mano vardas yra $vardas”
echo “Mano OS yra $ManoOS”
echo “Mano numeris yra ManoNr. Ar
matote šį numerį?”


Komanda read
 Naudojama duomenų įvedimui klaviatūra. Įvesti
duomenys priskiriami atitinkamam kintamajam:
 read variable1, variable2, ...
 Sukurti scenarijų, kuris prašys vartotojo įvesti vardą, kuris
bus saugomas kaip kintamasis vardas. Panaudoti šį
kintamąjį sakinyje, pvz., “Labas vardas, būkime
draugais”.Įvedimo/Išvedimo srauto nukreipimas
 Dauguma komandų rezultatus išveda į ekraną, tačiau galima
išvedimo srautą nukreipti į failą ar įvesti duomenis iš failo.
 Yra trys srautų nukreipimo simboliai:
 >
 komanda>failo_pavadinimas – jei duomenys tame faile jau buvo,
jie bus prarasti;
 >>
 komanda>>failo_pavadinimas – nauji duomenys prirašomi prie
failo pabaigos;
 <
 komanda<failo_pavadinimas – duomenys imami iš failo, vietoj to,
kad įvedinėti klaviatūra.
 Pvz., komanda<failas1>failas2 – duomenys imami iš
failas1, rezultatai talpinami į failas2.Komandos cat ir tac
 cat
 cat failas1 – ekrane pateikiamas failo turinys
 cat failas1>failas2 – failas1 turinys perduodamas
failas2
 cat failas1 failas2>failas3 – sujungiamas dviejų
failų – failas1 ir failas2 turinys į vieną failą – failas3
 cat>failas1 – užpildyti tuščią failą klaviatūra įvedamu
tekstu
 cat>>failas1 – papildyti failą klaviatūra įvedamu tekstu
 tac
 panaši į komandą cat. Tik failų eilutės skaitomos nuo failo
pabaigos (pradedant paskutiniąja eilute).Pavyzdys
 Failą w1.txt užpildykime tekstu, įvedami klaviatūra. Į failą
w2.txt perrašykime failo w1.txt turinį atvirkščia tvarka.
Failus w1.txt ir w2.txt sujunkime į vieną w3.txt.
 cat>f1.txt # Užpildome tuščią failą klaviatūra įvedamu tekstu;
Pirmoji eilutė
Antroji eilutė
Trečioji eilutė
 cat f1.txt # Peržiūrime ekrane failo f1.txt turinį
 tac f1.txt>f2.txt # failo f1.txt turinys perduodamas
kitam failui f2.txt (tik atvirkščia tvarka)
 cat f2.txt # Peržiūrime ekrane failo f2.txt turinį
 cat f1.txt f2.txt>f3.txt #Sujungiami failų f1.txt ir
f2.txt turiniai į kitą failą f3.txt
 cat f3.txt #Peržiūrime ekrane failo f3.txt turinįScenarijus
 Parašykite scenarijų, kuris apskaičiuoja dviejų įvestų
skaičių sandaugą ir rezultatą įrašo į tekstinį failą.
 Parašykite scenarijų, kuris apskaičiuoja dviejų įvestų
skaičių sandaugą, iš kurios paskui yra atimama 3. Abu
rezultatai pridedami prie faile esamo teksto, neištrynus jo.Komanda wc
 Naudojama teksto eilučių, žodžių ir simbolių
skaičiavimui:
wc [parinktys] [failų_vardas]
 -l – skaičiuoja tik eilutes
 -w – skaičiuoja tik žodžius
 -m – skaičiuoja tik simboliusPavyzdys
 Peržiūrėti anksčiau sukurto ir užpildyto failo f1.txt, bei
visų failų f1.txt, f2.txt ir f3.txt statistiką
 wc f1.txt # Į ekraną išveda failo f1.txt eilučių, žodžių
ir simbolių skaičių
 wc f?.txt # Į ekraną išveda visų galimų f?.txt failų
eilučių, žodžių ir simbolių skaičiųKomanda grep
 Leidžia ieškoti sutapimo su šablonu nurodytame failų
sąraše:
grep [parinktys] “šablonas” [failo_pavadinimas]
 grep “ieškomas žodis” failo_pavadinimas -
nurodo eilutę, sutampančią su šablonu
 grep –n “ieškomas žodis” failo_pavadinimas
– nurodo eilutės numerį ir pačią eilutę, sutampančią su šablonu
 grep –v “ieškomas žodis” failo_pavadinimas
– nurodo eilutę (-es), kuriose nerasta sutapimo su šablonuKomandos head ir tail
 head – parodo pirmas 10 failo eilučių.
 tail – parodo paskutines 10 failo eilutes.
 head failo_pavadinimas
 tail failo_pavadinimas
 head –n failo_pavadinimas – parodo pirmas n
failo eilučių
 tail –n failo_pavadinimas – parodo paskutines
n failo eilučiųsort komanda
 Komanda išdėsto failo įrašus abėcėlės arba skaitmenine
tvarka.
 Pagal nutylėjimą rūšiavimas atliekamas didėjimo tvarka
 -r – rūšiavimas priešinga tvarkapipe-priemonės
 Komandos rezultatų perdavimas kitai komandai
komanda1|komanda2
 Pavyzdys: cat stud|sort – komanda cat
neparodys failo stud turinio, o iš karto perduos jos
rezultatus rūšiavimo komandai sort, kuri surūšiuotus
įrašus išves į ekranąsed komanda
 Teksto paieškos ir modifikavimo komanda
sed [parinktys] ‘komanda’ failas
 Teksto modifikavimas:
sed [parinktys] ‘[opcijos]/ką
pakeisti/kuo pakeisti/[opcijos]’ failassed komanda
 sed –e ‘s/Sveiki/Labas/’ failas1 – pakeis
pirmą žodį “Sveiki” į “Labas” faile failas1
 sed –e ‘s/Sveiki/Labas/g’ failas1 –
pakeis visus žodžius “Sveiki” į “Labas” faile failas1
 sed –e ‘3,5s/Sveiki/Labas/g’ failas1 –
nuo 3 iki 5 eilutėse pakeis visu žodžius “Sveiki” į “Labas”
faile failas1
 sed 1,2d failas1 – ištrina failas1 pirmą ir antrą
eilutes
 sed /^P/d failas1 – ištrina eilutes, kurios
prasideda raide P



3 praktinis užsiėmimas
Jelena Zubova Sąlygos operatoriai naudojamai, kai norima, jog
scenarijus priimtų sprendimus, t.y. vykdytų
komandas atsižvelgdamas į esamą situaciją. if galimos reikšmės:
◦ tiesa (true) – vykdomos
then šakoje esančios
komandos
◦ netiesa (false) –
vykdomos else šakoje
esančios komandos
 Komandų kiekis bet
kurioje šakoje
neribotas.
 Sintaksė:
if [ sąlyga ]
then
komanda_1
komanda_2
.........
else
komanda_x
komanda_y
.........
fi Jei sąlyga_1 reikšmė
tiesa, vykdomos then
šakos komandos.
 Jei sąlyga_1 reikšmė
netiesa, tikrinama
sąlyga_2:
◦ jei reikšmė yra tiesa,
vykdomos vidinio if
operatoriaus then šakos
komandos
◦ jei reikšmė netiesa, vykdomos
else šakos komandos
 Sintaksė:
if [ sąlyga_1 ]
then
komanda_1
komanda_2
.........
else if [ sąlyga_2 ]
then
komanda_x
komanda_y
.........
else
komanda_xx
komanda_yy
..........
fi
fi Naudojant elif
operatorių užtenka vieno
fi pagrindinio
operatoriaus užbaigimui.
 Sintaksė:
if [ sąlyga_1 ]
then
komanda_1
komanda_2
.........
elif [ sąlyga_2 ]
then
komanda_x
komanda_y
.........
else
komanda_xx
komanda_yy
..........
fi [ sąlyga_1 –o sąlyga_2 ] – loginė sudėtis,
“arba” jungtis:
◦ operatoriaus reikšmė bus tiesa, jei bent viena iš sąlygų yra
tiesa,
◦ netiesa – priešingu atveju.
 [ sąlyga_1 –a sąlyga_2 ] – loginė
daugyba, “ir” jungtis:
◦ operatoriaus reikšmė bus tiesa, jei visų sąlygų reikšmės bus
tiesa,
◦ netiesa – priešingu atveju. Skaičių palyginimas:
◦ $a –eq $b – tiesa, jei abu skaičiai (a ir b) lygūs
◦ $a –ne $b – tiesa, jei skaičiai (a ir b) nelygūs
◦ $a –gt $b – tiesa, jei skaičius a didesnis už skaičių b
◦ $a –ge $b – tiesa, jei skaičius a didesnis arba lygus
skaičiui b
◦ $a –lt $b – tiesa, jei skaičius a mažesnis už skaičių b
◦ $a –le $b – tiesa, jei skaičius a mažesnis arba lygus
skaičiui b Eilučių palyginimas
◦ $eil1 == $eil2 – tiesa jei abi eilutės (eil1 ir eil2)
yra vienodos
◦ $eil1 != $eil2 – tiesa, jei eilutės (eil1 ir eil2) yra
nevienodos
◦ -n $eil – tiesa, jei eilutė (eil) yra netuščia
◦ -z $eil – tiesa, jei eilutė (eil) yra tuščia Parašykite scenarijų, kuris patikrintų, ar du klaviatūra
įvedami skaičiai yra lygūs. Jei taip, į ekraną turi būti
išvestas pranešimas “Įvesti skaičiai lygūs”. Priešingu
atveju – “Įvesti skaičiai yra nelygūs”.
 Parašykite scenarijų, kuris patikrintų, ar dviejų
klaviatūra įvedamų skaičių sandauga lygi 0. Jei taip, į
ekraną turi būti išvestas pranešimas “Bent vienas iš
įvestų skaičių lygus 0”. Priešingu atveju turi būti
apskaičiuota tų dviejų skaičių sandauga ir išvestas
pranešimas “Įvestų skaičių sandauga lygi X”. Parašykite scenarijų, kuris patikrintų, ar pirmas
įvestas skaičius yra didesnis už antrą. Jei taip, raskite
dviejų įvestų skaičių skirtumą. Priešingu atveju
patikrinkite, ar pirmas skaičius mažesnis už antrą.
Jei taip, raskite tų skaičių sumą. Priešingu atveju į
ekraną turi būti išvestas pranešimas “Du įvesti
skaičiai a ir b yra lygūs”. -s $f – tiesa, jei failas f yra netuščias
 -f $f – tiesa, jei failas f yra egzistuojantis paprastas failas
 -d $f – tiesa, jei failas f yra egzistuojantis katalogas
 -e $f – tiesa, jei failas f yra egzistuojantis failas
 -r $f – tiesa, jei failas f yra egzistuojantis failas ir
vartotojas turi teisę jį skaityti
 -w $f – tiesa, jei failas f yra egzistuojantis failas ir
vartotojas turi leidimą jį redaguoti
 -x $f – tiesa, jei failas f yra egzistuojantis failas ir
vartotojas turi leidimą jį vykdyti
 $f -ot $g – tiesa, jei failas g yra naudotas vėliau nei failas
f
 $f -nt $g – tiesa, jei failas f yra naudotas vėliau nei failas
g Sukurkite scenarijų, kuris patikrina ar egzistuoja
failas su vartotojo įvestu failo pavadinimu. Jei taip, į
ekraną išvedamas šio tekstinio failo eilučių kiekis.
Priešingu atveju išvedamas pranešimas “Failas f
neegzistuoja”. Naudojamas, kai
kintamojo reikšmių
diapazonas yra
diskretus ir yra ne
platus.
 Tokiais atvejais patogiau
naudoti case vietoje if
operatoriaus.
case $kintamasis in
reikšmė_1)
komanda_1
komanda_2
…………………;;
reikšmė_2)
komanda_x
komanda_y
…………………;;
esac Sukurkime scenarijų su meniu, kuris patikrintų ar
failas egzistuoja, ar direktorija egzistuoja, ar
vartotojas turi teisę failą redaguoti.echo “1 – tikrina ar failas
egzistuoja”
echo “2 – tikrina ar direktorija
egzistuoja”
echo “3 – tikrina ar failas gali būti
redaguojamas”
echo “Įveskite 1, 2 arba 3 norėdami
atlikti tam tikrą veiksmą”read p
case $p in
1)
echo “Įveskite failo pavadinimą”
read f
if [ -f $f ]
then
echo “Failas $f egzistuoja”
else
echo “Failas $f neegzistuoja”
fi;;2)
echo “Įveskite katalogo pavadinimą”
read f
if [ -d $f ]
then
echo “Katalogas $f egzistuoja”
else
echo “Katalogas $f neegzistuoja”
fi;;3)
echo “Įveskite failo pavadinimą”
read f
if [ -w $f ]
then
echo “Teisė redaguoti $f failą yra”
elif [ -f $f ]
then
echo “Failas $f neegzistuoja”
else
echo “Teisės redaguoti $f failą
nėra”
fi;;*)
echo “Tokio meniu punkto nėra”
esac
 Šiame pavyzdyje panaudota speciali reikšmė “*”,
kuri reiškia visus kitus atvejus.echo “1 – tikrina ar failas egzistuoja”
echo “2 – tikrina ar direktorija
egzistuoja’
echo “3 – tikrina ar failas egzistuoja”
echo “Įveskite 1, 2 arba 3 norėdami
atlikti tam tikrą veiksmą’
read p
case $p in
1)
echo “Įveskite failo pavadinimą”
read f
if [ -f $f ]
then
echo “Failas $f egzistuoja”
else
echo “Failas $f neegzistuoja”
fi;;
2)
echo “Įveskite katalogo pavadinimą”
read f
if [ -d $f ]
then
echo “Katalogas $f egzistuoja”
else
echo “Katalogas $f
neegzistuoja”
fi;;
3)
echo “Įveskite failo pavadinimą”
read f
if [ -w $f ]
then
echo “Teisė redaguoti $f failą
yra”
elif [ -f $f ]
then
echo “Failas $f
neegzistuoja”
else
echo “Teisės redaguoti
$f failą nėra”
fi;;
*)
echo “Tokio meniu punkto nėra”;;
esac Sukurkite scenarijų su meniu, kuris, priklausomai nuo
pasirinkto meniu punkto, apskaičiuotų dviejų įvestų
skaičių:
1) sumą (jeigu įvesti skaičiai nelygūs, priešingu atveju
išvedamas pranešimas “Įvesti skaičiai lygūs”)
2) sandaugą (jeigu abu skaičiai nelygūs 0, priešingu
atveju išvedamas pranešimas “Abu skaičiai lygūs 0”)
3) skirtumą (jeigu įvesti skaičiai nelygūs, priešingu
atveju išvedamas pranešimas “Įvesti skaičiai a ir b
lygūs”) Kai tenka vykdyti tas pačias komandas keletą kartų,
patogiau naudoti ciklus. Dažniausiai yra naudojami
dviejų tipų ciklai:
◦ for
◦ while Naudojant ciklus būtina:
◦ inicializuoti kintamąjį (priskirti pradinę reikšmę)
◦ nurodyti ciklo vykdymo sąlygą
◦ apibrėžti ciklo kintamojo reikšmės kitimo dėsnį a) forma
for kintamasis in sąrašas
do
komanda_x
komanda_y
done
Ciklo kintamojo pradinė reikšmė yra pirmasis
elementas sąraše. Ciklas vykdomas tol, kol
nepasiekiama sąrašo pabaiga. Kiekvienoje iteracijoje
ciklo kintamojo reikšme taps kitas sąrašo elementas.for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
done
Šiuo konkrečiu atveju į ekraną bus išvedami skaičiai nuo 1
iki 10. b) forma
for ((inicializavimas; sąlyga; kitimo
dėsnis))
do
komanda_x
komanda_y
done
Ciklo kintamojo inicializavimas atliekamas priskiriant
pradinę reikšmę. Toliau nurodoma kokią reikšmę pasiekus
ciklas yra nutraukiamas. Būtina nurodyti ciklo kintamojo
kitimo dėsnį, priešingu atveju gausime begalinį ciklą.for ((i=1; i<=10; i++))
do
echo $i
done
Šiuo konkrečiu atveju į ekraną bus išvedami skaičiai
nuo 1 iki 10. Ciklo cikle pavyzdys:
for ((i=1; i<=5; i++))
do
for ((j=1; j<=5; j++))
do
echo –n $i
done
echo “”
done
 Komanda echo –n spausdina rezultatus toje pačioje
eilutėje.
 Vieno išorinio ciklo iteracijoje spausdinamos 5 vidinio ciklo
iteracijos.while [ sąlyga ]
do
komanda_x
komanda_y
.........
done
 Kadangi ciklas while
neturi tokios
antraštės, kaip for
ciklas, todėl pradinę
ciklo kintamojo
reikšmę bei kitimo
dėsnį reikia apibrėžti,
atitinkamai, prieš ciklą
ir pačiame cikle.i=1
while [ $i –le 10 ]
do
echo $i
i=`expr $i + 1`
done Vartotojas įveda dviejų failų pavadinimus. Sukurkite
scenarijų, kuris nustatytų, kuris failas turi daugiau
eilučių. Į ekraną turi būti išvedami atitinkami
pranešimai:
◦ „Failas a turi daugiau eilučių“
◦ „Failas b turi daugiau eilučių“
◦ Arba „Failai a ir b turi vienodą eilučių skaičių“

2013 m. liepos 11 d., ketvirtadienis

3.2. Logikos algebros tapatybės

 

3.2. LOGIKOS ALGEBROS TAPATYBĖS

Logikos algebroje, kaip ir matematikoje, ryšiai tarp kintamųjų nusakomi aksiomomis teoremomis ir tapatybėmis.
Logikos algebros tapatybės pateiktos poromis - dviem stulpeliais.Pagal logikos algebros dualumo dėsnį kairiojo stulpelio tapatybes galime gauti iš dešinio ir priešingai. Šis dėsnis teigia: tapatybės loginę sandaugą pakeitus logine suma, o sumą sandauga; nulį vienetu, o vienetą nuliu ir skliaustais išlaikius tą pačią veiksmų tvarką, bus gauta nauja tapatybė, vadinama dualia:


Pagal 5 tapatybę:prie loginės sumos galime pridėti bet kiek tokių pat kintamųjų arba kelių vienodų kintamųjų sumą pakeisti vienu tokiu pat kintamuoju.
Pagal 6 tapatybę: loginę sandaugą galime dauginti iš bet kiek jau esančių kintamųjų arba kelis vienodus kintamuosius pakeisti vienu.
Pagal de Morgano teoremą:
  1. kintamųjų sumos inversija lygi kintamųjų inversijų sandaugai.
  2. kintamųjų sandaugos inversija lygi kintamųjų inversijų sumai.
Dėsniai taikomi bet kokiam kintamųjų skaičiui: dviem, trim ir daugiau.
Pasinaudoję pagrindinėmis tapatybėmis galime įrodyti ir daugiau tapatybių. Dažnai naudojami absorbavimo ir jungimo dėsniai.

3.1. Loginės funkcijos

3. LOGIKOS ALGEBRA

Skaitmeniniai grandynai projektuojami naudojantis loginės algebros teorija, kuri dar vadinama Bulio algebra – ją sukūrusio anglų mokslininko (J.Boole) vardu.

 

3.1 LOGINĖS FUNKCIJOS

Pagrindinė loginės algebros sąvoka – loginė funkcija. Tai tokia funkcija, kuri pati arba jos argumentai gali būti tik dviejų reikšmių – teisinga arba neteisinga. Tai esminis skirtumas nuo įprastų matematinių funkcijų. Loginės funkcijos ir jos kintamųjų reikšmes žymėsime simboliais 1 ir 0. Šie simboliai naudojami ir dvejetainėje skaičiavimo sistemoje.
Funkcijos argumentus vadiname loginiais kintamaisiais. Jei funkcija turi n loginių  kintamųjų, tai iš jų galime sudaryti 2n kintamųjų rinkinių. Iš dviejų kintamųjų galime sudaryti keturis rinkinius - 00, 01, 10, 11; iš keturių - šešiolika ir t.t.
Loginę funkciją galime pateikti keliais būdais:
· nusakyti žodžiais t.y. aprašyti;
· užrašyti jos algebrinę išraišką;
· pavaizduoti grafikų t.y. laiko diagramų pavidalu;
· pavaizduoti teisingumo lentele.

Algebrinei išraiškai galime naudoti įvairius simbolius. Dažniausiai sutinkami žymėjimai:
F= φ (A,B,C,… ); F= φ (X,Y,Z,… ) ; Y= φ (x1x2x3…) ir kt.
Teisingumo arba reikšmių lentelėje surašomi visi įmanomi kintamųjų rinkiniai ir juos atitinkančios funkcijos reikšmės.
Loginė funkcija nurodo kokią loginę operaciją norime atlikti. Skaitmeninėje technikoje logines operacijas atlieka loginiai elementai (angl. gates).
Loginių funkcijų teorijoje svarbią reikšmę turi 1 ir 2 kintamųjų funkcijos ,nes jų pagrindu sudaromos loginės funkcijos turinčios ir daugiau kintamųjų
Toliau aprašysime pagrindines 1ir 2 kintamųjų funkcijas.
KARTOJIMAS - tai vieno kintamojo funkcija.. Funkcijos reikšmė visuomet lygi kintamojo reikšmei: F = X
NE - loginis neigimas, inversija - tai vieno kintamojo funkcija. Loginis elementas vadinamas inverteriu. Funkcijos reikšmė  priešinga kintamojo reikšmei, žymima „¯ “ t.y. brūkšniu virš kintamojo:

Kitos nagrinėjamos funkcijos, tai dviejų kintamųjų funkcijos, tačiau išraiškos gali būti taikomos trims ir daugiau kintamųjų.
IR – loginė daugyba, konjunkcija. Funkcijos reikšmė lygi 1 tik tuomet , jei visi kintamieji lygūs 1. Loginė operacija žymima simboliais: „&“, „∧“, „•“, paskutinis simbolis dažniausiai nerašomas:
F = X ∧Y = X • Y = X & Y
Loginės operacijos IR rezultatus galime užrašyti:
0 • 0 = 0
0 • 1 = 0
1 • 0 = 0
1 • 1 = 1

Skaitome ne vienas dauginti iš vienobet vienas ir vienas, turime prisiminti, kad atliekame loginę operaciją.
ARBA - loginė sudėtis ,disjunkcija. Funkcijos reikšmė 1, jei bent vieno kintamojo reikšmė lygi 1. Loginė operacija žymima simboliais: „ + “, „∨ “:
F = X + Y = X ∨ Y
Loginės operacijos ARBA rezultatus galime užrašyti:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 1
Skaitome ne vienas plius vienas, bet vienas arba vienas, visuomet turime prisiminti, kad atliekame loginę operaciją.
XOR - šiai funkcijai naudojamas angliškas sutrumpinimas, nes nėra lietuviško. Lietuviškai ši funkcija vadinama: suma moduliu 2 arba loginis nelygiavertiškumas.Tai dviejų kintamųjų loginė funkcija, jos reikšmė lygi 1, jei tik vienas kintamasis lygus 1. Loginė operacija žymima simboliu ⊕.


Loginės operacijos XOR rezultatus galime užrašyti:
0 ⊕ 0 = 0
0 ⊕ 1 = 1
1 ⊕ 0 = 1
1 ⊕ 1 = 0
IR-NE, ARBA-NE, XNOR yra jau minėtų funkcijų neigimas, inversija.
Funkcijos, į kurių išraišką įeina ne daugiau kaip viena loginė operacija, vadinamos elementariomis. Tai funkcijos IR,  ARBA,  NE.
Užrašant funkciją algebrinėmis išraiškomis, jos kintamieji susiejami loginių operacijų ženklais, kurie nurodo kokią loginę operaciją ir kokia tvarka reikia atlikti. Pirmiausia atliekama loginė operacija NE, sekanti – IR, po to – ARBA.
Pagrindinės vieno ir dviejų kintamųjų funkcijos parodytos lentelėje 3–1. Lentelėje taip pat parodytos teisingumo lentelės ir loginių elementų grafinio žymėjimo du variantai. Funkcijų sutrumpinti žymėjimai pateikti lietuvių, anglų ir rusų kalbomis.
Literatūroje ir kompiuterinėse programose yra naudojami abu loginių elementų žymėjimo variantai, todėl loginių schemų piešimui pakaitomis abu juos ir naudosime.
Lentelė 3-1

Lentelė 3-2. Laiko diagramos dviejų kintamųjų loginėms funkcijoms.

 

2.6. ASCII kodas

 

2.5. ASCII KODAS

Kompiuteriuose ir kituose skaitmeniniuose įtaisuose koduojami ne tik skaičiai, bet ir raidės, ir kiti simboliai. Dažniausiai naudojamas ASCII (American Standart Code for Information Interchange – Amerikos kodavimo standartas skirtas informacijos pasikeitimui) parodytas 2.6 lentelėje. Šis standartas 1963 metais priimtas JAV, o dabar naudojamas kaip tarptautinis standartas. Tai septynių bitų kodas.
Kodavimui ASCII kodais naudojama lentelė sudaryta iš 128 langelių, kurie suskirstyti į 16 eilučių ir 8 stulpelius. Eilutės sunumeruotos šešioliktainiais skaičiais nuo 0 iki F ir dvejetainiais skaičiais nuo 0000 iki 1111, kurie pažymėti B4B3B2B1. Stulpeliai sunumeruoti šešioliktainiais skaičiais nuo 0 iki 7 ir dvejetainiais skaičiais nuo 000 iki 111, kurie pažymėti B7B6B5. Dvejetainiai skaičiai naudojami ASCII kodų sudarymui, o šešioliktainiai naudojami norint sutrumpinti kodų užrašus, pav.ekrane.
Lentelė užpildyta dešimtainiais skaičiais, raidėmis, simboliais ir specialių komandų sutrumpinimais. Komandos skirtos informacijos pasikeitimo tarp kompiuterio ir įvedimo – išvedimo įtaisų operacijoms valdyti ir užima 32 langelius. Šias komandas, o tiksliau jų kodus dažniausiai formuoja procesorius ar kitas valdymo įtaisas.
Likę langeliai tai skaičiai raidės ir simboliai, kuriuos matome užrašytus ant kompiuterio klaviatūros klavišų. Nuspaudus klavišą formuojamas jį atitinkantis kodas. Užrašas SP – atitinka klavišą “Space”, o DEL – klavišą “Delete”.

2.6. lentelė

Eilutės kodas
Stulpelio kodas
B7B6B5 / HEX
000
001
010
011
100
101
110
111
B4B3B2B1
HEX
0
1
2
3
4
5
6
7
0000
0
NUL
DLE
SP
0
@
P
`
p
0001
1
SOH
DC1
!
1
A
Q
a
q
0010
2
STX
DC2
2
B
R
b
r
0011
3
ETX
DC3
#
3
C
S
c
s
0100
4
EOT
DC4
$
4
D
T
d
t
0101
5
ENQ
NAK
%
5
E
U
e
u
0110
6
ACK
SYK
&
6
F
V
f
v
0111
7
BEL
ETB
´
7
G
W
g
w
1000
8
BS
CAN
(
8
H
X
h
x
1001
9
HT
EM
)
9
I
Y
i
y
1010
A
LF
SUB
*
:
J
Z
j
z
1011
B
VT
ESC
+
;
K
[
k
{
1100
C
FF
FS
,
L
\
l
|
1101
D
CR
GS
-
=
M
]
m
}
1110
E
SO
RS
.
N
^
n
~
1111
F
SI
US
/
?
O
_
o
DEL
Langelio kodas tai jį atitinkančios eilutės ir stulpelio numerių užrašas dvejetainiais skaičiais:
B7B6B5B4B3B2B1,
kur
B4B3B2B1 – eilutės numeris;
B7B6B5 - stulpelio numeris.
Lentelėje 2.6. tamsia spalva pažymėti 3 langeliai – SP, 3 ir K. Užrašysime jų kodus:
Langelis
Dvejetainis kodas
Šešioliktainis kodas
SP
0 0 1 0  0 0 0 0
20
3
0 0 1 1  0 0 1 1
33
K
0 1 0 0  1 0 1 1
4B
ASCII kodas yra 7 bitų kodas. Kompiuteriuose informacija užrašoma 8, 16, ir t.t. bitais.Todėl ASCII kodai papildomi dar vienu bitu B8, kuris pažymimas 0. Šis bitas panaudojamas papildomos informacijos kodavimui: grafiniams simboliams, įvedant kitas kalbas, šriftus ir t.t. Tokios informacijos kodavimui sudarytos specialios lentelės, kurias galima rasti literatūroje apie kompiuterius.
ASCII kodas tai ne vienintelis kodas skirtas skaičių, raidžių ir simbolių kodavimui. Daugelyje šalių naudojami ir kiti standartai, tačiau ASCII yra naudojamas dažniausiai.

2.5. Dešimtainių skaičių kodavimas dvejetainiais - dešimtainiais kodais

 

2.5. DEŠIMTAINIŲ SKAIČIŲ KODAVIMAS DVEJETAINIAIS – DEŠIMTAINIAIS KODAIS

Jau žinome kaip dešimtainiai skaičiai užrašomi pozicinėse skaičiavimo sistemose. Informacijos vaizdavimui, saugojimui ir apdorojimui kompiuteriuose naudojama dvejetainė skaičiavimo sistema.
Dažnai informaciją patogiau apdoroti ir analizuoti, jei ji vaizduojama specialiais kodais, kurie vadinami dvejetainiais – dešimtainiais kodais. Šie kodai sudaromi naudojant du simbolius – 1 ir 0, kaip ir dvejetainėje skaičiavimo sistemoje.
Skaitmeniniuose įtaisuose naudojami 4 bitų ilgio dvejetainiai – dešimtainiai kodai, kuriuose kiekvienas dešimtainio skaičiaus skaitmuo yra užrašomas keturiais dvejetainiais simboliais t.y. tetrada. Lentelėje 2.5 pavaizduoti 3 dvejetainiai - dešimtainiai kodai. Skaitmeniniuose įtaisuose naudojama ir daugiau dvejetainių – dešimtainių kodų.
Dažniausiai naudojamas BCD kodas, jo skilčių vertės – 8 4 2 1. BCD – tai angliškas kodo sutrumpinimas - Binary Coded Decimal, verčiama – dvejetainiais koduoti dešimtainiai.
Naudojama daug skaitmeninių grandinių, kurios gali apdoroti informaciją BCD kode – tai dešifratoriai, skaitikliai ir kiti įtaisai.

Lentelė 2. 5.

Dešimtainiai
skaitmenys
Kodai ir jų skilčių vertės
B C D
8 4 2 1

2 4 2 1
Excess-3
8 4 2 1 + 3
0
1
2
3
4
5
6
7
8
9
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0

Nenaudoja-
mos kombi-
nacijos
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
0 0 0 0
0 0 0 1
0 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
Užrašant skaičius dvejetainiais – dešimtainiais kodais tarp tetradų paliekamas tarpas. Dešimtainį skaičių 1936 užrašysime skirtingais kodais, kodo pavadinimą atitinka indeksas prie raidės A:
A10 =
1
9
3
6
ABCD =
0 0 0 1
1 0 0 1
0 0 1 1
0 1 1 0
A2421 =
0 0 0 1
1 1 1 1
0 0 1 1
1 1 0 0
A8421+3 =
0 1 0 0
1 1 0 0
0 1 1 0
1 0 0 1
A2 =

0 1 1 1
1 0 0 1
0 0 0 0
Paskutinėje eilutėje ,palyginimui, užrašytas dvejetainis skaičius.
BCD kodas yra 4 bitų kodas. Kartais naudojamas 8 bitų BCD kodas – jis vadinamas išplėstu BCD kodu. Šiam kodui naudojamas angliškas sutrumpinimas EBCD – Extended BCD.

2.4. Aritmetiniai veiksmai

 

2.4. ARITMETINIAI VEIKSMAI

Mokame sudėti, atimti, dauginti ir dalinti dešimtainius skaičius. Kitose skaičiavimo sistemose šias operacijas atliekame panašiai kaip ir dešimtainėje. Daugiausiai dėmesio skirsime dvejetainei sistemai.

2.4.1 Paprasčiausios aritmetinės operacijos.

Dvejetainėje sistemoje sudėtį atliekame pagal sudėties lentelę:
0+0=  0,
0+1=  1,
1+0=  1,
1+1=10, vienas pernešamas į vyresnę skiltį.
Pavyzdys:
1 1 0 1 1 0 1
+   1 0 0 1 1 1 1

0 1 0 0 0 1 0
+ 1.     1 1    1

suma neįvertinus pernašos
1 0 1 1 1 1 0 0
galutinė suma
Sudėtį galima atlikti nenurodant pernašų, o iš karto užrašant galutinę sumą.
Šešioliktainių skaičių sudėties pavyzdys:
Veiksmai su šešioliktainiais
Atitinkami veiksmai su dešimtainiais


    1
5 9 F H

    5    9   15
+    E  4  6 H


+14

+  4

+   6

1  3  E  5 H

  19 = 16 + 3  14   21 = 16 + 5
Dešinėje pusėje paaiškinta kaip atliekama sudėtis. Jauniausioje skiltyje skaitmenį F (F = 15) sudėję su 6 gavome 21,kurį užrašėme suma 16 su 5. 16 pernešame į sekančią skiltį kaip 1. Taip pat atliekame sudėtį ir kitose skiltyse.
Dvejetainių skaičių atimties pavyzdys:
1 0 1 1 0

- 1 0 0 1 1

0 0 0 1 1
Atimdami iš nulio vienetą, skolinamės iš vyresnės skilties.
Atimties operacija, skolinantis 1 iš vyresnės skilties, skaičiavimo technikoje netaikoma. Ši operacija keičiama sudėtimi, kur skaičiai užrašomi specialiais kodais.
Visos aritmetinės operacijos kompiuteriuose ir kituose skaitmeniniuose įtaisuose atliekamos su dvejetainiais skaičiais. Sudėtis – svarbiausias veiksmas, nes visi kiti trys aritmetiniai veiksmai (atimtis, daugyba, dalyba) kompiuteriuose verčiami sudėtimi.
Dauginant, dauginamas skaičius sudedamas tiek kartų, iš kiek reikia dauginti. Dalijant atliekama daugkartinė atimtis.
Dauginant iš dviejų, vietoje sudėties galime atlikti skaičiaus perstūmimą per vieną skiltį į kairę, t.y. skaičiaus dešinėje prirašyti 0:
Dvejetainis
Dešimtainis
1 0 1
5
1 0 1 0
10
1 0 1 0 0
20
1 0 1 0 0 0
40
1 0 1 0 0 0 0
80

2.4.2 Skaičių papildymai

Skaičių papildymais vadinami skaičių specialūs kodai, kurie naudojami atimties operacijoms atlikti , o taip pat atlikti veiksmams su neigiamais skaičiais.
Skaičiavimo technikoje naudojami du skaičių papildymo variantai:
papildymas iki p-1 ;
papildymas iki  p     (p- skaičiavimo sistemos pagrindas).
Papildymas iki  p-1 
Papildymas randamas: pp-1 = (pn - 1) - N , kur: N – skaičius, n – skilčių skaičius.
Skaičius skliaustuose : dešimtainei sistemai -  9999999… ,
dvejetainei sistemai -   1111111… .
Dešimtainėje sistemoje: p-1 = 10 – 1 = 9. Todėl kodas vadinamas papildymu iki 9 ir užrašomas skaitmenimis papildančiais turimo skaičiaus skaitmenis iki 9.
Rasime skaičiaus 546700 papildymą iki 9:
999999
-  546700
 skaičius
453299
 papildymas iki 9
Dvejetainėje sistemoje : p-1  = 2 – 1 = 1. Todėl kodas vadinamas papildymu iki 1 ir užrašomas skaitmenimis papildančiais turimo skaičiaus skaitmenis iki1
Rasime skaičiaus 1 0 1 1 0 0 1 papildymą iki 1:
1 1 1 1 1 1 1
1 0 1 1 0 0 1
  skaičius
0 1 0 0 1 1 0
 papildymas iki 1
Matome, kad papildymas iki 1, tai invertuotas skaičius. Dvejetainių skaičių papildymas iki 1 vadinamas atvirkštiniu kodu ir randamas skaičiuje visus 1 pakeičiant 0, o 0 pakeičiant 1 (invertuojant skaičių).
Papildymas iki p. 
Papildymas randamas: pp-1 = pn - N , kur: N – skaičius, n – skilčių skaičius.
Skaičius pn dešimtainei ir  dvejetainei sistemoms -  10000000… ,
Dešimtainėje sistemoje:  = 10. Todėl ir šis kodas vadinamas  papildymu iki 10 ir užrašomas skaitmenimis papildančiais turimo skaičiaus skaitmenis iki10.
Rasime skaičiaus 546700 papildymą iki 10:
1000000
-   546700
 skaičius
453300
 papildymas iki 10
Dvejetainėje sistemoje p = 2 Todėl ir šis kodas yra vadinamas papildymu iki 2 ir užrašomas skaitmenimis papildančiais turimo skaičiaus skaitmenis iki2, tai dvejetainėje sistemoje atitinka dvejetainį skaičių 10.
Rasime skaičiaus 1 0 1 1 0 0 1 papildymą iki 2 :
1 0 0 0 0 0 0 0
-    1 0 1 1 0 0 1
 skaičius
0 1 0 0 1 1 1
 papildymas iki 2
Dvejetainių skaičių papildymas iki 2 vadinamas papildomu kodu. Randamas užrašant skaičiaus atvirkštinį kodą ir pridedant prie jo 1:
1 0 1 1 0 0 1
 skaičius
0 1 0 0 1 1 0
 atvirkštinis kodas
+                  1
0 1 0 0 1 1 1
 papildomas kodas

2.4.3 Dvejetainių skaičių atimtis atvirkštiniame Ir papildomame koduose.

Išsami aritmetinių operacijų analizė nėra šios mokymo programos tikslas. Apsiribosime keliais atimties operacijų pavyzdžiais.
Atliksime atimties operaciją su dešimtainiais skaičiais: 22 – 13 = 9, dvejetainėje sistemoje.
Skaičius užrašysime jų dvejetainiais kodais, kurių prireiks atlikti atimties operacijoms:
Dešimtainiai:
Dvejetainiai:
22
1 0 1 1 0
 tiesioginis 22 kodas
13
0 1 1 0 1
 tiesioginis 13 kodas

1 0 0 1 0
 atvirkštinis 13 kodas

1 0 0 1 1
 papildomas 13 kodas
9
0 1 0 0 1
 tiesioginis 9 kodas
Atimtis atvirkštiniame kode:
  • atimamas skaičius užrašomas atvirkštiniame kode;
  • atimtis keičiama sudėtimi;
  • papildomoje skiltyje atsiradusį 1 pridedame prie jauniausios skilties:
1 0 1 1 0
 tiesioginis 22 kodas
+    1 0 0 1 0
 atvirkštinis 13 kodas
1 0 1 0 0 0
→    →   1
 0 1 0 0 1
 rezultatas 9 dešimtainis
Atimtis papildomame kode:
  • atimamas skaičius užrašomas papildomame kode;
  • atimtis keičiama sudėtimi:
  • į papildomoje skiltyje atsiradusį 1 nekreipiame dėmesio
1 0 1 1 0
 tiesioginis 22 kodas
+    1 0 0 1 1
 papildomas 13 kodas
1 0 1 0 0 1
 0 1 0 0 1
 rezultatas 9 dešimtainis
Atimties operacijos tampa sudėtingesnėmis, kai atimamas skaičius didesnis už skaičių ,iš kurio atimama.Šiuo atveju užrašomi ir skaičių ženklai, kurie taip pat sudedami.operacija atliekama ir rezultatai gaunami atvirkštiniame ar papildomame kode.Apie tai, jei įdomu, paskaitykite specialioje literatūroje.
Skaičiaus ženklo užrašymas. Skaičiaus ženklo užrašymui skiriama vyriausia skiltis.Teigiami dvejetainiai skaičiai žymimi 0, neigiami 1. Jeigu vaizduojamas skaičiaus ženklas, apie tai būtinai informuojama.
Aritmetinės operacijos supaprastėja, kai nurodomas skaičiaus ženklas. Neigiami skaičiai šiuo atveju užrašomi atvirkštiniame arba papildomame koduose. Tai neįeina į mokymo programą ir apie tai galime sužinoti specialioje literatūroje.

 

Etiketės