1.98k likes | 2.29k Views
Wstęp Do Informatyki – Ćwiczenia – Język ADA Zajęcia 1: Organizacja. Michał Karbowańczyk mak@zsk.p.lodz.pl http://zskl.p.lodz.pl/~mak Pokój nr 14 (parter) Poniedziałek 10 – 11 Czwartek 16 – 17 Sobota 14 – 15 w weekendy zjazdowe.
E N D
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Organizacja • Michał Karbowańczyk • mak@zsk.p.lodz.pl • http://zskl.p.lodz.pl/~mak • Pokój nr 14 (parter)Poniedziałek 10 – 11Czwartek 16 – 17Sobota 14 – 15 w weekendy zjazdowe
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Organizacja • Obecność na ćwiczeniach • Spóźnienia • Rozmowy • Telefony • Nagłe potrzeby wyjścia • Wydawanie odgłosów innych
Wstęp Do Informatyki – Ćwiczenia – Język ADA Zajęcia 1: Organizacja • Sposób zaliczenia zajęć:Pula 40 punktów (laboratoria 30 pkt, wykład 30 pkt) Dwa kolokwia po 20 punktówKażde kolokwium – minimum 12 punktów (60%)
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Organizacja • PROSZĘ PYTAĆ! • PROSZĘ KRYTYKOWAĆ! • PROSZĘ SIĘ NIE ZGADZAĆ! • PROSZĘ MIEĆ WŁASNE KONCEPCJE!
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Przedmiot zajęć • Przedmiot zajęć – programowanie w języku ADA • Dlaczego ADA, a nie C(++,#) / Java ?-> różnica między informatykiem a programistą C-> zalety języka ADA-> czytelna składnia wywodząca się z Pascala-> ADA wymusza poprawność-> mniejsza możliwość popełnienia błędu-> wielowątkowość niemal intuicyjna (por. C++!)-> pełna obiektowość-> obsługa bibliotek Windows-> ADA jest stosowana w aplikacjach odpowiedzialnych za bezpieczeństwo ludzi (przykład – sterowanie automatyką samolotu)-> Język ADA w dalszym toku studiów
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Zasoby • Literatura:-> Michał Morawski, Antoni Zajączkowski „Ada 95”skrypt w formie pliku pdf-> Z. Huzar „Ada 95”, wyd. Helion->J. Barnes „Programming in Ada 95”-> N. Wirth „Algorytmy + struktury danych = programy”, wyd. WNT • Internet:-> http://republika.pl/greybrow/ada/ Kurs Ady po polsku-> http://www.adahome.com/Tutorials/Lovelace/lovelace.htm Popularny przewodnik po języku Ada-> http://www.adahome.com/Ammo/Cplpl2Ada.html Ada dla programistów C-> http://www.adahome.com/ Centrum informacji o języku Ada
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Zasoby • Narzędzia dla programistów Ada • Kompilator GNAThttp://www.gnat.com-> student info • Środowisko AdaGIDEhttp://www.usafa.af.mil/dfcs/bios/mcc_html/adagide.html
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Program zajęć Rzut oka na program zajęć: • 1: Organizacja. Pojęcie programu. Notacja BNF. • 2: Typy liczbowe int i float. Atrybuty i literały tych typów. Operatory arytmetyczne. Wyrażenia. Relacje. Konwersje. • 3: Typy własne: wyliczeniowe i podtypy. Atrybuty typów wyliczeniowych. Relacje. Typ znakowy i logiczny. Operatory logiczne.Deklaracje zmiennych. Składnia identyfikatora. Operator przypisania. Pojęcie L-wartości. Deklaracje stałych.
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Program zajęć • 4: Instrukcja warunkowa if…then…elsif…else. • 5: Tablice jednowymiarowe. Atrybuty tablic. Agregaty tablicowe pozycyjne i nazywane. Podtablice. Relacje między tablicami. Typy tablicowe i tablice anonimowe. Otwarty typ tablicowy. Typ string. • 6: Tablice wielowymiarowe.Pętla for. Specyficzne własności pętli forw języku ADA. Instrukcja exit [when].
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Program zajęć • 7: Deklaracja funkcji i procedur. Parametry typu in, out, in/out.Bloki programu. Zasięg i widoczność deklaracji. Instrukcja declare. • 8: KOLOKWIUM 1, na którym wszyscy osiągają znakomite rezultaty. • 9: Pętle while oraz loop. Instrukcja goto.Omówienie wyników kolokwium 1. • 10: Instrukcja warunkowa case. Typ rekordowy. Agregat rekordowy nazywany i pozycyjny.
Wstęp Do Informatyki – Ćwiczenia – Język ADA Zajęcia 1: Program zajęć • 11: Przechwytywanie i propagacja wyjątków.Instrukcja begin.Deklaracja wyjątków.Konstrukcja pakietów. Typy prywatne i publiczne. • 12: Funkcje i procedury rekurencyjne. Funkcje i procedury przeciążone.Parametry domyślne.Przesłanianie i przeciążanie operatorów i konwersji.13: Pakiety i podprogramy ogólne. Godzina prawdy. • 14 KOLOKWIUM 2, na którym ponownie wszyscy osiągają znakomite wyniki. • 15 Omówienie wyników kolokwium 2 i wyniki końcowe.
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Pojęcie programu • Program:-> dane wejściowe-> warunki danych wejściowych (asercje początkowe)-> algorytm przetwarzania-> dane wyjściowe • Przykład: jajecznica-> dane wejściowe: ilość konsumentów (wczytywane)proporcje składników na 1 konsumenta (wbudowane)położenie składników i przyrządów
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Pojęcie programu • Jajecznica - c.d.-> Asercje początkoweczy składniki i przyrządy są dostępne w niezbędnej ilości (wynika z liczby konsumentów)?czy składniki są jadalne?-> Algorytmrozpal gazpostaw patelnięwbij jajkaposólmieszaj dopóki się nie zetną
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 1: Pojęcie programu • Dekompozycja problemu 'rozpal gaz' • Program: od pomysłu do wyniku • Notacja BNF:-> symbol - symbol występuje dokładnie raz-> [symbol] – symbol opcjonalnie występuje raz-> {symbol} – symbol opcjonalnie występuje dowolną ilość razy-> symbol1 | symbol2 – dokładnie raz występuje albo symbol1, albo symbol2
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 2: Typ całkowity • Typ całkowity Integer • Składnia literału[+|-]D{[_]D}[e[+]D{[_]D}] • Atrybuty‘First ‘Last‘Pos() ‘Val() ‘Pred() ‘Succ()‘Image() ‘Value() • Operatoryarytmetyczne +, -, *, /, remporównania =, /=, <, >, <=, >= • Podtypy Positive, Natural
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 2: Typ całkowity • Czy wartości są prawidłowe?a) 1_0_00 b) 2e3 c) 1e-5 d) 10__000 • Jakie są wartości poniższych atrybutów?a) Integer’Succ(0) b) Integer’Val(Integer’Pos(-1))c) Positive’Pos(100); d) Natural’Pos(-1)e) Natural’Pred(0); f) Integer’Succ(Integer’Last)) • Jakie są wartości poniższych wyrażeń?a) (2 + 3) * 2 b) 2 + 3 * 2 c) 3 * 2 – 1 d) (2 + 3) / (3 – 2) e) 2 + 3 / (3 – 2) f) 2 + 3 / 3 - 2
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 2: Typ rzeczywisty • Typ rzeczywisty Float. • Składnia literału[+|-]D{[_]D}.D{[_]D}[e[+|-]D{[_]D}] • Atrybuty ‘First ‘Last ‘Image() ‘Value() • Operatoryarytmetyczne +, -, *, /porównania =, /=, <, >, <=, >=
Wstęp Do Informatyki – Ćwiczenia – Język ADA Zajęcia 2: Typ rzeczywisty • Czy poniższe wartości są poprawne?a) 1.0e-3 b) 2.0e3.0 c) 2e-3d) 2 e) -1.0 f) 3,3g) 1__0.1e2 h) 1_2.e3 i) _1.9
Wstęp Do Informatyki – Ćwiczenia – Język ADA Zajęcia 2: Konwersje • Standardowe operatory w języku ADA wymagają zgodności operandów • Konwersje umożliwiają zamianę wartości jednego typu na wartość innego typu • Na ogół wykonywane są konwersje między typem całkowitym a rzeczywistym • Ogólna postać konwersji: typ_pożądany ( wartość )
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 2: Konwersje • Konwersja liczby rzeczywistej na całkowitąPrzykład: Integer(3.45) • Zaokrąglanie jest wykonywane według zasad księgowych • Konwersja liczby całkowitej na rzeczywistąPrzykład: Float(8) • Należy mieć świadomość, że w typie rzeczywistym liczby całkowite nie są odwzorowywane dokładnie
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 2: Konwersje • Zmienić wyrażenia tak, aby były poprawnea) ((3 + 2.0) / 7 – 2.0)b) (10 + 3 * (2.0 – 5) / 1.0) – 5 • Zastosować konwersje i obliczyć wartość logiczną wyrażeń:a) (3 + 4.0) / 5 >= (2 * 3) / 5.0b) 3 + 6 * 0.5 < 12 rem 7c) 10 – 2 * 4.0 /= 3.0 – 2 * 3.5
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Typy wyliczeniowe • Typ wyliczeniowy jest uporządkowanym zbiorem wartości. • Deklaracja: typenazwais (wartosc1, wartosc2, ..., wartoscN); • Wartości są uporządkowane, i to uporządkowanie wyznacza relacje między nimi oraz pozwala na określenie atrybutów. • Atrybuty:‘First, ‘Last, ‘Pos(), ‘Val(), ‘Pred(), ‘Succ(), ‘Value(), ‘Image() • Relacje (operatory przyrównania):<, >, <=, >=, =, /=
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Typy wyliczeniowe • Przykład:type domains is (com, org, net, edu, biz); • Ćwiczenie: obliczyć następujące wartości:a) domains’First b) domains’Pos(net)c) domains’Val(4) d) domains’Succ(com) • Ćwiczenie: Prawda czy fałsz?a) domains’Last < org b) biz > netc) domains’Pred(biz) <= domains’Succ(com)
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Typy wyliczeniowe • Można zdefiniować różne typy wyliczeniowe o przecinających się zakresach wartości:type gazy is (hel, wodor, tlen, azot);type palne is (wegiel, wodor, sod); • W szczególności można stworzyć dwa typy o tym samym zbiorze wartości, jednakże są to nadal dwa różne typy. • Typ integer jest typem wyliczeniowym.
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Podtypy • Podtyp jest ograniczeniem zbioru wartości typu bazowego • Aby można było określić podtyp, muszą istnieć operatory przyrównania dla typu bazowego • Deklaracja:subtypenazwaistyp_bazowyrangewartosc1..wartosc2;Proszę zwrócić uwagę na to, że pomiędzy wartosc1 a wartosc2 są DWIE kropki!wartosc1 i wartosc2 muszą być wartościami z typu bazowego.Jeżeli wartosc1>wartosc2, deklaracja jest prawidłowa, ale tak określony podtyp nie ma wartości (jest pusty).
Wstęp Do Informatyki – Ćwiczenia – Język ADA Zajęcia 3: Podtypy • Przykłady podtypów:subtype Positive is Integer range 1 .. Integer’Last;subtype Natural is Integer range 0 .. Integer’Last;subtype non_profit is domains range org .. edu; • Podtyp jest zgodny ze swoim typem bazowym, tzn. wartości z podtypu można używać tam, gdzie wymagana jest wartość z typu bazowego. • Wszystkie atrybuty i operatory określone dla typu bazowego są też określone dla podtypu. • Uwaga na wartości atrybutów ‘Pos() i ‘Val() !
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Podtypy • Po co stosować podtypy?Jeśli określimy jak najwęższy zakres danych, to w czasie kompilacji i wykonania programu przekroczenie tego zakresu będzie zauważone i zasygnalizowane automatycznie.Jeśli posłużymy się typem o szerokim zakresie, kontrola wartości będzie naszym zadaniem.
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Typ znakowy • Typ znakowy character jest typem wyliczeniowym. • Relacja między uporządkowaniem i wartościami typu znakowego (atrybuty ‘Pos() i ‘Val()) odwzorowuje uporządkowanie w tzw. kodzie ASCII (dokładnie ISO-8859-1). • Literałem typu znakowego jest znak ujęty w apostrofy, np. ‘a’. W przypadku tzw. Znaków niedrukowalnych (sterujących) należy się posłużyć atrybutem ‘Val().
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Typ logiczny • Typ logiczny jest typem wyliczeniowym:type boolean is (false, true); • Dla typu logicznego są określone atrybuty tak samo jak dla innych typów wyliczeniowych. • Operatory typu logicznego:not, and, or, xor • Ćwiczenie:Wypełnić tabelkę operacji logicznych.Obliczyć wartość logiczną wyrażeń:((2 > 3) or (not(3.0 /= 3.0e0))) and (true = false)(4 * 2 + 1 < 4 * 3) or ((9 – 2 + 2 * 5 < 67) xor (1e3 /= 1e2))
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Deklaracja zmiennej • Ogólna postać deklaracji zmiennej:identyfikator {,identyfikator} : typ [zakres] [:= wartosc]; • Przykład:a: integer;
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Identyfikator • Składnia identyfikatora: L{[_]L|D} • Ćwiczenie: wskazać ewentualne błędy w poniższych identyfikatorach:a) Let’sgo b) hagirac) 15alfa d) returne) wartośćElementu f) wartosc_elementug) _underlined_identifier h) starry*identifierh) checkout_the__letter j) value(test)
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Deklaracja z inicjalizacją • Deklarując zmienną należy określić jej wartość (zainicjalizować zmienną): a: integer :=0; • Jeżeli zadeklarujemy zmienną bez inicjalizacji, nie możemy określić jej wartości w momencie wykonania programu. Prowadzi to do trudnych do wyśledzenia błędów wykonania. • Można zadeklarować jednocześnie wiele zmiennych zainicjalizowanych tą samą wartością: a, b, c: integer := 1;
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Deklaracja z określeniem zakresu • W deklaracji można określić zakres wartości przewidywany dla zmiennej. Jeżeli w trakcie wykonywania programu zmienna przyjmie wartość spoza podanego zakresu, zostanie to automatycznie potraktowane jako błąd. • Przykłady:dzien_tygodnia: integer range 0..7;mala_litera: character range 'a'..'z';
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Operator przypisania (podstawienia) • Operator := jest operatorem przypisania. Powoduje on nadanie obiektowi będącemu lewym argumentem wartości wyrażenia będącego prawym argumentem. • Prawy argument musi być typu zgodnego z typem lewego argumentu (np. prawy argument może pochodzić z podtypu) • Lewy argument musi być tzw. L-wartością, czyli musi być powiązany z pewnym fragmentem pamięci.Najprostszymi L-wartościami są zmienne, ale są L-wartości bardziej skomplikowane (np. wycinki tablic)NIE są L-wartościami wyrażenia dające wartości chwilowe, np.: a + 2, a + b, float(a)
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Stałe • Deklaracja stałej:identyfikator:constant [typ] := wartosc; • Można pominąć typ stałej, jeśli wartość jest wartością całkowitą lub rzeczywistą. Stała przybierze automatycznie odpowiedni typ (tzw. stała liczbowa). • Po co stosować stałe?-> skracają zapis programu;-> są bardziej czytelne;-> umożliwiają łatwe zmiany w programie. • Stosowanie zmiennych do przechowywania wartości stałych jest nielogiczne i nieprawidłowe!
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 3: Deklaracje zmiennych i stałych • Czy poniższe deklaracje są prawidłowe?a) zero : constant Float:= 0.0; b) Jeden : constant Integer:= 1.0; c) G: constant:= 9.001; d) P,Q : constant integer; e) 2Pi: constant := 2.0*Pi; f) X: character := ”x”;g) Z: constant := true;h) s: boolean := ‘false’;
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 4: Instrukcja warunkowa if • Instrukcja warunkowa if pozwala na wykonanie lub nie pewnego fragmentu programu w zależności od spełnienia lub nie pewnego warunku. • Najprostszy wariant instrukcji if:ifwarunektheninstrukcje;end if;warunek musi być wyrażeniem o wartości logicznej (typu boolean). instrukcje pomiędzy słowem kluczowym then a end if są wykonywane, jeśli warunek ma wartość logiczną true.
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 4: Instrukcja warunkowa if • Przykład:a: integer:=0;...if a=0 then put("Zmienna ma wartosc zero!"):end if; • Przykład:if (X>(Y+10)) and (X /= Y) then...end if;Pierwszy warunek implikuje drugi!
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 4: Instrukcja warunkowa if • Często w programie podejmowana jest decyzja na zasadzie albo – albo. Do zapisywania takich decyzji należy użyć instrukcji if zalternatywą:if warunek then instrukcje1;elseinstrukcje2;end if; • Jeśli warunek ma wartość logiczną true, wykonywane są instrukcje1; w przeciwnym wypadku wykonywane są instrukcje2;
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 4: Instrukcja warunkowa if • Przykład:a: integer:=13;...if a rem 2 = 0 then put("Zmienna jest parzysta");else put("Zmienna jest nieparzysta");end if; • Pod żadnym pozorem nie wolno stosować konstrukcji typu:if a rem 2 = 0 then put("Zmienna jest parzysta");end if;if a rem 2 = 1 then put("Zmienna jest nieparzysta");end if;Zmniejsza to czytelność programu, a zwiększa możliwość popełnienia błędu.
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 4: Instrukcja warunkowa if • Najbardziej ogólną postacią instrukcji warunkowej if jest postać z wariantami:ifwarunek1theninstrukcje1;elsifwarunek2theninstrukcje2;elsif... ...elseinstrukcjeN; • Warunki są sprawdzane w kolejności zapisania. Jeśli warunek ma wartość true, odpowiadające mu instrukcje są wykonywane, a dalsze warunki nie są sprawdzane.
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 4: Instrukcja warunkowa if • Przykład:a: integer:=6;...if a rem 2 = 0 then put("Zmienna jest parzysta");elsif a rem 3 = 0 then put("Zmienna jest podzielna przez 3");else put("Zmienna nie jest parzysta 2 ani podzielna przez 3");end if; • Stosowanie postaci z wariantami ma sens, jeśli warunki wykluczają się wzajemnie.
Wstęp Do Informatyki – Ćwiczenia – Język ADAZajęcia 4: Instrukcja warunkowa if • Poniższa konstrukcja, aczkolwiek logicznie odpowiadająca postaci if...elsif...else...end if, nie powinna być stosowana:if a rem 2 = 0 then put("Zmienna jest parzysta");else if a rem 3 = 0 then put("Zmienna jest podzielna przez 3"); else put("Zmienna nie jest parzysta 2 ani podzielna przez 3"); end if;end if; • Stosowanie takiego zapisu powoduje, że tekst programu wydłuża się i staje się mniej czytelny.