Pseudokoodi on tietojenkäsittelytieteessä ohjelmointikielen tapaista koodia, jonka tarkoituksena on piilottaa eri ohjelmointikielten väliset syntaksierot ja jättää jäljelle vain algoritmin perusrakenne.[1] Pseudokoodi on oikotie algoritmin kuvaamiseen, jossa on usein yhdistelmä koodia mutta jotkin yksityiskohdat puuttuvat ("tässä kohtaa tapahtuu ihme").[2]

Pseudokoodin etuna on se, että eri ohjelmointikielten taitajat pystyvät keskustelemaan keskenään ohjelmistojen algoritmeista, vaikka he eivät olisi koskaan tutustuneet toistensa käyttämiin ohjelmointikieliin. Lisäksi pseudokoodi useimmiten myös helpottaa algoritmin tila- ja suoritusaikavaatimusten analysointia, sekä algoritmin oikeellisuuden toteamista.lähde? Pseudokoodin avulla voidaan keskittyä algoritmin loogiseen toimintaan sivuuttaen kielikohtaiset yksityiskohdat. Esimerkiksi toiminto voidaan ilmaista tyyliin lue seuraava rivi sen sijaan, että kirjoitettaisiin vaikkapa readfp(fdesc, 1024, "\n");

Varsinaista pseudokoodistandardia ei ole[1], ja jopa yliopistojen tietojenkäsittelytieteen laitosten eri kursseilla saattaa törmätä erilaisiin notaatioihin kurssista riippuen. Yleensä pseudokielessä käytetään ALGOLiin perustuvaa Pascal- tai Python -tyylistä syntaksia.lähde? Erityisesti sijoitusta kuvaa merkki := tai , jotta se ei sekoittuisi yhtäsuuruuden kanssa.

Vaikka pseudokoodi näennäisesti muistuttaa ohjelmointikieltä, se ei ole tarkoitettu Ohjelmointikielen kääntäjän tai tulkin ymmärrettäväksi. Pseudokoodi onkin tarkoitettu lähinnä ihmisten työvälineeksi.

Esimerkki

muokkaa

Pseudokielinen esimerkki kuplalajittelualgoritmista:

 function lajittele( lista L )
    muutoksia :=1;
    while muutoksia > 0 // käydään läpi niin kauan kuin muutoksia esiintyy
        muutoksia := 0;  
        i := 0;
        while i < ( "listanpituus" - 1)
            if L[i] > L[i+1] then 
               swap(L[i], L[i+1]); //  Vaihda L[i] ja L[i+1] paikkaa
               muutoksia := 1
            endif
            i := i + 1;
        endwhile
    endwhile
 endfunction

Vinkkejä

muokkaa
  • Lukijalle tulee olla selvää, ovatko muuttujat viitteitä vai kopioita ja alkavatko taulukon indeksit nollasta vai eivät.
  • Vältä monimutkaisia ehtorakenteita ja algoritmin katkaisevia return-avainsanoja. Invariantin ajattelu voi olla hyödyllistä algoritmin selkeyttämiseksi.
  • Älä käytä C/Java-tyylistä matalan tason for-lausetta, vaan kirjoita mieluummin for each alkio in joukko.
  • Merkitse kokonaislukujako selkeästi, esim. 5 div 3 tai ⌊5 / 3⌋, tai kerro lukijalle että kaikki jaot ovat kokonaislukujakoja.
  • Käytä matemaattisia merkintöjä kuten summaa, jos ne ovat selkeämpiä.

Pseudokoodityylejä

muokkaa

C-tyyli

muokkaa

C-tyylinen pseudokoodi käyttää hyväkseen C-tyylisten kielien laajaa levinneisyyttä: ne ovat tuttuja lähes kaikille. Vaarana on, että noudatetaan C:n syntaksia liian kirjaimellisesti selkeyden kustannuksella, ja unohdetaan muotoilla teksti vapaasti. Tyyppien esittelyt, puolipisteet, aaltosulut ja matalan tason for-lause voivat tehdä algoritmista vaikeammin luettavan.

int etsi(var A[], var k) {
    for each (a in A) {
        if(a == k)
            return index of a;
    }
    // arvoa ei löytynyt
    return -1;
}

Introduction to Algorithms

muokkaa

Suositussa kurssikirjassa Introduction to Algorithms käytetty pseudokoodityyli on saavuttanut jokseenkin vakiintuneen aseman algoritmien kuvauksessa korkeakouluissa, ja sen kirjoittamiseksi on laadittu useampikin LaTeX-makropaketti. Wikipedia ei tue kaikkia siinä käytettyjä muotoiluja.

Tyyli yhdistää melko matemaattisen merkintätavan sisennyssääntöön ja sijoitusnuoleen. Sana do rivin alussa tekee sisennyksestä hieman epätasaista. Indeksit alkavat yhdestä eivätkä nollasta. Tietueen jäseniä noudetaan kuin taulukon alkioita, mikä saattaa hämätä lukijaa: size[T] on tietueen T jäsen, T[3] on taulukon T indeksi.

Etsi(A, k)
   for i ← 1 to length[A]
       do if A[i] = k
           then return k
   > ei löytynyt
   return –1

Englanninkielisen Wikipedian matalan tason pseudokoodisuositus

muokkaa
function etsi(A, k) is
    for each a in A do
        if a = k then return index of a
    end for
    arvoa ei löytynyt
    return –1
end function

Pelkkä sisennyskin riittää, eivätkä is, do ja then ole niin tärkeitä:

function etsi(A, k)
    for each a in A
        if a = k
            return index of a
    arvoa ei löytynyt
    return –1

Lähteet

muokkaa
  1. a b Hyvönen M., Lappalainen V. & Lakanen A-J.: Ohjelmointi 1, C# (luentomoniste) 2013. Jyväskylän yliopisto, Tietotekniikan laitos. Viitattu 25.7.2021.
  2. J. G. Brookshear, D. Brylow, N. Harris: Computer Science: An Overview (PDF) w3.cs.jmu.edu. 2015. Viitattu 28.10.2017. (englanniksi)
Tämä tietotekniikkaan liittyvä artikkeli on tynkä. Voit auttaa Wikipediaa laajentamalla artikkelia.