Copyright, Lauri Malmi. Teksti on julkaistu alunperin kirjassa: "Ohjelmoinnin perusteet ja Pascal-kieli", OtaData 1988.

3. Tietokone ja ohjelmointikieli


Tämän luvun alussa esitetään karkea yleiskuvaus tietokoneen rakenteesta ja toiminnasta. Näiden tunteminen ei ole välttämätöntä ohjelmoinnin opiskelussa, joten kohta 3.1 voidaan jättää ensimmäisellä lukemalla vähemmälle huomiolle. Laitteiston perusasioiden tuntemisesta on kuitenkin apua eräiden ohjelmointikielen käsitteiden ymmärtämisessä ja myöhemmissä luvuissa selitetäänkin tällaisia asioita tämän luvun tietoihin nojautuen.

Luvun muissa alakohdissa selitetään ohjelmointikielen yleiset perusteet ja kuvataan tietokoneohjelman suorittamiseen liittyviä asioita. Lukija saa sen pohjalta suppean käsityksen siitä, miten kirjoitettu ohjelmakoodi muuntuu toimivaksi tietokoneohjelmaksi.
 

3.1 Tietokoneen rakenteesta ja toiminnasta

3.1.1 Tietokoneen rakenne

Tietokonemalleja on viime vuosikymmeninä rakennettu lukuisa määrä, jotka eroavat suuresti toisistaan kooltaan, suorituskyvyltään, tekniikaltaan ja hinnaltaan. Niillä kaikilla on tiettyjä yhteisiä perustoimintoja, joiden välttämättömyys on helposti nähtävissä.
  1. Tietokoneen tulee pystyä lukemaan tietoja ulkomaailmasta omaan käyttöönsä.
  2. Tietokoneen tulee pystyä käsittelemään tietoa ja käsittelyn aikana varastoimaan sitä.
  3. Tietokoneen tulee pystyä siirtämään tietoa ulkopuolelleen.
  4. Tietokoneen tulee pystyä suorittamaan matemaattisia operaatioita, kuten yhteen-, vähennys-, kerto- ja jakolaskuja.
  5. Tietokoneen tulee pystyä vertailemaan tietoja ja valitsemaan toimenpiteitä vertailun tuloksen pohjalta. Vertailulla tarkoitetaan tässä tietojen yhtäsuuruuden, erisuuruuden tai muun keskinäisen suhteen toteamista.
  6. Tietokoneen suorittamaa tehtävää täytyy voida muuttaa. Kyseessä ei siis saa olla pelkkä automaatti, joka tekee aina saman tehtävän, oli tämä kuinka monimutkainen tahansa. Tietokoneen tätä ominaisuutta kutsutaan ohjelmoitavuudeksi.
Kohdista 1-3 seuraa tietokoneiden tavanomainen rakenne: koneen perusosina ovat suoritin eli prosessori , keskusmuisti ja oheislaitteet . Suoritin sisältää koneen varsinaisen "älyn" ja se toteuttaa tarpeet 4-6. Muut osat ovat luonteeltaan vähemmän itsenäisiä eli suoritin ohjaa tai koordinoi niiden toimintaa.

Prosessoria ja keskusmuistia yhdessä kutsutaan nimellä keskusyksikkö. Keskusmuisti on tarpeen, jotta suorittimen käsittelemä tieto voidaan tilapäisesti varastoida käsittelyn aikana. Oheislaitteita tarvitaan tallennettaessa tietoa keskusyksikön ulkopuolella sekä siirrettäessä tietoa koneen ja ulkomaailman välillä. Jälkimmäisiä kutsutaan joko syöttö- tai tulostuslaitteiksisen mukaan, kumpaan suuntaan tieto siirtyy. Tyypillisiä syöttölaitteita ovat näppäimistö ja hiiri, tulostuslaitteita puolestaan kuvaruutu (monitori) ja kirjoitin. Tiedon tallentamiseen käytetyt laitteet, kuten levyasema, voivat toimia kummassakin tehtävässä.

