Learn Lamda Math The Math Learn

Learning Maths First Grade Math Themathlearn Curl Fa 1 The Math Learn LuK

Learning Maths First Grade Math Themathlearn Curl Fa 1 The Math Learn

search search+ Curl Learning tsearchn Learning asearchdsearchk Grade r Maths a Math t First Learning ä Curl r First tlsearchE Grade %%D7%A4%D7%A1%22%D7%93+%D7%9C%D7%A7%D7%A1%D7%9E%D7%9F8 Themathlearn Asearch%search0 Themathlearn B Curl %search1search Themathlearn easearchnnsearch First Gsearchae Themathlearn 8searchTh Curl m Maths th Themathlearn e Themathlearn rsearch search M Math tsearchs searchE% First 8searchA3brug%20af%20gradueret%20nd%20filterE%%E0%B9%82%E0%B8%AB%E0%B8%A5%E0%B8%94%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1mathematics+worksheet+factory+deluxe8 Maths 96 Themathlearn E Themathlearn % Curl 8A First % First 0searchB8searchBmancala+vende+dobavel+com+pedras+azuis% Maths 0% First 8search9 Math %E First %search8 First 9 Maths % Curl 0% Grade 8 Maths B Curl %E0searchBsearch%8search%search0%B8search84%search0searchB8% Themathlearn 3searchE Learning % First 8B Curl %E Grade %MAXIME+VAN+MOERKERCKE8search95 Curl E Grade % Themathlearn 8A First %Esearch% Math 8 Learning B2%search0%Bsearch%Asearch%E Maths %B Maths %search5%E0%B9%82%E0%B8%AB%E0%B8%A5%E0%B8%94%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1mathematics+worksheet+factory+deluxeE First %B Curl %Amancala+vende+dobavel+com+pedras+azuis%search0 Learning Bsearch% First CäsearchnsearchC Learning +searchssearcha Learning d Themathlearn r Curl isearchs Math [3], joka valmistui vuonna 1998.

Kirjasto sisältää huomattavan määrän erilaisia funktioita ja luokkia helpottamaan ohjelmoija työtä. Koska C++ perustuu monilta osin C-kieleen eivät kaikki standardikirjaston tarjoamat komponentit ole luokkia. Mukana on myös tavallisia aliohjelmia (kuten printf()) jotka periytyvät C kielen standardikirjastoon.

Kirjaston osat

Stroustrup [1, luku 16] jaottelee standardikirjaston osat seuraavasti:
Tietovarastot (Containers)
sisältää yleisimmät tietorakenteet, kuten taulukot, listat, jonot ja binääripuut.
Yleiset työkalut (General utilities)
sisältää mm. muistinvarausfunktiot tietovarastoille ja C-tyyliset päivämäärä ja aikakirjastot.
Iteraattorit
jotka mahdollistavat tietorakenteiden alkioiden operoinnin. (läpikäynti, lisäys, poisto)
Algoritmit
sisältää geneeriset algoritmit joita käytetään stl:n tietovarastojen käsittelyyn ja C:stä periytyvät haku ja järjestämisalgoritmit.
Virheenkäsittelyn apuvälineet (Diagnostics)
sisältää mm. standardipoikkeukset, C-kielen virheenkäsittelykirjastot ja assert -makron.
Merkkijonot
sisältää sekä vanhat C-merkkijonot että uudet string luokkaan perustuvat merkkijonokirjastot.
I/O kirjastot
sisältää tietovirrat ja C:stä perityvät tulostus ja lukufunktiot.
Lokalisointi (Localization)
sisältää mm. apuvälineet ohjelmien kirjoittamiseen siten, että ne toimivat eri maissa; päivämäärien tulostaminen eri tavoin eri maissa, valuutan merkintä eri tavoin jne.
Kielen tukikirjastot (Language support)
sisältää mm. numeerisia rajoja, kuten suurimmat mahdolliset muuttujien koot, muistinvarauksen, poikkeustenkäsittelykirjastot ja singnaalikäsittelykirjastot.
Matematiikkakirjastot (Numerics)
sisältää mm. kirjastot normaaleille matemaattisille laskutoimituksille, kompleksiluvuille ja satunnaislukufunktiot.

3 Javan luokkakirjastot

