background image

 

 

Informatyka zajmuje się 

Informatyka zajmuje się 

rozwiązywaniem problemów za 

rozwiązywaniem problemów za 

pomocą komputerów. Zapis 

pomocą komputerów. Zapis 

problemu w ścisłej postaci 

problemu w ścisłej postaci 

pokazującej jak postępować krok 

pokazującej jak postępować krok 

po kroku, by rozwiązać problem to 

po kroku, by rozwiązać problem to 

algorytm. Informatyka zatem to 

algorytm. Informatyka zatem to 

inaczej nauka o algorytmach. 

inaczej nauka o algorytmach. 

Zapis algorytmu w języku 

Zapis algorytmu w języku 

zrozumiałym dla komputera to z 

zrozumiałym dla komputera to z 

kolei program.

kolei program.

 

 

background image

 

 

Sformalizujmy definicję 

Sformalizujmy definicję 

algorytmu

algorytmu

    

Algorytm

 to uporządkowany zbiór, jednoznacznych, 

wykonywalnych kroków, określający skończony proces, 

który dla właściwych danych wejściowych „produkuje” 

żądany wynik

    Uwagi:
     - uporządkowanie kroków ( w sensie 
       przyczynowo-skutkowym) nie wyklucza 
       algorytmów równoległych 
       (wielowątkowych)
     - wykonywalność kroków bywa określana jako 
        

obliczalność

     

- żądanie skończoności eliminuje nieskończone   

        procesy nie dające rozsądnych wyników

background image

 

 

A zatem:

A zatem:

Problem

Algorytm czyli ścisły zapis problemu w 

jednej z możliwych notacji (zapis, który 

krok po kroku opowiada jak osiągnąć cel)

Program-komputerowa realizacja 

algorytmu

Proces – wykonanie programu

   Algorytmy mogą wykorzystywać zarówno 

znane metody jak i nowo opracowane.

Trudno podać algorytm rozwiązywania problemu 
choć były próby (fazy rozwiązywania problemu 
wg Polya).

background image

 

 

Reprezentacja algorytmów

Reprezentacja algorytmów

   Algorytm jest tworem abstrakcyjnym, 

tworem fizycznym jest sposób jego 
przedstawienia czyli 

reprezentacja 

algorytmu

    

Dokładne określenie problemu poprzez 

wyszczególnienie danych ( i warunków jakie 
mają spełniać) oraz wyników ( i też 
warunków jakie mają spełniać) nazywamy 

specyfikacją problemu (algorytmu).

background image

 

 

Przykłady reprezentacji 

Przykłady reprezentacji 

algorytmów

algorytmów

słowna

w postaci listy kroków

schematy blokowe

drzewo obliczeń

pseudokod

diagramy Nassi-Schneidermana

w języku programowania (co prowadzi 
już do konstrukcji programu)

background image

 

 

Przykładowy problem

Przykładowy problem

Dane: 

trzy dowolne liczby a,b i c 

Wynik: 

wartość największej z tych 

liczb

background image

 

 

Algorytm – opis słowny

Algorytm – opis słowny

   Należy przyjąć, że największą 

liczbą jest 

a

a następnie porównać 

z nią najpierw liczbę 

b

 zapamiętać 

większą liczbę z tej pary, a 
następnie porównać ją z liczbą 

c

 . 

Większa liczba z tego drugiego 
porównania daje poszukiwaną 
wartość.

background image

 

 

Algorytm - lista kroków

Algorytm - lista kroków

Krok 1. 

Określ wartości a,b i c

.

Krok 2. 

Przyjmij, że max = a

Krok 3. 

Jeżeli b jest większe niż 

max, to przyjmij, że max=b

Krok 4. 

Jeżeli c jest większe niż 

max, to przyjmij, że max=c

Krok 5. 

Wypisz max jako wynik

background image

 

 

 

a,b,c 

Max:=a 

Max<b 

b<b 

Max:=b 

Max<c 

Max:=c 

 

Wynik: max 

KONIEC 

  Start 

Algorytm- schemat 

blokowy

background image

 

 

b >=a

c>=b

Wynik :c

Wynik :b

c>=a

Wynik :c

Wynik :a

Algorytm w postaci drzewa obliczeń

background image

 

 

Algorytm - pseudokod

Algorytm - pseudokod

Krok 1. 

Dane a,b i c

.

Krok 2. 

max = a

Krok 3. 

Jeżeli b >max, to max=b

Krok 4. 