Seuraavassa on tietokoneen perustoimintojen rakennekaavio.

Kuvio 3-1: Tietokoneen perusrakenne.

Tiedon esittäminen tietokoneessa perustuu sähköisten piirien ominaisuuksiin. Helpoimmin on teknisesti toteutettavissa piiri, jolla on vain kaksi tilaa: esimerkiksi jännite jossain elementissä on 0 V tai 5 V. Tämän vuoksi tiedon esitystapana ovat kaksijärjestelmän luvut eli binääriluvut , jotka sisältävät vain ykkösiä ja nollia. Tiedon perusyksikkönä on yksi bitti , johon voidaan tallentaa yksinumeroinen binääriluku eli arvo 0 tai 1. Käytännössä tarvitaan kuitenkin suurempia yksikköjä, joita ovat tavu ja sana. Tavuun kuuluu yleensä 8 bittiä ja sanaan yhdestä neljään tavua eli siis 8, 16, 24 tai 32 bittiä. Tietokoneen sananpituuden mukaan puhutaan mm. 8-, 16- ja 32-bittisistä koneista.

Keskusmuisti koostuu peräkkäisistä sanoista tai tavuista, joita kutsutaan muistipaikoiksi . Ne erotetaan toisistaan kunkin muistipaikan osoitteen perusteella: ensimmäisen osoite on 0, seuraavalla 1, jne. Muistin kokoa mitataan yleensä kiloina , jolloin 1 kilo (merkitään 1K) on 2^10 eli 1024 muistiyksikköä (tavua tai sanaa). Näin ollen koneessa, jossa on 64 kiloa (64K) muistia, muistiosoitteet ovat välillä 0 - (2^16 - 1) (kymmenjärjestelmässä 65535). Suurempi muistin koon yksikkö on mega , joka tarkoittaa 2^10 kiloa eli runsaat miljoona muistipaikkaa (esim. 1M keskusmuistia).


Muistin rakenne:


Keskusmuistissa tieto ja ohjelma säilyvät vain niin kauan, kuin koneessa on virta päällä. Koska tietojen olemassaolo halutaan varmistaa muinakin aikoina, ne tallennetaan muulloin oheislaitteelle, josta käytetään myös nimitystä massamuisti . Massamuistina voivat toimia esimerkiksi levyke tai kovalevy. Massamuistin ja keskusmuistin erona on tiedon säilyvyyden lisäksi myös se, että keskusmuisti toimii paljon nopeammin (viitattaessa jossain osoitteessa olevaan muistipaikkaan), mutta on vastaavasti myös kalliimpaa kuin massamuisti. Jälkimmäistä on taas yleensä tarjolla huomattavasti enemmän kuin keskusmuistia.
 

3.1.2 Tietokoneen toiminta*

Tietokoneen toiminta perustuu siihen, että suoritin osaa toteuttaa joukon komentoja, jotka käsittelevät muistissa olevaa ja tietokoneen sekä oheislaitteiden välillä siirrettävää tietoa. Komentovalikoima eli käskykanta vaihtelee suuresti eri koneissa. Tärkeimmät käskyt on kuitenkin suoraan johdettavissa edellä esitetyistä tarpeista 1-5. Seuraavassa esitetään näihin perustuva hyvin yksinkertaisen koneen käskykanta. Oletetaan että koneeseen liittyy vain yksi syöttö- ja yksi tulostuslaite ja että suorittimen sisällä on yksi rekisteri (akku) .
 
 
IN Lukee syöttölaitteella olevan tiedon akkuun
OUT Kirjoittaa akun sisällön tulostuslaitteelle
SET i Tallettaa akkuun luvun i
LOAD x Lukee osoitteessa x olevan muistipaikan sisällön akkuun
STORE x Tallettaa akun sisällön osoitteessa x olevaan muistipaikkaan
ADD x Lisää muistipaikassa x olevan luvun akun sisältöön
SUB x Vähentää akun sisällöstä muistipaikassa x olevan luvun
CMP x Vertaa muistipaikan x sisältöä akun sisältöön. Jos se on suurempi tai yhtä suuri kuin tämä, hypätään ohjelmassa seuraavan komennon yli, muutoin suoritetaan seuraava komento
JUMP x Ohjelman suoritus jatkuu muistipaikassa x olevasta käskystä
HALT Pysäyttää ohjelman

