Prezentacja programu PowerPoint

Download Report

Transcript Prezentacja programu PowerPoint

PWSW Mechatronika
Informatyka
Wykład 5
Pętla zagnieżdżana
instrukcją powtarzaną pętli może być inna pętla
licznikiem
for (n = 0; n < 10; n++)
for (m = 0; m < 10; m++)
document.write(n,"*",m,"=",(n * m),"<BR>");
z innym
n = 0;
while (n < 10)
{
document.write(n);
n++;// inkremetacja
}
ani raz
Uwaga na warunki
nieskończona
n = 0;
n = 0;
while (n > 0)
while (n >=0)
{
{
}
document.write(n);
document.write(n);
n++;// inkrementacja
n++;// inkremetacja
}
Tablice w JavaScript
Tworzenie pustej tablicy:
nazwaTablicy = new Array()
lub
nazwaTablicy = [ ]
tablica jednowymiarowa 0 rozmiar 10
nazwaTablicy = new Array(10)
Sposoby wypełniania tablicy
tablica[0 ]=1
tablica[1 ]=1.7
tablica[2 ]=-4.56
i dalej można dopisywać nowe elementy
tablica = new Array("Marek","Ania","Agnieszka")
tablica = new Array(1, 2, -6, 12, 5.6 , -1)
tablica= [ ]
for (n = 0; n < 6; n++)
tablica[n] = 2*n
Przykład:
<SCRIPT language="JavaScript">
tab=[1,2,3,4,5,6,7,8,9,10];
document.write("Pierwszy element:", tab[0], "<BR>");
document.write("Tablica ma ", tab.length," elementów<BR>");
//wypisanie tablicy w pętli
for (k=0;k<=9; k++)
{
document.write(tab[k], " ");
}
</SCRIPT>
Tablica może mieć różne typy danych (tekst, liczba itp.) –
tzw. tablice heterogeniczne
Tablica = new Array()
Tablica[1] = "chleb";
Tablica[2] = 2.50;
document.write(Tablica[1],"<BR>")
document.write(Tablica[2],"<BR>")
<SCRIPT LANGUAGE="JavaScript">
tablica=[]
tablica[-1 ]=1
tablica[0 ]=2
tablica[1 ]=1.7
tablica[2 ]=-4.56
tablica[4 ]=14.5
for (k= -1;k<=4;k++)
{
document.write(tablica[k],"<BR>")
}
</SCRIPT>
1
2
1.7
-4.56
undefined
14.5
Tablice asocjacyjne
W JavaScript możemy tworzyć tablice asocjacyjne,
indeks jest nazwany
(asocjacja czyli skojarzenie nazwy z rodzajem danych)
Taka tablica też może mieć różne typy danych (tekst,
liczba itp.)
Tablica = new Array()
Tablica["towar"] = "bułka";
Tablica["cena"] = 2.50;
Tablice wielowymiarowe
Możemy też tworzyć tablice
wielowymiarowe - czyli "tablice w tablicach"
Tablica = [ ];
Tablica[0] = ['Marek' , 183];
Tablica[1] = ['Ania' , 173];
Tablica[2] = ['Agnieszka' , 170];
Przykładowe wypełnienie tablicy
dwuwymiarowej w pętli zagnieżdżanej
Tablica=[ ]
for (w=0;w<=6;w++)
{
Tablica[w]=[ ]
for (k=0;k<=6;k++)
{
Tablica[w][k]=Math.round(100*Math.random())
}
}
Wypisanie tablicy dwuwymiarowej na ekranie w
pętli zagnieżdżanej
for (w=0;w<=6;w++)
{
for (k=0;k<=6;k++)
{
document.write(Tablica [w][k], " ");
}
document.write("<BR>");
}
ALGORYTMY
Algorytm jest to sformalizowany ciąg logicznie
powiązanych instrukcji (poleceń, rozkazów), których
wykonanie pozwoli na przetworzenie informacji
wejściowych (danych) w informacje wyjściowe (wyniki).
Algorytm - rozwiązywanie "krok po kroku" dowolnego
problemu.
Algorytm ma przeprowadzić system z pewnego
stanu początkowego do pożądanego stanu
końcowego.
Badaniem algorytmów zajmuje się algorytmika.
Każdy algorytm komputerowy musi być
wprowadzony do komputera w bardzo rygorystycznie
zdefiniowanym języku - jednoznaczne instrukcje.
Algorytm – przepis niezależny od implementacji
Program – zastosowanie algorytmu w języku zrozumiałym
przez komputer
Czynności służące do rozwiązania zadania:
• analiza treści zadania
• wykaz danych wejściowych; wiadomych i
niewiadomych oraz relacji między nimi
• sprawdzenie czy zadanie posiada jednoznaczne
rozwiązanie
• wybór metody rozwiązania zadania
• opis czynności dla wybranej metody rozwiązania
• sporządzenie i przedstawienie wyników
rozwiązania zadania
Sposoby zapisu algorytmów
• Opis słowny - przedstawienie kolejnych
czynności (akcji) na elementach (danych).
Przykład:przepis kulinarny
• Schemat blokowy – operacje na danych
przedstawione graficznie w postaci
elementarnych bloków.
ZASADY BUDOWY SCHEMATU BLOKOWEGO
1) Każda operacja jest umieszczona w bloku
2) Schemat ma tylko jeden blok "START" i przynajmniej
jeden blok "STOP"
3) Bloki mają połączenia ukierunkowane
4) Z bloku wychodzi jedno połączenie;
wyjątki
- "STOP" (nie wychodzą żadne połączenia)
- blok "warunkowy" ( wychodzą dwa połączenia
opisane TAK i NIE)
5) W bloku "operacyjnym" odbywa się nadanie wartości
(przypisanie) znak :=
Reguły graficzne tworzenia schematów blokowych
Start
Stop
START
Operacje wejścia
wczytaj a,b,x
STOP
i wyjścia
pisz suma, wynik
Instrukcja wykonawcza (proces)
Blok decyzyjny
blok operacyjny
oblicz
suma:=a+b
Łącznik stronicowy
1
suma>0 ?
NIE
TAK
Dla utworzenia algorytmu konieczne są:
• opis obiektów do przechowywania danych
wejściowych, danych pośrednich i wyników
• opis czynności jakie należy wykonać z obiektami, co
realizujemy przy pomocy instrukcji, które opisują:
sposób działania
kolejność ich wykonywania
ewentualne warunki jakie muszą być spełnione
• opis wyników - zawiera sposób udostępnienia
wyników rozwiązanego zadania
Rodzaje sieci działań:
Proste (sekwencyjne) - kolejność realizacji poszczególnych
operacji jest ściśle określona i żadna z nich nie może być
pominięta ani powtórzona - nie używa się bloków
warunkowych.
Z rozwidleniem - zawiera w sobie wybór jednej z kilku
możliwych dróg realizacji danego zadania, istnieje przynajmniej
jeden blok warunkowy.
Z pętlą, często w trakcie realizacji zadania konieczne jest
powtórzenie niektórych operacji różniących się zestawem
danych. Pętla obejmuje tę część bloków, która ma być
powtarzana.
Przykład
W algorytmach sortujących potrzebny jest mechanizm
zamiany wartości umieszczonych w dwóch zmiennych,
jeśli są w niewłaściwej kolejności
Algorytm wymaga zmiennej pomocniczej (jak do
zamiany zawartości dwóch szklanek potrzebna jest
trzecia szklanka)
Opis słowny – "pseudokod":
1. Wczytaj dane do obiektów 1 i 2
2. Przepisz zawartość obiektu 1 do obiektu pomocniczego
3. Przepisz zawartość obiektu 2 do obiektu 1
4. Przepisz zawartość obiektu pomocniczego do obiektu 1
5. Wyprowadź wartości obiektów 1 i 2
wczytaj a,b
pom:=a
a:=b
b:=po
m
drukuj a, b
schemat blokowy
zamiany wartości
w dwóch
zmiennych
obiekt
pomocniczy
3
1
A
B
2
Przykład 2 – z blokiem decyzyjnym i pętlą
Ile razy trzeba podzielić na pół daną liczbę, aby uzyskać
wartość mniejszą od 
Opis słowny:
1. Wczytaj liczbę i 
2. Ustal wartość licznika równą 0
3. Podziel liczbę przez 2
4. Zwiększ licznik o 1
5. Sprawdź czy wynik jest mniejszy od , jeśli tak, to
przejdź do punktu 6, jeśli nie to wróć do punktu 3
6. Wyprowadź wartość licznika
wczytaj liczba, 
schemat
blokowy
licznik:=0
liczba:=liczba/2
licznik:=licznik+1
NIE
liczba< 
TAK
drukuj licznik
czy algorytm jest
poprawny??
A może inaczej?
wczytaj liczba, 
licznik:=0
licznik:=licznik+1
liczba< 
NIE
liczba:=liczba/2
TAK
drukuj licznik
Widzimy, że
potrzebna jakaś
ocena
poprawności
A więc, aby tworzyć efektywne algorytmy i móc je
aplikować programowo, potrzebne są następujące
elementy:
Spektrum obiektów programowych, możliwość ich
odróżniania, klasyfikacja do typu, umieszczanie ich
identyfikatorów (nazw) i wartości w pamięci
Spektrum operacji (operatorów nadawania wartości,
arytmetycznych, porównania) – operacje na
obiektach!
Mechanizm sterowania – co wykonać następnie po
aktualnej operacji
Podstawy programowania
Do 1954 roku – język maszynowy (Eniac, Mark IUSA) – niskiego poziomu
Kodowanie instrukcji procesora w postaci ciągu liczb
dwójkowych (elementarny rozkaz i dane)
- pracochłonność (same liczby, długie algorytmy
działań takich jak dodawanie i mnożenie) – np.
rzymskie
- trudność śledzenia błędów
lata 50-te - zastąpienie kodów liczbowych operacji nazwami
mnemotechnicznymi
np. mnożenie MPY (multiply)
język symboliczny - assembler
ASSEMBLER – także program tłumaczący na kod maszynowy
(wewnętrzny)
DISSASSEMBLER – tłumaczenie odwrotne
stosowany do dziś – np. oprogramowanie interfejsów
pomiarowych, wprowadzanie danych z pomiarów i ich obróbka
komputerowa
Cechy Assemblera
-
zmniejszona ale nadal duża pracochłonność
-
błędy – prawie każda kombinacja znaków mogła być
wykonana
-
ukierunkowanie na konkretny komputer (procesor) dla
którego program był pisany
-
wąski zbiór rozkazów, prymitywna architektura ówczesnych
komputerów,
-
brak rejestrów (pamięci pomocniczych),
-
brak operacji zmiennoprzecinkowych
Etap przejściowy – tzw. systemy automatycznego programowania –
„sztuczki” programistyczne pozwalające na prostsze wykonywanie operacji
zmiennopozycyjnych, obliczanie funkcji itp., spowolnienie ok. 5-krotne
programów, zarzucone z uwagi na sprzętowe rozwiązanie problemów
operacji zmiennoprzecinkowych
1954 – FORTRAN – języki tzw. wysokiego poziomu
(kod maszynowy i assembler to niski poziom – bliższy
procesorowi)
Fortran (Formula Translator)
Zapis operacji w sposób łatwiejszy, zrozumiały i dobrze
kontrolowany przez programistę
Po stworzeniu kodu programu w języku następuje proces
translacji (tłumaczenia, kompilacji) na język wewnętrzny
komputera.
Problemy:
- zrozumiałość
- jednoznaczność
- skuteczność tłumaczenia
Języki wysokiego poziomu po etapie początkowym stały się
maszynowo niezależne z powodu wielu wersji translatorów
(programów kompilujących)
Kompilator (ang. compiler) to program służący do
tłumaczenia całego kodu napisanego w jednym języku
(źródłowym) na równoważny kod w innym języku
(wynikowym).
Najczęściej jest to tłumaczenie z języka wysokiego
poziomu (łatwiejszego dla programisty) na język
wewnętrzny procesora.
Proces ten nazywany jest kompilacją.
Kod źródłowy - tekst programu w języku programowania
wysokiego poziomu (plik tekstowy (tekst nieformatowany .pas .c .java .php i inne)
Kompilacja - tłumaczenie (w całości)
kodu źródłowego na wykonywaną postać binarną, ładowalną
(plik exe) – odrębny proces – zwykle jeśli choć jeden błąd to
plik binarny nie powstanie – lista błędów
Interpretacja – tłumaczenie pojedynczych kolejnych
instrukcji w trakcie procesu wykonywania – wykonane tyle
instrukcji ile poprawnych – stop na znalezionym błędzie
Języki wysokiego poziomu
COBOL – dla przedsiębiorstw, język prawie naturalny (ang)
MULTIPLY – mnożenie, ADD – dodawanie, czy dobrze??
Do dziś specjaliści potrzebni (w USA 500 $/godz za zmiany daty w
2000)
W kolejnych latach - obfitość języków programowania
BASIC, LOGO – prostota, interpretacja w odróżnieniu od
kompilacji, tłumaczenie „na bieżąco” każdej instrukcji a nie
programu w całości
PASCAL, C, C+, C++ - języki strukturalne z elementami tzw.
programowania obiektowego
OOP (Object Oriented Programming) – języki zorientowane
obiektowo : PROLOG, Visual Basic, Turbo Vision dla Pascala,
Delphi, Java, C# ("si szarp")
Podprogram - wyodrębniona część programu (ze
względu na czytelność lub wielokrotne użycie)
posiadająca wyodrębnioną nazwę i sposób wymiany
informacji z pozostałymi jego częściami
Sposoby pisania programu:
1. Napisanie programu źródłowego dowolnym edytorem
tekstu
2. tłumaczenie na kod wewnętrzny
3. konsolidacja (łączenie z podprogramami bibliotecznymi
– gotowymi modułami)
4. wykonanie
lub
Korzystanie ze zintegrowanych pakietów programistycznych
(wewnętrzne narzędzia edycji, kompilacji i konsolidacji, weryfikacji
błędów itp.)
Sortowanie bąbelkowe
Algorytm polega porównywaniu kolejnych par elementów
sąsiadujących i zamianie miejscami w przypadku
niewłaściwej kolejności.
Po wykonaniu pierwszego przebiegu porównań i
ewentualnych zamian miejscami, element największy
znajdzie się na końcu (w przypadku porządku sortowania
według kolejności rosnącej). Następnie wykonujemy
kolejny przebieg porównań par i tak dalej…
Sortowanie
Sortowanie bąbelkowe
Algorytm polega porównywaniu kolejnych par elementów
sąsiadujących i zamianie miejscami w przypadku
niewłaściwej kolejności
1
2
3
4
.....
N
N-1 porównań w każdym przebiegu
Wykonujemy N przebiegów
1 przebieg
12
5
5
5
5
5
2 przebieg
5
5
5
5
5
5
3 przebieg
5
4
4
4
4
4
4 przebieg
4
4
4
4
4
4
5
12
11
11
11
11
11
11
12
4
4
4
4
4
4
12
7
7
7
7
7
7
12
2
2
2
2
2
2
12
11
11
4
4
4
4
4
4
11
7
7
7
7
7
7
11
2
2
2
2
2
2
11
11
12
12
12
12
12
12
4
5
5
5
5
5
7
7
7
2
2
2
2
2
2
7
7
7
11
11
11
11
11
11
12
12
12
12
12
12
5
5
2
2
2
2
2
2
5
5
5
5
7
7
7
7
7
7
11
11
11
11
11
11
12
12
12
12
12
12
zamiana 1
zamiana 2
zamiana 3
zamiana 4
zamiana 5
efekt ostatniej zamiany – największy na końcu
N=6
zmiana 6
zmiana 7
zmiana 8
zamiana 9
zamiana 10
zamiana 11
zauważamy nadmiarowe
porównania
5 przebieg
4
2
2
2
2
2
6 przebieg
2
2
2
2
2
2
4
4
4
4
4
5
5
5
5
5
5
7
7
7
7
7
7
11
11
11
11
11
11
12 zmiana 12
12
12
12
12
12
4
4
4
4
4
5
5
5
5
5
7
7
7
7
7
11
11
11
11
11
12
12
12
12
12
30 operacji= (N-1)*N=6*5
Sortowanie bąbelkowe skrócone
Algorytm polega na porównywaniu kolejnych par
elementów sąsiadujących, z tym, że:
- w każdym kolejnym przebiegu liczba
analizowanych par jest zmniejszana o 1
- przebiegów wykonujemy N-1
Sortowanie bąbelkowe
<SCRIPT LANGUAGE="JavaScript">
tab=new Array(10);
N=10;
lop=0;
for (k=0;k<N,k++)
tab[k] =Math.round(100*Math.random());
//sortowanie
for (k=0;k<N;k++)
for(m=0;m<N;m++)
{ lop++;
if tab[m]>tab[m+1]
{
pom=tab[m];
tab[m]=tab[m+1];
tab[m+1]=pom;
}
};
//wypisanie wyniku
for (k=0;k<N; k++)
document.write(tab[k]," ");
document.write("<BR>liczba operacji=",lop);
</SCRIPT>
Sortowanie bąbelkowe skrócone
<SCRIPT LANGUAGE="JavaScript">
tab=new Array(10);
N=10;
lop=0;
for (k=0;k<N,k++)
tab[k] =Math.round(100*Math.random());
//sortowanie
for (k=0;k<N-1;k++)
for(m=0;m<N-k+1;m++)
{ lop++;
if tab[m]>tab[m+1]
{
pom=tab[m];
tab[m]=tab[m+1];
tab[m+1]=pom;
}
};
//wypisanie wyniku
for (k=0;k<N; k++)
document.write(tab[k]," ");
document.write("<BR>liczba operacji=",lop);
</SCRIPT>
Wyznaczanie maksimum w tablicy
<SCRIPT LANGUAGE="JavaScript">
tab=new Array(10);
N=10;
lop=0;
for (k=0;k<N;k++)
tab[k] =Math.round(100*Math.random());
//wypisanie tablicy
for (k=0;k<N; k++)
document.write(tab[k]," ");
document.write("<BR>");
//szukanie max
max=tab[0];
//zakładamy że 1-szy element max
for (k=2;k<N;k++)
if (tab[k]>max)
max=tab[k];
document.write("<BR>max=",max);
</SCRIPT>