Jeżeli c >max, to max=c

Krok 5. 

Wynik: max

background image

 

 

Inne notacje algorytmów-

Inne notacje algorytmów-

diagramy Nassi-

diagramy Nassi-

Schneidermanna

Schneidermanna

a,b

a,b,c    <<

max:=a

 max<b

TAK

NIE

max:=b

max<c

NIE

TAK

max:=c

Wypisz max

background image

 

 

Typy algorytmów

Typy algorytmów

liniowe

rozgałęzione

iteracyjne

rekurencyjne

background image

 

 

Języki programowania w 

Języki programowania w 

ewolucji historycznym

ewolucji historycznym

początki procesu programowania- algorytmy 

wyrażane w języku maszynowym

języki asemblerowe (drugiego poziomu) 

języki trzeciej generacji

języki wysokiego poziomu - 

pełna 

niezależność od środowiska komputera i 

komunikowanie się z komputerem za 

pomocą pojęć i struktur abstrakcyjnych (to 

komputer winien dostosowywać się do 

charakterystyki człowieka) –duże spektrum 

tych języków

background image

 

 

Język naturalny, a język 

Język naturalny, a język 

programowania

programowania

jeden i drugi ma swój zbiór słów, zbiór reguł mówiących jak 

tworzyć poprawne zdania (instrukcje języka programowania)  czyli 

składnię i reguł mówiących jak je rozumieć czyli semantykę, 

więcej jest jednak różnic

język naturalny pozostawia wiele interpretacji, wyczuciu, zawiera 

zwroty wieloznaczne, idiomy; język programowania nie pozostawia 

miejsca na interpretacje i domysły- żądania wobec komputera 

muszą być wyartykułowane w sposób ścisły i jednoznaczny

programy w części dotyczącej algorytmiki muszą być uniwersalne, 

drobne różnice realizacyjne między komputerami wynikają z 

architektury komputera, a nie istoty algorytmu- narzuca to wymóg 

odpowiedniej uniwersalności na języki programowania 

język naturalny jest zastany, jego bogactwo tworzone jest 

wielopokoleniowo, język programowania jest tworem sztucznym, 

który konstruuje się praktycznie od zera

background image

 

 

Konstrukcja języka metodą 

Konstrukcja języka metodą 

gramatyk formalnych 

gramatyk formalnych 

gramatyki te stworzyły N.Chomsky 
bezskutecznie próbując opisać nimi 
bogactwo języka naturalnego 
(angielskiego)- okazały się one 
znakomitym narzędziem do opisu 
języków programowania, zwłaszcza 
część teorii Chomsky’ego dotycząca 
tzw. gramatyk bezkontekstowych

background image

 

 

Podstawy teorii gramatyk 

Podstawy teorii gramatyk 

bezkontekstowych

bezkontekstowych

alfabet to dowolny zbiór znaków - A

słowo to dowolny ciąg znaków utworzonych z 

dopuszczonych przez alfabet znaków (dopuszczamy 

także tzw. słowo puste o zerowej długości –ε)

długość słowa to liczba jego  znaków

zbiór wszystkich możliwych słów jaki można 

utworzyć przy pomocy alfabetu A oznaczmy przez A*

językiem zdefiniowanym nad alfabetem A nazywamy 

dowolny podzbiór A*

   Język użyty tu definicyjnie dla rozróżnienia od 

rzeczywistych języków programowania 

definiowanych później przez te gramatyki nazywamy 

językiem formalnym

background image

 

 

Podstawy teorii gramatyk 

Podstawy teorii gramatyk 

bezkontekstowych

bezkontekstowych

Przykład

   Jeśli A= {a,b}
    to A*= 

{ε,a,b,aa,bb,ab,ba,aab,aba…}

background image

 

 

Definicja gramatyki 

Definicja gramatyki 

bezkontekstowej

bezkontekstowej

Jest to uporządkowana czwórka:

 {N,T,P,S}
N- zbiór tzw. symboli pomocniczych
T- zbiór symboli końcowych
P- zbiór produkcji czyli konstrukcji postaci

    

Pojedyncza produkcja to innymi słowy możliwość  zastąpienia symbolu 

pomocniczego przez słowo, w skład którego mogą wchodzić 

zarówno symbole pomocnicze jak i końcowe.

S- wyróżniony symbol pomocniczy gramatyki (tzw.  aksjomat)
     

Idea tworzenia  języka generowanego przez taką 

gramatykę polega na tym, aby wychodząc z symbolu 