Ohjelmaa suoritetaan seuraavasti:

  1. Jokaisella käskyllä on oma binäärinen vastineensa, joka tallennetaan muistiin kuten tavalliset luvutkin. Käskyt ovat siis pelkkiä binäärilukuja, joten muistia selaamalla ei voida erottaa, mitkä luvut ovat käskyjä mitkä käsiteltävää tietoa eli dataa. Ohjelmoijan tai ohjelmointijärjestelmän tulee huolehtia siitä, että nämä asiat eivät mene sekaisin eli ettei suoritin yritä tulkita dataa ohjelmana.
  2. Suoritin pystyy hakemaan muistista sinne talletetut käskyt yksi kerrallaan ja tulkitsemaan ne. Käskyt on talletettu muistiin peräkkäisiin muistipaikkoihin, jolloin suoritettuaan yhden käskyn loppuun suoritin hakee seuraavan käskyn lähinnä seuraavasta muistipaikasta.
  3. Tästä oletusjärjestyksestä poiketaan vain, jos suoritettu käsky antoi ohjeen hakea uuden käskyn jostain muusta osoitteesta. Tällöin on kyseessä joko hyppykäsky (JUMP) tai haarautumiskäsky (CMP). Näiden erona on se, että edellisen seurauksena ohjelman suoritus jatkuu uudesta osoitteesta aina, jälkimmäisen seurauksena vain silloin, jos tietty ehto on voimassa (muistipaikan x sisältö > akun sisältö).
  4. Ohjelman suoritus päättyy kohdattaessa HALT-komento, joka pysäyttää ohjelman.
Kerto- ja jakolasku voidaan palauttaa yhteen- ja vähennyslaskuun, joten koneessa ei ole erikseen käskyjä niitä varten. HALT-käsky on tarpeellinen siitä syystä, että suoritin yrittäisi muutoin hakea muistista jatkuvasti uusia käskyjä toisiaan seuraavista muistiosoitteista. Ohjelma ei joko loppuisi lainkaan tai todennäköisemmin suoritin kohtaisi sellaisia binäärilukuja, joita se ei osaisi tulkita käskyinä. Tällöin suoritin joutuisi keskeyttämään ohjelman suorituksen virhetilanteeseen.

Seuraavana esitetään pieni esimerkkiohjelma käyttäen ylläolevaa käskykantaa. Ohjelma lukee syöttölaitteelta 10 lukua, laskee niiden summan ja kirjoittaa sen tulostuslaitteelle eli suorittaa saman asian kuin seuraava Pascal-ohjelman katkelma:

summa := 0;
maara := 0;
repeat
  Read(luku);
  summa := summa + luku;
  maara := maara + 1;
until maara >= 10;
Write(summa);
Käskyjen edessä olevat numerot ovat muistiosoitteita. Muistipaikkaan 100 talletetaan laskettava summa, muistipaikkaan 101 luettujen lukujen määrä ja muistipaikkaan 102 kulloinkin luettu luku. Paikkaan 103 tallennetaan vakio 1, joka vähennetään lukumäärästä joka kierroksella, ja paikkaan 104 luettavien lukujen kokonaismäärä (10). Käskyjen jälkeen on selitetty niiden merkitys.
 
