laboratorini Ų darb Ų uŽduotys ir reikalavimai · vilniaus gedimino technikos universitetas...

52
VILNIAUS GEDIMINO TECHNIKOS UNIVERSITETAS INFORMACINIŲ TECHNOLOGIJŲ KATEDRA dr. L. Pupeikienė PROGRAMAVIMO KALBA C++ LABORATORINIŲ DARBŲ UŽDUOTYS IR REIKALAVIMAI Vilnius 2010

Upload: others

Post on 31-Oct-2019

9 views

Category:

Documents


0 download

TRANSCRIPT

VILNIAUS GEDIMINO TECHNIKOS UNIVERSITETAS

INFORMACINIŲ TECHNOLOGIJŲ KATEDRA

dr. L. Pupeikienė

PROGRAMAVIMO KALBA C++

LABORATORINIŲ DARBŲ UŽDUOTYS IR REIKALAVIMAI

Vilnius 2010

UDK įrašomas leidykloje

L. Pupeikienė. Programavimo kalba C++: Laboratorinių darbų užduotys ir reikalavimai. Vilnius: Technika, 2010. 40 p.

Trumpas leidinio aprašas.

Leidinys yra sukurtas pagal C++ programavimo kalbos kursą (FMITB02719). Atliekant visus laboratorinius darbus studentai praktiškai išmoks taikyti vaisą paskaitų metu išdėstytą teoriją. Laboratorinių darbų medžiaga skirta I pakopos 1 kurso studentams. Pritaikytas 09P, 01T, 07T kryptims.

Leidinį rekomendavo VGTU ________ fakulteto studijų komitetas

Recenzavo: mokslinis vardas ir laipsnis, Vardas Pavardė, darbovietė (pvz., VGTU Fizikos katedra)

mokslinis vardas ir laipsnis, Vardas Pavardė, darbovietė

http://leidykla.vgtu.lt

VGTU leidyklos TECHNIKA _____ mokomosios metodinės literatūros knyga

ISBN įrašomas leidykloje

© Pupeikienė, L., 2010 © VGTU leidykla TECHNIKA, 2010

TURINYS

1 laboratorinis darbas (1 LD) ....................................................4 1 LD sprendimo pavyzdžiai.......................................................5 1 LD individualios užduotys .....................................................7 2 laboratorinis darbas (2 LD) ..................................................10 2 LD sprendimo pavyzdžiai.....................................................11 2 LD individualios užduotys ...................................................16 3 laboratorinis darbas (3 LD) ..................................................25 3 LD sprendimo pavyzdžiai.....................................................26 3 LD individualios užduotys ...................................................28 4 laboratorinis darbas (4 LD) ..................................................40 4 LD individualios užduotys ...................................................41 4 LD sprendimo pavyzdžiai.....................................................43 Nurodymai ataskaitai...............................................................47 Ataskaitos pavyzdys ................................................................48

4

1 LABORATORINIS DARBAS (1 LD)

Darbo tikslas – išmokti dirbti su rodyklėmis, bei kurti klases. Bendra užduotis – pagal individualią užduotį parašyti

programą, kuri turėtų: 1. duomenų nuskaitymo klasę (1 balas); 2. rezultatų spausdinimo į ekraną klasę (1 balas); 3. skaičiavimo klasę/metodą (2 balai); 4. išsamų dialogą su vartotoju (1 balas);

už parašytą ataskaitą (5 balai); Parašykite ataskaitą Parašytą ir atspausdintą ataskaitą pateikite

ginantis darbą. Reikalavimai ataskaitai: Titulinis puslapis (0,5 balo);

1. Darbo tikslas (0,5 balo); 2. Užduotis (0,5 balo); 3. Užduoties analizė (0,5 balo); 4. Pradiniai duomenys (1 balas); 5. Sprendimo būdas (5 balai):

5.1. Klasių pavadinimai; 5.2. Klasių aprašymai; 5.3. Kintamųjų aprašymai; 5.4. Veikimo principai; 5.5. Jų pateikiami rezultatai;

6. Galutiniai rezultatai (1 balas); 7. Programos kodas (1 balas);

5

1 LD SPRENDIMO PAVYZDŽIAI

Įvedimo/išvedimo pavyzdys:

#include <iostream>

using namespace std;

int main ()

{

int i;

cout << "Iveskite sveikaji skaiciu: ";

cin >> i;

cout << "Jus idvedete " << i;

cout << "\n pakelus kvadratu gaisim " << i*i;

return 0;

}

Atsakymas: Iveskite sveikaji skaiciu: 2

Jus idvedete 2

pakelus kvadratu gaisim 4

Teksto įvedimo/išvedimo pavyzdys:

#include <iostream>

#include <string>

using namespace std;

int main ()

{

string mystr;

cout << "What's your name? ";

getline (cin, mystr);

cout << "Hello " << mystr << ".\n";

cout << "What is your favorite team? ";

getline (cin, mystr);

cout << "I like " << mystr << " too!\n";

return 0;

}

6

Atsakymas: What's your name? Vardenis

Hello Vardenis.

What is your favorite team? Stream

I like Stresam too!

Klasės ir jos metodų aprašymo pavyzdys:

#include <iostream> // input/output biblioteka using namespace std;

class CRectangle // ploto skaičiavimo klasė { int x, y;

public:

// metodo iškvietimas kintamųjų reikšmėms inicijuoti void set_values (int,int);

// metodo iškvietimas keturkampio plotui skaičiuoti int area() {return (x*y);}

};

// metodo, inicijuojančio pradines kintamųjų reikšmes, aprašymas void CRectangle::set_values (int a, int b)

{ x = a; y = b; }

// programos paleidimo metodas int main ()

{ // ploto skaičiavimo metodo inicializavimas CRectangle rect;

// pradinių reikšmių proskyrimas rect.set_values (3,4);

// rezultatų išvedimas į ekraną cout << "Keturkampio plotas = " << rect.area();

return 0;

}

Atsakymas: Keturkampio plotas = 12

7

1 LD INDIVIDUALIOS UŽDUOTYS

1 Parašykite programą, kuri suskaičiuotų reiškinį: a2

+sinα=S.

a ir α įveda vartotojas.

2 Parašykite programą, kuri suskaičiuotų reiškinį: 2πR(R+H)=S. R ir H įveda vartotojas.

3 Parašykite programą, kuri suskaičiuotų reiškinį: π(R+r)L+

πR2+πr

2=S. R, r ir L įveda vartotojas.

4 Parašykite programą, kuri suskaičiuotų reiškinį: 1/3πH(R

2+

r2+Rr)=V. R, r ir H įveda vartotojas.

5 Parašykite programą, kuri suskaičiuotų reiškinį: 4/3πR

3=V. R

įveda vartotojas.

6 Parašykite programą, kuri suskaičiuotų reiškinį: cosα + cosβ

= 2cos* ½ (α+β)*cos½(α-β). α ir β įveda vartotojas.

7 Parašykite programą, kuri suskaičiuotų reiškinį: a2

+b2=c

2. a,

b įveda vartotojas.

8 Parašykite programą, kuri suskaičiuotų reiškinį: sinα+sinβ=

2sin½(α+β)*cos ½(α-β). α ir β įveda vartotojas.

9 Parašykite programą, kuri suskaičiuotų reiškinį: tgα+tgβ=

(sin(α+β))/(cosα*cosβ). α ir β įveda vartotojas.

10 Parašykite programą, kuri suskaičiuotų reiškinį: ctgα+ctgβ=

(sin(α+β))/(sinα*sinβ). α ir β įveda vartotojas.

11 Parašykite programą, kuri suskaičiuotų reiškinį: ctgα*ctgβ=

(sin(β-α))/(sinα*sinβ). α ir β įveda vartotojas.

12 Parašykite programą, kuri suskaičiuotų reiškinį: sinα*sinβ=

½(cos(α-β)-cos(α+β)). α ir β įveda vartotojas.

