Professional Documents
Culture Documents
PA1 2012 RD Atviroji Klase
PA1 2012 RD Atviroji Klase
PA1 2012 RD Atviroji Klase
Pradiniai duomenys
1) pavadinimas: "Kaunas - Vilnius", ilgis: 105,0 km, leistinas greitis: 110 km/val.;
2) pavadinimas: "Kaunas - Alytus", ilgis: 65,6 km, leistinas greitis: 90 km/val.;
3) pavadinimas: "Vilnius - Panevys", ilgis: 136,0 km, leistinas greitis: 120 km/val.
Rezultatai
I Alytaus Panev nuvaiuosime per 2.81677 val.
Ilgiausias kelias: Vilnius - Panevys
Sprendimo eiga.
Pirmas ingsnis.
Sukurkite klas, skirt kelio duomenims saugoti.
class Kelias
{
public:
string pav;
// kelio pavadinimas
double ilgis;
// kelio ilgis
int
lgr;
// leistinas greitis km/val
};
int main()
Antras ingsnis.
Papildykite program vaiavimo laiko skaiiavimo ir spausdinimo veiksmais.
// Vaiavimo laiko radimas
double laikas = k2.ilgis / k2.lgr + k1.ilgis / k1.lgr + k3.ilgis / k3.lgr;
cout << "I Alytaus Panev nuvaiuosime per " << laikas
<< " val." << endl;
Patikrinkite programos veikim. Ekrane turite matyti:
Keliai:
Kaunas Vilnius, 105, 110
Kaunas - Alytus, 65.6, 90
Vilnius Panevys, 136, 120
I Alytaus Panev nuvaiuosime per 2.81677 val.
Treias ingsnis.
Papildykite program ilgiausio kelio radimo ir spausdinimo veiksmais.
// Ilgiausio kelio radimas
string maxPav = k1.pav;
double maxIlgis = k1.ilgis;
if (k2.ilgis > maxIlgis) {
maxPav = k2.pav;
maxIlgis = k2.ilgis;
}
if (k3.ilgis > maxIlgis) {
maxPav = k3.pav;
maxIlgis = k3.ilgis;
}
cout << "Ilgiausias kelias: " << maxPav << endl;
Patikrinkite programos veikim. Ekrane turite matyti:
Keliai:
Kaunas Vilnius, 105, 110
Kaunas - Alytus, 65.6, 90
Vilnius Panevys, 136, 120
I Alytaus Panev nuvaiuosime per 2.81677 val.
Ilgiausias kelias: Vilnius - Panevys
Programos papildymas.
Papildykite program veiksmais, nustataniais, kuriame kelyje leistinas greitis yra maiausias.
Savarankiko darbo uduotis.
Yra keturi draugai. inomi kiekvieno j vardas, gis, svoris. Sukurkite klas vieno asmens duomenims
saugoti. Paraykite program, kuri rast vidutin vieno vaikino svor ir kuris vaikinas emiausias.
Sprendimo eiga.
Pirmas ingsnis.
Nukopijuokite P1.1 program. Paalinkite i programos veiksmus, surandanius laik, per kur
galima nuvaiuoti i Alytaus Panev, ir ilgiausio kelio pavadinim.
Antras ingsnis.
class Auto
{
public:
string pav;
string degalai;
double snaudos;
};
// automobilio pavadinimas
// degal tipas
// kuro snaudos 100 km
Papildykite main() funkcij dviej objekt, saugani automobili duomenis, apraais. Suteikite
reikm i objekt kintamiesiems ir spausdinkite objekt duomenis.
a1.snaudos = 7.5;
a2.snaudos = 6.3;
Treias ingsnis.
Ketvirtas ingsnis.
Papildykite program kintamaisiais ir veiksmais, reikalingais kelions kainai skaiiuoti ir spausdinti.
double kaina1, kaina2;
double atstumas = k2.ilgis + k1.ilgis + k3.ilgis;
if (a1.degalai == "benzinas")
kaina1 = (atstumas / 100) * a1.snaudos * benzKaina;
else
kaina1 = (atstumas / 100) * a1.snaudos * dyzKaina;
if (a2.degalai == "benzinas")
kaina2 = (atstumas / 100) * a2.snaudos * benzKaina;
else
kaina2 = (atstumas / 100) * a2.snaudos * dyzKaina;
cout << "Automobiliu " << a1.pav
<< " i Alytaus Panev nuvaiuosime u " << kaina1 << " Lt" << endl;
cout << "Automobiliu " << a2.pav
<< " i Alytaus Panev nuvaiuosime u " << kaina2 << " Lt" << endl;
Patikrinkite programos veikim. Ekrane turite matyti:
Keliai:
Kaunas Vilnius, 105, 110
Kaunas - Alytus, 65.6, 90
Vilnius Panevys, 136, 120
Automobiliai:
Opel Meriva, benzinas, 7.5
Volkswagen Golf, dyzelinas, 6.3
Kiek kainuoja 1 litras benzino? 4.75
Kiek kainuoja 1 litras dyzelino? 4.45
Automobiliu Opel Meriva i Alytaus Panev nuvaiuosime u 109.226 Lt
Automobiliu Volkswagen Golf i Alytaus Panev nuvaiuosime u 85.9553 Lt
Programos papildymas.
Papildykite program veiksmais, nustataniais, kiek kilometr nuvaiuot kiekvienas automobilis, jei degal
pilta u 100 Lt.
benzinas
benzinas
dyzelinas
dyzelinas
benzinas
benzinas
dyzelinas
dyzelinas
7.1
7.5
6.3
6.1
6.8
5.9
5.5
7.3
Rezultatai faile Rezultatai.txt
Automobili skaiius: 8
Automobili sraas:
---------------------------------------------------|
Pavadinimas
| Degalai
| Snaudos (l/100 km)
---------------------------------------------------| koda Fabia
| benzinas
|
7.10
|
| Opel Meriva
| benzinas
|
7.50
|
| Volkswagen Golf | dyzelinas |
6.30
|
| Opel Astra
| dyzelinas |
6.10
|
| Toyota Corolla | benzinas
|
6.80
|
| Toyota Yaris
| benzinas
|
5.90
|
| Peugeot 207
| dyzelinas |
5.50
|
| koda Octavia
| dyzelinas |
7.30
|
----------------------------------------------------
Sprendimo eiga.
Pirmas ingsnis.
Antras ingsnis.
Prie pagrindin funkcij paraykite duomen vedimo funkcijos prototip.
void vestiDuomenis(string fv, Auto A[], int & kiek);
Po pagrindine funkcija paraykite duomen vedimo funkcijos tekst.
// I failo fv veda duomenis objekt masyv A(kiek).
void vestiDuomenis(string fv, Auto A[], int & kiek)
{
ifstream fd(fv.c_str());
fd >> kiek; fd.ignore();
for (int i = 0; i < kiek; i++) {
getline(fd, A[i].pav, ','); fd >> ws;
fd >> A[i].degalai;
fd >> A[i].snaudos;
fd.ignore();
}
fd.close();
}
Naudodamiesi pavyzdiu paruokite duomen fail Duomenys.txt.
Treias ingsnis.
Prie pagrindin funkcij paraykite objekt masyvo reikmi spausdinimo funkcijos prototip.
void SpausdintiDuomenis(string fv, Auto A[], int kiek);
Po pagrindine funkcija paraykite objekt masyvo reikmi spausdinimo funkcijos tekst.
// Objekt masyvo A(kiek) reikmes spausdina lentele fail fv
void SpausdintiDuomenis(string fv, Auto A[], int kiek)
{
ofstream fr(fv.c_str(), ios::app);
fr.setf(ios::fixed); fr.setf(ios::left);
fr << "Automobili skaiius: " << kiek << endl;
fr << "Automobili sraas:\n";
fr << "----------------------------------------------------\n";
fr << "|
Pavadinimas
| Degalai
| Snaudos (l/100 km)\n";
fr << "----------------------------------------------------\n";
for (int i = 0; i < kiek; i++) {
fr << "| " << setw(15) << A[i].pav << " | " << setw(10) << A[i].degalai
<< " |
" << setprecision(2) << A[i].snaudos
<< "
| " << endl;
}
fr << "----------------------------------------------------\n";
fr.close();
}
Ketvirtas ingsnis.
Papildykite pagrindin funkcij rezultat failo sukrimo (ivalymo) veiksmais.
ofstream fr("Rezultatai.txt");
fr.close();
Papildykite pagrindin funkcij kreipiniais vedimo ir spausdinimo funkcijas.
vestiDuomenis("Duomenys.txt", A, na);
SpausdintiDuomenis("Rezultatai.txt", A, na);
vykdykite program. Rezultat faile "Rezultatai.txt" matysite:
Automobili skaiius: 8
Automobili sraas:
----------------------------------------------------
Programos papildymas.
Pakeiskite program taip, kad automobili srao lentelje bt spausdinami eilui numeriai.
Savarankiko darbo uduotis.
Yra inomi n (5 < n < 100) Lietuvos keli duomenys (r. P1.1). Suraykite iuos duomenis fail. Paraykite
program, kuri vest duomenis i failo objekt masyv ir spausdint lentele kit fail.
benzinas,
benzinas,
dyzelinas,
dyzelinas,
benzinas,
benzinas,
dyzelinas,
dyzelinas,
7.1
7.5
6.3
6.1
6.8
5.9
5.5
7.3
Sprendimo eiga.
Pirmas ingsnis.
Antras ingsnis.
Prie pagrindin funkcij paraykite vidurkio skaiiavimo funkcijos prototip.
double VidSnaudos(Auto A[], int kiek);
Po pagrindine funkcija paraykite vidurkio skaiiavimo funkcijos tekst.
// Skaiiuoja ir grina objekt masyvo A(kiek) lauko snaudos vidutin reikm
double VidSnaudos(Auto A[], int kiek)
{
double sum = 0;
for (int i=0; i<kiek; i++) {
sum = sum + A[i].snaudos;
}
return sum / kiek;
}
Treias ingsnis.
Papildykite pagrindin funkcij paraytos funkcijos grintos reikms spausdinimu.
fr.open("rezultatai.txt", ios::app);
fr.setf(ios::fixed); fr.setf(ios::left);
fr << "Vidutins degal snaudos: " << setprecision(2) << VidSnaudos(A, na)
<< " litro/100 km" << endl;
fr.close();
vykdykite program. Rezultat faile "Rezultatai.txt" matysite:
Automobili skaiius: 8
Automobili sraas:
---------------------------------------------------|
Pavadinimas
| Degalai
| Snaudos (l/100 km)
---------------------------------------------------| koda Fabia
| benzinas
|
7.10
|
| Opel Meriva
| benzinas
|
7.50
|
| Volkswagen Golf | dyzelinas |
6.30
|
| Opel Astra
| dyzelinas |
6.10
|
| Toyota Corolla | benzinas
|
6.80
|
| Toyota Yaris
| benzinas
|
5.90
|
| Peugeot 207
| dyzelinas |
5.50
|
| koda Octavia
| dyzelinas |
7.30
|
---------------------------------------------------Vidutins degal snaudos: 6.56 litro/100 km
Programos papildymas.
Paraykite funkcij dyzelini automobili kiekiui rasti. Papildykite program io kiekio radimu ir
spausdinimu rezultat fail.
Savarankiko darbo uduotis.
Modifikuokite P1.4 program, kuri papildomai rast:
kiek degal 100 km vidutinikai sunaudoja vienas benzininis automobilis;
vertint situacij, kad gali nebti n vieno benzininio automobilio.
Programa
LA11. Sodas
Sukurkite klas Medis, kuri turt kintamuosius amiui ir aukiui saugoti. Auga daug medi. Rasti,
koks vidutinis medi auktis ir koks vidutinis amius.
Papildykite klas Medis kintamuoju, skirtu medio lajos skersmeniui saugoti. Papildykite duomenis
medio lajos skersmeniu. Sukurkite klas Sodas, kuris turt kintamuosius sodo ilgiui ir ploiui
saugoti. Ar visi mediai gali bti vieno sodo mediais?
LA12. Krepinis
Sukurkite klas Studentas, kuri turt kintamuosius amiui ir giui saugoti. Studentai nutar
treniruotis aisti krepin. Rasti, kiek yra student, auktesni u pirm srae ir koks student
vidutinis gis.
Papildykite klas Studentas kintamuoju, skirtu studento masei saugoti. Papildykite pradinius
duomenis. Sukurkite klas Liftas, kuri turt kintamuosius lifto keliamosios galios reikmei ir talpai
saugoti. Per kelis kartus visi studentai pakils liftu reikiam aukt? Pateikite vien i daugelio teising
atsakym.
LA13. Studentas
Sukurkite klas Pabaisa, kuri turt kintamuosius rag ir uodeg kiekiui saugoti. Susitiko gdiame
mike daug pabais. Kiek i viso jos turi rag ir uodeg?
Pildykite klas Pabaisa kintamuoju, skirtu amiui saugoti. Papildykite pradinius duomenis. Sukurkite
klas Studentas, kuri turt kintamuosius trofj skaiiui (atskirai ragams ir uodegoms) saugoti.
Kiek studentas turs trofj, jeigu sunaikins pirm ir paskutin pabaisas?
LA14. Monetos
Sukurkite klas Moneta, kuri turt kintamuosius nominalui ir masei saugoti. Studentas gavo daug
marsiei monet. Kokia vis monet mas ir kokia vis monet bendra pinigin vert?
Papildykite klas Moneta kintamaisiais, skirtais monetos storiui ir skersmeniui saugoti. Papildykite
pradinius duomenis. Sukurkite klas Cilindras, kuri turt kintamuosius ilgiui ir skersmeniui
saugoti. Kiek yra monet, kurioms saugoti tinka cilindrin taupykl? Kiek kiekvieno nominalo monet
atskirai galima sutalpinti tokio tipo taupykl?
LA15. Traukinys
Sukurkite klas Automobilis, kuri turt kintamuosius keleivi, telpani automobil, skaiiui ir
kuro, sunaudojamo 100 km, kiekiui bei vieno litro kainai saugoti. Automobili nuomos punkte yra
daug kelionei tinkam automobili. Rasti, kiek kuro sunaudoja kelion pirmuoju srae automobiliu,
kai kelions atstumas nurodomas klaviatra, ir kiek vidutinikai telpa keleivi automobilyje.
Papildykite klas Automobilis kintamuoju, skirtu kelions atstumui saugoti. Papildykite pradinius
duomenis. Sukurkite klas Traukinys, kuri turt kintamuosius nuvaiuotam atstumui ir bilieto
kainai saugoti. Traukinio nuvaiuotas atstumas ir bilieto kaina nurodoma klaviatra. Kurie
automobiliai nuvaiuos didesn atstum, negu traukiniu nuvaiuotas atstumas? Kuriais automobiliais
vaiuoti traukinio atstum yra pigiau?
10
LA16. Lentyna
Sukurkite klas Knyga, kuri turt kintamuosius knygos puslapi skaiiui ir knygos puslapio storiui
saugoti. Knygyne daug knyg. Rasti kiek i viso puslapi turi visos knygos ir kiek metr lentyn
reikia, norint sudti visas knygas greta viena kitos.
Papildykite klas Knyga kintamuoju, skirtu knygos aukiui saugoti. Papildykite pradinius duomenis.
Sukurkite klas Lentyna, kuri turt kintamuosius lentynos aukiui ir ilgiui saugoti. Ar visos knygos
tilps lentynoje?
LA17. Sal
Sukurkite klas Kd, kuri turt kintamuosius jos uimamam plotui ant grind saugoti: ilgiui ir
ploiui. Kds projekcija ant grind yra staiakampio formos. Sandlyje yra daug skritingo tipo
kdi. Rasti, koks vidutinis kds uimamas plotas ant grind.
Papildykite klas Kd kintamuoju, skirtu sdimos ploktumos aukiui nuo grind saugoti.
Papildykite pradinius duomenis. Sukurkite klas Sal, kuri turt kintamuosius sals ilgiui ir ploiui
saugoti. Salje reikia sustatyti kdes, kuri sdimos ploktumos auktis nuo grind gali bti tarp 40 ir
50 cm, o atstumas tarp kdi eili 30 cm. Sals imatavimai inomi. Kiek reikia tinkamo aukio
kdi, jeigu per sals vidur ir kratuose reikia palikti 1 m ploio prajimus.
LA18. Namas
Sukurkite klas Ekovata (apiltinimo mediaga), kuri turt kintamuosius ilgiui ir ploiui saugoti.
Statybini preki parduotuvje yra daug tip ekovat. Rasti, vidutin ekovatos uimam plot ir kiek
yra ekovat, kuri uimamas plotas didesnis u vidutin.
Papildykite klas Ekovata kintamuoju, skirtu vatos storiui saugoti. Papildykite pradinius duomenis.
Sukurkite klas Namas, kuri turt kintamuosius namo aukiui, ilgiui ir ploiui saugoti. Nam reikia
apiltinti ekovata. Apiltinimo sluoksnio storis tarp 25 ir 30 cm. Kiek reikia kvadratini metr
ekovatos namui apiltinti? Ar parduotuvje yra tokia pagal stor tinkama ekovata ir, jeigu yra, tai kiek
vienet reikia nupirkti?
LA19. Rstas
Sukurkite klas Lenta, kuri turt kintamuosius ilgiui ir storiui saugoti. Sandlyje yra daug tip lent.
Rasti, kiek yra lent, kurios ilgesns u vidutin lent ilg ir kiek yra lent, storesni u paskutin
srae.
Papildykite klas Lenta kintamuoju, skirtu lentos medio riai saugoti (1-beras, 2-egl, 3-puis ir
t.t.). Papildykite pradinius duomenis. Sukurkite klas Rstas (medio), kuri turt kintamuosius rsto
ilgiui ir skersmeniui saugoti. Kiek kurio tipo lent galima ipjauti i vieno rsto? Skaiiuojant lentos
ilgis turi bti ne didesnis u rsto ilg, o storis turi bti ne storesnis u rsto skersmen (kiek lent pagal
stor sitenka duoto rsto skersmenyje).
LA110. Siuvykla
Sukurkite klas Kostiumas, kuri turt kintamuosius modelio pavadinimui, mediagos pavadinimui,
pasiuvimui reikalingos mediagos ilgiui bei ploiui ir atrai kiekiui (procentais, %) saugoti. Siuvykla
siuva daugelio skirting modeli kostiumus. Raskite, kiek i viso reikia mediagos, jeigu kiekvieno
modelio tipo bus siuvamas tik vienas kostiumas ir kiek i viso bus atrai.
Papildykite klas Kostiumas kintamuoju, skirtu kostiumui pasiti reikalingoms laiko snaudoms
(minutmis) saugoti. Papildykite pradinius duomenis. Sukurkite klas Siuvykla, kuri turt kintamj
siuvyklos pavadinimui saugoti ir kintamj siuvj skaiiui saugoti. Kiek kiekvieno modelio kostium
siuvykla gali pasiti per savait? Siuvyklos darbo laikas nurodomas klaviatra.
LA111. Kepykla
Sukurkite klas Duona, kuri turt kintamuosius duonos riai, milt pavadinimui, rupumui, kepaliuko
svoriui ir kepimo prieaugiui (procentais, %) saugoti. Kepykla kepa skirting ri duon. Raskite,
koks kepyklos ikept kepaliuk bendras svoris ir koks bendras kepimo prieaugis didiausias, jeigu
kiekvienos ries kepama po n kepaliuk.
Papildykite klas Duona kintamuoju, skirtu duonos kepaliuko uimamam ant lentynos plotui saugoti.
Papildykite pradinius duomenis. Sukurkite klas Kepykla, kuri turt kintamj kepyklos pavadinimui
saugoti ir kintamj, skirt saugoti per nakt reikalingam ikepti vienos ries duonos kepaliuk
kiekiui. Suskaiiuokite, kiek ploto lentyn kiekvienos ries duonai sudti reikt.
11
LA112. Kepykll
Sukurkite klas Sausainis, kuri turt kintamuosius, skirtus ries pavadinimui, deimiai vienet
sausaini pagaminti reikaling kiauini kiekiui, vieno sausainio uimamam ploiui bei ilgiui, ir kiek
vienet sausaini telpa orkaitje vienu metu kepti saugoti. Kepykll kepa skirting ri sausainius.
Kiekvienos ries kepa po n sausaini. Orkaitje gali bti tik vienos ries sausainiai. Raskite, kiek
reikia kiauini i viso visiems sausainiams ir kiek kart reikia kepti.
Papildykite klas Sausainis kintamuoju, skirtu saugoti laikui, reikalingu sausainiui kepti orkaitje
(minutmis). Papildykite pradinius duomenis. Sukurkite klas Kepykll, kuri turt kintamj
kepyklls pavadinimui saugoti ir kintamj, skirt saugoti orkaii skaiiui. Kiek nakt galima ikepti
sausaini?