10   SET 0                 ; Asetetaan summan alkuarvoksi 0.
11   STORE 100
12   SET 0                 ; Asetetaan luettujen lukujen määrän alkuarvoksi 0.
13   STORE 101
14   SET 10               ; Asetetaan luettavien lukujen määräksi 10.
15   STORE 104
16   SET 1                 ; Asetetaan lukumäärän muutokset arvoksi 1.
17   STORE 103
18   IN                      ; Luetaan luku akkuun syöttölaitteelta.
19   STORE 102       ; Tallennetaan se hetkeksi muistiin.
20   LOAD 100         ; Siirretään summan arvo akkuun
21   ADD 102           ; ja lisätään luettu luku siihen.
22   STORE 100       ; Tallennetaan summan uusi arvo takaisin muistiin.
23   LOAD 101         ; Siirretään lukumäärä akkuun
24   ADD 103           ; ja lisätään siihen 1.
25   STORE 101       ; Tallennetaan uusi arvo takaisin muistiin.
26   CMP 104           ; Tutkitaan, onko akku jo 10
27   JUMP 18           ; Jos ei ollut, palataan lukemaan uusi luku
28   LOAD 102        ; Muutoin siirretään summa akkuun
29   OUT 102           ; ja kirjoitetaan se tulostuslaitteelle.
30 HALT                 ; Pysäytetään ohjelma.


Kuvio 3-2 havainnollistaa ohjelman ja sen käyttämien muistipaikkojen sijaintia muistissa. Muistipaikkoja, joiden osoitteet ovat välillä 0-9, 31-99 ja 105-..., ei tarvita tämän ohjelman kanssa lainkaan.

Kuvio 3-2: Ohjelma ja data muistissa.
 
 

3.2 Mikä on ohjelmointikieli?


Inhimillisen kommunikaation ja toisaalta ihmisen ja tietokoneen kommunikaation välillä on perustavaa laatua oleva ero. Inhimillinen tiedon välitys perustuu puhuttuun tai kirjoitettuun kieleen, joista edellisessä lisäksi ilmeillä ja eleillä on merkittävä osuus. Inhimillisen kielen eli ns. luonnollisen kielen ymmärtäminen edellyttää yhteisiä taustatietoja käsitteiden merkityksestä, koska ilmaisut ovat usein epätäsmällisiä. Esimerkiksi isoäidin kakkureseptissä saattaa lukea "hieman kaakaota ja ripaus kanelia". Mikäli tällaista yhteistä taustaa ei ole, kommunikaatio vaikeutuu ja kakku ei maistukaan samalta kuin entisaikoina mummolassa. Inhimilliseen kommunikaatioon liittyy myös oppiminen, joten seuraamalla isoäidin työskentelyä keittiössä on mahdollista selvittää oikeat annostelumäärät.

Tietokoneelta puuttuvat kaikki nämä tekijät. Se ymmärtää vain hyvin rajallisen joukon etukäteen määrättyjä täsmällisiä toimintoja, jotka on välitettävä sille jossain kiinteässä esitysmuodossa. Sillä ei ole kykyä ymmärtää asioiden ja käsitteiden taustoja eikä kykyä oppia.

Perusongelma ihmisen ja tietokoneen välisessä kommunikaatiossa on se, että siihen tarvitaan välitysmekanismi, jota molemmat ymmärtävät. Koska tietokone ei ymmärrä luonnollista kieltä, sen ohjaamiseen käytetään ohjelmointikieltä. Tämä eroaa luonnollisesta kielestä seuraavilta osin:


Ohjelmointikielen ja luonnollisen kielen tärkeimmät erot:


Näistä syistä ohjelmointikielen lauseissa ei ole tulkinnan varaa, vaan ihminen ja kone ymmärtävät esitetyn asian samalla tavalla.

