Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu

Podobne dokumenty
Wstęp do programowania

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wstęp do programowania 2

Podstawy Programowania C++

Algorytmy i struktury danych. wykład 1

Wstęp do programowania. Różne różności

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Programowanie strukturalne

Informatyka 1. Przetwarzanie tekstów

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Podstawy programowania

Programowanie obiektowe

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Niezawodne Systemy Informatyczne

Programowanie obiektowe

Java Podstawy. Michał Bereta

Właściwości i metody obiektu Comment Właściwości

Kiedy i czy konieczne?

Podstawowe części projektu w Javie

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

Python. Wprowadzenie. Jolanta Bachan

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Podstawy programowania

Podstawy programowania skrót z wykładów:

PODSTAWY PROGRAMOWANIA

Wstęp do programowania 2

Wstęp do programowania 2

LibreOffice Calc VBA

Analiza zależności kontekstowych

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Visual Basic for Application (VBA)

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Podstawy programowania w języku C

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Programowanie RAD Delphi

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Podstawy programowania. Podstawy C# Tablice

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Logika Temporalna i Automaty Czasowe

PARADYGMATY PROGRAMOWANIA Wykład 3

MATERIAŁY DO ZAJĘĆ II

1. ELEMENTY JĘZYKA PL/SQL

Materiały pomocnicze do wykładu 3 - Elementy języka Java

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Visual Basic for Application (VBA)

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Podstawy programowania w języku C i C++

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Programowanie Komputerów

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Algorytmika i Programowanie VBA 1 - podstawy

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Tablice, funkcje - wprowadzenie

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Elementy języka VHDL. obiekty typy danych atrybuty pakiety i biblioteki instrukcje współbieżne instrukcje sekwencyjne. PUE-w3 1

ZASADY PROGRAMOWANIA KOMPUTERÓW

PL/SQL. Lidia Małkiewicz i Cezary Skubała

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Materiały pomocnicze do wykładu 3 - Elementy języka Java

Podstawy programowania w Pythonie

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Programowanie. Projektowanie funkcje programu tworzenie algorytmu i struktur danych. Programowanie implementacja algorytmu kompilacja programu

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Modelowanie złożonych układów cyfrowych (1)

Microsoft IT Academy kurs programowania

Programowanie Komputerów

Wstęp do informatyki- wykład 4 Deklaracja zmiennych Typy

Struktury, unie, formatowanie, wskaźniki

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

ForPascal Interpreter języka Pascal

Algorytmy i struktury danych

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku

Część 4 życie programu

Platformy Programistyczne Podstawy języka Java

Transkrypt:

Plan wykładu Ada 95 #1/5 - typy Wojciech Complak, Instytut Informatyki, Politechnika Poznańska e-mail : Wojciech.Complak@cs.put.poznan.pl www : http://www.cs.put.poznan.pl/wcomplak Hierarchia typów w Adzie Typy skalarne Typy dyskretne Typ znakowy Typ logiczny Typy całkowite Typy rzeczywiste Tablice i typ tablicowy Typ łańcuchowy Typy rekordowe 2006-03-26, v. 0.14 Hierarchia typów w Adzie Typy skalarne wskaźnikowe proste typy Ady skalarne złożone tablice rekordy zadania typy chronione wartości typów skalarnych są uporządkowane liniowo dostępne operatory : =, /=, <, <=, >, >= ważniejsze atrybuty: T First dolna granica zakresu typu T, typem wyniku jest typ T dyskretne rzeczywiste T Last górna granica zakresu typu T, typem wyniku jest typ T wyliczeniowe całkowite zmiennopozycyjne stałopozycyjne T Range równoważny zakresowi T First.. T Last ze znakiem resztowe dziesiętne zwykłe T Base podtyp bazowy typu T Typy dyskretne to takie typy skalarne, w których wartości mają numer pozycji będący liczbą całkowitą dodatkowe atrybuty: Typ znakowy w Adzie 83/95 są dostępne dwa typy znakowe Character 8-bitowy typ znakowy, kod Latin-1 T Pos T Val zwraca numer pozycji wartości będącej argumentem w zbiorze wartości typu dyskretnego T zwraca tę wartość typu T, której numer wartości jest równy argumentowi wywołania Wide_Character 16-bitowy kod ISO 10646 w Adzie 2005 pojawił się nowy typ znakowy Wide_Wide_Character 32-bitowy typ znakowy