13 Parašykite programą, kuri suskaičiuotų reiškinį: cosα*cosβ=

½(cos(α+β)+cos(α-β)). α ir β įveda vartotojas.

14 Parašykite programą, kuri suskaičiuotų reiškinį: sinα *cosβ=

½(sin(α + β)+sin(α - β)). α ir β įveda vartotojas.

15 Parašykite programą, kuri suskaičiuotų reiškinį: cosα*cosβ=

½(cos(α+β)+cos(α-β)). α ir β įveda vartotojas. 16 Parašykite programą, kuri suskaičiuotų reiškinį: ctgα*ctgβ=

8

(sin(β-α))/(sinα*sinβ). α ir β įveda vartotojas.

17 Parašykite programą, kuri suskaičiuotų reiškinį: sinα*sinβ=

½(cos(α-β)-cos(α+β)). α ir β įveda vartotojas.

18 Parašykite programą, kuri suskaičiuotų reiškinį: sinα *cosβ=

½(sin(α + β)+sin(α - β)) .. α ir β įveda vartotojas.

19 Parašykite programą, kuri suskaičiuotų reiškinį: ctgα+ctgβ=

(sin(α+β))/(sinα*sinβ). α ir β įveda vartotojas.

20 Parašykite programą, kuri suskaičiuotų reiškinį: tgα-tgβ=

(sin(α-β))/(cosα*cosβ). α ir β įveda vartotojas.

21 Parašykite programą, kuri suskaičiuotų reiškinį: sinα+sin=

2sin½(α+β)*cos½(α-β). α ir β įveda vartotojas.

22 Parašykite programą, kuri suskaičiuotų reiškinį: a2

+b2=c

2. a,

b įveda vartotojas.

23 Parašykite programą, kuri suskaičiuotų reiškinį: cosα + cosβ

= 2cos*1/2(α+β)*cos1/2(α-β). α ir β įveda vartotojas.

24 Parašykite programą, kuri suskaičiuotų reiškinį: 4/3πR

3=V. R

įveda vartotojas.

25 Parašykite programą, kuri suskaičiuotų reiškinį: 1/3πH(R

2+

r2+Rr)=V. R, r ir H įveda vartotojas.

26 Parašykite programą, kuri suskaičiuotų reiškinį: π(R+r)L+

πR2+πr

2=S. R, r ir L įveda vartotojas.

27 Parašykite programą, kuri suskaičiuotų reiškinį: 2πR(R+

H)=S. R ir H įveda vartotojas.

28 Parašykite programą, kuri suskaičiuotų reiškinį: a

2+sinα=S.

a ir α įveda vartotojas.

29 Parašykite programą, kuri suskaičiuotų reiškinį: 1/3πH(R

2+

r2+Rr)=V. R, r ir H įveda vartotojas.

30 Parašykite programą, kuri suskaičiuotų reiškinį: 4/3πR

3=V. R

įveda vartotojas.

31 Parašykite programą, kuri suskaičiuotų reiškinį: sinα-sin=

2sin½(α-β)*cos½(α+β). α ir β įveda vartotojas.

32 Parašykite programą, kuri suskaičiuotų reiškinį: sinα-sinβ=

2sin½(α-β)*cos½(α+β). α ir β įveda vartotojas.

9

33 Parašykite programą, kuri suskaičiuotų reiškinį: ctgα+ctgβ=

(sin(α+β))/(sinα*sinβ). α ir β įveda vartotojas.

34 Parašykite programą, kuri suskaičiuotų reiškinį: sinα *cosβ=

½(sin(α + β)+sin(α - β)). α ir β įveda vartotojas.

35 Parašykite programą, kuri suskaičiuotų reiškinį: tgα+tgβ=

(sin(α+β))/(cosα*cosβ). α ir β įveda vartotojas.

10

2 LABORATORINIS DARBAS (2 LD)

Darbo tikslas – panaudojant dinaminius masyvus išmokti manipuliuoti klasėmis.

Bendra užduotis – pagal individualią užduotį parašyti programą, kuri turėtų:

1. duomenų nuskaitymą iš failo (1 balas); 2. dinaminio masyvo objektą (su skirtingų tipų

duomenimis) (0,5 balo); 3. konstruktorių ir destruktorių (0,5 balo); 4. abstrakčiąją klasę (1 balas); 5. vieną ir daugiau paveldėjimų (1 balai); 6. suprogramuotą funkcijų perkrovimą (1 balas); 7. išsamų dialogą su vartotoju (0,5 balo); 8. išsamius programos komentarus (0,5 balo);

Klasėse duomenys turi būti inkapsuliuojami t.y. private arba

protected, o funkcijos – public. Likusią pažymio dalį (4 balus) sudarys parašyta ataskaita.

Parašykite ataskaitą. Parašytą ir atspausdintą ataskaitą pateikite ginantis darbą. Reikalavimai ataskaitai:

Titulinis puslapis (0,5 balo); 1. Darbo tikslas (0,5 balo); 2. Užduotis (0,5 balo); 3. Užduoties analizė (0,5 balo); 4. Pradiniai duomenys (1 balas); 5. Sprendimo būdas (5 balai):

5.1. Klasių pavadinimai; 5.2. Klasių aprašymai; 5.3. Kintamųjų aprašymai; 5.4. Veikimo principai; 5.5. Jų pateikiami rezultatai;

6. Galutiniai rezultatai (1 balas); 7. Programos kodas (1 balas);

11

2 LD SPRENDIMO PAVYZDŽIAI

Duomenų nuskaitymo iš failo pavyzdys:

#include <fstream.h>

int main()

{ char str[2000];

fstream file_op("c:\\file.txt",ios::in);

while(!file_op.eof())

{ file_op.getline(str,2000);

cout <<str; }

file_op.close();

cout <<endl;

return 0;

}

Duomenų rašymo į failą pavyzdys:

#include <fstream.h>

int main()

{ fstream file_op("c:\\ file.txt",ios::out);

file_op<<"Rasymas i faila";

file_op.close();

return 0;

}

Dinaminio masyvo pavyzdys:

#include <iostream>

#include <string>

#include <sstream>

using namespace std;

#define N_MOVIES 3

// dinaminio masyvo struktūra struct movies_t

{ string title;

int year;

} films [N_MOVIES];

12

void printmovie (movies_t movie);

int main ()

{ string mystr;

int n;

// dinaminio masyvo pildymas iš klaviatūros for (n=0; n<N_MOVIES; n++)

{ cout << "Koks pavadinimas: ";

getline (cin,films[n].title);

cout << "Kurie metai: ";

getline (cin,mystr);

stringstream(mystr) >> films[n].year; }

// dinaminio masyvo spausdinimo metodo iškvietimas cout << "\nBuvo ivesti tokie filmai:\n";

for (n=0; n<N_MOVIES; n++)

printmovie (films[n]);

return 0;

}

// dinaminio masyvo spausdinimo metodas void printmovie (movies_t movie)

{ cout << movie.title;

cout << " (" << movie.year << ")\n";}

Atsakymas: Koks pavadinimas: Blade Runner

Kurie metai: 1982

Koks pavadinimas: Matrix

Kurie metai: 1999

Koks pavadinimas: Taxi Driver

Kurie metai: 1976

Buvo ivesti tokie filmai:

Blade Runner (1982)

Matrix (1999)

Taxi Driver (1976)

13

Abstrakčiosios klasės pavyzdys:

#include <iostream>

using namespace std;

// abstrakčioji klasė class CPolygon {

protected:

int width, height;

public:

void set_values (int a, int b)

{ width=a; height=b; }

virtual int area (void) =0;

void printarea (void)

{ cout << this->area() << endl; };

// keturkampio ploto skaičiavimo klasė naudojanti abstrakčiąją class CRectangle: public CPolygon {

public:

int area (void)

{ return (width * height); }

};