Ohjelmointikielet kuuluvat laajempaan ns. muodollisten eli formaalien kielten luokkaan, joilla on samat ominaisuudet. Muita formaaleja kieliä ovat mm. matematiikassa ja logiikassa käytetyt merkintätavat. Ohjelmointikieliä on maailmassa tuhansia, mutta laajemmassa käytössä on vain kymmenkunta kieltä. Muut kielet on suunniteltu yleensä erityistarkoituksiin, joihin tavallisempien kielten ominaisuudet eivät kunnolla sovellu.

Kielet jaetaan ns. matalan tason kieliin ja korkean tason kieliin sen mukaan, kuinka abstrakteja toimintoja ja käsitteitä ne sisältävät. Matalan tason kielillä voidaan periaatteessa tehdä samat asiat kuin korkean tason kielilläkin, mutta se ei ole useinkaan mielekästä, koska ihmisen on helpompaa ja nopeampaa esittää ajatuksiaan jälkimmäisten avulla. Matalan tason kieliä ovat assembler- ja konekielet , joiden käsitteet ja toiminnot liittyvät suoraan tietokoneen suorittimen toimintoihin. Tästä syystä myös jokaisella erilaisella suorittimella on oma assembler- ja konekielensä. Assembler-kielinen ohjelma on tekstiä, jota ihminen voi lukea, mutta konekielinen ohjelma sisältää vain kaksijärjestelmän lukuja.


Korkean tason kielellä kirjoitetut ohjelmat eivät ole sidottuja minkään tietokoneen erityisominaisuuksiin, vaan samaa ohjelmaa
voidaan suorittaa eri tietokoneilla. Tätä kutsutaan ohjelmankoneriippumattomuudeksi.


Pascal-kieli on yleinen korkean tason kieli, joka on suunniteltu erityisesti opetuskäyttöön. Sen tärkeimpiä hyviä ominaisuuksia ovat suuri ilmaisuvoima erilaisen tiedon esityksessä ja käsitteiden suhteellisen pieni määrä. Verrattuna etenkin kotimikroissa yleiseen alkeiskieleen, BASIC-kieleen, Pascal-kielellä on olennaisesti paremmat mahdollisuudet rakentaa suuria ja monimutkaisia ohjelmia hallitusti. Toisaalta Pascalissa (standardin mukaisena) on selkeät puutteensa, jotka rajoittavat sen käyttökelpoisuutta eräissä tehtävissä. Niistä on lyhyesti kerrottu kirjan lopussa.
 

3.3 Ohjelmointikielen perusasiat


Edellä kohdassa 3.1 tuotiin esille joukko tarpeita, jotka tietokoneen tulee täyttää. Näitä olivat:

Näistä perustarpeista voidaan johtaa ohjelmointikielessä tarvittavat toiminnot. Samassa kohdassa esitettiin myös yksinkertaisessa konekielessä olevat käskyt, jotka tyydyttivät nämä tarpeet. Korkean tason kielissä on olemassa samat perustoiminnot, mutta niissä asiat vain ilmaistaan paljon havainnollisemmalla tavalla. Lisäksi korkean tason kielten toiminnot ovat laajaalaisempia kuin konekielessä. Yhdellä korkean tason kielen komennolla voidaan tehdä asia, johon konekielessä tarvittaisiin useita, jopa kymmeniä käskyjä. Vrt. kohdan 3.1.2 esimerkkiohjelmat.

Korkean tason kielen perustoiminnot on lueteltu alla. Viimeistä kolmea kohtaa ei ole johdettu em. tietokoneille asetetuista tarpeista, vaan vaatimuksista, jotka nousevat ohjelman toteuttamiseen liittyvistä käytännön ongelmista.
 

  1. Tiedon tallentaminen ohjelman suorituksen aikana. Tällä tarkoitetaan seuraavia mekanismeja:
  2. Tiedon siirtäminen ohjelman ja ulkomaailman välillä
  3. Matemaattisten asioiden ilmaiseminen. Tähän liittyvät:
  4. Tiedon vertailu
  5. Päättely ja ohjelman käskyjen suoritusjärjestyksen kontrollointi
  6. Ohjelman rakenteen määrittely
  7. Tiedon suojaaminen
  8. Ohjelmointikielen määrittely