Typ logiczny predefiniowany typ wyliczeniowy Boolean zawiera dwa literały True i False (False < True) dodatkowe dostępne operatory : not, and, or, xor w Adzie dostępne są skrócone formy sterowania and then i or else, w przypadku ich użycia lewy operand jest obliczany zawsze jako pierwszy i jeśli jego wartość wystarczy do określenia wartości wyrażenia prawy operand nie jest obliczany Typ całkowity predefiniowany typ całkowity ze znakiem Integer, przekroczenie zakresu powoduje wygenerowanie wyjątku Constraint_Error typinteger standard, zakres co najmniej 2**15.. +2**15-1, GNAT 32 bity typlong_integer opcjonalny, jeśli jest, zakres co najmniej -2**31.. +2**31-1, GNAT 32 bity pozostałe typy całkowite ze znakiem są opcjonalne, jeśli są muszą spełniać zależność : zakres(long_long_integer) zakres(long_integer) zakres(integer) zakres(short_integer) zakres(short_short_integer) dla kompilatora GNAT : Long_Long_Integer ma 64 bity, Short_Integer ma 16 bitów, Short_Short_Integer ma 8 bitów Typ całkowity resztowy typ całkowity bez znaku, maksymalna podstawa to: System.Max_Binary_Modulus dla podstaw będących potęgami dwójki (GNAT 2**Long_Long_Integer'Size) System.Max_Nonbinary_Modulus dla pozostałych (GNAT : Integer'Last) type Byte is mod 256; type Word is mod 2**16; d : Byte; e : Word; Typy rzeczywiste typ zmiennopozycyjny a : Float; -- typ predefiniowany w pakiecie Standard type T1 is digits 8; -- dokładność 8 cyfr type T2 is digits 6 range 3.1.. 5.4; -- dokładność 6 cyfr w podanym zakresie typ stałopozycyjny zwykły i dziesiętny type T1 is delta 0.250 range 0.0.. 10.0; -- wartości określane z rozdzielczością 0.250 -- w zadanym zakresie type T2 is delta 0.01 digits 9; -- typowe zastosowanie bankowo/księgowe -- 9 cyfrowe kwoty z dokładnością do groszy Tablice deklaracje, typ tablicowy przykłady deklaracji zmiennych tablicowych : W1 : array (1..3) of Integer; W2 : array (-5..4,2..3) of Boolean; przykłady definicji typów i deklaracji tablic : -- typ tablicowy zawężony type T_W1 is array (1..5) of Integer; W1, W2 : T_W1; -- -------------------------------------------------------------------------------------------------------------------------------------------- -- typ tablicowy niezawężony type T_W2 is array (Positive range <>, Natural range <>) of Integer; W3 : T_W2(1..2,0..3); W4 : T_W2(2..2,3..3); -- -------------------------------------------------------------------------------------------------------------------------------------------- -- typ tablicowy niezawężony, rozmiar ustalany podczes inicjalizacji type T_W3 is array (Natural range <>) of Integer; W5 : T_W3 := (1,2,3,4,5); Tablice inicjalizacja przykłady inicjalizacji ( :=,..,, =>, others) W1 : array (1.. 3) of Integer := (1, 2, 3); -- OK -- W2 : array () of Integer := (others => 5); -- źle -- tak nie można, to nie C! W2 : array (2.. 4) of Integer := (others => 5); -- OK -- W3 : array (1.. 8) of Integer := -- (1..2=>1, 3 6 =>4, 4..5=>2); -- źle -- inicjalizacja musi być kompletna W3 : array (1.. 8) of Integer := (1..2=>1, 3 6=>4, 4..5=>2, others=>3); -- OK