// trikampio ploto skaičiavimo klasė naudojanti abstrakčiąją class CTriangle: public CPolygon {

public:

int area (void)

{ return (width * height / 2); }

};

int main () {

CPolygon * ppoly1 = new CRectangle;

CPolygon * ppoly2 = new CTriangle;

ppoly1->set_values (4,5);

ppoly2->set_values (4,5);

ppoly1->printarea(); ppoly2->printarea();

delete ppoly1; delete ppoly2;

return 0;

}

Atsakymas: 20

10

14

Funkcijų perkrovimo pavyzdys:

#include <iostream>

using namespace std;

// skaičiavimų klasė su dviem vienodais metodų aprašais class CRectangle {

int width, height;

public:

CRectangle ();

CRectangle (int,int);

int area (void) {return (width*height);}

};

//pirmojo metodo perkrovimas CRectangle::CRectangle () {

width = 5;

height = 5;

}

//antrojo metodo perkrovimas CRectangle::CRectangle (int a, int b) {

width = a;

height = b;

}

int main () {

CRectangle rect (3,4);

CRectangle rectb;

cout << "4-kampio1 plotas = " << rect.area();

cout << "\n4-kampio2 plotas = " << rectb.area();

return 0;

}

Atsakymas: rect area: 12

rectb area: 25

15

Paveldėjimo pavyzdys:

#include <iostream>

using namespace std;

class CPolygon {

protected:

int width, height;

public:

void set_values (int a, int b)

{ width=a; height=b;}

};

// paveldi CPolygon klasę class CRectangle: public CPolygon {

public:

int area ()

{ return (width * height); }

};

// paveldi CPolygon klasę class CTriangle: public CPolygon {

public:

int area ()

{ return (width * height / 2); }

};

int main () {

CRectangle rect;

CTriangle trgl;

rect.set_values (4,5);

trgl.set_values (4,5);

cout << rect.area() << endl;

cout << trgl.area() << endl;

return 0;

}

Atsakymas: 20

10

16

2 LD INDIVIDUALIOS UŽDUOTYS

1

Parašyti programą „adresų knygutė“. Visa informacija nuskaitoma iš failo. Turi būti:

1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, miestas, tel.nr; 3. Vienodame mieste gyvenančių asmenų radimą; 4. Paieška pagal vardą, pavardę ir tel.nr.; 5. Įrašų papildymas ir panaikinimas.

2

Parašyti programą „studentų grupė“. Visa informacija nuskaitoma iš failo. Turi būti realizuota: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, pažymį, vidurkį; 3. Geriausio ir blogiausio studento radimas; 4. Rikiavimas pagal vidurkius, vidurkį ir pavardes; 5. Įrašų papildymas ir panaikinimas.

3

Parašyti programą „sportininkų komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, ūgį, svorį; 3. Suskaičiuotų vidutinį ūgį; 4. Surikiuotų sportininkus pagal pavardę, svorį ir ūgį; 5. Įrašų papildymas ir panaikinimas.

4

Parašyti programą „ralio lenktynės“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal automobilio markę, modelį, variklio tūrį,

maksimalų greitį; 3. Suskaičiuotų visų automobilių variklių tūrį; 4. Surikiuotų automobilius pagal markę, modelį ir

maksimalų greitį; 5. Įrašų papildymas ir panaikinimas.

17

5

Parašyti programą „slidinėjimo komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal sportininko šalį, vardą, pavardę, ūgį, svorį; 3. Suskaičiuotų visų sportininkų vidutinį amžių, svorį ir ūgį; 4. Surikiuotų žemesnius nei vidutinis ūgis sportininkus

pagal šalį, pavardę ir amžių; 5. Įrašų papildymas ir panaikinimas.

6

Parašyti programą „kačių paroda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal katės vardą, veislę, lytį, amžių, svorį; 3. Suskaičiuotų visų kačių vidutinį svorį ir amžių; 4. Surikiuotų kates, lengvesnes nei vidutinis svoris pagal

vardą, veislę ir amžių; 5. Įrašų papildymas ir panaikinimas.

7

Parašyti programą „plaukimo komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal sportininko vardą, pavardę, lytį, ūgį, svorį,

plaukimo greitį; 3. Suskaičiuotų visų pasirinktos lyties sportininkų vidutinį

plaukimo greitį ir svorį; 4. Surikiuotų lėtesnius nei vidutinis greitis sportininkus

pagal vardą, pavardę ir ūgį; 5. Įrašų papildymas ir panaikinimas.

8

Parašyti programą „šunų lenktynės“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal šuns vardą, ūgį, svorį, šeimininko pavardę; 3. Suskaičiuotų šunų vidutinį bėgimo greitį, ūgį ir svorį; 4. Surikiuotų lėtesnius nei vidutinis greitis šunis pagal

šeimininko pavardę, vardą ir svorį; 5. Įrašų papildymas ir panaikinimas.

18

9

Parašyti programą „studentų grupė“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, miestą, ūgį, pažymį; 3. Aukštesnių studentų nei vidutinis radimas; 4. Rikiavimas pagal ūgį, miestą ir pažymių vidurkius; 5. Įrašų papildymas ir panaikinimas.

10

Parašyti programą „plaukimo komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal sportininko vardą, pavardę, amžių, ūgį,

svorį, plaukimo greitį; 3. Suskaičiuotų sportininkų vidutinį plaukimo greitį, amžių,

ūgį ir svorį; 4. Surikiuotų visus senesnius nei vidutinis amžius

sportininkus pagal vardą, ūgį ir amžių; 5. Įrašų papildymas ir panaikinimas.

11

Parašyti programą „adresų knygutė“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, miestą, lytį, tel.nr; 3. Išvestų pasirinktos lyties asmenis; 4. Išrikiuotų sąrašą pagal miestą, lytį ir pavardę; 5. Įrašų papildymas ir panaikinimas.

12

Parašyti programą „prekių sandėlys“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal gamintojo pavadinimą, prekės pavadinimą,

kainą, pagaminimo datą; 3. Suskaičiuotų vidutinį vienodo gamintojo prekės kainą ir

svorį; 4. Surikiuotų pasirinkto gamintojo prekes pagal pavadinimą,

pagaminimo datą ir kainą; 5. Įrašų papildymas ir panaikinimas.

19

13

Parašyti programą „knygynas“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal autorių, pavadinimą, leidimo metus, tiražą; 3. Suskaičiuotų vidutinį pasirinktų leidimo metų knygų

kainą ir tiražą; 4. Surikiuotų pasirinkto autoriaus knygas pagal pavadinimą,

leidimo metus ir kainą; 5. Įrašų papildymas ir panaikinimas.

14

Parašyti programą „kačių paroda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal katės vardą, veislę, amžių, svorį, charakterį; 3. Suskaičiuotų visų kačių vidutinį svorį ir amžių; 4. Surikiuotų pasirinkto charakterio kates pagal svorį, veislę

ir vardą; 5. Įrašų papildymas ir panaikinimas.

15

Parašyti programą „slidinėjimo komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal sportininko šalį, pavardę, lytį, svorį, amžių; 3. Suskaičiuotų visų pasirinktos lyties sportininkų vidutinį

svorį ir ūgį; 4. Surikiuotų sunkesnius nei vidutinis ūgis sportininkus

pagal pavardę, šalį ir amžių; 5. Įrašų papildymas ir panaikinimas.

16

Parašyti programą „ralio lenktynės“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal komandos pavadinimą, automobilio markę,

modelį, svorį, vidutinį greitį; 3. Suskaičiuotų automobilių vidutinį svorį ir greitį; 4. Surikiuotų komandos automobilius greitį, svorį ir modelį; 5. Įrašų papildymas ir panaikinimas.

20

17

Parašyti programą „prekių sandėlys“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal gamintojo pavadinimą, prekės pavadinimą,

