Transcript pps
Podstawy informatyki (2)
wykład
: 15 godz.
ćwiczenia : 15 godz.
Prowadzący: dr inż. Jacek Piątkowski
1
Kodowanie liczb
Dodawanie binarne
Reguły dodawania cyfr binarnych .
0
+ 0
0
1
+ 0
1
0
+ 1
1
1
+ 1
10
przykład:
00111010
+ 00011011
1 0.0 1 1
+ 1 0 0.1 1
01010101
1 1 1.0 0 1
Podstawy informatyki 2
Reprezentacja liczb całkowitych
Notacja uzupełnieniowa do dwóch
Do reprezentacji każdej wartości w notacji U2 wykorzystuje się
tę samą ustaloną liczbę bitów.
- Wartość najbardziej znaczącego bitu decyduje o znaku reprezentowanej
wartości.
- Bit znaku ( sign bit ) 0 – wartość dodatnia
1 – wartość ujemna
Obecnie:
- najpopularniejszy system reprezentacji liczb całkowitych
- wykorzystuje się notację 32-bitową
zakres: -2 147 483 648 ÷ 2 147 483 647
Podstawy informatyki 3
Reprezentacja liczb całkowitych
Notacja uzupełnieniowa do dwóch
Przykład – system 4-bitowy
bit
3
2
1
0
waga
-8
4
2
1
Ciągi bitów reprezentujące wartości
dodatnie i ujemne czytane od strony
prawej do lewej są identyczne aż do
pozycji pierwszej jedynki (włącznie).
Od tego miejsca pozostałe wartości
bitów są swoimi uzupełnieniami.
0111
0110
0101
0100
0011
0010
0001
0000
1111
1110
1101
1100
1011
1010
1001
1000
7
6
5
4
3
2
1
0
-1
-2
-3
-4
-5
-6
-7
-8
Podstawy informatyki 4
Reprezentacja liczb całkowitych
Notacja uzupełnieniowa do dwóch
Algorytm wyznaczania liczby przeciwnej:
- wykonaj negację kolejnych bitów liczby wejściowej,
- dodaj 1.
NOT
01111011
+
10000100
00000001
123
10000101
-123
NOT
10011101
-99
+
01100010
00000001
99
01100011
Podstawy informatyki 5
Reprezentacja liczb całkowitych
Dodawanie w notacji uzupełnieniowej do dwóch
7
- 4
0111
- 0100
0111
+ 1100
10011
3
Należy odrzucić ewentualny dodatkowy bit wyniku ze skrajnej
lewej pozycji powstały w wyniku przeniesienia.
4
- 7
0100
- 0111
0100
+ 1001
1101
0011
-3
(3)
Podstawy informatyki 6
Reprezentacja liczb całkowitych
Problem przepełnienia
Problem przepełnienia (overflow)
- powstaje wówczas gdy wartość, którą potrzeba zakodować, nie mieści
się w zakresie wartości danego systemu reprezentacji liczb.
- może wystąpić w przypadku dodawania dwóch wartości dodatnich lub
dwóch wartości ujemnych.
+ 7
+ 7
- 7
- 7
+ 0111
+ 0111
1110
? -2
- 0111
- 0111
1001
+ 1001
10010
? 2
Błąd łatwy do wykrycia bowiem :
suma liczb dodatnich daje wynik ujemny i odwrotnie ...
Podstawy informatyki 7
Reprezentacja liczb całkowitych
Notacja z nadmiarem
Przykład – notacja z nadmiarem 8
Różnica w stosunku do systemu
uzupełnieniowego do dwóch
polega na odwróceniu bitu znaku.
1111
1110
1101
1100
1011
1010
1001
1000
0111
0110
0101
0100
0011
0010
0001
0000
7
6
5
4
3
2
1
0
-1
-2
-3
-4
-5
-6
-7
-8
Podstawy informatyki 8
Reprezentacja liczb rzeczywistych
Kodowanie w systemie zmiennoprzecinkowym
- bazuje na systemie pozycyjnym wagowym;
- opiera się na podziale liczby na część ułamkową zwaną mantysą,
oraz część wykładnika potęgi podstawy systemu zwanego cechą;
- umożliwia zapis liczb rzeczywistych z ustalonym błędem względnym.
L M pE
M – mantysa
( w postaci znormalizowanej tzn. z pierwszą liczbą po
przecinku większą od zera ) ;
p – podstawa systemu ( zgodnie z zapisem pozycyjnym wagowym )
E – cecha ( exponent ) – wykładnik potęgi umożliwiający przesunięcie
przecinka liczby rzeczywistej tak by uzyskać znormalizowaną
postać mantysy.
Podstawy informatyki 9
Reprezentacja liczb rzeczywistych
System zmiennoprzecinkowy
cecha
mantysa
bit znaku
0 - wartość dodatnia ; 1 - wartość ujemna
Ilość bitów przeznaczonych na cechę decyduje o zakresie liczbowym.
Ilość bitów przeznaczonych na mantysę decyduje o błędzie zapisu.
bit znaku
- Liczba rzeczywista
( 4 bajty )*
- Liczba rzeczywista
podwójnej precyzji
( 8 bajtów )*
( 8 bitów )
( 23 bity )
( 11 bitów )
( 52 bity )
bit znaku
* Wg standardu IEEE
IEEE – Institute of Electrical and Electronics Enginieers
Podstawy informatyki 10
Reprezentacja liczb rzeczywistych
System zmiennoprzecinkowy
Sposób interpretacji liczb.
Przykład kodowany w systemie 8-bitowym.
Ciąg bitów :
01101101
0
• Bit znaku :
1
1
0
1
1 0
1
0 - liczba dodatnia
• Cecha ( liczba całkowita kodowana w notacji z nadmiarem )
- 3 bity nadmiar = 4 ( 2 (3-1) )
- wartość cechy : 2 przecinek ( kropka ) o dwie pozycje w prawo
• Mantysa : .1 1 0 1
zatem po przesunięciu kropki : 1 1 . 0 1 3¼
Podstawy informatyki 11
Reprezentacja liczb rzeczywistych
System zmiennoprzecinkowy
Przykład :
Ciąg bitów :
10111100
1
• Bit znaku :
0
1
1
1
1 0
0
1 - liczba ujemna
• Cecha
- 3 bity
nadmiar = 4 ( 2 (3-1) )
- wartość cechy : -1
przecinek ( kropka ) o jedną pozycję w lewo
• Mantysa : .1 1 0 0
zatem po przesunięciu kropki : .0 1 1 0 0
3
8
Podstawy informatyki 12
Reprezentacja liczb rzeczywistych
System zmiennoprzecinkowy
Przykład :
Liczba :
2¾
1 0 .1 1
1 0 1
0
1
• Cecha powinna mieć wartość 2
tj. 1 1 0 ( w 3-bitowej notacji z nadmiarem 4 )
Wynik :
0
1
1
0
1
0 1
1
Podstawy informatyki 13
Reprezentacja liczb rzeczywistych
System zmiennoprzecinkowy
Przykład :
Liczba :
- 3 /8
.0 1 1
1
1
1
mantysa znormalizowana
0
0
( z pierwszą liczbą po przecinku
większą od zera )
• Cecha powinna mieć wartość - 1
tj. 0 1 1 ( w 3-bitowej notacji z nadmiarem 4 )
Wynik :
1
0
1
1
1
1 0
0
Podstawy informatyki 14
Reprezentacja liczb rzeczywistych
Błędy zaokrągleń
Przykład :
2,625 = 2 5/8
Liczba :
1 0 .1 0 1
1
0
0
1
0
utracony bit
• Cecha powinna mieć wartość 2
tj. 1 1 0 ( w 3-bitowej notacji z nadmiarem 4 )
Wynik :
0
1
1
0
1
0 1
0
czyli: 2½ a nie 2 5/8
Podstawy informatyki 15
Reprezentacja liczb rzeczywistych
Błędy zaokrągleń
Sytuacje prowadzące do powstania błędów zaokrągleń :
- brak możliwości zapisu całej reprezentacji binarnej danej liczby;
- dodawanie do bardzo dużych liczb wartości bardzo małych, które
bywają obcinane;
- brak skończonego rozwinięcia ułamka danej liczby
jak np. w systemie dziesiętnym 1/3 = 0,333333(3)
0,25 = ( 0,111111(1) )5
0,1 = ( .0001100110011 (0011) )2
0,3 = ( .01001100110011 (0011) )2
Podstawy informatyki 16
Reprezentacja liczb rzeczywistych
Błędy zaokrągleń
Przykład - kodowany w systemie 8-bitowym (4 bity do zapisu mantysy )
Należy wykonać dodawanie :
2 ½ + 1 /8 + 1 /8
Sposób 1 – wartości dodawane od lewej do prawej.
2 ½ + 1 /8 = 2 5 /8
1 0 .1 0 1
czyli:
2½ a nie 2 5/8
utracony bit
Dodanie kolejnej wartości
1
/8 nic nie zmieni i wynik końcowy to 2½
Sposób 2 – wartości dodawane od prawej do lewej.
1
1
/ 8 + 1 /8 = 1 /4
.0 1
/4 + 2 ½ = 2 3/4 1 0.1 1 czyli: 0 110 1011 - OK.
Podstawy informatyki 17
Reprezentacja liczb rzeczywistych
Błędy zaokrągleń
W wielu jednak przypadkach problemy wynikające z błędów
zaokrągleń można bardzo łatwo wyeliminować.
• Czasami wystarczy tylko zmienić jednostki obliczeń.
- zamiast liczyć z dokładnością do 0,01 zł – liczyć w groszach;
- zamiast liczyć z dokładnością do 0,001m – liczyć w mm.
• Czasami trzeba zaprojektować cały cykl obliczeń, czy też dokonać
normalizacji przetwarzanych danych.
• Regułą jest np. by sumowanie wielu liczb zaczynać od wartości
małych, by uzyskana w ten sposób wartość nie była obcięta przy jej
dodaniu do wartości dużo większej.
Podstawy informatyki 18
Algorytmy
Algorytm - zbiór uporządkowanych, jednoznacznych i wykonywalnych
kroków, które określają skończony proces.
Algorytm jest tworem abstrakcyjnym, natomiast jego formalną reprezentacją jest (przeznaczoną do wykonania przez komputer) jest program.
Pomimo, że algorytm musi mieć jednoznacznie określoną kolejność
wykonywania jego kroków nie oznacza to jednak, że zawsze kroki muszą
być wykonywane wg. porządku : krok1, krok2, krok3, itd..
Istnieją algorytmy zwane równoległymi ( parallel algorithms ), które
składają się z kilku ciągów kroków, z których każdy jest przeznaczony
do wykonywania na innym procesorze komputera wieloprocesorowego.
Struktura takiego algorytmu reprezentuje wiele wątków, które rozdzielają
się i ponownie łączą po wykonaniu przez poszczególne procesory
fragmentów całego zadania.
Podstawy informatyki 19
Algorytmy
Przykład. Algorytm Euklidesa znajdowania największego wspólnego
dzielnika całkowitych liczb dodatnich.
Krok 1. Przypisz zmiennym x i y
odpowiednio większą i mniejszą wartość wejściową.
Krok 2. Podziel x przez y, a resztę z dzielenia nazwij r.
Krok 3. Jeśli r nie jest zerem,
to przypisz zmiennej x wartość y, zmiennej y wartość r
i powróć do kroku 2;
w przeciwnym razie
aktualna wartość zmiennej b jest poszukiwanym największym
wspólnym dzielnikiem.
Podstawy informatyki 20
Algorytmy
Przykład :
Krok 1. Sporządź listę wszystkich całkowitych liczb dodatnich.
Krok 2. Uporządkuj listę malejąco
(od liczby największej do najmniejszej).
Krok 3. Pobierz pierwszy element uporządkowanej listy.
Powyższa instrukcja nie jest jednak algorytmem !
Kroki 1 i 2 nie są możliwe do wykonania .
Podstawy informatyki 21
Algorytmy
Sformułowanie algorytmu wymaga zastosowania pewnej formy jego
zapisu – zastosowania pewnego języka przekazu np.:
- opisu słownego,
- instrukcji obrazkowej (jak np. w przypadku instrukcji wiązania krawata),
- wzoru matematycznego np. :
L
n 1
i
a
p
i
i m
W wielu jednak przypadkach (zwłaszcza opisów słownych) sformułowany
algorytm może okazać się niejednoznaczny na przyjętym poziomie
szczegółowości.
Podstawy informatyki 22
Algorytmy
Przykład niejednoznaczności opisu słownego:
...
. . . do obliczenia wyniku końcowego użyj liczby pierwszej spośród
wszystkich zgromadzonych liczb.
- pierwszej w kolejności gromadzenia ?
- może jednak dowolnej liczby pierwszej ?
Problem niejednoznaczności zapisu algorytmu może być wyeliminowany
poprzez zastosowanie określonego zestawu konstrukcji pierwotnych .
Każda konstrukcja pierwotna jest zdefiniowana za pomocą:
1. składni ( syntax ) – opisującej symboliczną reprezentację konstrukcji,
2. semantyki ( semantics ) – opisującej znaczenie danej konstrukcji.
Podstawy informatyki 23
Algorytmy
Zestaw konstrukcji pierwotnych do reprezentacji algorytmów przeznaczonych do wykonywania na komputerze mógłby być określony przez zbiór
rozkazów maszynowych danego komputera.
Zapisywanie algorytmów na tym poziomie szczegółowości byłoby
jednak niezwykle żmudne i trudne, prowadziłoby do powstawania
wielu błędów, a w wielu przypadkach wręcz nie do zrealizowania .
Obecnie do zwięzłego zapisu algorytmu w fazie jego projektowania
wykorzystywane są takie rozwiązania jak:
- pseudokod,
- sieci działań (schematy blokowe),
- diagramy ( klas, współpracy, przepływu danych, ...)
Podstawy informatyki 24
Algorytmy
Pseudokod
Pseudokod - forma zapisu algorytmu składająca się ze struktur
składniowo-semantycznych przypominających elementy składniowe
występujące w języku programowania.
Opracowanie pseudokodu polega na zdefiniowaniu spójnej, zwięzłej
notacji do reprezentowania powtarzających się struktur semantycznych.
Elementy składowe pseudokodu traktuje się jako konstrukcje pierwotne,
za pomocą których wyrażane są dalsze pojęcia.
Podstawy informatyki 25
Algorytmy
Pseudokod
przykłady
Instrukcja warunkowa if ( jeżeli )
if ( warunek )
{ instrukcja_1 }
if ( warunek )
{ instrukcja }
else
{ instrukcja_2 }
if ( rok jest przestępny )
{ podziel wynik przez 366 }
if ( sprzedaż maleje)
{ obniż cenę o 5 % }
else
{ podziel wynik przez 365 }
Podstawy informatyki 26
Algorytmy
Pseudokod
przykłady
Instrukcja while ( dopóki )
while ( warunek )
{ instrukcja }
Warunek
fałszywy
Sprawdź
warunek
Warunek
prawdziwy
while ( są jeszcze bilety )
{ sprzedaj bliet }
instrukcja
Podstawy informatyki 27
Algorytmy
Pseudokod
przykłady
Instrukcja do while ( wykonuj dopóki )
do
{ instrukcja }
instrukcja
while ( warunek )
Warunek
fałszywy
do
Sprawdź
warunek
{ pobieraj dane }
while ( baza pusta )
Warunek
prawdziwy
Podstawy informatyki 28
Algorytmy
Pseudokod
przykłady
Operatory
operator
operacja
zastosowanie
=
przypisanie
inicjowanie zmiennej (obiektu) wartością początkową
przypisanie zmiennej nowej wartości
Operatory arytmetyczne
operator
operacja
Zastosowanie
*
mnożenie
wyrażenie * wyrażenie
/
dzielenie
wyrażenie / wyrażenie
%
dzielenie modulo
( reszta z dzielenia )
wyrażenie % wyrażenie
+
dodawanie
wyrażenie + wyrażenie
-
odejmowanie
wyrażenie - wyrażenie
Podstawy informatyki 29
Algorytmy
Pseudokod
przykłady
Operatory
Operatory logiczne
operator
operacja
Zastosowanie
==
równe
wyrażenie == wyrażenie
!=
nierówne
wyrażenie != wyrażenie
<
mniejsze niż
wyrażenie < wyrażenie
<=
mniejsze lub równe
wyrażenie <= wyrażenie
>
większe niż
wyrażenie > wyrażenie
>=
większe lub równe
wyrażenie >= wyrażenie
Podstawy informatyki 30
Algorytmy
Pseudokod
przykłady
Przykład. Algorytm wyszukiwania sekwencyjnego
Dana jest lista nazwisk uporządkowanych alfabetycznie.
Poszukiwany algorytm dający możliwość sprawdzenia czy na liście
znajduje się poszukiwane nazwisko.
Podstawy informatyki 31
Algorytmy, pseudokod
Przykład. Algorytm wyszukiwania sekwencyjnego
if ( lista jest pusta )
{
nie znaleziono szukanego elementu }
else
{
element sprawdzany = pierwszy element listy
while ( wartość szukana > element sprawdzany
oraz są jeszcze elementy do sprawdzenia )
{ element sprawdzany = kolejny element listy }
if ( wartość szukana == element sprawdzany )
{ szukany element został odnaleziony }
else { nie znaleziono szukanego elementu }
}
Podstawy informatyki 32
Algorytmy
Pseudokod
przykłady
Przykład. Algorytm sortowania listy
Ola
Ewa
Lista początkowa :
Ala
Iza
Ula
Ola
Ola
Ewa
Ewa
Ola
Ola
Ala
Ala
Ala
Ala
Iza
Iza
Iza
Iza
Ula
Ula
Ula
Ula
Ewa
Ola
Ewa
Ewa
Ewa
Podstawy informatyki 33
Algorytmy
Przykład. Algorytm sortowania listy
Ewa
Ewa
Ola
Ola
Ewa
Ola
Ewa
Ala
Ala
Ola
Ola
Iza
Iza
Iza
Iza
Ula
Ula
Ula
Ula
Ala
Ewa
Ala
Ala
Ewa
Podstawy informatyki 34
Przykład. Algorytm sortowania listy
Ala
Ala
Ewa
Ewa
Ewa
Ewa
Ola
Ola
Ola
Iza
Iza
Iza
Ola
Ola
Ula
Ula
Ula
Ula
Iza
Ala
Iza
Ala
Iza
Podstawy informatyki 35
Przykład. Algorytm sortowania listy
Ala
Ala
Ewa
Ewa
Ewa
Ewa
Iza
Iza
Iza
Iza
Ola
Ola
Ola
Ola
Ula
Ula
Ula
Ala
Ula
Ala
Ula
Ula
Podstawy informatyki 36
Algorytmy, pseudokod
Przykład. Algorytm sortowania
N = 2
while ( N nie przekracza długości listy )
{
pobierz N-ty element jako przenoszony;
zapamiętaj tymczasowo wartość przenoszonego elementu,
pozostawiając po tym elemencie wolne miejsce na liście;
while ( jest jeszcze element powyżej wolnego miejsca
i element jest większy niż element przenoszony )
{
przesuń element z listy na pozycję wolnego miejsca
tworząc w ten sposób nowe wolne miejsce nad
przesuniętym elementem;
}
wstaw przenoszony element w wolne miejsce na liście;
N = N + 1;
}
Podstawy informatyki 37
Przykład Algorytm Euklidesa znajdowania największego wspólnego
dzielnika całkowitych liczb dodatnich zapisany pseudokodem
x = liczba większa
y = liczba mniejsza
r = x % y
while ( r!=0 )
{
x = y
y = r
r = x %y
}
największy wspólny dzielnik to y
Podstawy informatyki 38
Algorytmy
Przykład. Algorytm Euklidesa znajdowania największego wspólnego
dzielnika całkowitych liczb dodatnich.
Krok 1. Przypisz zmiennym x i y
odpowiednio większą i mniejszą wartość wejściową.
Krok 2. Podziel x przez y, a resztę z dzielenia nazwij r.
Krok 3. Jeśli r nie jest zerem,
to przypisz zmiennej x wartość y, zmiennej y wartość r
i powróć do kroku 2;
w przeciwnym razie
aktualna wartość zmiennej b jest poszukiwanym największym
wspólnym dzielnikiem.
Podstawy informatyki 39