Yllä olevat asiat liittyvät kaikkiin ohjelmointikieliin, mutta niiden toteutustapa vaihtelee paljon. Tässä kirjassa keskitytään Pascal-ohjelmointikieleen, mutta siellä täällä tuodaan esille näkökohtia, jotka ovat voimassa laajemminkin.

3.4 Miten ohjelmointikieli "toimii"?

Tietokoneet eivät erikoislaitteistoja lukuun ottamatta ymmärrä korkean tason ohjelmointikieliä tai edes assembleria sellaisenaan. Niillä kirjoitetut ohjelmat ovat koneen kannalta pelkkää tekstiä, joka täytyy ensin muuntaa koneen ymmärtämään muotoon konekielelle. Kyseistä muunnosprosessia kutsutaan ohjelman kääntämiseksi ja sen suorittavaa ohjelmaa ohjelmointikielen kääntäjäksi . Käännettäessä koko ohjelmasta tuotetaan uusi kone- kielinen versio, ajokelpoinen ohjelma. Ohjelman merkitys ei muutu tässä prosessissa, joten binäärilukuina oleva ohjelma suorittaa saman tehtävän kuin ohjelmoijan kirjoittama ohjelma.

Kun ohjelma on muunnettu konekieliseksi, sitä suoritetaan samojen periaatteiden mukaan, kuin edellä on kuvattu kohdassa 3.1. Ohjelman tarvitsemat tiedot eli data luetaan joltakin syöttölaitteelta ja tulostettavat tiedot siirretään jollekin tulostuslaitteelle.Ks. kuvio 3-3. Kuviossa 3-4 on otettu mukaan myös ohjelman kääntäminen.

Kuvio 3-3: Ohjelman ajaminen.

Tietokoneohjelmissa esiintyy usein virheitä, joiden vuoksi ohjelma toimii väärin tai ei toimi lainkaan. Niille on olemassa kolmenlaisia syitä. Ensinnäkin ohjelmoija voi kirjoittaa ohjelmaansa ilmauksen, joka ei ole ohjelmointikielen sääntöjen mukainen. Kyseessä on tällöin ns. kielioppi- eli syntaksivirhe , esimerkiksi ohjelmalta puuttuu otsikko. Tällaisista virheistä saadaan yleensä kääntäjältä käännösaikainen virheilmoitus , eikä ohjelmaa voi suorittaa, ennen kuin virhe on korjattu. Toinen virhelähde on se, että ohjelmalla yritetään tehdä jotain selvästi mahdotonta, esimerkiksi jakaa nollalla. Ajonaikaiset virhetilanteet huomataan vasta ohjelman suorituksen aikana ja niistä saatava ilmoitus on ns. ajonaikainen virheilmoitus.

Kolmantena virhelähteenä ovat tilanteet, joissa ohjelmoija on miettinyt ohjelman logiikan virheellisesti: ohjelma ei teekään sitä, mitä ohjelmoija luulee sen tekevän. Näistä ns. loogisista virheistä ei tule välttämättä mitään ilmoitusta, vaan virhe havaitaan vain vääristä lopputuloksista. Tietysti ne voivat johtaa myös ajonaikaisiin virhetilanteisiin. Loogisten virheiden löytäminen edellyttää ohjelman perusteellista testausta.


Ohjelma, josta ei tule käännösaikaisia tai ajonaikaisia virheitä, ei välttämättä ole virheetön.



Kuvio 3-4: Ohjelman kääntäminen ja ajaminen.

Kuvio 3-5: Ohjelman kääntäminen ja ajaminen.
 