kategoriją, kainą ir svorį; 3. Suskaičiuotų vidutinį vienodo gamintojo prekės kainą,

galiojimo laiką ir svorį; 4. Surikiuotų pasirinktos kategorijos prekes pagal

pavadinimą, kainą ir svorį; 5. Įrašų papildymas ir panaikinimas.

18

Parašyti programą „šunų lenktynės“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal šuns vardą, veislę, ūgį, svorį, charakterį; 3. Suskaičiuotų visų šunų vidutinį bėgimo greitį, ūgį,

pasirinktos veislės kiekį ir svorį; 4. Surikiuotų greitesnius nei vidutinis greitis šunis pagal

vardą, veislę ir svorį; 5. Įrašų papildymas ir panaikinimas.

19

Parašyti programą „sportininkų komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal pavardę, ūgį, svorį, lytį; 3. Suskaičiuotų vidutinį vyrų ir moterų ūgį; 4. Surikiuotų pasirinktos lyties sportininkus pagal pavardę,

lytį ir svorį; 5. Įrašų papildymas ir panaikinimas.

20

Parašyti programą „knygynas“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal autorių, pavadinimą, leidimo metus, kainą,

puslapių skaičių ir tiražą; 3. Suskaičiuotų vidutinį pasirinktos kainos knygų puslapių

skaičių ir tiražą;

21

4. Surikiuotų pasirinktų leidimo metų knygas pagal autorių, pavadinimą, puslapių skaičių;

5. Įrašų papildymas ir panaikinimas.

21

Parašyti programą „plaukimo komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal sportininko vardą, pavardę, amžių, ūgį,

svorį, plaukimo greitį; 3. Suskaičiuotų sportininkų plaukimo greitį, amžių, svorį; 4. Surikiuotų visus lėtesnius nei vidutinis greitis

sportininkus pagal vardą, pavardę ir svorį; 5. Įrašų papildymas ir panaikinimas.

22

Parašyti programą „studentų grupė“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, miestą, ūgį, pažymį; 3. Aukštesnių studentų nei vidutinis radimas; 4. Rikiavimas pagal ūgį, pavardę ir pažymių vidurkius; 5. Įrašų papildymas ir panaikinimas.

23

Parašyti programą „šunų lenktynės“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal šuns vardą, ūgį, svorį, šeimininko pavardę; 3. Suskaičiuotų šunų vidutinį bėgimo greitį, ūgį ir svorį; 4. Surikiuotų lėtesnius nei vidutinis greitis šunis pagal

šeimininko pavardę, vardą, greitį; 5. Įrašų papildymas ir panaikinimas.

24

Parašyti programą „plaukimo komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal sportininko vardą, pavardę, lytį, ūgį, svorį,

plaukimo greitį; 3. Suskaičiuotų visų pasirinktos lyties sportininkų vidutinį

plaukimo greitį ir svorį;

22

4. Surikiuotų lėtesnius nei vidutinis greitis sportininkus pagal vardą, pavardę ir ūgį;

5. Įrašų papildymas ir panaikinimas.

25

Parašyti programą „kačių paroda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal katės vardą, veislę, lytį, amžių, svorį; 3. Suskaičiuotų visų kačių vidutinį svorį ir amžių; 4. Surikiuotų kates, sunkesnes nei vidutinis svoris, pagal

vardą, veislę ir amžių; 5. Įrašų papildymas ir panaikinimas.

26

Parašyti programą „slidinėjimo komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal sportininko šalį, vardą, ūgį, svorį, amžių; 3. Suskaičiuotų visų sportininkų vidutinį amžių, svorį ir ūgį; 4. Surikiuotų žemesnius nei vidutinis ūgis sportininkus

pagal šalį, pavardę ir amžių; 5. Įrašų papildymas ir panaikinimas.

27

Parašyti programą „ralio lenktynės“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal automobilio markę, modelį, variklio tūrį,

maksimalų greitį; 3. Suskaičiuotų visų automobilių variklių tūrį; 4. Surikiuotų automobilius pagal markę, modelį, tūrį; 5. Įrašų papildymas ir panaikinimas.

28

Parašyti programą „sportininkų komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, ūgį, svorį; 3. Suskaičiuotų vidutinį ūgį; 4. Surikiuotų sportininkus pagal svorį, pavardę ir ūgį; 5. Įrašų papildymas ir panaikinimas.

23

29

Parašyti programą „studentų grupė“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, pažymį, vidurkį; 3. Geriausio ir blogiausio studento radimas; 4. Rikiavimas pagal vidurkius ir pavardes; 5. Įrašų papildymas ir panaikinimas.

30

Parašyti programą „adresų knygutė“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, miestas, tel.nr; 3. Vienodame mieste gyvenančių asmenų radimą; 4. Paieška pagal vardą, pavardę ir tel.nr.; 5. Įrašų papildymas ir panaikinimas.

31

Parašyti programą „knygynas“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal autorių, pavadinimą, leidimo metus, kainą,

puslapių skaičių ir tiražą; 3. Suskaičiuotų vidutinį pasirinktos kainos knygų puslapių

skaičių ir tiražą; 4. Surikiuotų pasirinktų leidimo metų knygas pagal autorių,

pavadinimą ir tiražą; 5. Įrašų papildymas ir panaikinimas.

32

Parašyti programą „sportininkų komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal pavardę, ūgį, svorį, lytį; 3. Suskaičiuotų vidutinį vyrų ir moterų ūgį; 4. Surikiuotų pasirinktos lyties sportininkus pagal pavardę,

ūgį ir svorį; 5. Įrašų papildymas ir panaikinimas.

24

33

Parašyti programą „prekių sandėlys“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal gamintojo pavadinimą, prekės pavadinimą,

kategoriją, kainą, svorį; 3. Suskaičiuotų vidutinį vienodo gamintojo prekės kainą,

galiojimo laiką ir svorį; 4. Surikiuotų pasirinktos kategorijos prekes pagal

pavadinimą, kainą svorį; 5. Įrašų papildymas ir panaikinimas.

34

Parašyti programą „šunų lenktynės“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal šuns vardą, ūgį, svorį, bėgimo greitį ir

šeimininko pavardę; 3. Suskaičiuotų šunų vidutinį bėgimo greitį, ūgį ir svorį; 4. Surikiuotų greitesnius nei vidutinis greitis šunis pagal

vardą, svorį ir svorį; 5. Įrašų papildymas ir panaikinimas.

35

Parašyti programą „sportininkų komanda“. Visa informacija nuskaitoma iš failo. Turi būti: 1. Įrašų peržiūra ekrane; 2. Paieška pagal vardą, pavardę, ūgį, svorį; 3. Suskaičiuotų vidutinį ūgį; 4. Surikiuotų, aukštesnius nei vidutinis ūgis, sportininkus

pagal vardą, pavardę ir svorį; 5. Įrašų papildymas ir panaikinimas.

25

3 LABORATORINIS DARBAS (3 LD)

Darbo tikslas – išmokti dirbti su duomenų ir rezultatų failais. Bendra užduotis – pagal individualią užduotį parašyti

programą, kurioje būtų: 1. realizuota duomenų iš failo nuskaitymo klasė, rezultatų į

failą rašymo klasė ir spausdinimo į ekraną klasė (1 balas);

2. realizuotas rikiavimo algoritmas (1 balas); 3. realizuota reikiamų duomenų skaičiavimo klasė (1

balas); 4. išsamus dialogas su vartotoju (1, balas); 5. realizuota rekursija (2 balai);

parašyta ataskaita (4 balai);

Parašykite ataskaitą. Parašykite ir atspausdintą ataskaitą pateikite ginantis darbą. Reikalavimai ataskaitai:

Titulinis puslapis (0,5 balo); 1. Darbo tikslas (0,5 balo); 2. Užduotis (0,5 balo); 3. Užduoties analizė (0,5 balo); 4. Pradiniai duomenys (1 balas); 5. Sprendimo būdas (5 balai):

