Olio-ohjelmointi 1. Välikoe 16.10.2009 HYV8SN Ratkaisut
1. Tee ohjelma, joka kysyy opiskelijan nimen ja Olio-ohjelmointikurssin arvosanan. Ohjelma tulostaa arvosanan tekstimuodosssa siten, että 5 = Kiitettävä, 3 ja 4 = Hyvä, 1 ja 2 = Tyydyttävä ja 0 = Hylätty.
#include <iostream>
using namespace std;
int main() {
string as,nimi;
int num;
cout << "Nimi ?" << endl;
getline(cin,nimi);
cout << "Numero ?" << endl;
cin >> num;
cout << "Arvosanasi on ";
switch(num) {
case 5:
as="kiitettävä";
break;
case 4:
case 3:
as="hyvä";
break;
case 2:
case 1:
as="tyydyttävä";
break;
case 0:
as="hylätty";
break;
default:
as="tuntematon !";
break;
}
cout << "Opiskelijan " << nimi << " arvosana on " << as << endl;
return 0;
}
2. Tee ohjelma, joka kysyy käyttäjältä merkkijonon ja tutkii onko se palindromi, eli sama merkkijono nurinpäin (esimerkiksi "saippuakauppias").
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string s1;
cout << "Anna merkkijono" << endl;
cin >> s1;
string s2=s1;///Sijoitetaan alkup. merkkijono s2:een reverse(s1.begin(),s1.end());///Käännetään s1
if (s1 == s2)
cout << "On palindromi" << endl;
else
cout << "Ei ole palindromi" << endl;
return 0;
}
3. Mitkä ovat muuttujien 1, 2, 3, 4 ja 5 arvot a. Ensimmäisen funktiokutsun jälkeen b. Toisen funktiokutsun jälkeen ?
(0.5 p / oikea vastaus). Vihje: Muuttujalla ei välttämättä ole arvoa ollenkaan…
Muuttuja 1 on globaali muuttuja. Se näkyy funktioon f. Arvoa kasvatetaan funktiossa f lauseella ::i++; Ensimmäisen kutsun jälkeen arvo on siis 1 ja toisen kutsun jälkeen 2.
Muuttuja 2 on pääohjelmassa määritelty paikallinen muuttuja. Muuttuja viedään viittausparametrin kautta funktioon f(&i) , joten funktio pystyy muuttamaan sen arvoa. Ensimmäisen kutsun jälkeen arvo on 2 ja toisen 3.
Muuttuja 3 on funktiossa f määritelty paikallinen muuttuja. Sitä ei ole olemassa pääohjelman suorituksen aikana, joten sillä ei ole arvoa kummassakaan tapauksessa.
Muuttuja 4 on funktiossa f määritelty staattinen muuttuja. Se on olemassa koko ohjelman suorituksen ajan kun se on ensimmäisen funktiossa käynnin
yhteydessä luotu. Funktiossa sen arvoa kasvatetaan, joten ensimmäisen kutsun jälkeen arvo on 4 ja toisen jälkeen 5.
Muuttuja 5 on itse asiassa pääohjelman muuttujan i (Muuttuja 2) aliasnimi, koska kyseessä on viittausparametrillinen funktiokutsu. Muuttuja k on kuitenkin
funktion paikallinen muuttuja, joten sillä ei ole arvoa pääohjelmassa.
4. Tee lottorivin arvontaohjelma, joka arpoo lottorivin, eli 7 lottonumeroa ja 3 lisänumeroa.
Lotossa on 39 numeroa.
#include <iostream>
#include <algorithm>
using namespace std;
const int N=39;
void tulosta(int);
void tayta_taulukko(int &);
int main()
{
int luvut[N];
srand(unsigned(time(NULL)));
for_each(luvut,luvut+N,tayta_taulukko);
cout << endl << endl;
random_shuffle(luvut,luvut+N);
cout << "Hyvää iltaa." << endl;
cout << "Arvotaan 7 lottonumeroa." << endl;
for_each(luvut,luvut+7,tulosta);
cout << endl << "Arvotaan 3 lisänumeroa."<< endl;
for_each(luvut+7,luvut+10,tulosta);
return 0;
}
void tayta_taulukko(int &i) {
static int n;
//Ensin kasvatetaan n, sitten vasta sijoitus.
//Nyt lähtee 1:stä eikä nollasta.
i=++n;
}
void tulosta(int i) {
cout << i << " ";
}