h1. Ajatuksia
Miltei kaikissa vähänkin monimutkaisimmissa laitteissa on toimintaa ohjaava logiikka, joka päättelee miten laitteen tulee toimia eri tilanteissa. Tätä logiikkaa sanotaan ohjelmaksi. Se on perättäisten ja haarautuvien toimintojen sarja, joka määrää laitteen käyttäytymisen. Laitteiden ohjaus voidaan toteuttaa näennäisesti monella eri tavalla, mutta taustalla on aina jonkin asteinen tietokone. Kun tietokone ei näy käyttäjälle puhutaan sulautetusta ohjauksesta.
Ohjelma jakaantuu tyypillisesti pääohjelmaan ja funktioihin (pääohjelmakin on funktio). Ohjelma alkaa aina pääohjelman alusta ja kun pääohjelma päättyy, päättyy myös koko ohjelma. Pääohjelmasta kutsutaan aliohjelmia eli funktioita. Tyypillisesti aliohjelmat tekevät kaiken työn ja pääohjelma pitää ohjelman käynnissä. Yksittäinen aliohjelma ratkaisee jonkin probleeman. Aliohjelman tulisi olla kooltaan kohtuullisen lyhyt, jotta se olisi ymmärretettävissä.
Suoritettavaa ohjelmaa kutsutaan prosessiksi. Yksinkertaisimmillaan tietokoneessa on yksi prosessi, joka ohjaa esimerkiksi auton ABS-jarruja. Useimmiten tietokoneessa on kuitenkin useita prosesseja _yhtä aikaa_ käynnissä. Esimerkiksi käyttöjärjestelmä sisältää monta erillistä ohjelmaa eli prosessia. Periaatteellisia lähestymistapoja ohjelmointiin on kaksi, joista ensimmäinen on proseduraalinen ja toinen olioita käyttävä tapa. Proseduraalisessa, eli toiminnollisessa tavassa tieto ja funktiot on eroteltu toisistaan ja ohjelman suunnittelu lähtee tehtävistä, joita ohjelman tulee tehdä. Toinen vaihtoehto on ns. olio-ohjelmointi, johon palataan C++-kurssilla.
Ohjelmoinnin tarve on viime vuosina kasvanut räjähdysmäisesti. Syynä tähän on osaltaan pc:n tuleminen jokaisen työkaluksi sekä toisaalta sulautettujen järjestelmien yleistyminen esimerkiksi kodinkoneissa, autoissa, kännyköissä jne. Koneautomaatiossa vielä kymmenen vuotta siten riitti ohjelmoitavan logiikan ohjelmointitaito. Tänään logiikkaohjelmat siirtyvät yhä useammin osaksi tietokoneohjausta ja liittyvät hyvinkin monimutkaiseen tietojärjestelmään. Tämänkaltaisten sovellusten käyttöönotto ja ohjelmointi vaativat hyvää käyttöjärjestelmä\- ja ohjelmointiosaamista.
h2. Yksinkertaisia esimerkkejä motivaation herättämiseen
Yksinkertaisen C-ohjelman tekeminen on suhteellisen helppoa. Alla olevan ohjelman voi tehdä Windows ympäristössä esimerkiksi VisualC:llä.
{code}
#include <stdio.h> // sisällytetään ohjelmaan standardi input/output -tiedostossa esitellyt funktiot esim. printf()
#include <conio.h>
int main() // pääohjelma alkaa tästä
{
printf("Eka ohjelma"); // tulostetaan tekstiä ruudulle
getch(); // odotetaan näppäimen painallusta
return 1; // palautetaan ohjelmasta arvo 1
} // pääohjelma loppuu
{code}
Toisessa ohjelmassa kommunikoidaan jo käyttäjän kanssa.
{code}
#include <stdio.h>
#include <conio.h>
int main()
{
char JokinMerkki; // esitellään muuttuja, joka voi tallettaa näppäimisöltä annettavan merkin
printf("anna jokin merkki: ");
JokinMerkki=getch(); // kysytään merkki näppäimistöltä ja talletetaan se muuttujaan
printf("Antamasi merkki oli %c",JokinMerkki ); // tulostetaan annettu merkki %c:n osoittamaan kohtaan
getch();
return 1;
}
{code}
Kolmannessa esimerkissä käytämme jo kahta aliohjelmaa ja julkista muuttujaa.
{code}
#include <stdio.h>
#include <conio.h>
char JokinMerkki; // esitellään muuttuja, nyt julkisena, jotta kaikki funktiot voivat käyttää sitä
void KysyMerkki()
{
printf("anna jokin merkki: ");
JokinMerkki=getch(); // kysytään merkki näppäimistöltä ja talletetaan se muuttujaan
}
void TulostaMerkki()
{
printf("Antamasi merkki oli %c",JokinMerkki ); // tulostetaan annettu merkki %c:n osoittamaan kohtaan
}
int main()
{
KysyMerkki();
TulostaMerkki();
getch();
return 1;
}
{code}
Neljännessä esimerkissä esittelemme muuttujan paikallisena, jolloin muuttuja näkyy vain sen funktion sisällä, jossa se on esitelty. Lisäksi opettelemme {{return}} lauseen käyttöä sekä arvoparametrien lähetystä funktiokutsun mukana.
{code}
#include <stdio.h>
#include <conio.h>
// funktion tyyppi on nyt char ja funktio paluttaa nyt kutsujalle näppäimistöltä annetun merkin
char KysyMerkki()
{
printf("anna jokin merkki: ");
return getch(); // kysytään merkki näppäimistöltä ja palutetaan se funktiosta return lauseella
}
void TulostaMerkki(char Merkki)
{
printf("Antamasi merkki oli %c",Merkki ); // tulostetaan annettu merkki %c:n osoittamaan kohtaan
}
int main()
{
char JokinMerkki; // esitellään muuttuja, nyt paikallisena, nyt muutuja näkyy vain tässä funktiossa
JokinMerkki=KysyMerkki(); // funktio palauttaa arvonsa muuttujaan JokinMerkki
TulostaMerkki(JokinMerkki); // Funktio saa parametrinaan JokinMerkki muuttujan arvon
getch();
return 1;
}
{code}
Toivottavasti edellä olevat esimerkit auttoivat herättämään kipinän opetella lisää C-kieltä. |