5.1. Klasių pavadinimai; 5.2. Klasių aprašymai; 5.3. Kintamųjų aprašymai; 5.4. Veikimo principai; 5.5. Jų pateikiami rezultatai;

6. Galutiniai rezultatai (1 balas); 7. Programos kodas (1 balas);

26

3 LD SPRENDIMO PAVYZDŽIAI

Rikiavimo algoritmo pavyzdys (skaičiams):

:

// sveikų masyvo skaičių rikiavimas mažėjimo tvarka for(int x=0; x<n; x++)

{

for(int y=0; y<n-1; y++)

{

if(array[y]>array[y+1])

{

int temp = array[y+1];

array[y+1] = array[y];

array[y] = temp;

}

}

}

:

Rekursijos skaičiavimo metodo pavyzdys:

:

// rekursinė versija int faktr(int n)

{ int f;

if(n==1) return 1;

f = faktr(n-1)*n; // rekursinis iškvietimas return f;}

:

:

// iteracinė versija int fakt(int n)

{ int f;

f = 1;

for(int i=1;i<=n;i++) f *= i;

return f;}

:

27

Paieškos funkcijos pavyzdys:

bool jw_search ( int *list, int size, int key,

int*& rec )

{ bool found = false;

int i;

for ( i = 0; i < size; i++ )

{ if ( key == list[i] )

break; }

if ( i < size )

{ found = true;

rec = &list[i]; }

return found;

}

28

3 LD INDIVIDUALIOS UŽDUOTYS

1

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „%“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite kuris simbolis kiekvienoje eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n) kartų. Surikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Sudauginkite vartotojo pasirinktos eilutės daugiausia besikartojančių simbolių kiekį (d) su visų simbolių toje eilutėje kiekiu. Gautą skaičių padalinkite iš rečiausia besikartojančių simbolių skaičiaus (n). Raskite gautojo skaičiaus (a) dvigubą faktorialą: a!!=1*3*5*…*a, kai a yra nelyginis, o a!!=2*4*6*…*a, kai a yra lyginis. Faktorialo radimui naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

2

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „z“. Susumuokite kiekvienos eilutės skaičius. Surikiuokite kiekvieną eilutę didėjančia tvarka, o eilutes – pagal didėjančias sumas (eilutė, turinti mažiausią sumą turi būti pirma, o didžiausią sumą – paskutinė). Suskaičiuokite vartotojo pasirinktos eilutės sumos (n) skaičiaus dvigubą faktorialą: n!!=1*3*5*…*n, kai n yra nelyginis, o n!!=2*4*6*…*n, kai n yra lyginis. Faktorialui skaičiuoti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

3

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „%“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite kuris simbolis eilutėje kartojasi mažiausia

29

(d), ir kuris daugiausia (n). Surikiuokite kiekvienos eilutės duomenis nuo ilgiausio žodžio iki trumpiausio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Susumuokite kiekvienos eilutės visus daugiausia besikartojančių simbolių kiekį (n) su rečiausia besikartojančių simbolių kiekiu (d). Raskite gautojo skaičiaus faktorialą: a!=a*(a-1)!, o (0)!=1. Faktorialo radimui skaičiuoti naudokite rekursines funkcijas. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

4

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „;“. Suskaičiuokite kiekvienos eilutės sumą (n) ir padauginkite iš einamosios eilutes skaitmenų skaičiaus (d). Surikiuokite kiekvienos eilutės skaičius mažėjančia tvarka, o eilutes nuo gautos didžiausios sandaugos iki mažiausios. Raskite vartotojo pasirinktos eilutės aritmetinės progresijos n-tąjį narį pagal formulę an=an-1+d, kur a1=1. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

5

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „#“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis kiekvienoje eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n) kartų. Surikiuokite kiekvienos eilutės duomenis nuo ilgiausio žodžio iki trumpiausio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Suskaičiuokite vartotojo pasirinktos eilutės aritmetin4s progresijos n-tąjį narį pagal formulę an=an-1+d, kur a1=1. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

6 Duomenų faile duota atsitiktinės skaičių sekų eilutės

(eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis

30

yra „.“. Suskaičiuokite kiekvienos eilutės skaitmenų sumą (n) ir pridėkite eilutės skaitmenų skaičių (d). Surikiuokite kiekvienos eilutės duomenis didėjančia tvarka. Suskai-čiuokite vartotojo pasirinktos eilutės skaičių a: an=an-1*d. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

7

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „!“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite kuris simbolis eilutėje kartojasi mažiausia kartų. Surikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio žodžio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Suskaičiuokite vartotojo pasirinktos eilutės simbolių skaičių (n), padauginkite iš mažiausia pasi-kartojančių simbolių kaičiaus (a). Raskite sandaugos geo-metrinės progresijos n-tąjį narį: an=an-1*q. Čia q – visų žodžių kiekis. Geometrinės progresijos n-tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

8

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „x“. Surikiuokite kas antrą eilutę mažėjančia ir didėjančia tvarkomis. Suskaičiuokite kiekvienos eilutės skaičių sumą (n). Raskite sandaugos geometrinės progresijos n-tąjį narį: an=an-1*q. Čia q – visų žodžių kiekis. Geometrinės progresijos n-tojo nario radimui naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

9

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „0“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis kiekvienoje eilutėje kartojasi daugiausia kartų. Surikiuokite kas antrą eilutę mažėjančia ir

31

didėjančia tvarkomis (1,3,5,7,9,... eilutės didėjančiai, o 2,4,6,8,10,... – mažėjančiai). Raskite vartotojo pasirinktos eilutės simbolių skaičių (d) ir dažniausiai besikartojančių simbolių skaičių šioje eilutėje (n) ir suskaičiuokite n-tąjį narį pagal formulę: an=an-1-d. n-tojo nario radimui naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

10

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „*“. Surikiuokite kas antrą eilutę didėjančia ir mažėjančia tvarkomis (1,3,5,7,9,... eilutės didėjančiai, o 2,4,6,8,10,... – mažėjančiai). Susumuokite kiekvienos eilutės skaičius. Suskaičiuokite vartotojo pasirinktos eilutės sumos (n) skaičiaus faktorialą: n!=n*(n-1)!, o (0)! = 1. Faktorialui skaičiuoti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

11

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „*“. Surikiuokite kas antrą eilutę didėjančia ir mažėjančia tvarkomis (1,3,5,7,9,... eilutės didėjančiai, o 2,4,6,8,10,... – mažėjančiai). Susumuokite kiekvienos eilutės skaičius. Suskaičiuokite vartotojo pasirinktos eilutės sumos (n) skaičiaus faktorialą: n!=n*(n-1)!, o (0)! = 1. Faktorialui skaičiuoti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

12

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „0“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite kuris simbolis kiekvienoje eilutėje kartojasi daugiausia kartų. Surikiuokite kas antrą eilutę mažėjančia ir didėjančia tvarkomis (1,3,5,7,9,... eilutės didėjančiai, o 2,4,6,8,10,... – mažėjančiai). Raskite vartotojo pasirinktos

32

eilutės simbolių skaičių (d) ir dažniausiai besikartojančių simbolių skaičių šioje eilutėje (n) ir suskaičiuokite n-tąjį narį pagal formulę: an=an-1-d. n-tojo nario radimui naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

13

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „x“. Surikiuokite kas antrą eilutę mažėjančia ir didėjančia tvarkomis (1,3,5,7,9,... eilutės mažėjančiai, o 2,4,6,8,10,... – didėjančiai). Suskaičiuokite kiekvienos eilutės skaičių sumą (n). Suskaičiuokite vartotojo pasirinktos eilutės geometrinę progresiją: an=an-1*q. Čia q yra eilutės skaitmenų skaičius. Geometrinei progresijai skaičiuoti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

14

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „!“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite kuris simbolis eilutėje kartojasi mažiausia kartų. Surikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio žodžio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Suskaičiuokite vartotojo pasirinktos eilutės simbolių skaičių (n). Raskite sandaugos geometrinės progresijos n-tąjį narį: an=an-1*q. Čia q – visų žodžių kiekis eilutėje. Geometrinės progresijos n-tajam nariui rasti naudo-kite rekursinę funkciją. Pradinius duomenis, tarpinius veiks-mus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

15

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Surikiuokite kas antrą eilutę mažėjančia ir didėjančia tvarkomis (1,3,5,7,9,... eilutės mažėjančiai, o 2,4,6,8,10,... – didėjančiai). Raskite vartotojo pasirinktos eilutės simbolių skaičių (d) ir dažniausiai besikartojančių simbolių skaičių šioje eilutėje (n) ir suskaičiuokite n-tąjį narį pagal formulę: an=an-1-d. n-tojo

33

nario radimui naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

16

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „#“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite kuris simbolis kiekvienoje eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n) kartų. Surikiuokite kiekvienos eilutės duomenis nuo ilgiausio žodžio iki trum-piausio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Suskaičiuokite vartotojo pasirinktos eilutės n-tąjį narį pagal formulę an=an-1+d, kur a1=1. n - tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

17

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „;“. Suskaičiuokite kiekvienos eilutės sumą (n) ir padalinkite iš einamosios eilutės skaitmenų skaičiaus (d). Surikiuokite kiekvienos eilutės skaičius mažėjančia tvarka, o eilutes nuo didžiausio dalmens iki mažiausio. Suskaičiuokite vartotojo pasirinktos eilutės an-tąjį narį pagal formulę an= an-1+d, kur a1=1. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

18

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „%“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n). Surikiuokite kiekvienos eilutės duomenis nuo ilgiausio žodžio iki trumpiausio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Sudauginkite kiekvienos eilutės daugiausia visus besikartojančius simbolius (n) su rečiausia besikartojančiais simboliais (d). Raskite vartotojo pasirinktos eilutės gautos sandaugos

