Olio-ohjelmointi HYV6SN 1.välikoe 18.10.2007
1. Tee ohjelma, joka laskee kahden rinnankytketyn vastuksen resistanssin kun ohjelmalle syötetään vastusten arvot ohmeina. Rinnankytkennän resistanssi saadaan kaavasta: (5 p)
2 1
2 1
R R
R R R
= +
#include <iostream>
using namespace std;
int main() {
float R1,R2;
cout << "Anna vastusten arvot "<< endl;
cin >> R1 >> R2;
cout << "Kokonaisresistanssi on " << R1*R2/(R1+R2);
return 0;
}
2. Tee ohjelma, joka tutkii onko käyttäjän antama merkkijono palindromi, eli sama merkkijono nurinpäin (esimerkiksi saippuakauppias). (5 p)
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string s1;
cout << "Anna merkkijono" << endl;
cin >> s1;
string s2=s1;
reverse(s1.begin(),s1.end());
if (s1 == s2)
cout << "On palindromi" << endl;
else
cout << "Ei ole palindromi" << endl;
return 0;
}
3. Tee ohjelma, joka lajittelee käyttäjän syöttämät kokonaisluvut
suuruusjärjestykseen. Syötettävien lukujen määrää ei tiedetä etukäteen. (5 p)
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <int> luvut;
vector <int>::iterator it;
int luku;
do {
cout << "Luku ?" << endl;
cin >> luku;
if (luku > 0)
luvut.push_back(luku);
} while (luku>0);
sort(luvut.begin(),luvut.end());
for (it=luvut.begin();it!=luvut.end();it++) cout << *it << endl;
return 0;
}
4. 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äynninyhteydessä 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.
Muuttujien arvot
1 2 3 4 5
Ensimmäisen kutsun jälkeen1 2 * 4 *
Toisen kutsun jälkeen 2 3 * 5 *
* = Ei ole arvoa
#include <iostream>
using namespace std;
int i=0; //Muuttuja 1 void f(int &);
int main() {
int i=1; //Muuttuja 2 f(i);
//Muuttujien arvot a)-kohdassa ? f(i);
//Muuttujien arvot b)-kohdassa ? return 0;
}
void f(int &k) {
int i=2; //Muuttuja 3
static int j=3; //Muuttuja 4 i++;
j++;
::i++;
k++; //Muuttuja 5 }