Programovací techniky - Cvičení č. 2


Autor: Miroslav Beneš
Organizace: Katedra informatiky FEI VŠB-TU Ostrava
Popis: Cílem tohoto cvičení je seznámení s datovým typem pole a možnostmi čtení vstupních dat z příkazového řádku a standardního vstupu.

Úkoly

  1. Vytvoření a naplnění pole, konverze řetězců na čísla. Prostudujte řešený příklad č. 1. Úkolem tohoto programu je naplnit pole celých čísel hodnotami parametrů z příkazového řádku a toto pole vypsat na standardní výstup.

    Pole je v jazyce Java objekt, který je třeba explicitně vytvořit pomocí operátoru new - nestačí tedy podobně jako v C pouze uvést jeho rozměry v deklaraci. Naopak, v deklaraci jsou použity pouze prázdné závorky, které určují počet dimenzí pole. Tyto závorky se obvykle zapisují přímo za jméno typu prvku pole, i když jazyk Java umožňuje i zápis za jménem proměnné jako v C.

    Vzhledem k tomu, že parametry příkazového řádku jsou uloženy jako pole řetězců, je třeba každý tento řetězec nejprve převést na číslo. K tomu slouží statická metoda parseInt třídy Integer. Povšimněte si, že statické metody (tj. metody, které nejsou svázané s konkrétním objektem, ale s celou třídou) se volají pomocí jména třídy následovaného tečkou a jménem metody.

    Vyzkoušejte si také, co se stane po zadání nesprávného parametru, který nelze převést na celočíselnou hodnotu. Program generuje výjimku a skončí. Metodami ošetření výjimek se budeme zabývat později.

  2. Seřazení obsahu pole. Vytvořte program, který vytiskne seřazené pole celočíselných hodnot zadaných jako parametry.

    Pro seřazení použijte metodu vkládání - během zpracování vstupních parametrů zařaďte novou hodnotu na správnou pozici mezi předchozími prvky. Najděte pozici pro vložení, odsuňte zbývající prvky o jedno místo dále a na uvolněnou pozici zapište novou hodnotu.

  3. Čtení obsahu pole ze vstupu. Prostudujte řešený příklad č. 3, jehož úkolem je načíst pole řetězců ze standardního vstupu. První řádek vstupních dat obsahuje vždy počet prvků, následující řádky obsahují jednotlivé řetězce.

    Pro čtení ze standardního vstupu slouží objekt System.in. Na rozdíl od standardního výstupu System.out ovšem tento objekt dokáže číst pouze jednotlivé znaky a je třeba jej "obalit" jiným objektem, který zajistí čtení celých řádků textu. V tomto případě budeme takové objekty potřebovat dokonce dva, ale v této fázi zatím není nutné se tím zatěžovat, k záludnostem vstupu a výstupu se dostaneme později.

    První řádek vstupu je počet prvků pole, tuto hodnotu musíme opět převést na celé číslo metodou Integer.parseInt.

    Pokud bychom nechtěli předem zadávat počet řádků, můžeme využít toho, že metoda readLine() v případě, že narazí na konec vstupního souboru, vrátí speciální hodnotu null. Potom bychom mohli cyklus opisující vstupní soubor na výstup přepsat takto:

    for( int i = 1; ; i++ ) {
       String radek = inp.readLine();
       if( radek == null ) break;
       System.out.println(i + ": " + radek);
    }
    
    V prostředí Windows zadáme konec souboru pomocí řídicího znaku Ctrl-Z následovaného klávesou Enter. V Unixu se jako konec souboru používá kombinace Ctrl-D.
  4. Domácí úkol. Upravte vaše řešení kvadratické rovnice tak, aby se hodnoty koeficientů rovnice a, b, c získaly
    1. z parametrů programu,
    2. ze standardního vstupu.
    Pro převod řetězce na hodnotu typu double použijte podobně jako pro celá čísla statickou metodu Double.parseDouble(String s).