34

faktorialą: a!=a*(a-1)!, o (0)!=1. Faktorialo radimui naudoki-te rekursines funkcijas. Pradinius duomenis, tarpinius veiks-mus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

19

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „z“. Susumuokite kiekvienos eilutės skaičius. Surikiuokite kiekvieną eilutę didėjančia tvarka, o eilutes - didėjančiomis suomis. Suskaičiuokite vartotojo pasirinktos eilutės sumos (n) skaičiaus dvigubą faktorialą: n!!=1*3*5*…*n, kai n yra nelyginis, o n!!=2*4*6*…*n, kai n yra lyginis. Faktorialui skaičiuoti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

20

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „%“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis kiekvienoje eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n) kartų. Surikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio (simbolių rinkinys iki tarpo skaitomas kaip žodis). Sudauginkite vartotojo pasirinktos eilutės daugiausia besikartojančių simbolių kiekį (n) su visų simbolių toje eilutėje kiekiu. Gautą skaičių padalinkite iš mažiausia besikartojančių simbolių skaičiaus (d). Raskite gautojo skaičiaus dvigubą faktorialą: a!!=1*3*5*…*a, kai a yra nelyginis, o a!!=2*4*6*…*a, kai a yra lyginis. Faktorialo radimui naudokite rekursines funkcijas. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

21

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „.“. Suskaičiuokite kiekvienos eilutės skaitmenų sandaugą (n) ir padalinkite iš einamos eilutės skaitmenų skaičiaus (d). Surikiuokite kiekvienos eilutės skaičius mažė-

35

jančia tvarka, o eilutes nuo didžiausio dalmens iki mažiausio. Suskaičiuokite vartotojo pasirinktos eilutės an-tąjį narį pagal formulę an=an-1+d, kur a1=1. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

22

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „!“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis eilutėje kartojasi mažiausia kartų. Surikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio žodžio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Suskaičiuokite vartotojo pasirinktos eilutės simbolių skaičių (n). Raskite sandaugos geometrinės progresijos an-tąjį narį: an=an-1*q. Čia q – visų žodžių kiekis. Geometrinės progresijos n-tojo nario radimui naudokite rekursines funkcijas. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

23

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „x“. Surikiuokite kas antrą eilutę mažėjančia ir didejančia tvarkomis (1,3,5,7,9,... eilutės mažėjančiai, o 2,4,6,8,10,... – didėjančiai). Suskaičiuokite kiekienos eilutės skaičių sumą (n). Suskaičiuokite vartotojo pasirinktos eilutės geometrinės progresijos n-tąjį narį: an=an-1*q. Čia q yra eilutės skaitmenų skaičius. Geometrinės progresijos n-tojo nario radimui nau-dokite rekursinę funkciją. Pradinius duomenis, tarpinius veik-smus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

24

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „0“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite vartotojo pasirinktos eilutės simbolių skaičių (d) ir dažniausiai besikartojančių simbolių skaičių šioje eilutėje (n) ir suskaičiuokite n-tąjį narį pagal formulę: an=an-1-d. n-tojo nario radimui naudokite rekursinę funkciją.

36

Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

25

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „*“. Surikiuokite kas antrą eilutę didėjančia ir mažėjančia tvarkomis (1,3,5,7,9,... eilutės didėjančiai, o 2,4,6,8,10,... – mažėjančiai). Susumuokite kiekvienos eilutės skaičius. Suskaičiuokite vartotojo pasirinktos eiluės sumos (n) skaičiaus faktorialą: n!=n*(n-1)!, o (0)! = 1. Faktorialui skaičiuoti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

26

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „%“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis kiekvienoje eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n) kartų. Surikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio (simbolių rinkinys iki tarpo skaitomas kaip žodis). Sudauginkite vartotojo pasirinktos eilutės daugiausia besikartojančių simbolių kiekį (n) su visų simbolių toje eilutėje kiekiu. Gautą skaičių padalinkite iš mažiausia besikartojančių simbolių skaičiaus (d). Raskite gautojo skaičiaus dvigubą faktorialą: a!!=1*3*5*…*a, kai a yra nelyginis, o a!!=2*4*6*…*a, kai a yra lyginis. Faktorialo radimui skaičiuoti naudokite rekursines funkcijas. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

27

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „z“. Susumuokite kiekvienos eilutės skaičius. Surikiuokite kiekvieną eilutę mažėjančia tvarka, o eilutes mažėjančiomis suomis. Suskaičiuokite vartotojo pasirinktos eilutės sumos (n) skaičiaus dvigubą faktorialą:

37

n!!=1*3*5*…*n, kai n yra nelyginis, o n!!=2*4*6*…*n, kai n yra lyginis. Faktorialui skaičiuoti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

28

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „%“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n). Surikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio (simbolių rinkinys iki tarpo skaitomas kaip žodis). Sudauginkite kiekvienos eilutės daugiausia visus besikartojančius simbolius (n) su rečiausia besikartojančiais simboliais (d). Prie vartotojo pasirinktos eilutės gauto rezultato prisumuokite daugiausia besikartojančių simbolių kiekį. Raskite gautojo skaičiaus faktorialą: a!=a*(a-1)!, o (0)!=1. Faktorialo radimui skaičiuoti naudokite rekursines funkcijas. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

29

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „;“. Suskaičiuokite kiekvienos eilutės sumą (n) ir padalinkite iš einamosios eilues skaitmenų skaičiaus (d). Surikiuokite kiekvienos eilutės skaičius mažėjančia tvarka, o eilutes nuo didžiausio dalmens iki mažiausio. Suskaičiuokite vartotojo pasirinktos eilutės n-tąjį narį pagal formulę an= an-1+d, kur a1=1. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

30

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „#“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis kiekvienoje eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n) kartų. Surikiuokite

38

kiekvienos eilutės duomenis nuo ilgiausio žodžio iki trum-piausio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Suskaičiuokite vartotojo pasirinktos eilutės n-tąjį narį pagal formulę an=an-1+d, kur a1=1. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