Java ei ole varsinaisesti standardoitu ohjelmointikieli, vaan sen kehittämisestä vastaa Sun Microsystems. Huhtikuussa 1999 Sun ehdotti Javan standardoimista, mutta veti joulukuussa 1999 hakemuksensa takaisin[8]. Standardi Javasta puhuttaessa tarkoitetaankin juuri Sunin erilaisia Java versioita. Javasta on olemassa kolme erilaista versiota. Micro Edition on suppeahko versio jota käytetään laitteissa joissa on vähän muistia. (esim PDA-laitteet). Standard Edition on ``normaali'' versio Javasta ja tämä tutkielma perustuu sen tarjoamiin luokkakirjastoihin. Kolmas versio Enterprise Edition on laajin Java-versio. Eri versioiden eroista saa parhaan kuvan katsomalla niiden api-dokumentaatiota, jotka saa haettua internetistä Sunin sivuilta: A> Javan luokkakirjastojen luokat on jaettu eri paketteihin. Näitä paketteja on eri määrä riippuen käytettävästä Java versiosta. Java Standard Edition sisältää seuraavat paketit1[7]:
java.applet
Tarjoaa applettien kirjoittamiseen vaadittavat luokat.
java.awt
Graafisten käyttöliittymien luokkakirjasto AWT2.
java.beans
Java beanien kirjoittamiseen tarvittavat luokat.
java.io
Tietovirtaluokat, serialisointiin3 tarkoitetut luokat sekä tiedostojärjestelmien käsittelyyn tarkoitetut luokat.
java.lang
Luokat jotka ovat Javan kielen sisäisiä luokkia, kuten Object (kaikkien luokkien yliluokka), Throwable (kaikkien poikkeusten ja virheiden yliluokka), String, Thread ja wrapperiluokat Javan perustietotyypeille. Ilman java.lang pakettia tai jotain sen luokkaa Javan ajoympäristö ei käynnisty. Paketti sisältää myös Math luokan jolla voi suorittaa yleisimmät matemaattiset funktiot.
java.math
Suurten lukujen laskemiseen tarkoitetut luokat BigInteger ja BigDecimal.
java.net
Tietoverkoissa toimivien ohjelmistojen kirjoittamiseen käytettävät luokat kuten Socket ja URL.
java.rmi
RMI:n4 avulla hajautettujen Java ohjelmien tekemiseen tarkoitetut luokat.
java.security
Luokat security frameworkia varten. Sisältää myös mm. kryprografiset avainparit ja turvallisen satunnaislukugeneraattorin.
java.sql
JDBC kirjasto jonka avulla voidaan tehdä tietokantaoperaatioita.
java.text
Tarjoaa luokat tekstin, päivämäärien, numeroiden ja viestien ohjemoimiseen maarippumattomasti.
java.util
Sisältää mm. Javan tietorakenteet, päivämääriä ja aikoja käsittelevät luokat, kansainvälistämiseen tarvittavat luokat, perusluokat Javan tapahtumankäsittelyä varten ja satunnaislukugeneraattorin.
javax
Javax paketin alla on lukuisia muita paketteja jotka sisältävät luokkia mm. hajautettujen ohjelmistojen luontia varten, awt:tä laajempi graafinen luokkakirjasto Swing, ohjelmistoon liitettävien äänien ohjelmointia helpottavia luokkia jne...
org.omg
Sisältää useita muita paketteja joilla voidaan luoda hajautettuja ohjelmistoja käyttäen CORBA-standardia5.

4 Merkkijonot ja matemaattiset kirjastot

C++ ja Java ohjelmointikieliä ei ole alunperin erityisesti suunniteltu merkkijonojen käsittelyyn tai matemaattiseen laskentaan. Merkkijonojen käsittelyyn suositellaan usein Perliä ja matemaattiseen laskentaan Fortrania[9]. Sekä merkkijonon käsittelyä että matemaattisia funktioita kuitenkin tarvitaan lähes jokaisessa ohjelmassa. Matemaattisia funktioita ja merkkijonoja tarvitaan muiden ongelmien ratkaisun apuvälineinä: grafiikkarutiineissa, simuloinnissa, kaupallishallinnon sovelluksissa...

Merkkijonot

C++:n ja javan string-luokilla voidaan tehdä suunnilleen samat operaation hyvin samankaltaisilla menetelmillä. C++:n etuna (monen mielestä myös haittana) on se, että kieli pitää sisällään myös vanhat C-kielen merkkijonokirjastot. C:n aliohjelmakirjastoilla voidaan tehdä monia asioita helpommin kuin varsinaisilla string-kirjaston metodeilla. Esimerkiksi muotoiltu tulostus on huomattavasti näppärämpää C-kielen funktoiden avulla kuin käyttämällä tietovirtojen manipulointia. Toisaalta C-merkkijonotaulukot ovat hyvin virhealttiita ja näinollen kannattaa käyttää C++ merkkijonoja aina kun mahdollista. Javan tilanne ei muotoillun tulostuksen kannalta ole kuitenkaan välttämättä yhtään sen parempi.

Parhaimman kuvan merkkijonokirjastojen samankaltaisuudesta saa esimerkkien avulla. Ensimmäisessä esimerkissä esitellään merkkjonojen peruskäyttöä. Luodaan 2 merkkijonoa, liitetään ne yhteen uudeksi merkkijonoksi ja verrataan syntynyttä merkkjonoa neljänteen merkkijonoon. Huomioitavaa on, että merkkijonojen vertailu on ohjelmointikielissä erilaista. C++:ssa vertailuoperaattori == vertaa merkkijonojen sisällön samankaltaisuutta. Javassa vastaava operaattori vertaa viittaavatko kaksi eri olioviitettä samaan olioon ja varsinainen merkkijonojen sisällön vertailu tulee tehdä käyttäen equals() -metodia.

