310 likes | 572 Views
Údajové typy. údajový typ prezentácia typov a operácií nad nimi vstup údajov do programu ŕiešené úlohy. Pojem údajový typ. údajový typ určuje veľkosť pamäti, ktorá bude pre premennú vyhradená množinu hodnôt, ktorú možno do premennej uložiť
E N D
Údajové typy • údajový typ • prezentácia typov a operácií nad nimi • vstup údajov do programu • ŕiešené úlohy
Pojem údajový typ • údajový typ určuje • veľkosť pamäti, ktorá bude pre premennú vyhradená • množinu hodnôt, ktorú možno do premennej uložiť • operácie a funkcie, ktoré možno na hodnoty daného typu použiť • dôvody? • zrýchlenie a obmedzenie operácií pre skupiny hodnôt • napr. • súčet čísel: 1+1=2 • súčet reťazcov 1 + 1 = 11
Základné údajové typy • celočíselný (int) • s plávajúcou desatinnou čiarkou (float) • logický, pravdivostný (boolean) • znakový (char) • .... reťazcový, textový (string)
Celočíselný typ • v zásade tri rôzne zápisy: • desiatkový • žiadna špeciálna predpona • napr. 205, 3 • hexadecimálny • začína 0x alebo 0X • napr. 0x12, 0xF1 • osmičkový • začína 0 • napr. 023, 017
Reálny typ • delí číslo na dve časti – celú a desatinnú • možnosť zápisu • štandardný • 3.1415296536 • 583.25 • vedecký • 5.8345e2 znamená 5.8345 * 102
In- a dekrementálny operátor • operátory môžu byť umiestnené aj pred premennú: • ak sa použijú pred premennou v prípadnom výraze sa použije nová hodnota, inak stará int i = 10; int j = 3; int k = 0; k = ++j + i; //k = 4+10 = 14 a j = 4 //*************************************** int i = 10; int j = 3; int k = 0; k = j++ + i; //k = 3+10 = 13, ale j = 4
Mixovanie číselných typov • keď sa vo výpočte kombinuje celočíselný a reálny typ, výsledkom je reálne číslo (číslo s plávajúcou desatinnou čiarkou) • celé číslo je konvertované na reálne pre samotným vykonaním operácie • operátory celočíselného delenia (%), dekrementálny (--) a inkrementálny (++) operátor fungujú tiež
Logický typ • môže nadobúdať len dve hodnoty: • true – pravda • false – nepravda • zmysel • elegantný zápis podmienok if (bolaNula) ....
Znakový typ • pôvodný 8-bitový ASCII formát bol nahradený 16-bitovým UNICODE formátom • UNICODE obsahuje v jednej sade znaky všetkých jazykov • okrem štandardných znakov sú k dispozícii i špeciálne, napr.: • \n – nový riadok • \t – tabulátor • \b – backspace a pod.
Diskusia • je vhodné inicializovať hodnoty premenných už pri ich vytvorení • minimalizuje sa možnosť použitia neinicializovanej premennej (premenná môže mať nedefinovanú alebo náhodnú hodnotu) • napr.: int sucet = 0; • premennú stačí deklarovať v momente prvého použitia • napr.: int vys = a + b; for(int i=1;i<10;i++)... • pozor !!! riziko zneprehľadnenia kódu • je potrebné nájsť vhodný kompromis medzi čitateľnosťou kódu (oddelenie deklarácie premenných) a používaním neinicializovaných premenných
Doplnenie • medzi operátormi && a &, resp. (|| a |) je rozdiel v tom, že: • && ukončí vyhodnocovanie logického výrazu v momente ak je podmienka nepravdivá • & vyhodnocuje výraz až do konca • príklad, kedy to má pre nás význam: int i = 0, j = 10; boolean test; test = (i > 10) && (j++ > 9); // test = false, j = 10 test = (i > 10) & (j++ > 9); // test = false, j = 11
Doplnenie II. • výsledok operácie XOR • výsledok je true ak práve jeden operátor je true, resp. ak hodnoty operátorov sú rôzne
Typy premenných • primitívne • hodnota premennej sa ukladá na mieste, kde je lokalizovaná premenná • všetky doposiaľ uvedené typy • referenčné (reference variables) • premenná obsahuje len odkaz na miesto v pamäti, kde je uložená hodnota • typ string
Typy premenných II. int num = 10; String name = “Hello“ • a tým sme sa dostali na hranicu našich aktuálnych možností...
Čítanie údajov • prostredníctvom tried (class) systému • prostredníctvom JOptionClass • poskytuje vizuálne rozhranie a pri čítaní textu mu automaticky vyhradí potrebné miesto v pamäti a uloží ho do nej
Čítanie údajov public static void main(String[] args) { String meno = ""; meno = JOptionPane.showInputDialog("Kto si?"); JOptionPane.showMessageDialog(null,"Cau "+meno); } • pri prvom použití JOptionPane sa na začiatok zdrojového kódu doplní príkaz na používanie knižnice, ktorá ho obsahuje
String – typ a objekt • String síce predstavuje v jazyku Java typ, ale súčasne je aj triedou (objektom) a ako taký disponuje mnohými užitočnými metódami.
Počet znakov v reťazci • Zistite dĺžku zadaného mena. String meno = ""; int dlzka=0; meno = JOptionPane.showInputDialog("Kto si?"); dlzka = meno.length(); JOptionPane.showMessageDialog(null,"Mas dlzku "+dlzka);
Práca s číselnými údajmi • Zistite obsah a obvod kruhu so zadanou stranou. String text = ""; int a = 0; text = JOptionPane.showInputDialog("Strana:"); a = Integer.valueOf(text); // konverzia JOptionPane.showMessageDialog(null,"obsah "+a*a); JOptionPane.showMessageDialog(null,"obvod "+4*a); • v prípade nečíselného vstupu aplikácia „spadne“ – skončí s chybovým hlásením
Opakovanie cifry • Zistite koľko ráz sa v zadanom čísle opakuje cifra 3. String text = ""; int dlzka = 0, pocet = 0; text = JOptionPane.showInputDialog("Zadaj:"); dlzka = text.length(); for(int i = 0;i < dlzka; i++) { if (text.charAt(i) == '3'){ pocet++; } } JOptionPane.showMessageDialog(null, pocet);
Maximálna cifra • Nájdite v zadanom čísle maximálnu cifru. String text = ""; int dlzka = 0, mx = 0; char cifra; text = JOptionPane.showInputDialog("Cislo:"); dlzka = text.length(); for(int i=0;i<dlzka;i++) { cifra = text.charAt(i); if (mx<cifra) { mx = cifra; // problemove miesto } } JOptionPane.showMessageDialog(null, mx);
Maximálna cifra inak • Nájdite v zadanom čísle maximálnu cifru. String text = ""; int dlzka = 0, mx = 0, cifra = 0; text = JOptionPane.showInputDialog("Cislo:"); dlzka = text.length(); for(int i=0;i<dlzka;i++) { cifra = Integer.parseInt(text.substring(i,i+1)); if (mx<cifra) { mx = cifra; } } JOptionPane.showMessageDialog(null, mx);
Ciferný súčet • Zistite ciferný súčet zadaného čísla. String text = ""; int dlzka = 0, sucet = 0, cifra = 0; text = JOptionPane.showInputDialog("Cislo:"); dlzka = text.length(); for(int i=0;i<dlzka;i++) { cifra = Integer.parseInt(text.substring(i,i+1)); sucet = sucet + cifra; } JOptionPane.showMessageDialog(null,sucet);
Výpis reťazca od konca • Vypíšte načítaný reťazec od konca. String text = ""; int dlzka = 0; text = JOptionPane.showInputDialog("Text:"); dlzka = text.length(); for(int i = dlzka-1; i >= 0; i--) { System.out.print(text.charAt(i)); }
String alebo integer? • diskutabilné a prípad od prípadu špecifické • v prípade prístupu k jednotlivým cifrám čísla je rýchlejšie (ako z programátorského, tak i zo systémového) a zrozumiteľnejšie použiť typ string • pri použití typu integer sme totiž nútení operovať s operáciami pre celočíselné delenie
Úlohy na zamyslenie • Zistite, ktoré z dvoch zadaných čísel je väčšie. • Zistite, ktoré z troch zadaných čísel je väčšie. • Pre zadaný vek zistite rok narodenia používateľa. • Zistite počet výskytov párnych číslic v reťazci a zistite, či v ňom nachádza aj nula. • Pre zadané číslo zistite, či je väčší jeho ciferný súčet alebo ciferný súčin. • Zistite, na ktorej pozícii sa nachádza najmenšia cifra v zadanom čísle. • Prostredníctvom jediného cyklu nájdite najmenšiu aj najväčšiu cifru v zadanom čísle. • Zistite, koľko číslic sa nachádza v zadanom reťazci.