31

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „%“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis eilutėje kartojasi mažiausia (d), ir kuris daugiausia (n). Surikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio (simboliu rinkinys iki tarpo skaitomas kaip žodis). Sudauginkite kiekvienos eilutės daugiausia visus besikartojančius simbolius (n) su mažiausia besikartojančiais simboliais (d). Prie vartotojo pasirinktos eilutės gauto rezultato prisumuokite mažiausia besikartojančių simbolių kiekį. Raskite gautojo skaičiaus faktorialą: a!=a*(a-1)!, o (0)!=1. Faktorialo radimui skaičiuoti naudokite rekursines funkcijas. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

32

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „!“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite, kuris simbolis eilutėje kartojasi mažiausia kartų. Su-rikiuokite kiekvienos eilutės duomenis nuo trumpiausio žodžio iki ilgiausio žodžio (simboliu rinkinys iki tarpo skai-tomas kaip žodis). Suskaičiuokite vartotojo pasirinktos eilu-tės simbolių skaičių (n). Raskite sandaugos geometrinės progresijos n-tąjį narį: an=an-1*q. Čia q – visų žodžių kiekis. Geometrinės progresijos n-tojo nario radimui skaičiuoti nau-dokite rekursinę funkciją. Pradinius, tarpinius duomenis ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

39

33

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „;“. Suskaičiuokite kiekvienos eilutės sumą (n) ir padalinkite iš einamosios eilutės skaitmenų skaičiaus (d). Surikiuokite kiekvienos eilutės skaičius mažėjančia tvarka, o eilutes nuo didžiausio dalmens iki mažiausio. Suskaičiuokite vartotojo pasirinktos eilutės n-tąjį narį pagal formulę an= an-1+d, kur a1=1. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

34

Duomenų faile duota atsitiktinės simbolių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „0“. Suskaičiuokite kiek simbolių yra kiekvienoje eilutėje. Raskite vartotojo pasirinktos eilutės simbolių skaičių (d) ir dažniausiai besikartojančių simbolių skaičių šioje eilutėje (n) ir suskaičiuokite n-tąjį narį pagal formulę: an=an-1-d. n-tojo nario radimui naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

35

Duomenų faile duota atsitiktinės skaičių sekų eilutės (eilučių ilgis ir skaičius skirtingas). Eilutės pabaigos simbolis yra „.“. Suskaičiuokite kiekvienos eilutės skaitmenų sandau-gą (n) ir padalinkite iš einamos eilutės skaitmenų skaičiaus (d). Surikiuokite kiekvienos eilutės skaičius mažė-jančia tvarka, o eilutes nuo didžiausio dalmens iki mažiausio. Suskaičiuokite vartotojo pasirinktos eilutės an-tąjį narį pagal formulę an=an-1*d, kur a1=1. an- tajam nariui rasti naudokite rekursinę funkciją. Pradinius duomenis, tarpinius veiksmus ir galutinį rezultatą išveskite į ekraną ir rezultatų failą.

40

4 LABORATORINIS DARBAS (4 LD)

Darbo tikslas – išmokti dirbti su STL bibliotekomis. Bendra užduotis – papildyti 2 programos kodą. Programoje turi

būti 1. pritaikyta standartinė STL biblioteka (2 balai); 2. išimtinų situacijų apdorojimas (2 balai); 3. vienas ar daugiau funkcijų objektų (2 balai); 4. iteratorius (1 balas);

parašytą ataskaitą (3 balai); Parašykite ataskaitą. Parašykite ir atspausdintą ataskaitą

pateikite ginantis darbą. Reikalavimai ataskaitai: Titulinis puslapis (0,5 balo);

1. Darbo tikslas (0,5 balo); 2. Užduotis (0,5 balo); 3. Užduoties analizė (0,5 balo); 4. Pradiniai duomenys (1 balas); 5. Sprendimo būdas (5 balai):

5.1. Klasės pavadinimas; 5.2. Klasės aprašymas; 5.3. Kintamųjų ir priklausančių metodų aprašymai; 5.4. Veikimo principai; 5.5. Jų pateikiami rezultatai;

6. Galutiniai rezultatai (1 balas); 7. Programos kodas (1 balas);

41

4 LD INDIVIDUALIOS UŽDUOTYS

1 STL – stekas; 2 STL – eilė; 3 STL – vektorius; 4 STL – aibė; 5 STL – priority stack; 6 STL – dekas; 7 STL – priority stack; 8 STL – stekas; 9 STL – eilė; 10 STL – priority stack; 11 STL – vektorius; 12 STL – dekas; 13 STL – priority stack; 14 STL – aibė; 15 STL – vektorius; 16 STL – stekas; 17 STL – eilė; 18 STL – aibė; 19 STL – vektorius; 20 STL – dekas; 21 STL – aibė; 22 STL – priority stack; 23 STL – stekas; 24 STL – eilė; 25 STL – vektorius; 26 STL – dekas; 27 STL – aibė; 28 STL – stekas; 29 STL – aibė; 30 STL – eilė; 31 STL – priority stack;

42

32 STL – stekas; 33 STL – aibė; 34 STL – eilė; 35 STL – dekas;

43

4 LD SPRENDIMO PAVYZDŽIAI

STL bibliotekos iškvietimo pavyzdys:

:

// STL bibliotekos iškvietimo aprašymas template <> void MyQueue<double> ::Add(double const

&d)

{ data.push_back(d); }

template <> void MyQueue<double>::Print()

{ std::vector <double>::iterator It1;

It1 = data.begin();

cout<<"Double"<<endl;

for ( It1 = data.begin( ) ; It1 != data.end( ) ;

It1++ )

cout << " " << *It1<<endl;

}

:

:

// STL bibliotekos sutrumpintas aprašymas template <typename T>

class MyQueue<T,double>{};

:

STL medžio formavimo pavyzdys:

#include <map>

#include <iostream>

#include <string>

using namespace std;

class Person

{private:

string name;

int age;

string nINumber;

public:

44

Person(void)

{ name = "";

age = -1;

nINumber = "";}

Person(string inName, int inAge, string inNINumber)

{ name = inName;

age = inAge;

nINumber = inNINumber;}

string& getName(void)

{ return name;}

int getAge(void)

{ return age; }

string& getNINumber(void)

{ return nINumber; }

bool operator == (const Person& p)

{ return (name == p.name);}

bool operator < (const Person& p)

{ return (age < p.age); }

bool isNULL(void)

{ return ((name == "") && (age == -1) &&

(nINumber == ""));}

};

void populatePeople(map<string, Person>& peopleMap)

{ char continueFlag = 'y';

string name;

int age;

string nINumber;

while (continueFlag == 'y')

{ cout << "Ivesk varda ";

cin >> name;

cout << "Ivesk amziu ";

cin >> age;

cout << "Ivesk draudimo Nr. ";

cin >> nINumber;

Person p(name, age, nINumber);

peopleMap[name] = p;

cout << "Paspausk y kad prideti kita:";

cin.get();

continueFlag = cin.get();

cin.get();

}

45

}

void interrogateMap(map<string, Person>& peopleMap)

{ char continueFlag = 'y';

string name;

while (continueFlag == 'y')

{ cout << "Ivesk ieskoma varda ";

cin >> name;

Person p = peopleMap[name];

if (p.isNULL())

{ cout << "Nerastas " << name << endl; }

else

{ cout << p.getName() << ":"

<< p.getAge() << ":"

<< p.getNINumber() << endl;}

cout << "Ivesk y kitai paieskai:";

cin.get();

continueFlag = cin.get();

cin.get();

}

}

int main(void)

{ map<string, Person> peopleMap;

populatePeople(peopleMap);

interrogateMap(peopleMap);

return(0);}

Atsakymas: Ivesk varda Omar

Ivesk amziu 38

