Kirjautuminen

Haku

Tehtävät

Joulukalenteri 2009: Algol

Kirjoittaja: Antti Laaksonen (01.12.2009)

Tervetuloa Ohjelmointiputkan joulukalenteriin!

Joulukalenterin jokaisessa luukussa esitellään ohjelmointikieli, jossa on jotakin kiinnostavaa ja merkittävää, mutta joka ei ole saanut syystä tai toisesta jalansijaa Ohjelmointiputkassa.

Joulukalenterin aloittaa kunniakkaasti Algol, joka on toiminut esikuvana sellaisille nykyään tunnetuille kielille kuin C ja Pascal.

Esittely

Algol-kielen kehitys alkoi 1950-luvun lopussa, ja sen tärkein määrittely Algol 60 on vuodelta 1960. Algolia käytettiin erityisesti yliopistoissa ohjelmoinnin opetuksessa ja tutkimuksessa.

Algol muistuttaa paljon nykyaikaisia proseduraalisia ohjelmointikieliä: käytössä ovat ehtorakenteet, silmukkarakenteet ja aliohjelmat. Algolin suunnittelussa tavoitteena on ollut kielen helppokäyttöisyys sekä soveltuvuus laskennallisiin tehtäviin.

Esimerkki: Tekstin tulostus

Seuraava ohjelma tulostaa tekstiä:

begin
    print 'Tervetuloa joulukalenteriin!'
end

Algol 60 -määrittely ei ota kantaa tekstin tulostukseen, minkä vuoksi eri Algol-toteutuksissa on eri tapoja tulostaa tekstiä. Tässä oletetaan, että käytössä on komento print.

Algol-kielen avainsanat merkitään ohjelmaan muusta koodista poikkeavasti. Merkintätapa riippuu jälleen käytetettävästä Algol-toteutuksesta: tässä avainsanat alleviivataan.

Esimerkki: Fibonaccin luvut

Fibonaccin lukusarja alkaa seuraavasti:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Kaksi ensimmäistä lukua ovat 0 ja 1, ja niiden jälkeen seuraava luku saadaan laskemalla yhteen kaksi edellistä.

Seuraava ohjelma tulostaa Fibonaccin luvut, jotka ovat alle 100:

begin
    integer a, b, c;
    a := 0;
    b := 1;
    print a;
    print b;
    for c := a + b while c < 100 do
    begin
        print c;
        a := b;
        b := c
    end
end

Ohjelman tulostus on seuraava:

0
1
1
2
3
5
8
13
21
34
55
89

Esimerkki: Nimiparametri

Algol-kielen erikoisuus ovat aliohjelman nimiparametrit. Jos aliohjelman parametri on nimiparametri, parametrin esiintymät aliohjelmassa korvataan parametriksi annetulla lausekkeella ennen aliohjelman suoritusta.

Seuraavassa ohjelmassa aliohjelman lista parametrit ovat nimiparametreja. Kun parametriksi lasku annetaan 3 * x * x + x, aliohjelman komento tulos := lasku; muuttuu muotoon tulos := 3 * x * x + x;.

begin
    procedure lista(lasku, x);
    integer lasku, x;
    begin
        integer tulos;
        for x := 1 step 1 until 10 do
        begin
            tulos := lasku;
            print x, tulos
        end
    end lista;

    lista(3 * x * x + x, x)
end

Ohjelman tulostus on seuraava:

1       4
2       14
3       30
4       52
5       80
6       114
7       154
8       200
9       252
10      310

Esimerkiksi kun x = 5, lasku on 3x2 + x = 80.

Sanottua

C. A. R. Hoare (pikalajittelun keksijä) totesi Algolista seuraavaa artikkelissaan "Hints on programming language design" vuonna 1973:

"Mitä enemmän pohdin ohjelmointikielten suunnitteluperiaatteita ja tapoja saattaa ne käytäntöön, sitä enemmän Algol 60 hämmästyttää ja herättää kunnioitusta minussa. Tämä kieli on niin edellä aikaansa, että se ei ollut parannus vain edeltäjiinsä verrattuna, vaan myös lähes kaikkiin seuraajiinsa verrattuna."

Linkkejä

Tietoa sivustosta