Typy danych, zmienne i tablice. Tomasz Borzyszkowski



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

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

Podstawy Programowania C++

Java Podstawy. Michał Bereta

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

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

Programowanie obiektowe

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Język C zajęcia nr 11. Funkcje

2 Przygotował: mgr inż. Maciej Lasota

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

1 Podstawy c++ w pigułce.

Tablice, funkcje - wprowadzenie

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

ZASADY PROGRAMOWANIA KOMPUTERÓW

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

MATERIAŁY DO ZAJĘĆ II

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

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

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Programowanie komputerowe. Zajęcia 4

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Podstawowe części projektu w Javie

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie Komputerów

Powtórka algorytmów. Wprowadzenie do języka Java.

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Zmienne, stałe i operatory

1 Podstawy c++ w pigułce.

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

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

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

Wprowadzenie do języka Java

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

Wykład 3 Składnia języka C# (cz. 2)

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Microsoft IT Academy kurs programowania

Lab 9 Podstawy Programowania

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

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

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Podstawy programowania w języku C

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Powtórka algorytmów. Wprowadzenie do języka Java.

Podstawy i języki programowania

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

1. Wprowadzenie do języka PHP

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JAVA?? to proste!! Autor: wojtekb111111

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Algorytmy i struktury danych. wykład 1

Warunek wielokrotnego wyboru switch... case

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Podstawy programowania. Podstawy C# Tablice

Java EE produkcja oprogramowania

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

Definicje klas i obiektów. Tomasz Borzyszkowski

Wykład 2 Składnia języka C# (cz. 1)

Deklaracje. W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Wstęp do programowania

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

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

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Tworzenie aplikacji w języku Java

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość.

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Część 4 życie programu

Programowanie obiektowe

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

Wykład 4: Klasy i Metody

Języki i metodyka programowania. Wprowadzenie do języka C

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Oczywiście plik musi mieć rozszerzenie *.php

1. Wprowadzanie danych z klawiatury funkcja scanf

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania w języku C++

KOTLIN. Język programowania dla Androida

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

Wstęp do Programowania, laboratorium 02

Transkrypt:

Typy danych, zmienne i tablice Tomasz Borzyszkowski

Silne typy Javy Java jest językiem wyposażonym w silny system typów. Wywodzi się stąd siła i bezpieczeństwo tego języka. Co to znaczy silny system typów? Każda zmienna i każde wyrażenie posiada typ i każdy typ jest ściśle zdefiniowany Każde przypisanie wartości (podstawienie lub przesłanie wartości do metody) jest sprawdzane pod kątem poprawności typów; w przypadku niezgodności nie ma automatycznych rzutowań, czy konwersji (jak w niektórych językach: C, C++,... ) Kompilacja programu kończy się powodzeniem dopiero, gdy typowanie wszystkich wyrażeń kończy się powodzeniem Konieczność pisania ściśle utypowionego kodu może wydawać się uciążliwa, jednak pozwala uniknąć wielu sytuacji błędnych. 2

Typy proste W języku Java zdefiniowano osiem typów prostych, które mogą być podzielone na cztery grupy: Typy całkowite: byte, short, int i long; wszystkie one są liczbami ze znakiem o różnym zakresie Typy rzeczywiste: float i double; reprezentują liczby rzeczywiste Typ znakowy: char; reprezentuje pojedyncze znaki Typ logiczny: boolean; reprezentuje wartości logiczne (tj. typu prawda-fałsz) Zobacz: BoolDemo.java Typy proste są reprezentują pojedyncze wartości, a nie złożone obiekty. Chociaż Java jest językiem zorientowanym obiektowo, to typy proste nie bazują na modelu obiektowym. Jakie są powody takiego rozwiązania? Odpowiedź: efektywność obliczeń. 3

Typy całkowite Typy całkowite to: Nazwa Ilość bitów Zakres long 64-9 223 372 036 854 775 808 9 223 372 036 854 775 807 int 32-2 147 483 648 2 147 483 647 short 16-32 768 32 767 byte 8-128 127 Wszystkie powyższe typy są typami ze znakiem. Java nie posiada typów całkowitych bez znaku. W językach programowania zawierających typy całkowite ze znakiem służą one głównie do operacji na bitach. Java umożliwia także operacje na bitach lecz w inny sposób. Rozmiar danego typu całkowitego nie jest istotny. Istotne jest jego zachowanie. Często typy mniejsze są implementowane za pomocą większej ilości bitów niż potrzeba, np. short na 32 bitach. Zobacz: LightTravel.java 4

