Ag B111.1 klo 8-10 ja 10-12 (Ohjaaja: Miika Nurminen)
Seuraavien harjoitusten tarkoituksena on opettaa ohjelmointiympäristön käyttöä. Itse C-kielisten ohjelmien syntaksiin ei vielä ole syytä takertua liiaksi.
Tässä harjoituksessa opittavat asiat tulevat hyödyksi ohjelman koodaamisessa ja testaamisessa. Itse ohjelman suunnittelun kanssa tällä harjoituksella ei ole mitään tekemistä!
[C++ Error] jarj2.c(8): E2451 Undefined symbol 'd'
[C++ Error] jarj2.c(8): E2121 Function call missing )
[C++ Error] jarj2.c(8): E2380 Unterminated string or character constant
[C++ Error] jarj2.c(14): E2451 Undefined symbol 'T'
[C++ Error] jarj2.c(18): E2379 Statement missing ;
[C++ Warning] jarj2.c(19): W8070 Function should return a value
[C++ Warning] jarj2.c(19): W8004 't' is assigned a value that is never used
Kaksoisnapauttamalla ilmoitusta nähdään, millä rivillä ohjelmassa ongelma esiintyy. Kokeile!
Aja ohjelmaa rivi kerrallaan (F8).
Katso välillä tulostusikkunaa.
Kokeile uudestaan. Käytä myös kursoriin saakka ajamista (eli siirrä kursori vaikkapa riville x2=t ja paina F4).
Siirrä vaihtamisessa suoritettavat lauseet samalle riville: t=x1; x1=x2; x2=t; Eli:
Kokeile suoritusta rivi kerrallaan uudelleen, kun ko. lauseet on siirretty.
Kokeile suoritusta rivi kerrallaan käyttämällä nyt näppäintä F7. Mitä eroa näppäimeen F8?
Aja vielä kerran riville if ( x1... Muuta muuttujan x1 arvoa (Ctrl-F7 x1 RET) ennenkuin jatkat suorittamista rivi kerrallaan.
Lisää ohjelmaan tulostusrivi, joka kertoo ohjelman käyttäjälle mitä ohjelma tekee.
Talleta ohjelma lopuksi.
Tallenna ohjelma uudella nimellä JARJ3.C (File->Save as).
Tarkoituksena on muuttaa ohjelmaa siten, että järjestetäänkin 3 lukua suuruusjärjestykseen (rivit on numeroitu jotta alla voidaan viitata riveihin; numeroita ei missään tapauksessa kirjoiteta!): LUE ENSIN HUOLELLISESTI OHJEET ALTA!
01 /* Ohjelma järjestää kolme lukua suuruusjärjestykseen.*/
02 #include <stdio.h>
03 int main(void)
04 {
05 int x1,x2,x3,t;
06 printf("Anna 1. luku >"); scanf("%d",&x1);
07 printf("Anna 2. luku >"); scanf("%d",&x2);
08 printf("Anna 3. luku >"); scanf("%d",&x3);
09 if ( x1>x2 ) {
10 t=x1; x1=x2; x2=t;
11 }
12 if ( x1>x3 ) {
13 t=x1; x1=x3; x3=t;
14 }
15 if ( x2>x3 ) {
16 t=x2; x2=x3; x3=t;
17 }
18 printf("Luvut: %d %d %d\n",x1,x2,x3);
19 return 0;
20 }
Kolmannen luvun lukeminen voidaan kopioida vaikkapa 2. luvun lukemisesta (rivinumerot viittaavat valmiiseen koodiin): siirry rivin 07 alkuun (nuolet ja Home)
Vertailut saadaan vastaavasti kopioimalla rivit 09-11 (ed. esim. mukaiset valmiit rivinumrot) kahteen kertaan:
Tee loput tarvittavat muutokset.
Talleta ohjelma.
Lisää myös x3 WATCH-ikkunaan.
Ajele ohjelmaa ja tutki toimiiko.
Lohkon voi merkitä myös hiirellä. Kokeile sitäkin, mutta muista että näppäimistö on aina nopeampi ja tarkempi (kun sen kunnolla opettelee)!
Muokkaa tiedostosta JARJ3.C seuraava tiedosto JARJ3A.C: jarj3a.c
Laita WATCH-ikkunaan muuttujat x1, x2, x3, a, b ja t.
Kokeile ajaa askel kerrallaan käyttäen sekä F7 että F8. Mikä on näppäinten välinen ero?
Poista aliohjelmasta kaikki tähdet (*a -> a jne) sekä pääohjelmasta aliohjelman vaihda kutsussa olevat &-merkit.
Talleta muutettu ohjelma nimelle JARJ3AA.C
Kokeile muutetun ohjelman toimintaa askel kerrallaan. Muuttuvatko x1, x2 ja x3 aliohjelman suorituksen aikana kuten edellisellä kerralla?
Avaa edellinen jarj3a.c uudelleen ja kokeile vielä kerran suoritusta askel kerrallaan. Vertaa toimintaa ohjelmaan jar3aa.c.
Sama ohjelma voidaan tehdä myös C++:lla. Erona C++:ssa on että syötössä ja tulostuksessa voidaan käyttää << ja >> -operaattoria (voidaan tulostaa ja lukea myös kuten C-kielessä) sekä voidaan käyttää referenssiä &, jonka ansiosta aliohjelmassa tehdyt muutokset heijastuvat pääohjelmaan vaikkei parametreja viedäkään osoittimien avulla.
Avaa jarj3aa.c ja lisää siihen aluksi vain muutos:
void vaihda(int &a, int &b)
Talleta nimelle jarj3.cpp ja kokeile toimintaa. Pitäisi toimia. Muuta ohjelma vielä seuraavaksi "kunnon" C++ -ohjelmaksi: (liitteenä)
Miten edellistä ohjelmaa pitäisi muuttaa mikäli haluttaisiin järjestää 4 lukua? Taitaisi jo tulla varsin sotkuiseksi.
Muutetaan ohjelmaa (kirjoita nimelle JARJ3TA.C käyttäen pohjana JARJ3.C-ohjelmaa) siten, että apuna käytetään taulukkoa: (liitteenä)
Hae aliohjelma vaihda voidaan hakea tiedostosta JARJ3A.C.
Edellinen ohjelma ei ehkä ole yhtä selkeä (?) kuin JARJ3.C, mutta lukujen lukumäärä esiintyy ohjelmassa enää vain yhdessä paikassa. Missä?
Talleta ohjelma.
Poista WATCH-ikkunasta kaikki tarpeeton:
siirry takaisin C-ikkunaan
Lisää taulukko luvut sekä muuttujat pienin ja tutki WATCH-ikkunaan.
Aja ohjelmaa askel kerrallaan. Toimiiko täsmälleen vastaavasti kuin JARJ3.C?
Muuta KOKO 5 ja kokeile toimintaa.
Viimeksi muutettu: ke 4 heinäkuu 2001 15:09:54
Antti-Juhani Kaijanaho <gaia@iki.fi>
Perustuu osittain Vesa Lappalaisen ja Kari Kärkkäisen tekemiin
kurssisivustoihin ja teksteihin.