pomocniczego tak długo stosować, którąś z produkcji aż 

znikną symbole pomocnicze i zostaną wyłącznie końcowe

*

)

(

,

,

:

T

N

w

N

X

w

X

background image

 

 

Gramatyki bezkontekstowe-

Gramatyki bezkontekstowe-

przykłady

przykłady

Przykład 1
G1={ {S}, {a}, {S:= ε,S:=aaS},S}
  Gramatyka generuje słowa o parzystej 

długości (przyjmując, że słowo puste tez ma 

parzystą długość) złożone wyłącznie z liter a

Przykład 2
G2={ {S}, {a,b}, {S:= ε,S:=aSa,S=bSb},S}
   Gramatyka generuje palindromy o parzystej 

długości złożone tylko z liter a oraz b

background image

 

 

Gramatyki bezkontekstowe- 

Gramatyki bezkontekstowe- 

uzupełnienia

uzupełnienia

Gramatyka G jest jednoznaczna jeżeli każde słowo 

języka, które można z niej wyprowadzić ma tylko 

jeden sposób wyprowadzenia

Gramatyka G jest zgodna z językiem L ze zbioru T* 

jeżeli każe słowo wyprowadzalne z G należy do L

Gramatyka G jest pełna względem języka L jeżli każde 

słowo tego języka jest wyprowadzalne z gramatyki G

   
    Definiując określony język programowania przy 

pomocy gramatyki dążyć się będzie do tego, aby 

każdy program (jako zbiór słów tego języka) był 

jednoznaczny. Bazą alfabetu są w przypadku 

większości języków programowania słowa języka 

angielskiego

background image

 

 

Przykład gramatyki 

Przykład gramatyki 

definiujacej liczby całkowite

definiujacej liczby całkowite

Przyjmujmy, że w dowolnym języku 
programowania liczba całkowita to 
ciąg cyfr poprzedzonych znakiem + lub 
– 

Mamy wówczas:
G={ {S,Z,C,L}, {-,+,0,1,2,3,4,5,6,7,8,9}, 

{C::=0|1|2|3|4|5|6|7|8|9,S::=L|
ZL,Z::=+|-, L::=C|LC},S}

background image

 

 

Konstrukcja języka 

Konstrukcja języka 

programowania

programowania

na podobnej zasadzie buduje się definicje 

innych typów danych, wyrażeń, a także 

konstrukcji programistycznych instrukcji

cały taki zbiór z dbałością o jednoznaczność 

gramatyk definiuje nam język programowania

poprawność tej definicji gwarantuje nam 

uzupełnienie gramatyki o zbiór odpowiednich 

reguł semantycznych jednoznacznie 

określających interpretację (przyjmowane 

wartości) dla poszczególnych symboli i 

wyrażeń

background image

 

 

Szczegółowe notacje 

Szczegółowe notacje 

używane do opisu gramatyk 

używane do opisu gramatyk 

bezkontekstowych

bezkontekstowych

notacja użyta przykładowo do opisu 

produkcji w definicji wyrażenia 

całkowitoliczbowego nosi nazwę notacji 

BNF (Backusa-Naura) i stanowi właśnie 

zestaw reguł produkcji 

używana powszechnie do definicji składni 

języków programowania, a także protokołów 

komunikacyjnych

przy jej pomocy opisano składnię takich 

języków programowania jak Fortran 

(Backus), czy Algol (Naur)

background image

 

 

BNF-przykład

BNF-przykład

<zero>::=0

<cyfra niezerowa>::=1|2|3|4|5|6|7|8|9

<cyfra>::=<zero>|<cyfra niezerowa>

<ciąg cyfr>::=<cyfra>|<cyfra><ciąg cyfr>

<liczba naturalna>::=<cyfra>|<cyfra 

niezerowa><ciąg cyfr>

   Oprócz notacji BNF do prezentacji składni 

języka można stosować postać graficzną tzw. 

diagramy syntaktyczne

background image

 

 

Diagramy syntaktyczne-

Diagramy syntaktyczne-

graficzna postać reguł 

graficzna postać reguł 

produkcji, liczba 

produkcji, liczba 

naturalna(pierwsza część)

naturalna(pierwsza część)

zero
 

cyfra niezerowa

                             .....                               

)

0

1

2

9

background image

 

 

Typy instrukcji

Typy instrukcji

Instrukcja pusta

Instrukcja złożona –jako zamknięty blok innych instrukcji