Typy rzeczywiste Nazwa Ilość bitów Zakres double 64 1.7e-308 1.7e+308 float 32 3.4e-038 3.4e+03 float liczby tego typu zajmują 32 bity i na niektórych (tradycyjnych) komputerach są obliczane szybciej niż liczby 64 bitowe; liczby tego typu stają się nieprecyzyjne, gdy obliczane wartości są b. małe lub b. duże double liczby tego typu zajmują 64 bity i na niektórych (nowych) komputerach są obliczane szybciej niż liczby 32 bitowe; funkcje matematyczne takie jak sin, cos, sqrt zawracają wynik typu double jako wynik najbardziej dokładny Zobacz: Area.java 5

Typ znakowy Zobacz: CharDemo.java char reprezentuje znaki w języku Java. Nie są one tymi samymi znakami co znaki języków C i C++ (8-bitowe liczby). Java reprezenuje znaki zgodnie ze standardem Unicode. Unicode jest w pełni międzynarodowym zestawem znaków reprezentującym wszystkie znaki występujące w ludzkich językach. Zastaw ten ujednolica znaki takich alfabetów jak: łaciński, grecki, cyrylica, hebrajski, katakana, hangul,... Aby pamiętać tak wiele znaków potrzeba16 bitów (zakres 0 do 65 536) Standardowe znaki ASCII to zakres 0 od 127. ISO-Latin-1 0 do 255. Więcej na stronie http://www.unicode.org Znaki specjalne: \ddd znak 8-kowo \uxxxx znak UNICODE 16-tkowo \' \ \\ znaki ' i \ \r początek linii \n koniec linii \f pusta strona \t\b tab i backspace 6

7 Zakres zmiennych Zakres zmiennej jest to obszar programu, w którym dana zmienna jest rozpoznawalna. Zwykle zakresem zmiennej jest blok programu, w którym jest zdefiniowana (np.: klasa, nawiasy klamrowe,... ) W większości języków programowania dostępne są dwa rodzaje zakresów: globalne lokalne (przysłaniające globalne) W Java wszystkie zmienne zachowują się jak zmienne globalne bloku, w którym są definowane - brak przesłaniania. Zasada ogólna: zmienne zdefiniowane wewnątrz zakresu nie są dostępne poza nim. Zakresy mogą być zagnieżdżone. Obiekty zdefiniowane w zakresie zewnętrznym są dostępne w zakresie wewnętrznym, ale nie na odwrót. Zobacz: Scope.java ScopeErr.java

Konwersje i rzutowania typów Częstą praktyką programistyczną jest przypisywanie wartości jednego typu, zmiennym innego typu. W Java, jeżeli typy są zgodne, to typ wyrażenia przypisywanego jest automatycznie przekształcany na typ zmiennej docelowej, np.: przypisanie zmiennej typu long wartości typu int. Automatyczne przekształcenia typów... ma miejsce gdy: Oba typy są zgodne Typ docelowy jest większy niż typ źródłowy Gdy oba pow. warunki są spełnione typ źródłowy jest rozszerzany do typu docelowego w sposób automatyczny. Przykłady typów zgodnych: Przykłady typów niezgodnych: int i float long i float int i char int i boolean char i boolean 8

Konwersje i rzutowania typów cd Rzutowania typów niezgodnych Czasem zachodzi konieczność przypisania wartości typu większego, np. int, zmiennej typu mniejszego np. byte. Przekształcenie takie nazywa się konwersją zawężającą. W tekście programu efekt ten uzyskuje się przez jawne rzutowanie: (typ-docelowy) wartość Reguły konwersji zawężającej: Konwersja typów całkowitych: wartość typu większego jest zredukowana modulo maksymalny zakres typu docelowego, np. (byte) i, dla i = 257 to 1. Konwersja typów rzeczywistych na całkowite: wartość typu rzeczywistego traci część dziesiętną i następnie otrzymana wartość całkowita jest przekształcana jak liczby całkowite Zobacz: Conversion.java 9