3.5 Kertaus

  1. Tietokoneen tehtävänä on lukea tietoja, käsitellä niitä ja tulostaa lopputulokset. Näitä varten koneessa on suoritin, keskusmuisti ja oheislaitteita.
  2. Tietokone on ohjelmoitavissa.
  3. Tiedon esittäminen tietokoneessa perustuu kaksijärjestelmään, perusyksikkönä bitti, suurempina yksikköinä tavu ja sana.
  4. Keskusmuisti koostuu perättäisistä muistipaikoista, jotka erotetaan toisistaan osoitteensa perusteella.
  5. Ihminen ja kone voivat kommunikoida ohjelmointikielen avulla, koska se on täsmällisesti ja yksiselitteisesti määritelty. Ohjelmointikieliä on monia erilaisia.
  6. Ohjelmointikielissä olevat käsitteet ja toiminnot nousevat niistä tarpeista ja vaatimuksista, joita tietokoneelle asetetaan. Matalan ja korkean tason kielissä on tästä johtuen samoja perustoimintoja, mutta korkean tason kielen toiminnot ovat yleisempiä, eivätkä liity mihinkään erityiseen suorittimeen.
  7. Ohjelmointikielellä kirjoitettu ohjelma täytyy muuntaa konekielelle, ennen kuin sitä voidaan ajaa.

  8. Ohjelmassa olevista virheistä voidaan saada käännösaikaisia ja ajonaikaisia virheilmoituksia, mutta näiden puuttuminen ei takaa ohjelman virheettömyyttä.

Käsitteitä

Ajonaikainen virhetilanne (run-time error) Assembler eli symbolinen konekieli (assembly language) Binääriluku (binary number) Bitti (bit, binary digit) Data (data) Keskusmuisti (main memory) Keskusyksikkö (central processing unit, cpu) Kilo (kilo) Konekieli (machine language) Koneriippumattomuus (machine independence) Korkean tason kieli (high level language) Käskykanta (instruction set) Käännösaikainen virheilmoitus (compile-time error message) Kääntäjä (compiler) Looginen virhe (logical error) Luonnollinen kieli (natural language) Massamuisti (mass storage) Matalan tason kieli (low level language) Mega (mega) Muistiosoite (memory address) Muistipaikka (memory location) Oheislaite (peripheral device) Ohjelman kääntäminen (compiling a program) Rekisteri, akku (register, accumalator) Sana (word) Sananpituus (word length) Suoritin eli prosessori (processor) Syöttölaite (input device) Tavu (byte) Tulostuslaite (output device)

Harjoitustehtäviä

  1. Ota selvää, miten seuraavia laitteita käytetään ja miten ne toimivat:
    1. levykeasema
    2. kovalevy
    3. hiiri.
  2. Selvitä jostakin tietokoneesta seuraavat ominaisuudet:
    1. keskusmuistin koko
    2. sananpituus
    3. koneeseen liitettävät oheislaitteet.
  3. Voidaanko seuraavia asioita pitää kohdassa 3.1.1 olevien vaatimusten pohjalta tietokoneina? Perustele vastauksesi.
    1. nelilaskin
    2. kaupan elektroninen vaaka
    3. ihmisaivot
    4. hiiren aivot?
  4. Ovatko seuraavat ilmaukset mielestäsi täsmällisiä ja yksiselitteisiä. Jos eivät ole, miksi?
    1. "Matti kävelee joka päivä kouluun puolen kilometrin päähän."
    2. "Tietokoneen osat ovat suoritin, keskusmuisti, näppäimistö ja monitori."
    3. "Koeputkessa olevaan liuokseen sekoitetaan 2.75 g NaOH:ta"
    4. "Ohjelma hyppää seuraavaksi muistipaikkaan 37 ja suorittaa siinä olevan käskyn."
  5. Vertaa kohdassa 3.1.2 olevaa Pascal-ohjelmaa ja esitettyä konekielistä ohjelmaa. Mitkä konekielen käskyt vastaavat kutakin Pascal-kielistä käskyä?