-
- 1*.
- Kirjoita C++ ohjelma, joka toimisi seuraavasti:
C:\OMA>ika[RET]
Kerron sinulle paljonko täytät tänä vuonna!
Anna syntymävuotesi>1977[RET]
Täytät tänä vuonna 25 vuotta.
- 2*3.
- Kirjoita funktio, joka palauttaa suorakulmaisen kolmion
hypotenuusan pituuden kun parametrina on kateettien
pituus. Kirjoita testipääohjelma. Kirjoita vielä
funktio kolmion_ala, joka laskee vastaavista tiedoista
suorakulmaisen kolmion pinta-alan. Testaa tämäkin
funktio. Muista että funktiot eivät tulosta mitään!
- 4.
- Kirjoita seuraavat funktiot tai aliohjelmat sekä testiohjelma, jolla testataan niiden toimivuus.
- a)
- Funktio int etumerkki(double x, double eps) joka
palauttaa
-1 mikäli x<-eps
0 mikäli -eps<=x<=eps
1 mikäli x>eps
- b)
- Funktio kysy_vuosi, joka kysyy käyttäjältä vuosiluvun
ja palauttaa käyttäjä kirjoittaman vuoden parametrilistassa. Funktion paluuarvona (return-lausessa) palautetaan 1 mikäli annettu vuosiluku ei ole tältä vuosisadalta tai syöttössä on jotakin väärin. Muutoin palautetaan 0.
- 5*.
- Tutki pöytätestin avulla mitä ovat muuttujien arvot
seuraavassa ohjelmassa kunkin lauseen suorittamisen
jälkeen. Mitä ohjelma tulostaa? (Lause a=i++; vastaa
samaa kuin lauseet a=i; i=i+1; Lause a=++i; vastaa
samaa kuin lauseet i=i+1; a=i;)
#include <stdio.h>
/* 01 */
/* 02 */ int *d,c=4,u=9;
/* 03 */
/* 04 */ int huijaus(int a,int *b)
/* 05 */ {
/* 06 */ *(d+1) = ++(*b);
/* 07 */ c = *b - 2;
/* 08 */ *b += a/2;
/* 09 */ return a > 3;
/* 10 */ }
/* 11 */
/* 12 */ int puijaus(int **b)
/* 13 */ {
/* 14 */ int n;
/* 15 */ *b = &u;
/* 16 */ *d =175;
/* 17 */ n = --u;
/* 18 */ return 3 * (*b == d) + n;
/* 19 */ }
/* 20 */
/* 21 */ int main(void)
/* 22 */ {
/* 23 */ int k1 = 31, k2 = 45; d = &c-1;
/* 24 */ k1 = huijaus(k2+*(d+1),&c);
/* 25 */ k2 = puijaus(&d);
/* 26 */ printf("%4d ",*d);
/* 27 */ printf("%4d %4d %4d %4d\n",u,c,k2,k1);
/* 28 */ return 0;
/* 29 */ }
- 6.
- Mitä ovat muuttujien arvot seuraavien ohjelmanpätkien
jälkeen? Sisennä (ja selvennä) ohjelmanpätkät "oikein"!
/* 1 */ a=4; b=2; c=0; /* 2 */ a=4; b=2; c=0;
if ( a-b ) c++; a=1; if ( c )
b=3; c--; else b=1;
a = b-2;
/* 3 */ a=4; b=2; c=0; /* 4 */ a=4; b=2; c=0;
if ( a > 0 ) if ( b > 1 ) if ( c++ ) if ( a-- );
c=9; else b-=3; else c+=8;
else if ( c == 1 ) ;
else b = 0;
a = 3;
- 7*8.
- Kirjoita tietue tHenkilo, jossa on sukunimi, etunimi ja
syntymävuosi. Kirjoita funktio kysy, joka kysyy
henkilön tiedot. Kirjoita funktio tulosta, joka
tulostaa henkilön tiedot (ks.
monisteen luku 9.2). Kirjoita myös
testipääohjelma.
- G1-4
- Katso Demo 3:n guru-tehtävässä
G1-2 käsiteltyä tiedostoa
users.html ja
tiedostoa files.txt. Kirjoita ohjelma, joka tarkistaa jokaiselta henkilöltä että hänellä on kussakin vastaustiedostossaan ainakin oma nimensä. Jos nimeä ei ole, files.txt:tä ei ole tai files.txt:ssä mainittua tiedostoa
ei ole, henkilölle lähetetään sähköposti, jossa mainitaan asiasta. Sähköposti lähetetään tekemällä Unix-konetta varten seuraavanlainen komentojono postita:
#!/bin/sh
mailx -s Demo1 vesal@cc.jyu.fi <<EOF
Tiedostossa kavely.txt ei ole nimeäsi.
Tiedostoa guru2.cpp ei löydy.
EOF
mailx -s Demo1 mattim@cc.jyu.fi <<EOF
Tiedostoa files.txt ei löydy.
EOF
mailx -s Demo1 teppot@cc.jyu.fi <<EOF
Tiedostoa t9.cpp ei löydy.
EOF
-
- postita ajettaisiin (siis demossa ei tarvitse ajaa)
sitten sopivassa Unix/Linux koneessa. Jos Linuxissa ei
ole komentoa mailx voidaan vaikka tehdä alias.
-
- Myöskään WWW:stä ei tarvitse osata lukea, vaan riittää
osata lukea normaalista tiedostojärjestelmästä. Jos
users.html on hakemistossa demo1 (esim: Agorassa
n:\kurssit\cpp\demot\demo02\demo1), niin henkilön files.txt on alihakemistossa käyttäjänimi (eli esim. vesal\files.txt). Vastaavasti vastaustiedostot ovat suhteessa tähän hakemistoon. Oletetaan että jos käyttäjän
tunnus on vesal, niin hänen sähköpostiosoitteensa on
vesal@cc.jyu.fi (oikeasti koko postiosoite on käytössä
ja se ehkä tuleekin users.html:ään)
-
- Vinkki: Käytä "hajoita ja hallitse" tekniikkaa. Teet
mm. aliohjelmia joita kutsutaan:
KasitteleKaytaja("vesal",virhetiedosto);
if ( OnkoTiedostossa("kavely.txt","Vesa Lappalainen") ) ...
-
- Lisäideoita katso Demon 3: mallivastauksesta
LueUsers.cpp.