//C++
#include<string>
string first = "ABC";
string second = "abc";
string third = first + second;
bool same = ("ABCabc" == third);

//Java
String first = "ABC";
String second = "abc";
String third = first + second;
boolean same = "ABCabc".equals(third);

Jotta C++:n string-luokan saa käyttöönsä tulee se sisällyttää ohjelmaan käyttäen lausetta #include <string>. Javan String-luokka on esiteltynä paketissa java.lang jota ei tarvitse erikseen sisällyttää (import).

Javasta löytyy String-luokan lisäksi StringBuffer luokka jota kannattaa käyttää kun merkkijonoon aiotaan luomisen jälkeen lisätä merkkejä. String luokan merkkijonoa ei nimittäin voi muuttaa ja normaali muutosoperaatio itse asiassa luo aina uuden merkkijonon:

String a = "ABC";
a = a + "abc"; //Vastaa sisäisesti a = new String("ABCabc");
Kun taas StringBuffer muuttaa aidosti merkkijonoa:
StringBuffer a = "ABC";
a = a + "abc"; //Vastaa sisäisesti a.append("abc");
Näinollen StringBuffer on nopeampi käyttää kun merkkijonoon lisätään perään merkkejä. StringBufferia kannattaa siis käyttää tilanteissa joissa luetaan esimerkiksi tietoa useista lähteistä ja näistä halutaan koota yksi merkkijono.

Matemaattiset kirjastot

C++:n otsikkotiedosto (header) <cmath> esittelee yleisimmät matemaattiset funktiot. Javan matemaattiset funktiot löytyvät staattisesta luokasta Math joka löytyy paketista java.lang. Lisäksi Javan paketista java.math löytyvät luokat BigInteger ja BigDecimal.

Kummankin kielen kirjastoista löytyvät trigonometriset funktiot, lukujen pyöristämiseen tarkoitetut funktiot, logaritmiset funktiot, neliöjuuri sekä joitakin muita funktioita. C++ tarjoaa hieman suuremman valikoiman matemaattisia funktioita. Se sisältää mm. hyperboliset sinin, kosinin ja tangentin ja 10-kantaisen logaritmin joita Javassa ei ole.

//C++
#include <cmath>
...
double sin = sin(1);
double cos = cos(0);
double tan = tan(1);

double log = log(1); // e-kantainen logaritmi
double log10 = log10(100); //10-kantainen logaritmi

Samankaltaisuuksien lisäksi C++:n ja Javan matemaattisissa kirjastoissa on myös eroja. Ohjelmoijan kannalta selkein ero on virheenkäsittelyssä. C++:n matemaatiset kirjastot periytyvät C-kielestä ja tästä johtuen virheenkäsittely hoidetaan käyttämällä errno -kirjastoa:

//C++
#include <cmath>
#include <cerrno>
...
errno = 0; // asetetaan virhenumero virheettömään tilaan
// yritetään laskea nelijuurta negatiiviselle luvulle
double sqrtResult = sqrt(-1);

if( errno == EDOM ) {}

Javassa virheiden käsittelyyn käytetään poikkeuksia:

//Java
try {}
catch (ArithmeticException ex) {}
C++:n erikoisuutena ovat kompleksilukujen laskemiseen tarkoitetut luokat joiden ansiosta kompleksiluvut näyttävät ohjelmoijalle pitkälti tavallisilta reaaliluvuilta sekä matriisien laskemisen hoitava luokka.

Vaikka kummankin kielen matemaattisilla kirjastoilla voidaan toteuttaa yleisimmät matemaattiset operaatiot ne eivät välttämättä ole paras valinta varsinaisten matemaattisten ohjelmistojen toteuttamiseen. Tähän tarkoitukseen kannattaa valita esimerkiksi Fortran ohjelmointikieli mm. sen laajojen matemaattisten kirjastojen ansiosta. Javan etuna voidaan pitää BigInteger ja BigDecimal luokkien olemassaoloa. Koska desimaaliluvuilla laskeminen tarkasti ei ole tietokoneilla mahdollista6 joudutaan usein ongelmiin mm. lukujen pyöristysten kanssa. Tähän ongelmaan Javan BigDecimal antaa kohtuullisen ratkaisun. Desimaalilukujen laskennan epätarkkuus on niin yleinen ja hyvin tunnettu ongelma, että on oikeastaan aika erikoista, että C++:ssa ei kyseiseen ongelmaan ole standardissa mitään ratkaisua.

5 Tietovarastot (Containers) aLearning Maths First Grade Math Themathlearn Curl Fa 1 The Math Learn LuKl c The sLearning Maths First Grade Math Themathlearn Curl Fa 1 The Math Learn LuKy j Learn The Math Learn