Konwersje i rzutowania typów cd Promocja typów w wyrażeniach Prócz podstawień do przekształceń typów może także dojść w wyrażeniach, gdy wartość podwyrażenia przekroczy zakres typów składników wyrażenia. Zobacz przykład: byte a, b, c; a = 40; b = 50; c = 100; int i = a * b / c; Wynik wyrażenia a * b przekracza wartość obu czynników typu byte. Java automatycznie w takiej sytuacji promuje wyrażenia typu byte i short do int. Czasem Java promuje zbyt wiele. Np. program: byte b; byte b; b = b * 2; Poprawnie: b = (byte)(b * 2); Spowoduje błąd: przypisanie int do byte Zobacz: Promote.java 10

Tablice jednowymiarowe Tablice w Java są realizowane inaczej niż w C i C++, chociaż stosuje sie podobną składnię. Tworzenie tablicy przebiega w dwóch etapach: Deklaracja zmiennej typu tablicowego: typ zmienna_tablicowa[]; Deklaracja taka tworzy zmienną tablicową z przypisaną wartością null reprezentującą tablicę bez elementów. Alokacja pamięci niezbędnej do przechowywania elementów tablicy: zmienna_tablicowa = new typ[rozmiar]; typ jest typem elementów tablicy, rozmiar jest liczbą elementów. Taki rodzaj alokacji nazywamy dynamicznym. W Java wszystkie tablice są dynamicznie alokowane. Zobacz: Array.java 11

Tablice jednowymiarowe cd Deklarację i alokację tablicy można zapisać w jednej linii. Np. w programie Array.java można zapisać tak: int month_days[] = new int[12]; Deklarację tablicy można również połączyć podając po przecinku jej elementy, bez używania new: int month_days[] = {31, 28, 31, 30,..., 31}; Tablica zostanie utworzona automatycznie z zaalokowanym miejscem wystarczającym do przechowania wszystkich elementów. Java dokładnie sprawdza w czasie wykonania programu, czy program nie próbuje dostępu do elementu tablicy o indeksie spoza dopuszczalnego zakresu. Jest to kolejna różnica w implementacji tablic Javy i C. Zobacz: Average.java 12

Tablice wielowymiarowe W Java tablice wielowymiarowe są tablicami tablic. Deklaracja przykładowej tablicy wygląda następująco: int twod[][] = new int[3][4]; Koncepcyjnie tablica ta wygląda następująco: Prawy indeks wyznacza kolumny Lewy indeks wyznacza wiersze [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] Zobacz: TwoDArray.java [2][0] [2][1] [2][2] [2][3] 13

Tablice wielowymiarowe cd Alokując pamięć na tablicę wielowymiarową trzeba co najmniej określić pierwszy, najbardziej lewy (liczba wierszy) wymiar. Resztę, tj. liczbę elementów w każdym wierszu można alokować oddzielnie. Nie wszystkie wiersze muszą posiadać taką samą liczbę elementów. Zobacz: TwoDAgain.java Podobnie jak w przypadku tablic jednowymiarowych można alokować tablicę wielowymiarową podając jej elementy. Zobacz: Matrix.java Tablice mogą mieć dowolną liczbę wymiarów. Zobacz: ThreeDMatrix.java Alternatywna składnia deklaracji tablic: int a[] = new int[3]; int[] a = new int[3]; int b[][] = new int[3][4]; int[][] b = new int[3][4]; 14

Typy String i Pointer W strukturalnych językach programowania zwykle przy okazji omawiania tablic omawia się typy napisowe, które są implementowane jako tablice znaków. W Java jest inaczej. Typ String występujący w Java nie jest typem prostym lecz klasą, której instancje (obiekty) dopiero implementują napisy. Bliżej przyjrzymy się im później. Omawiając tablice, równie często jak typy napisowe, omawia się związane z nimi typy wskaźnikowe. I tu zaskoczenie: Java nie wspiera ani nie pozwala na używanie wskaźników. Powodem braku wskaźników jest bezpieczeństwo. Gdyby zezwolić na ich używanie program lub applet Javy mógłby z łatwością przekroczyć barierę dzielącą środowisko uruchomieniowe Javy (JVM) i stać się niebezpieczny dla systemu operacyjnego. Brak wskaźników i implementacja napisów jako obiektów to główne powody (choć nie jedyne) poprawy bezpieczeństawa w stosunku do C czy C++. 15