Tablice atrybuty rozmiaru tablic (atrybut First) Tablice atrybuty rozmiaru tablic (atrybut Last) A First - dolna granica zakresu tablicy jednowymiarowej (lub pierwszego zakresu A Last - górna granica zakresu tablicy jednowymiarowej (lub pierwszego zakresu A First(N) - dolna granica zakresu N-tego wymiaru A Last(N) - górna granica zakresu N-tego wymiaru Tablice atrybuty rozmiaru tablic (atrybut Length) A Length - liczba elementów tablicy jednowymiarowej (lub pierwszego wymiaru tablicy wielowymiarowej), typem wyniku jest liczba całkowita, A Length(N)- liczba elementów N-tego wymiaru tablicy wielowymiarowej), typem wyniku jest liczba całkowita, Tablice atrybuty rozmiaru tablic (atrybut Range) A Range - równoważne A First..A Last, typem wyniku jest zakres, A Range(N) równoważne A First(N)..A Last(N), typem wyniku jest zakres, Tablice - korzystanie z atrybutów (#1/6) przykład atrybuty First, Last, Length, tablice jedno- i dwuwymiarowa with Ada.Text_IO, Ada.Integer_Text_IO; use Ada.Text_IO, Ada.Integer_Text_IO; W4 : array (1..2, 3..4) of Integer; Put_Line(""); Put(W1'First); Put(W1'Last(1)); Put(W1'Length); Put_Line(""); Put(W4'First); Put(W4'First(1)); Put(W4'First(2)); 1 3 3 1 1 3 Tablice - korzystanie z atrybutów (#2/6) for ind in 1.. 3 loop -- fatalnie, 2! W1(ind) := 1; for ind in 1.. W1'Length loop W1(ind) := 2; - niby troche lepiej, 2+

Tablice - korzystanie z atrybutów (#3/6) for ind in W1'First.. W1'Last loop W1(ind) := 3; -- dobrze, rosnące indeksy for ind in reverse W1'First.. W1'Last loop W1(ind) := 4; -- dobrze, malejące indeksy Tablice - korzystanie z atrybutów (#4/6) for ind in W1'Last.. W1'First loop W1(ind) := 5; -- pętla się nie wykona, Last > First for ind in reverse W1'Last.. W1'First loop W1(ind) := 6; -- bezcelowe, pętla się nie wykona Tablice - korzystanie z atrybutów (#5/6) for ind in W1'Range loop W1(ind) := 7; -- optymalne, rosnące indeksy for ind in reverse W1'Range loop W1(ind) := 8; -- optymalne, malejące indeksy Tablice - korzystanie z atrybutów (#6/6) przykład dlaczego warto korzystać z atrybutu Range, tablica dwuwymiarowa W4 : array (1..2,2..3) of integer; for i in W4'First(1).. W4'Last(1) loop for j in W4'First(2).. W4'Last(1) loop W4(i,j) := 1; -- typowy błąd przy kopiuj/wklej for i in W4'Range(1) loop for j in W4'Range(2) loop W4(i,j) := 2; -- tak jest bezpieczniej Typ łańcuchowy (#1/3) typ łańcuchowy jest zdefiniowany jako: type String is array(positive range <>) of Character; type Wide_String is array(positive range <>) of Wide_Character; dostępny jest operator konkatenacji & (łańcuch/znak & łańcuch/znak, wynikiem jest łańcuch) with Ada.Text_IO; use Ada.Text_IO; Stars : String(1.. 120) := (1.. 120 => '*' ); Question : String := "How are you?"; Put(Stars); Put(Question); Put(Stars & Question); Typ łańcuchowy (#2/3) łańcuchy można porównywać za pomocą operatorów = i /= łańcuchy można sortować leksykograficznie (operatory <, <=, >, >= ) w Adzie są trzy typy łańcuchów : fixed długość jest stała (tablice znaków), określana w trakcie kompilacji (SCRy) pakiet Ada.Strings.Fixed bounded długość jest znana i/lub ograniczona (bazy danych, SCRy) pakiet Ada.Strings.Bounded unbounded długość jest dynamicznie zmienna, ograniczona zakresem liczb całkowitych (Integer Last) i dostępną pamięcią sterty (systemy ogólnego przeznaczenia) pakiet Ada.Strings.Unbounded

Typ łańcuchowy (#3/3) przykład z użyciem Unbounded_String with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Strings.Unbounded; use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Strings.Unbounded; Str : Unbounded_String; -- Str := "test"; -- nie można, niezgodne typy Str := To_Unbounded_String("test"); Put(Length(Str)); Typ rekordowy nieparametryzowany definicja typu rekordowego type Person is Initial : Character; Age : Natural; end ; type Cpx is re, im : Float := 0.0; end ; deklaracje zmiennych C1 : Cpx := (1.0, 2.0); A, B : Person := ('A',0); Typ rekordowy z wariantami definicja typu rekordowego type Device is (Printer, Disk, Drum); type State is (Open, Closed); type Peripheral(Unit : Device := Disk) is Status : State; case Unit is when Printer => Line_Count : Integer range 1.. Page_Size; when others => Cylinder : Cylinder_Index; Track : Track_Number; end case; end ; deklaracje zmiennych Writer : Peripheral(Unit => Printer);