Ivesk draudimo Nr. 3157

Paspausk y kad prideti kita:y

Ivesk varda Amna

Ivesk amziu 33

Ivesk draudimo Nr. 7531

Paspausk y kad prideti kita:y

Ivesk varda Inde

Ivesk amziu 30

Ivesk draudimo Nr. 1982

Paspausk y kad prideti kita:n

Ivesk ieskoma varda Inde

46

Inde:30:1982

Ivesk y kitai paieskai:y

Ivesk ieskoma varda Sajid

Nerastas Sajid

Ivesk y kitai paieskai:y

Ivesk ieskoma varda Amna

Amna:33:7531

Ivesk y kitai paieskai:

STL šablono naudojimo pavyzdys:

#include <iostream>

using namespace std;

template <class T>

T GetMax (T a, T b)

{ return (a>b?a:b);}

int main ()

{ int i=5, j=6, k;

long l=10, m=5, n;

k=GetMax(i,j);

n=GetMax(l,m);

cout << k << endl;

cout << n << endl;

return 0;

}

Atsakymas: 6

10

Daugiau informacijos apie STL bibliotekų panaudojimą rasite

adresu: http://www.sgi.com/tech/stl/table_of_contents.html

47

NURODYMAI ATASKAITAI

1. Visa ataskaita turi būti parašyta 10 šriftu, TimesNewRoman stiliumi.

2. Punktų pavadinimai turi būti numeruojami/punktuojami ir parašyti pastorintu šriftu bei pabraukti.

3. Užbaigus punkto aprašymą, palikti vienos eilutės tarpą. 4. Duomenys ir rezultatai turi būti pateikiami lentelės forma

arba lentelėmis. Čia turi būti aiškiai išskirta, kur ir kokie duomenys/rezultatai yra t.y. tvarkingai suformuota lentelės antgalvė.

5. Aprašant uždavinio sprendimo būdus reikia aprašyti kiekvieną klasę atskirai pagal visus 5.1 – 5.5 punktus.

6. kintamuosius, jų tipus, klasių tipus rašyti pasiviruoju šriftu.

7. Aprašyti būtina visus klasės kintamuosius. 8. Jei klasė turi savo metodus – juos taip pat aprašyti. 9. Aprašyti šių metodų kintamuosius. 10. programos kodas gali būti pateikiamas talpinant jį į du

stulpelius ir sumažinus šriftą.

48

ATASKAITOS PAVYZDYS

VILNIAUS GEDIMINO TECHNIKOS UNIVERSITETAS

INFORMACINIŲ TECHNOLOGIJŲ KATEDRA

PROGRAMAVIMO KALBOS C++ LABORATORINIO DARBO NR. X

ATASKAITA

Darbą atliko:

AB-09/00 gr. studentas/ė Vardenis Pavardenis

Darbą tikrino: dr. L. Pupeikienė

Įvertinimas: _____________________

Vilnius, 2010

49

1. Darbo tikslas – išmokti dirbti su... (darbo tikslas pateikiamas kiekvieno laboratorinio darbo užduotyje).

2. Užduotis – Parašykite programą, kuri atliktų veiksmus

pagal individualią vartotojo sąlygą (nurašoma visa individuali vartotojo sąlyga).

3. Užduoties analizė - Pagal individualią užduotį parašyti

programą, kuri turėtų:... (nurašoma konkretaus laboratorinio darbo bendra užduotis);

4. Pradiniai duomenys:

Nr. Duomenys 1. X = 5; Y = 16; 2. X = 2; Y = 0; : : 10. X = 0; Y = 25;

Konkrečios užduoties atveju pradiniai duomenys yra skirtingi. Čia kiekvienu atveju reikia parašyti su kokias konkrečiais duomenimis atliekami skaičiavimai. Pateikti ne mažiau 10 testinių duomenų.

5. Sprendimo būdas : 5.1. DuomenuNuskaitymas skirta nuskaityti vartotojo

įvedamiems duomenims iš failo/ekrano; Kintamieji: int X=0, – skirtas skaitmenų kiekio skaičiavimui; Y=0 – skirtas skaitmenų sumos skaičiavimui; float mas[] – skirtas sandaugoms masyve išsaugoti. struct Student{ –dinaminiam masyvui aprašyti; char vardas[20]; – vardas;

50

char pavarde[20]; – pavardė; float vidurkis; – vidurkis; };

: Veikimo principai: Ši klasė nuskaito duomenis iš failo/ekrano. Nuskaitymo metu susumuoja pateiktus skaičius ir suskaičiuoja jų kiekį. Pateikiami rezultatai: Rezultatas yra nuskaitytų skaitmenų masyvas mas[] ir skaitmenų kiekis X, bei visų skaitmenų suma Y.

5.2. DuomenuSpausdinimas void tipo klasė, skirta atspausdinti vartotojo skaičiavimų rezultatams į failą/ekraną; Kintamieji: int A=0, – skirtas eilučių kiekiui nurodyti; B=0 – skirtas stulpelių kiekiui nurodyti; float D – skirtas skaičiuoti sandaugai. : Veikimo principai: Ši klasė atspausdina gautus rezultatus į failą/ekraną. Spausdinimo metu ji naudoja papildomus metodus rekursijai bei funkcijos perkrovimui skaičiuoti. • Rekursija – int tipo funkcija skirta faktorialui

(geometrines progresijos n-tajam nariui) rasti. Kintamieji: int n – faktorialo kintamasis (n-tasis narys);

51

• Perkrovimas – skirta atnaujinti dinaminį masyvą. Kintamieji: int i, – masyvo eilučių skaičius; j – masyvo stulpelių skaičius; :

Pateikiami rezultatai: Rezultatas yra lenteles forma išspausdinti duomenys ekrane/faile.

6. Galutiniai rezultatai:

Nr. Suma Sandauga 1. 21 80 2. 2 0 : : 10. 25 0

Galutinius rezultatus pateikti taip, kad matytųsi visų reikalavimuose esančių veiksmų rezultatai (įrašo įterpimas/šalinimas, paieška pagal kriterijų, rikiavimas...).

7. Programos kodas: void Dvig(char c, int i, FILE *failas) { char c2; if(i == 1) { fprintf(failas2,"---------------\n"); while (!feof(failas)){ fscanf(failas, "%c", &c2); if (c == c2) { fprintf(failas2, ""); } else { fprintf(failas2, "%c", c2); } } printf("\nPanaikinta\n\n"); }

else if(i == 0) {fprintf(failas2,"---------------- \n"); while (!feof(failas)){ fscanf(failas, "%c", &c2); if (c == c2) { fprintf(failas2, "%c%c", c2, c2);} else { fprintf(failas2, "%c", c2); } } printf("\nPadvigubinta\n\n"); }}

52

/* Helper function for finding the max of two numbers */ int max(int x, int y) { if(x > y) { return x; } else { return y; } } void merge_helper(int *input, int left, int right, int *scratch) { /* base case: one element */ if(right == left + 1) { return; } else { int i = 0; int length = right - left; int midpoint_distance = length/2; /* l and r are to the positions in the left and right subarrays */ int l = left, r = left + midpoint_distance; /* sort each subarray */ merge_helper(input, left, left + midpoint_distance, scratch); merge_helper(input, left + midpoint_distance, right, scratch); /* merge the arrays together using scratch for temporary storage */ for(i = 0; i < length; i++) { if(l < left + midpoint_distance && (r == right || max(input[l], input[r]) == input[l])) { scratch[i] = input[l]; l++; } else

{ scratch[i] = input[r]; r++; } } /* Copy the sorted subarray back to the input */ for(i = left; i < right; i++) { input[i] = scratch[i - left]; } } } int mergesort(int *input, int size) { int *scratch = (int *)malloc(size * sizeof(int)); if(scratch != NULL) { merge_helper(input, 0, size, scratch); free(scratch); return 1; } else { return 0; } } : : :