Instrukcja przypisania 
a:=b  (różne konwencje znaku  przypisania)

Instrukcja warunkowa  np.

       if (warunek, test logiczny) then  
       (instrukcje 1) else (instrukcje 2) –   
       niekiedy brak słów then lub else
       
Stosowane operatory porównań oraz logiczne   
       typu AND, OR lub NOT

Instrukcje iteracyjne (powtórzeń, pętli) – różne składni zależnie od 

typu iteracji (znana liczba powtórzeń, liczbę powtórzeń określa 

warunek)

Instrukcje wejścia-wyjścia

Instrukcje wywołania procedur lub funkcji

background image

 

 

Procedury i funkcje

Procedury i funkcje

wydzielone fragmenty programu o składni zbliżonej 

identycznej jak cały program co ma posłużyć tzw. 

modularyzacji programu (idea programowania strukturalnego- 

wyodrębnienie fragmentów kodu, które następnie mogą być 

użyte jako swoiste „czarne skrzynki”)

poza zwiększeniem czytelności kodu programu sprawiają, że 

instrukcje raz zapisane mogą być wielokrotnie realizowane 

(instrukcja wywołania procedury)

dają praktycznie możliwość wykorzystania rekurencji 

(rekursji)

    Rekurencja- 

polega na odwoływaniu się do obiektu, definicji, 

funkcji do samej siebie, w programowaniu najczęściej wiąże 

się z tworzeniem tzw. procedur (funkcji) rekurencyjnych, które 

w wywołują same siebie

background image

 

 

Wybrane pojęcia związane z 

Wybrane pojęcia związane z 

tradycyjnym programowaniem-

tradycyjnym programowaniem-

proste typy danych 

proste typy danych 

liczby całkowite

liczby rzeczywiste

dane znakowe

wartości logiczne

background image

 

 

Wybrane pojęcia związane z 

Wybrane pojęcia związane z 

tradycyjnym programowaniem-

tradycyjnym programowaniem-

złożone struktury danych

złożone struktury danych

 Związane z implementacją (konkretnym 

językiem)

tablice

struktury niejednorodne (np. rekordy)

zbiory

Abstrakcyjne i dynamiczne

stos

listy

kolejki

background image

 

 

Zmienne ze względu na 

Zmienne ze względu na 

używanie pamięci

używanie pamięci

zmienne statyczne- zmiennym 
przydziela się z góry pewien 
obszar pamięci na podstawie ich 
typu (wstępnej deklaracji)

zmienne dynamiczne – pamięć 
przydzielona na te zmienne może 
być rezerwowana i zwalniana w 
trakcie działania programu

background image

 

 

Szczególny rodzaj danych 

Szczególny rodzaj danych 

-pliki

-pliki

pliki binarne – dane w pliku to ciąg bajtów bez 
względu na zawartość

pliki ogólne- podzielone na tzw. rekordy 
logiczne (niekoniecznie równe fizycznym na 
dysku) , obecne w licznych językach 
programowania

pliki tekstowe –najbardziej rozpowszechniony 
standard, plik o strukturze wierszowej, 
jednostka podstawową znak ( w ASCII – 1bajt), 
różne standardy kodowania znaków sterujących

background image

 

 

Paradygmat 

Paradygmat 

programowania

programowania

    Ogół oczekiwań programisty wobec 

języka programowania i komputera, 
na którym działa program- innymi 
słowy idzie o zbiór mechanizmów 
jakich używa programista tworząc 
program oraz mechanizmów 
związanych z tym jak ten program 
jest wykonywany przez komputer

background image

 

 

Najważniejsze 

Najważniejsze 

paradygmaty 

paradygmaty 

programowania

programowania

programowanie imperatywne czyli – sekwencja poleceń 

zmieniająca stan maszyny krok po kroku(mimo pewnych 

abstrakcji ALGOL,FORTRAN, C,ADA)

programowanie strukturalne (modularne) – program jako 

zbiór zamkniętych „kawałków” (procedur, funkcji, 

modułów)-także PASCAL, C (rozwijając się)

programowanie obiektowe – program to zbiór 

porozumiewających się ze sobą obiektów zawierających 

nie tylko instrukcje jak w programowaniu strukturalnym, 

ale  także dane; obiekty podlegają mechanizmowi 

dziedziczenia- C++,JAVA

inne – np. programowanie w logice

   Wiele dzisiejszych języków programowania odzwierciedla 

kilka paradygmatów programowania jednocześnie


Document Outline