# Objektinis programavimas

# Objektiniame programavime naudojamos sąvokos

  • Klasė. Struktūra.
  • Objektas.
  • ...

# Apie klasę / struktūrą

  • Klasę / struktūrą galite įsivaizduoti kaip šabloną ar brėžinį tam tikriems duomenims aprašyti.
  • Kuriant klasę / struktūrą, jūs kuriate šabloną naujam duomenų tipui. Tokiu būdu apibūdinate iš ko bus sudarytas jūsų naujai sukurtas duomenų tipas. C++ kalboje jau yra kitų duomenų tipų, tokių kaip int, double, string ir pan., tai šiuo atveju tarsi kuriate savo.
  • Klasėje / struktūroje realių duomenų neturėtų būti, nes klasė / struktūra yra tik šablonas pagal kurį bus galima surašyti duomenis. Tai, taip pat, galima įsivaizduoti kaip kai excel lapo viršuje aprašote stulpelių pavadinimus, su kuriais apibūdinate kokia informacija kuriame stulpelyje bus saugoma.
  • Klasė / struktūra apibūdins kokie duomenys (su kintamųjų pagalba) galės būti priskiriami objektams, bei kokius veiksmus bus galima atlikti su objektais (su funkcijų / metodų pagalba).
  • Klasę / struktūrą galima įsivaizduoti kaip kažką kas gali apibūdinti visų to paties tipo objektų bendrus atributus, t.y. kažką ką galima pasakyti apie kiekvieną tam tikro tipo objektą. Pavyzdžiui: visų automobilių bendri atributai (apie kiekvieną automobilį galima įvardinti šiuos dalykus) - markė, modelis, metai, rida, spalva...

# Klasių / struktūrų pavyzdžiai

# Klasės / struktūros pavyzdys - automobilis

Automobilis

Kokie bendri atributai sieja kiekvieną automobilį?

  • Markė.
  • Modelis.
  • Pagaminimo metai.
  • Rida.
  • Darbinis tūris.
  • ...

Kokius veiksmus gali kiekvienas automobilis arba ką galima nuveikti su kiekvienu automobiliu:

  • Užsikurti.
  • Važiuoti.
  • Paskaičiuoti kiek kilometrų vidutiniškai nuvažiuoja per metus.
  • ...

# Klasės / struktūros pavyzdys - žmogus

Žmogus

Kokie bendri atributai sieja kiekvieną žmogų?

  • Vardas.
  • Pavardė.
  • Amžius.
  • Ūgis.
  • Lytis.
  • Profesija.
  • ...

Kokius veiksmus gali atlikti kiekvienas žmogus?

  • Eiti į darbą.
  • Valgyti.
  • Vaikščioti.
  • Paskaičiuoti kada gimęs.
  • ...

# Klasės / struktūros pavyzdys - medis

Medis

Bendri kiekvieno medžio atributai:

  • Pavadinimas.
  • Aukštis.
  • Amžius.
  • Rūšis.
  • ...

Medžių galimi atlikti veiksmai:

  • Numesti lapus.
  • ...

# Klasės / struktūros pavyzdys - prekė

Prekė

Kiekvienos prekės bendri atributai:

  • Pavadinimas.
  • Kaina.
  • Savikaina.
  • Brūkšninis kodas.
  • Kiekis.
  • ...

Ką galima nuveikti su kiekviena preke?

  • Išvesti jos informaciją.
  • Paskaičuoti galimą pelną (kaina - savikaina).
  • Nupirkti kažkiek vienetų (sumažinti kiekį per nurodytą dalį).
  • ...

# Klasės / struktūros pavyzdys - ?

Jūsų pavyzdys

Jūsų eilė: kiekvienas sugalvokite dar bent po vieną klasės pavyzdį, apibūdinant kokie atributai sieja kiekvieną iš tų objektų, bei kokius veiksmus jie gali atlikti.

# Kas yra objektas?

  • Objektas - tai kažkas kas jau turi realius duomenis, kuriuos numatė klasė.
  • Objektas tai tarsi kintamasis, kuriame yra sudėti kiti kintamieji, galintys plačiau apibūdinti tam tikrą dalyką.
  • Objektai gali atlikti kokius nors veiksmus.
  • Viena klasė gali turėti daug objektų.
  • Objektai remiasi tos pačios klasės šablonu, tačiau kiekvienas objektas yra unikalus.
  • Viskas ką turi objektas prieinama per tašką, t. y. rašant objekto pavadinimą, tuomet tašką ir galiausiai norimą pasiekti objekte dalyką (kintamąjį ar metodą).

# Klasių / struktūrų ir jų objektų pavyzdžiai

# Automobilio klasė / struktūra ir objektai

Automobilio klasė ir objektai

Klasės / struktūros atributas (kintamasis) Objektas nr. 1 Objektas nr. 2 Objektas nr. 3
Markė Audi Tesla Opel
Modelis A4 S Astra
Rida 300458 12487 314878
Metai 2015 2019 2009
Darbinis tūris 1.6 1.2 1.8

# Žmonių klasė / struktūra ir objektai

Žmogaus klasė ir objektai

Klasės / struktūros atributas (kintamasis) Objektas nr. 1 Objektas nr. 2 Objektas nr. 3
Vardas Gintaras Inga Povilas
Amžius 23 25 24
Ūgis 1.8 1.7 1.9
Svoris 85 55 89
Profesija Policininkas Dizainerė Programuotojas

# Struktūros

# Struktūros sintaksė

# Struktūros sukūrimas

Struktūros sukūrimas:

struct <pavadinimas>
{
    // kodas
};
  • pavadinimas - jūsų sugalvotas struktūros pavadinimas, dažniausiai aprašomas vienaskaitos forma, kadangi aprašo vieto objekto savybes.
  • kodas - tarp kontūrinių skliaustų rašysite viską kas priklauso šiai struktūrai (kintamuosius ir funkcijas).

Pavyzdžiui:

struct zmogus
{
    // kodas
};

# Struktūros atributai (kintamieji)

Norint aprašyti atributus / savybes ar tiesiog kintamuosius, tai būtų daroma taip:

struct <pavadinimas>
{
    <tipas> <kintamojo1_pavadinimas>;
    <tipas> <kintamojo2_pavadinimas>;
    <tipas> <kintamojo3_pavadinimas>;
    ...
};
  • pavadinimas - jūsų sugalvotas struktūros pavadinimas, dažniausiai aprašomas vienaskaitos forma, kadangi aprašo vieto objekto savybes.
  • tipas - kintamojo tipas, gali būti int, double, string, char ir pan.
  • kintamojo_pavadinimas - jūsų sugalvotas kintamojo pavadinimas.

Pavyzdžiui:

struct zmogus
{
    string vardas;
    string pavarde;
    int amzius;
    double ugis;
};

# Struktūros funkcijos / metodai

Norint aprašyti su struktūra galimus atlikti veiksmus, t.y. sukurti funkcijas, bus daroma taip:

struct <pavadinimas>
{
    // ...

    <tipas> <funkcijos_pavadinimas>(<argumentai>)
    {
        // kodas
    }
};
  • pavadinimas - jūsų sugalvotas struktūros pavadinimas, dažniausiai aprašomas vienaskaitos forma, kadangi aprašo vieto objekto savybes.
  • tipas - funkcijos rezultatų grąžinimo tipas (angl. return type), gali būti void, int, double ir pan.
  • funkcijos_pavadinimas - jūsų sugalvotas funkcijos pavadinimas.
  • argumentai - duomenys ką gauna funkcija, kad galėtų atlikti savo darbą.

Pavyzdžiui:

struct zmogus
{
    string vardas;
    string pavarde;
    int amzius;
    double ugis;

    void isvedimas()
    {
        // funkcijos kodas
    }
};

Dėl struktūroje esančios funkcijos ribų

Struktūroje aprašytos funkcijos ribos (angl. scope) yra truputį kitokios nei įprastu atveju, t.y. tokios funkcijos pasiekia visus struktūroje (pagrindinėje jos dalyje, o ne atskirose funkcijose) sukurtus duomenis (kintamuosius).

# Objekto sintaksė

# Objekto kūrimas

Objekto sukūrimo sintaksė:

<tipas / strukturos_pavadinimas> <objekto_pavadinimas>;
  • tipas / strukturos_pavadinimas - kuriamo objekto tipas, kuris sutampa su struktūros pavadinimu.
  • objekto_pavadinimas - tas pats kas kintamojo pavadinimas, tačiau šiuo atveju kuriate objektą, o jam pavadinimą galvojate, kad jį vėliau galėtumėte kaip nors pasiekti.

Tarkime turime struktūrą:

struct zmogus
{
    // ...
};

Tai tokios struktūros objektas bus sukurtas taip:

zmogus petras;

# Objekte esančių duomenų ar funkcijų pasiekimas

Norint pasiekti objekte esančius kintamuosius:

objektas.kintamasis;

Norint iškviesti objekte esančias funkcijas:

objektas.funkcija();

Todėl pavyzdžiui, turint objektą:

zmogus petras;

Jame esančius atributus (kintamuosius) galima pasiekti:

petras.vardas;

Arba iškviesti funkcijas:

petras.isvedimas();

# Struktūros aprašymo vieta

Struktūra yra kuriama už main funkcijos ribų. Galima kurti tame pačiame ar kitame faile, tačiau kuriant kitame faile ir norint pasinaudoti pavyzdžiui tame pačiame pagrindiniame faile, būtina įtraukti (su include) struktūros .h failą.

#include <iostream>
using namespace std;

struct zmogus
{
    // kodas
};

int main()
{

    return 0;
}

# Struktūros: struktūros kūrimas, informacijos įvedimas ir gavimas (išvedimas) iš objekto

1 dalis:

2 dalis:

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
using namespace std;

// Sukuriama struktūra

struct zmogus
{
    string vardas;
    string pavarde;
    int amzius;
    double ugis;
};

int main()
{
    // Sukuriamas objektas
    zmogus petras;

    // Objektas užpildomas duomenimis
    petras.vardas = "Petras";
    petras.pavarde = "Petrauskas";
    petras.amzius = 70;
    petras.ugis = 1.74;

    // Objekto duomenys išvedami į ekraną
    cout << petras.vardas << " " << petras.pavarde << " ("
        << petras.amzius << " m.), jo ugis " << petras.ugis
        << "m." << endl;

    return 0;
}

Rezultatai:

Petras Petrauskas (70 m.), jo ugis 1.74m.

# Pavyzdys 2

Kodas:

#include <iostream>
#include <iomanip>
using namespace std;

struct medis
{
    string pavadinimas;
    int aukstis; // mm
};

int main()
{
    medis m1, m2;

    cout << "Iveskite pirmo medzio pavadinima ir auksti (mm): ";
    cin >> m1.pavadinimas >> m1.aukstis;

    cout << "Iveskite antro medzio pavadinima ir auksti (mm): ";
    cin >> m2.pavadinimas >> m2.aukstis;

    cout << endl;

    cout << "Pavadinimas          Aukstis" << endl;
    cout << setw(20) << left << m1.pavadinimas << " " << m1.aukstis << endl;
    cout << setw(20) << left << m2.pavadinimas << " " << m2.aukstis << endl;

    return 0;
}

Rezultatai:

Iveskite pirmo medzio pavadinima ir auksti (mm): Liepa 147
Iveskite antro medzio pavadinima ir auksti (mm): Obelis 178

Pavadinimas          Aukstis
Liepa                147
Obelis               178

# Pavyzdys 3

Kodas:

#include <iostream>
using namespace std;

struct preke
{
    string pavadinimas;
    double kaina;
    int kiekis;

    void isvedimas()
    {
        cout << "PREKES INFORMACIJA" << endl;
        cout << "Pavadinimas: " << pavadinimas << endl;
        cout << "Kaina: " << kaina << " eur." << endl;
        cout << "Kiekis: " << kiekis << " vnt." << endl;
        cout << endl;
    }
};

int main()
{
    preke piestukas;

    piestukas.pavadinimas = "Piestukas ABC, raudonas";
    piestukas.kaina = 0.99;
    piestukas.kiekis = 94;

    piestukas.isvedimas();

    return 0;
}

Rezultatai:

PREKES INFORMACIJA
Pavadinimas: Piestukas ABC, raudonas
Kaina: 0.99 eur.
Kiekis: 94 vnt.

# Pavyzdys 4

Kodas:

#include <iostream>
using namespace std;

struct automobilis
{
    string marke;
    string modelis;
    int metai;
    double darbinis_turis;
    int rida;

    void ivedimas()
    {
        cout << "Iveskite marke: ";
        cin >> marke;
        cout << "Iveskite modeli: ";
        cin >> modelis;
        cout << "Iveskite metus: ";
        cin >> metai;
        cout << "Iveskite darbini turi: ";
        cin >> darbinis_turis;
        cout << "Iveskite rida: ";
        cin >> rida;
    }

    void isvedimas()
    {
        cout << "Marke: " << marke << endl;
        cout << "Modelis: " << modelis << endl;
        cout << "Metai: " << metai << endl;
        cout << "Darbinis turis: " << darbinis_turis << endl;
        cout << "Rida: " << rida << endl;
        cout << endl;
    }
};

int main()
{
    automobilis auto1, auto2;

    cout << "Iveskite pirmo automobilio duomenis." << endl;
    auto1.ivedimas();

    cout << "\nIveskite antro automobilio duomenis." << endl;
    auto2.ivedimas();

    cout << "\nIvesti pirmo automobilio duomenys." << endl;
    auto1.isvedimas();

    cout << "Ivesti antro automobilio duomenys." << endl;
    auto2.isvedimas();

    return 0;
}

Rezultatai:

Iveskite pirmo automobilio duomenis.
Iveskite marke: Audi
Iveskite modeli: A4
Iveskite metus: 2018
Iveskite darbini turi: 1.8
Iveskite rida: 148873

Iveskite antro automobilio duomenis.
Iveskite marke: Tesla
Iveskite modeli: S
Iveskite metus: 2019
Iveskite darbini turi: 1.8
Iveskite rida: 14877

Ivesti pirmo automobilio duomenys.
Marke: Audi
Modelis: A4
Metai: 2018
Darbinis turis: 1.8
Rida: 148873

Ivesti antro automobilio duomenys.
Marke: Tesla
Modelis: S
Metai: 2019
Darbinis turis: 1.8
Rida: 14877

# Pavyzdys 5

Kodas:

#include <iostream>
using namespace std;

struct darbuotojas
{
    string vardas;
    string pavarde;
    double etatas;
    double atlyginimas;
    string pareigos;

    void sudeti_duomenis(string vardas, string pavarde, double etatas,
        double atlyginimas, string kuo_dirba)
    {
        this->vardas = vardas;
        this->pavarde = pavarde;
        this->etatas = etatas;
        this->atlyginimas = atlyginimas;
        pareigos = kuo_dirba;
    }

    void isvesti_duomenis()
    {
        cout << "Zmogaus duomenys" << endl;
        cout << vardas << " " << pavarde << " dirba "
            << etatas << " etatu, uzdirba " << atlyginimas
            << " eur, jis(-i) dirba " << pareigos << "\n\n";
    }
};

int main()
{
    darbuotojas pirmas, antras, trecias;

    pirmas.sudeti_duomenis("Jonas", "Jonaitis", 1, 800, "pencininku");
    antras.sudeti_duomenis("Petras", "Petraitis", 1.5, 1500, "programuotoju");
    trecias.sudeti_duomenis("Ona", "Onauskiene", 0.75, 700, "namu seimininke");

    pirmas.isvesti_duomenis();
    antras.isvesti_duomenis();
    trecias.isvesti_duomenis();

    if (pirmas.atlyginimas > antras.atlyginimas)
    {
        cout << pirmas.vardas << " " << pirmas.pavarde << " uzdirba daugiau nei "
            << antras.vardas << " " << antras.pavarde << endl;
    }

    if (antras.atlyginimas > trecias.atlyginimas)
    {
        cout << antras.vardas << " " << antras.pavarde << " uzdirba daugiau nei "
            << trecias.vardas << " " << trecias.pavarde << endl;
    }

    if (trecias.atlyginimas > pirmas.atlyginimas)
    {
        cout << trecias.vardas << " " << trecias.pavarde << " uzdirba daugiau nei "
            << pirmas.vardas << " " << pirmas.pavarde << endl;
    }

    return 0;
}

Rezultatai:

Zmogaus duomenys
Jonas Jonaitis dirba 1 etatu, uzdirba 800 eur, jis(-i) dirba pencininku

Zmogaus duomenys
Petras Petraitis dirba 1.5 etatu, uzdirba 1500 eur, jis(-i) dirba programuotoju

Zmogaus duomenys
Ona Onauskiene dirba 0.75 etatu, uzdirba 700 eur, jis(-i) dirba namu seimininke

Petras Petraitis uzdirba daugiau nei Ona Onauskiene

# Pavyzdys 6

Kodas:

#include <iostream>
using namespace std;

struct studentas
{
    string vardas;
    string grupe;
    int pazymiai[50];
    int pazymiu_kiekis;
};

double studento_paz_vidurkis(studentas studentas)
{
    int suma = 0;

    for (int i = 0; i < studentas.pazymiu_kiekis; i++)
    {
        suma += studentas.pazymiai[i];
    }

    return (double)suma / studentas.pazymiu_kiekis;
}

double skaiciu_vidurkis(int skaiciai[], int kiekis)
{
    int suma = 0;

    for (int i = 0; i < kiekis; i++)
    {
        suma += skaiciai[i];
    }

    return (double)suma / kiekis;
}

int main()
{
    studentas stud;

    stud.vardas = "Povilas";
    stud.grupe = "IF-9/2";
    stud.pazymiai[0] = 8;
    stud.pazymiai[1] = 9;
    stud.pazymiai[2] = 7;
    stud.pazymiai[3] = 10;
    stud.pazymiu_kiekis = 4;

    cout << "Studento duomenys" << endl;
    cout << "Vardas: " << stud.vardas << endl;
    cout << "Mokosi grupeje: " << stud.grupe << endl;
    cout << "Studento pazymiai: ";

    for (int i = 0; i < stud.pazymiu_kiekis; i++)
    {
        cout << stud.pazymiai[i] << " ";
    }

    cout << endl;

    double vidurkis1 = studento_paz_vidurkis(stud);
    double vidurkis2 = skaiciu_vidurkis(stud.pazymiai, stud.pazymiu_kiekis);

    cout << "Vidurkis 1: " << vidurkis1 << endl;
    cout << "Vidurkis 2: " << vidurkis2 << endl;

    return 0;
}

Rezultatai:

Studento duomenys
Vardas: Povilas
Mokosi grupeje: IF-9/2
Studento pazymiai: 8 9 7 10
Vidurkis 1: 8.5
Vidurkis 2: 8.5

# Pavyzdys 7

Kodas:

#include <iostream>
using namespace std;

struct variklis
{
    string gamintojas;
    double darbinis_turis;
};

struct automobilis
{
    string marke;
    string modelis;
    int metai;
    variklis variklis;

    void isvedimas()
    {
        cout << marke << " " << modelis
            << " pagamintas " << metai << " metais"
            << ", jame yra toks variklis: " << endl
            << "gamino: " << variklis.gamintojas
            << ", jo darbinis turis " << variklis.darbinis_turis << " l"
            << endl;
    }
};

int main()
{
    automobilis masina;

    masina.marke = "Moskvicius";
    masina.modelis = "800";
    masina.metai = 1984;
    masina.variklis.gamintojas = "rusai";
    masina.variklis.darbinis_turis = 3.2;

    masina.isvedimas();

    return 0;
}

Rezultatai:

Moskvicius 800 pagamintas 1984 metais, jame yra toks variklis:
gamino: rusai, jo darbinis turis 3.2 l

# Užduotys

# Užduotis 1

Susikurkite struktūrą saugoti šiems aukštosios mokyklos duomenims:

  • Pavadinimas.
  • Įsteigimo metai.
  • Miestas.
  • Studentų skaičius.
  • Darbuotojų skaičius.

Susikurkite objektą ir leiskite vartotojui suvesti šiuos duomenis konsolės pagalba.

Suvestus duomenis išveskite pasirinkta forma.

# Užduotis 2

Susikurkite struktūrą saugoti šiems kepyklos duomenims:

  • Pavadinimas.
  • Adresas.
  • Darbuotojų kiekis.
  • Vidutiniškai per dieną iškepamų kepalų kiekis.
  • Vidutinė vieno kepalo kaina.

Susikurkite objektą ir užpildykite jį informacija bet kuria norima forma.

Suvestus duomenis išveskite pasirinkta forma.

# Užduotis 3

Susikurkite struktūrą saugoti šiems knygos duomenims:

  • Autorius.
  • Pavadinimas.
  • Kaina.
  • Leidykla.
  • Puslapių skaičius.

Susikurkite tris knygos struktūros objektus, juos užpildykite norima forma.

Suvestus duomenis išveskite lentelės pavidalu.

# Užduotis 4 (laisva forma)

  • Susikurkite savo susigalvotą struktūrą.
  • Susikurkite kelis objektus, juos užpildykite duomenimis.
  • Išveskite visus duomenis lentelės pavidalu.
  • Išveskite kai kuriuos pasirinktus duomenis.

# Struktūros: metodai (funkcijos)

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
using namespace std;

struct preke
{
    string pavadinimas;
    double kaina;
    double savikaina;
    int kiekis;

    void ivedimas(string pavadinimas, double kaina, double savikaina, int kiekis)
    {
        this->pavadinimas = pavadinimas;
        this->kaina = kaina;
        this->savikaina = savikaina;
        this->kiekis = kiekis;
    }

    void isvedimas()
    {
        cout << "PREKES DUOMENYS\n";
        cout << "Pavadinimas: " << pavadinimas << endl
            << "Kaina / savikaina, eur: " << kaina << " / " << savikaina << endl
            << "Kiekis, vnt.: " << kiekis << endl
            << "Galimas pelnas, eur: " << galimas_pelnas() << "\n\n";
    }

    double galimas_pelnas()
    {
        return kiekis * (kaina - savikaina);
    }
};

int main()
{
    preke p1;
    p1.ivedimas("Piestukas", 0.99, 0.5, 100);
    p1.isvedimas();

    preke p2;
    p2.ivedimas("Sasiuvinys", 1.48, 0.78, 245);
    p2.isvedimas();

    cout << "Galimas pelnas, iskviestas atskirai: ";
    cout << p1.galimas_pelnas() << endl;

    return 0;
}

Rezultatai:

PREKES DUOMENYS
Pavadinimas: Piestukas
Kaina / savikaina, eur: 0.99 / 0.5
Kiekis, vnt.: 100
Galimas pelnas, eur: 49

PREKES DUOMENYS
Pavadinimas: Sasiuvinys
Kaina / savikaina, eur: 1.48 / 0.78
Kiekis, vnt.: 245
Galimas pelnas, eur: 171.5

Galimas pelnas, iskviestas atskirai: 49

# Pavyzdys 2

Kodas:

#include <iostream>
#include <ctime>
using namespace std;

struct studentas
{
    string vardas;
    int pazymiai[100];
    int pazymiu_kiekis;

    void isvedimas()
    {
        cout << "Studento " << vardas << " pazymiai: ";
        
        for (int i = 0; i < pazymiu_kiekis; i++)
        {
            cout << pazymiai[i] << " ";
        }
        
        cout << endl;
    }

    int suma()
    {
        int sum = 0;

        for (int i = 0; i < pazymiu_kiekis; i++)
        {
            sum += pazymiai[i];
        }

        return sum;
    }

    double vidurkis()
    {
        return (double)suma() / pazymiu_kiekis;
    }

    bool ar_visi_teigiami()
    {
        for (int i = 0; i < pazymiu_kiekis; i++)
        {
            if (pazymiai[i] < 4)
            {
                return false;
            }
        }

        return true;
    }
};

void sugeneruoti_studenta(studentas & stud)
{
    stud.vardas = "Giedrius";

    for (int i = 0; i < 10; i++)
    {
        stud.pazymiai[i] = rand() % 10 + 1;
    }

    stud.pazymiu_kiekis = 10;
}

int main()
{
    srand(time(NULL));

    studentas stud;
    sugeneruoti_studenta(stud);
    stud.isvedimas();

    cout << "Suma: " << stud.suma() << endl;
    cout << "Vidurkis: " << stud.vidurkis() << endl;
    cout << "Ar visi teigiami: " << stud.ar_visi_teigiami() << endl;

    return 0;
}

Rezultatai 1:

Studento Giedrius pazymiai: 4 2 9 2 1 10 5 1 10 10
Suma: 54
Vidurkis: 5.4
Ar visi teigiami: 0

Rezultatai 2:

Studento Giedrius pazymiai: 9 9 5 7 7 7 8 6 9 8
Suma: 75
Vidurkis: 7.5
Ar visi teigiami: 1

# Pavyzdys 3

Kodas:

#include <iostream>
using namespace std;

struct zmogus
{
    string vardas;
    int amzius;

    void ivedimas(string vardas, int amzius)
    {
        this->vardas = vardas;
        this->amzius = amzius;
    }

    void isvedimas()
    {
        cout << vardas << ", jo amzius " << amzius << " metu" << endl;
    }

    int gimes(int dabar_metai)
    {
        return dabar_metai - amzius;
    }
};

void palyginimas(zmogus pirmas, zmogus antras)
{
    if (pirmas.amzius > antras.amzius)
    {
        cout << pirmas.vardas << " vyresnis" << endl;
    }
    else if (antras.amzius > pirmas.amzius)
    {
        cout << antras.vardas << " vyresnis" << endl;
    }
    else
    {
        cout << "abu zmones vienodo amziaus" << endl;
    }
}

int main()
{
    zmogus pirmas, antras;

    pirmas.ivedimas("Tomas", 18);
    antras.ivedimas("Petras", 20);

    pirmas.isvedimas();
    cout << "Gimimo metai: " << pirmas.gimes(2021) << "\n\n";

    antras.isvedimas();
    cout << "Gimimo metai: " << antras.gimes(2021) << "\n\n";

    palyginimas(pirmas, antras);

    return 0;
}

Rezultatai:

Tomas, jo amzius 18 metu
Gimimo metai: 2003

Petras, jo amzius 20 metu
Gimimo metai: 2001

Petras vyresnis

# Pavyzdys 4

Kodas:

#include <iostream>
using namespace std;

struct medis
{
    int aukstis;
    int amzius;

    void ivedimas(int aukstis, int amzius)
    {
        this->aukstis = aukstis;
        this->amzius = amzius;
    }

    void isvedimas(string komentaras, int dabar_metai)
    {
        cout << komentaras << endl;

        cout << "Medzio aukstis " << aukstis
            << ", jo amzius " << amzius << endl;

        cout << "Paauga per metus: " << paauga_per_metus() << endl;

        cout << "Medis buvo pasodintas " << pasodintas(dabar_metai)
            << " metais\n\n";
    }

    double paauga_per_metus()
    {
        return (double)aukstis / amzius;
    }

    int pasodintas(int dabar_metai)
    {
        return dabar_metai - amzius;
    }
};

medis aukstesnis_medis(medis pirmas, medis antras)
{
    if (pirmas.aukstis > antras.aukstis)
    {
        return pirmas;
    }
    else if (antras.aukstis > pirmas.aukstis)
    {
        return antras;
    }
    return pirmas;
}

int main()
{
    medis pirmas, antras;

    pirmas.ivedimas(154, 23);
    antras.ivedimas(175, 20);

    pirmas.isvedimas("Pirmas medis", 2021);
    antras.isvedimas("Antras medis", 2021);

    medis aukstesnis = aukstesnis_medis(pirmas, antras);
    aukstesnis.isvedimas("Aukstesnis medis", 2021);

    return 0;
}

Rezultatai:

Pirmas medis
Medzio aukstis 154, jo amzius 23
Paauga per metus: 6.69565
Medis buvo pasodintas 1998 metais

Antras medis
Medzio aukstis 175, jo amzius 20
Paauga per metus: 8.75
Medis buvo pasodintas 2001 metais

Aukstesnis medis
Medzio aukstis 175, jo amzius 20
Paauga per metus: 8.75
Medis buvo pasodintas 2001 metais

# Užduotys

# Užduotis 1

Sukurkite struktūrą "Knyga", kuri saugotų šią informacija apie knygą:

  • Pavadinimas.
  • Autorius.
  • Kaina.
  • Puslapių skaičius.
  • Žanras.
  • Išleidimo metai.

Šioje struktūroje parašykite tokias funkcijas:

  • Įvedimo, kuri priimtų visą reikiamą informaciją ir leistų patogiai sukelti duomenis į objektą.
  • Išvedimo, kuri išvestų objekto informaciją.
  • Knygos amžiaus paskaičiavimo funkciją, kuri grąžintų int tipo atsakymą, bei kuri priimtų dabartinius metus per argumentus ir paskaičiuotų knygos amžių (dabartiniai metai - išleidimo metai).
  • Funkciją, kuri nusako ar knyga yra apynaujė. Ši funkcija grąžintų bool tipo atsakymą. Ši funkcija grąžintų true jei knyga yra apynaujė (knygos amžius lygus ar mažesnis nei 2 metai), bei false jei knyga senesnė.

Programoje sukurkite dviejų knygų objektus, juos užpildykite informacija, pabandykite iškviesti struktūros funkcijas (įvedimas, išvedimas, skaičiavimai).

Sukurkite atskirą nuo struktūros funkciją, kuri priimtų du knygų objektus ir išvestų informaciją apie tai kuri knyga storesnė (turi daugiau puslapių). Iškvieskite šią funkciją, jai perduodant turimus knygų objektus.

# Užduotis 2

Sukurkite struktūrą "Filmas", kuri saugoti tokią informaciją apie filmą:

  • Pavadinimas.
  • Režisierius.
  • Išleidimo metai.
  • Išlaidos (kiek buvo išleista pinigų filmo gamybai).
  • Pajamos (kiek iš filmo buvo uždirbta).
  • Trukmė, minutėmis.

Šioje struktūroje parašykite tokias funkcijas:

  • Įvedimo, kuri priimtų visą reikiamą informaciją ir leistų patogiai sukelti duomenis į objektą.
  • Išvedimo, kuri išvestų objekto informaciją.
  • Pelno paskaičiavimo funkciją, kuri atimtų išlaidas iš gautų pajamų ir grąžintų tai kaip atsakymą.
  • Formatuotos trukmės suformatavimo funkciją, kuri turimas minutes paverstų į valandas ir minutes, bei išvestų atitinkamu formatu, pavyzdžiui: 2 val. 12 min. arba 2:12 val.. Ši funkcija grąžina string tipo atsakymą.

Programoje sukurkite trijų filmų objektus, juos užpildykite informacija, pabandykite iškviesti struktūros funkcijas (įvedimas, išvedimas, skaičiavimai).

Papildomai: savo nuožiūra papildykite programą dar dviem funkcijom (galima struktūroje ir / ar atskirai nuo struktūros, bet turi kažką daryti su objektais ar jų informacija).

# Užduotis 3 (laisva forma)

Sukurkite struktūrą krepšininko duomenims saugoti.

Šioje struktūroje sukurkite:

  • Bent 5 atributus (kintamuosius) krepšininko duomenims saugoti.
  • Bent 4 funkcijas (gali būti: įvedimas, išvedimas, skaičiavimai ar pan.).

Programoje sukurkite norimą kiekį krepšininkų objektų. Panaudokite struktūros funkcijas ant visų šių objektų.

Papildomai: aprašykite atskirų nuo struktūros funkcijų, kurios leistų kaip nors palyginti turimus krepšininkus tarpusavyje.

# Struktūros: konstruktoriai

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
using namespace std;

struct automobilis
{
    string marke;
    string modelis;
    int metai;
    int rida;
    double darbinis_turis;

    automobilis(string marke, string modelis, int metai,
        int rida, double darbinis_turis)
    {
        this->marke = marke;
        this->modelis = modelis;
        this->metai = metai;
        this->rida = rida;
        this->darbinis_turis = darbinis_turis;
    }

    void isvedimas()
    {
        cout << "Automobilio " << marke << " " << modelis << " duomenys\n";
        cout << "Metai: " << metai << endl;
        cout << "Rida: " << rida << endl;
        cout << "Darbinis turis, l: " << darbinis_turis << "\n\n";
    }
};

int main()
{
    automobilis pirmas = automobilis("Toyota", "Prius", 2015, 201457, 1.2);
    automobilis antras = automobilis("Tesla", "S", 2020, 1254, 1.6);

    pirmas.isvedimas();
    antras.isvedimas();

    return 0;
}

Rezultatai:

Automobilio Toyota Prius duomenys
Metai: 2015
Rida: 201457
Darbinis turis, l: 1.2

Automobilio Tesla S duomenys
Metai: 2020
Rida: 1254
Darbinis turis, l: 1.6

# Pavyzdys 2

Nuo praeito pavyzdžio skiriasi tik per konstruktorių.

Kodas:

#include <iostream>
using namespace std;

struct automobilis
{
    string marke;
    string modelis;
    int metai;
    int rida;
    double darbinis_turis;

    automobilis(string mark, string mod, int met, int rid, double darb_turis)
    {
        marke = mark;
        modelis = mod;
        metai = met;
        rida = rid;
        darbinis_turis = darb_turis;
    }

    void isvedimas()
    {
        cout << "Automobilio " << marke << " " << modelis << " duomenys\n";
        cout << "Metai: " << metai << endl;
        cout << "Rida: " << rida << endl;
        cout << "Darbinis turis, l: " << darbinis_turis << "\n\n";
    }
};

int main()
{
    automobilis pirmas = automobilis("Toyota", "Prius", 2015, 201457, 1.2);
    automobilis antras = automobilis("Tesla", "S", 2020, 1254, 1.6);

    pirmas.isvedimas();
    antras.isvedimas();

    return 0;
}

Rezultatai:

Automobilio Toyota Prius duomenys
Metai: 2015
Rida: 201457
Darbinis turis, l: 1.2

Automobilio Tesla S duomenys
Metai: 2020
Rida: 1254
Darbinis turis, l: 1.6

# Pavyzdys 3

Kodas:

#include <iostream>
using namespace std;

struct studentas
{
    string vardas;
    string pavarde;
    int amzius;
    int pazymiai[100] = { 0 };
    int paz_kiekis;

    studentas()
    {
        vardas = "";
        pavarde = "";
        amzius = 0;
        paz_kiekis = 0;
    }

    studentas(string vardas, string pavarde, int amzius)
    {
        this->vardas = vardas;
        this->pavarde = pavarde;
        this->amzius = amzius;
        this->paz_kiekis = 0;
    }

    studentas(string vardas, string pavarde, int amzius,
        int pazymiai[], int paz_kiekis)
    {
        this->vardas = vardas;
        this->pavarde = pavarde;
        this->amzius = amzius;
        for (int i = 0; i < paz_kiekis; i++)
        {
            this->pazymiai[i] = pazymiai[i];
        }
        this->paz_kiekis = paz_kiekis;
    }

    void isvedimas()
    {
        cout << "--------------------------------" << endl;
        cout << "STUDENTO DUOMENYS" << endl;
        cout << "Studentas(-e): " << vardas << " " << pavarde << endl;
        cout << "Amzius: " << amzius << endl;
        cout << "Pazymiai: ";
        for (int i = 0; i < paz_kiekis; i++)
        {
            cout << pazymiai[i] << " ";
        }
        cout << "\n--------------------------------\n\n";
    }
};

int main()
{
    studentas pirmas = studentas();
    pirmas.isvedimas();

    studentas antras = studentas("Tomas", "Tomauskas", 19);
    antras.isvedimas();

    studentas trecias = studentas("Petras", "Petrauskas", 20,
        new int[] {7, 8, 6, 5}, 4);
    trecias.isvedimas();

    return 0;
}

Rezultatai:

--------------------------------
STUDENTO DUOMENYS
Studentas(-e):
Amzius: 0
Pazymiai:
--------------------------------

--------------------------------
STUDENTO DUOMENYS
Studentas(-e): Tomas Tomauskas
Amzius: 19
Pazymiai:
--------------------------------

--------------------------------
STUDENTO DUOMENYS
Studentas(-e): Petras Petrauskas
Amzius: 20
Pazymiai: 7 8 6 5
--------------------------------

# Pavyzdys 4

Kodas:

#include <iostream>
using namespace std;

struct zmogus
{
    string vardas;
    string pavarde;
    double etatas;

    zmogus()
    {
        vardas = "";
        pavarde = "";
        etatas = 0;
    }

    zmogus(string vard, string pav, double etat)
    {
        vardas = vard;
        pavarde = pav;
        etatas = etat;
    }

    void isvedimas()
    {
        cout << vardas << " " << pavarde << ", dirba "
            << etatas << " etatu" << endl;
    }
};

struct projektas
{
    string pavadinimas;
    zmogus atsakingas_zmogus;
    int biudzetas;

    projektas(string pavadinimas, zmogus atsakingas, int biudzetas)
    {
        this->pavadinimas = pavadinimas;
        this->atsakingas_zmogus = atsakingas;
        this->biudzetas = biudzetas;
    }

    void isvedimas()
    {
        cout << "Projektas " << pavadinimas << ", kurio biudzetas "
            << biudzetas << " eur., turi atsakinga asmeni:\n";
        atsakingas_zmogus.isvedimas();
        cout << endl;
    }
};

int main()
{
    projektas laivas = projektas(
        "Laivas laivelis",
        zmogus("Ignas", "Ignavicius", 1),
        20000);
    laivas.isvedimas();

    return 0;
}

Rezultatai:

Projektas Laivas laivelis, kurio biudzetas 20000 eur., turi atsakinga asmeni:
Ignas Ignavicius, dirba 1 etatu

# Užduotys

# Užduotis 1

Papildykite žemiau nurodytą struktūrą su konstruktoriumi, kuris leistų į objektą sukelti visus reikiamus duomenis:

struct autobusas
{
    string modelis;
    int vietu_skaicius;
    int didziausias_greitis;
    double darbinis_turis;

    void isvedimas()
    {
        cout << "--------------------\n";
        cout << "Autobuso duomenys:\n"
            << "Modelis: " << modelis << endl
            << "Vietu skaicius: " << vietu_skaicius << endl
            << "Didziausias greitis: " << didziausias_greitis << " km/h\n"
            << "Darbinis turis: " << darbinis_turis << " l\n";
        cout << "--------------------\n\n";
    }
};

Susikurkite kelis objektus, kurie panaudotų aprašytą konstruktorių.

Išveskite šių sukurtų objektų informaciją, tam galite panaudoti jau aprašytą išvedimo funkciją.

# Užduotis 2

Papildykite žemiau nurodytą struktūrą šiais konstruktoriais:

  • Tuščias konstruktorius, kuris negauna jokių duomenų, tačiau nustato numatytąsias reikšmes kintamiesiems.
  • Konstruktorių, kuris gauna tik pavadinimą ir kainą.
  • Konstruktorių, kuris gauna visus struktūroje esančius duomenis (pavadinimas kaina, kiekiai sandėliuose, sandėlių kiekis).
struct preke
{
    string pavadinimas;
    double kaina;
    int kiekiai_sandeliuose[100] = { 0 };
    int sandeliu_kiekis;

    void isvedimas()
    {
        cout << "----------------------------\n";

        cout << "PREKES DUOMENYS\n";

        cout << "Preke " << pavadinimas << " kainuoja " << kaina << " eur./vnt.\n";
        cout << "Prekes likuciai sandeliuose: ";

        for (int i = 0; i < sandeliu_kiekis; i++)
        {
            cout << kiekiai_sandeliuose[i] << " vnt, ";
        }

        cout << "\n----------------------------\n";
    }
};

Susikurkite kelis objektus, su kuriais panaudotumėte visus aprašytus konstruktorius.

Išveskite šių sukurtų objektų informaciją, tam galite panaudoti jau aprašytą išvedimo funkciją.

# Užduotis 3

Papildykite žemiau nurodytą struktūrą bent 3 savo nuožiūra aprašytais konstruktoriais.

struct knyga
{
    string pavadinimas;
    string autorius;
    int puslapiu_sk;
    double kaina;
    int metai;

    void isvedimas()
    {
        cout << "KNYGOS INFORMACIJA\n";
        cout << "Knyga: " << pavadinimas << endl;
        cout << "Autorius: " << autorius << endl;
        cout << "Puslapiu skaicius: " << puslapiu_sk << endl;
        cout << "Kaina: " << kaina << " eur." << endl;
        cout << "Metai: " << metai << "\n\n";
    }
};

Susikurkite kelis objektus, su kuriais panaudotumėte visus aprašytus konstruktorius.

Išveskite šių sukurtų objektų informaciją, tam galite panaudoti jau aprašytą išvedimo funkciją.

# Struktūros: objektų masyvai (informacijas įvedimas ir gavimas / išvedimas)

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
#include <iomanip>
using namespace std;

struct zmogus
{
    string vardas;
    int amzius;
    double ugis;
};

int main()
{
    // duomenys

    zmogus zmones[10];
    int kiek;

    // ivedimas

    cout << "Kiek zmoniu duomenu norite suvesti? ";
    cin >> kiek;
    cout << endl;

    for (int i = 0; i < kiek; i++)
    {
        cout << i + 1 << "-asis zmogus" << endl;
        cout << "Vardas: ";
        cin >> zmones[i].vardas;
        cout << "Amzius: ";
        cin >> zmones[i].amzius;
        cout << "Ugis: ";
        cin >> zmones[i].ugis;
        cout << endl;
    }

    // isvedimas

    cout << "+-----------------+--------+---------+\n";
    cout << "| Vardas          | Amzius | Ugis, m |\n";
    cout << "+-----------------+--------+---------+\n";

    for (int i = 0; i < kiek; i++)
    {
        cout << "| " << setw(15) << left << zmones[i].vardas << " | "
            << setw(6) << left << zmones[i].amzius << " | "
            << setw(7) << left << zmones[i].ugis << " |\n";
    }

    cout << "+-----------------+--------+---------+\n";

    return 0;
}

Rezultatai:

Kiek zmoniu duomenu norite suvesti? 4

1-asis zmogus
Vardas: Indre
Amzius: 25
Ugis: 1.65

2-asis zmogus
Vardas: Paulius
Amzius: 24
Ugis: 1.78

3-asis zmogus
Vardas: Julija
Amzius: 30
Ugis: 1.72

4-asis zmogus
Vardas: Ignas
Amzius: 22
Ugis: 1.8

+-----------------+--------+---------+
| Vardas          | Amzius | Ugis, m |
+-----------------+--------+---------+
| Indre           | 25     | 1.65    |
| Paulius         | 24     | 1.78    |
| Julija          | 30     | 1.72    |
| Ignas           | 22     | 1.8     |
+-----------------+--------+---------+

# Pavyzdys 2

Praeito pavyzdžio kodas išskaidytas į funkcijas.

Kodas:

#include <iostream>
#include <iomanip>
using namespace std;

struct zmogus
{
    string vardas;
    int amzius;
    double ugis;
};

void ivedimas(zmogus zmones[], int & kiekis)
{
    cout << "Kiek zmoniu duomenu norite suvesti? ";
    cin >> kiekis;
    cout << endl;

    for (int i = 0; i < kiekis; i++)
    {
        cout << i + 1 << "-asis zmogus" << endl;
        cout << "Vardas: ";
        cin >> zmones[i].vardas;
        cout << "Amzius: ";
        cin >> zmones[i].amzius;
        cout << "Ugis: ";
        cin >> zmones[i].ugis;
        cout << endl;
    }
}

void isvedimas(zmogus zmones[], int kiekis)
{
    cout << "+-----------------+--------+---------+\n";
    cout << "| Vardas          | Amzius | Ugis, m |\n";
    cout << "+-----------------+--------+---------+\n";

    for (int i = 0; i < kiekis; i++)
    {
        cout << "| " << setw(15) << left << zmones[i].vardas << " | "
            << setw(6) << left << zmones[i].amzius << " | "
            << setw(7) << left << zmones[i].ugis << " |\n";
    }

    cout << "+-----------------+--------+---------+\n";
}

int main()
{
    zmogus zmones[10];
    int kiek = 0;

    ivedimas(zmones, kiek);
    isvedimas(zmones, kiek);

    return 0;
}

Rezultatai:

Kiek zmoniu duomenu norite suvesti? 3

1-asis zmogus
Vardas: Gintaras
Amzius: 22
Ugis: 1.8

2-asis zmogus
Vardas: Paulina
Amzius: 21
Ugis: 1.75

3-asis zmogus
Vardas: Ignas
Amzius: 23
Ugis: 1.9

+-----------------+--------+---------+
| Vardas          | Amzius | Ugis, m |
+-----------------+--------+---------+
| Gintaras        | 22     | 1.8     |
| Paulina         | 21     | 1.75    |
| Ignas           | 23     | 1.9     |
+-----------------+--------+---------+

# Pavyzdys 3

Kodas:

#include <iostream>
#include <iomanip>
using namespace std;

struct automobilis
{
    string marke;
    string modelis;
    int rida;
    int metai;
    double darbinis_turis;

    automobilis(string marke, string modelis, int rida,
        int metai, double darbinis_turis)
    {
        this->marke = marke;
        this->modelis = modelis;
        this->rida = rida;
        this->metai = metai;
        this->darbinis_turis = darbinis_turis;
    }
};

int main()
{
    automobilis automobiliai[] = {
        automobilis("Tesla", "S", 20145, 2017, 1.8),
        automobilis("Audi", "A4", 35488, 2019, 1.6),
        automobilis("BWM", "Emke", 64554, 2002, 2.2),
        automobilis("Opel", "Astra", 320719, 2008, 1.8)
    };

    int kiek = 4;

    cout << setw(15) << left << "Marke" << " "
        << setw(15) << "Modelis" << " "
        << setw(8) << "Metai" << " "
        << setw(8) << "Rida" << " "
        << "Darbinis turis, l" << endl;

    for (int i = 0; i < kiek; i++)
    {
        cout << setw(15) << left << automobiliai[i].marke << " "
            << setw(15) << automobiliai[i].modelis << " "
            << setw(8) << automobiliai[i].metai << " "
            << setw(8) << automobiliai[i].rida << " "
            << automobiliai[i].darbinis_turis << endl;
    }

    return 0;
}

Rezultatai:

Marke           Modelis         Metai    Rida     Darbinis turis, l
Tesla           S               2017     20145    1.8
Audi            A4              2019     35488    1.6
BWM             Emke            2002     64554    2.2
Opel            Astra           2008     320719   1.8

# Pavyzdys 4

Kodas:

#include <iostream>
#include <iomanip>
using namespace std;

struct preke
{
    string pavadinimas;
    double kaina;
    int kiekis;

    preke()
    {
        pavadinimas = "";
        kaina = 0;
        kiekis = 0;
    }

    preke(string pavadinimas, double kaina, int kiekis)
    {
        this->pavadinimas = pavadinimas;
        this->kaina = kaina;
        this->kiekis = kiekis;
    }

    void isvesti()
    {
        cout << setw(20) << left << pavadinimas << " "
            << kaina << " eur.    "
            << kiekis << " vnt." << endl;
    }
};

struct parduotuve
{
    string pavadinimas;
    preke prekes[100];
    int prekiu_kiekis;

    parduotuve(string pavadinimas, preke prekes[], int prekiu_kiekis)
    {
        this->pavadinimas = pavadinimas;
        for (int i = 0; i < prekiu_kiekis; i++)
        {
            this->prekes[i] = prekes[i];
        }
        this->prekiu_kiekis = prekiu_kiekis;
    }

    void isvedimas()
    {
        cout << "Parduotuves " << pavadinimas << " prekes:" << endl;
        for (int i = 0; i < prekiu_kiekis; i++)
        {
            prekes[i].isvesti();
        }
    }
};

int main()
{
    parduotuve maxima(
        "Maxima",
        new preke[]{
            preke("Piestukas", 1.49, 158),
            preke("Flomasteriai", 1.49, 24),
            preke("Sasiuvinys", 1.99, 487),
            preke("Trintukas", 0.49, 24),
        },
        4);

    maxima.isvedimas();

    return 0;
}

Rezultatai:

Parduotuves Maxima prekes:
Piestukas            1.49 eur.    158 vnt.
Flomasteriai         1.49 eur.    24 vnt.
Sasiuvinys           1.99 eur.    487 vnt.
Trintukas            0.49 eur.    24 vnt.

# Pavyzdys 5

Kodas:

#include <fstream>
using namespace std;

struct studentas
{
    string vardas;
    string pavarde;
    int amzius;
    int pazymiai[50];
    int paz_kiekis;
    bool ar_visi_teigiami;
};

void nuskaitymas(studentas studentai[], int & kiekis)
{
    ifstream failas("duomenys.txt");

    kiekis = 0;

    while (!failas.eof())
    {
        failas >> studentai[kiekis].vardas
            >> studentai[kiekis].pavarde
            >> studentai[kiekis].amzius;

        failas >> studentai[kiekis].paz_kiekis;
        studentai[kiekis].ar_visi_teigiami = true;

        for (int i = 0; i < studentai[kiekis].paz_kiekis; i++)
        {
            failas >> studentai[kiekis].pazymiai[i];

            if (studentai[kiekis].pazymiai[i] < 5)
            {
                studentai[kiekis].ar_visi_teigiami = false;
            }
        }

        kiekis++;
    }

    failas.close();
}

void isvedimas(studentas studentai[], int kiekis)
{
    ofstream rez("rezultatai.txt");

    for (int i = 0; i < kiekis; i++)
    {
        rez << i + 1 << "-asis studentas(-e)" << endl;
        rez << "Vardas ir pavarde: " << studentai[i].vardas
            << " " << studentai[i].pavarde << endl;
        rez << "Azmius: " << studentai[i].amzius << endl;
        rez << "Pazymiai: ";

        for (int j = 0; j < studentai[i].paz_kiekis; j++)
        {
            rez << studentai[i].pazymiai[j] << " ";
        }

        rez << endl;
        rez << "Ar visi pazymiai teigiami? "
            << (studentai[i].ar_visi_teigiami ? "taip" : "ne");
        rez << "\n\n";
    }

    rez.close();
}

int main()
{
    studentas studentai[20];
    int kiekis;

    nuskaitymas(studentai, kiekis);
    isvedimas(studentai, kiekis);

    return 0;
}
Tomas Tomauskas 20 3 8 7 9
Greta Gretuskyte 19 4 9 7 9 8
Povilas Povilauskas 21 3 8 7 8
Inga Ignauskyte 21 5 8 7 4 7 6
1-asis studentas(-e)
Vardas ir pavarde: Tomas Tomauskas
Azmius: 20
Pazymiai: 8 7 9 
Ar visi pazymiai teigiami? taip

2-asis studentas(-e)
Vardas ir pavarde: Greta Gretuskyte
Azmius: 19
Pazymiai: 9 7 9 8 
Ar visi pazymiai teigiami? taip

3-asis studentas(-e)
Vardas ir pavarde: Povilas Povilauskas
Azmius: 21
Pazymiai: 8 7 8 
Ar visi pazymiai teigiami? taip

4-asis studentas(-e)
Vardas ir pavarde: Inga Ignauskyte
Azmius: 21
Pazymiai: 8 7 4 7 6 
Ar visi pazymiai teigiami? ne


# Užduotys

# Užduotis 1

Sukurkite struktūrą knygos duomenims saugoti, kurioje būtų saugoma ši informacija:

  • Pavadinimas.
  • Autorius.
  • Kaina.
  • Puslapių skaičius.
  • Žanras.

Šioje struktūroje sukurkite konstruktorių, kuris leistų į objektą sukelti norimus duomenis.

Susikurkite šios struktūros objektų masyvą ir jį užpildykite duomenimis, pasinaudojant struktūros konstruktoriumi.

# Užduotis 2

Sukurkite struktūrą darbuotojo duomenims saugoti, kurioje būtų saugoma ši informacija:

  • Vardas.
  • Pavardė.
  • Atlyginimas.
  • Etatas.
  • Pareigos.

Sukurkite dvi funkcijas ne struktūroje:

  • Įvedimo funkcija, kurios pagalba vartotojas galėtų suvesti norimą kiekį darbuotojų ir informacijos apie juos.
  • Išvedimo funkcija, kuri išvestų visų turimų darbuotojų duomenis lentelės pavidalu.

Susikurkite šios struktūros objektų masyvą. Iškvieskite turimas įvedimo ir išvedimo funkcijas, perduodant turimą objektų masyvą ir kiekio kintamąjį.

# Užduotis 3

Antroje užduotyje parašytą programą pritaikykite darbui su failais.

# Užduotis 4 (sudėtingesnė)

Sukurkite struktūrą šiems studento duomenims saugoti:

  • Vardas.
  • Pavardė.
  • Amžius.
  • Pažymiai.

Sukurkite struktūrą šiems grupės duomenims saugoti:

  • Grupės kodas.
  • Aukštoji mokykla.
  • Studijų programa.
  • Studentai (studentų objektų masyvas).

Sukurkite šias dvi atskiras ir ne struktūrose esančias funkcijas:

  • Duomenų įvedimas ar nuskaitymas (pasirinktinai: suveda vartotojas konsolės pagalba arba nuskaitymas iš failo).
  • Duomenų išvedimas (pasirinktai: išvedama į konsolę norima forma arba išvedama į failą).

Sukurkite dviejų grupių objektus. Juos užpildykite duomenimis, bei išveskite (pasinaudojant turimomis įvedimo ir išvedimo funkcijomis).

# Struktūros: objektų masyvai (skaičiavimai)

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
#include <iomanip>
using namespace std;

struct zmogus
{
    string vardas;
    string pavarde;
    int amzius;
    double ugis;

    zmogus(string vardas, string pavarde, int amzius, double ugis)
    {
        this->vardas = vardas;
        this->pavarde = pavarde;
        this->amzius = amzius;
        this->ugis = ugis;
    }

    void isvedimas(string komentaras)
    {
        cout << komentaras << endl;
        cout << vardas << " " << pavarde
            << " (" << amzius << " m.) yra "
            << ugis << " m. ugio.\n\n";
    }
};

void isvedimas(string komentaras, zmogus zmones[], int kiekis)
{
    cout << komentaras << endl;
    cout << "-----------------------------------------\n";
    cout << "Vardas, pavarde        Amzius     Ugis, m\n";
    cout << "-----------------------------------------\n";

    for (int i = 0; i < kiekis; i++)
    {
        cout << setw(22) << left << zmones[i].vardas << " "
            << setw(10) << zmones[i].amzius << " "
            << zmones[i].ugis << endl;
    }

    cout << "-----------------------------------------\n\n";
}

zmogus vyriausias_zmogus(zmogus zmones[], int kiek)
{
    zmogus vyriausias = zmones[0];

    for (int i = 0; i < kiek; i++)
    {
        if (zmones[i].amzius > vyriausias.amzius)
        {
            vyriausias = zmones[i];
        }
    }

    return vyriausias;
}

zmogus zemiausias_zmogus(zmogus zmones[], int kiek)
{
    zmogus zemiausias = zmones[0];

    for (int i = 0; i < kiek; i++)
    {
        if (zmones[i].ugis < zemiausias.ugis)
        {
            zemiausias = zmones[i];
        }
    }

    return zemiausias;
}

double ugiu_suma(zmogus zmones[], int kiek)
{
    double suma = 0;

    for (int i = 0; i < kiek; i++)
    {
        suma += zmones[i].ugis;
    }

    return suma;
}

double ugiu_vidurkis(zmogus zmones[], int kiekis)
{
    return ugiu_suma(zmones, kiekis) / kiekis;
}

int main()
{
    zmogus zmones[] = {
        zmogus("Tomas", "Tomauskas", 23, 1.8),
        zmogus("Giedrius", "Giedriauskas", 25, 1.75),
        zmogus("Inga", "Ingauskiene", 24, 1.67),
        zmogus("Paulina", "Povilaityte", 20, 1.7),
        zmogus("Ignas", "Ignauskas", 19, 1.9)
    };

    int kiekis = 5;

    isvedimas("Pradiniai duomenys", zmones, kiekis);

    zmogus vyriausias = vyriausias_zmogus(zmones, kiekis);
    vyriausias.isvedimas("Vyriausias(-ia) zmogus");

    zemiausias_zmogus(zmones, kiekis).isvedimas("Zemiausias(-ia) zmogus");

    cout << "Ugiu suma: " << ugiu_suma(zmones, kiekis) << " m.\n\n";

    cout << "Ugiu vidurkis: " << ugiu_vidurkis(zmones, kiekis) << " m.\n\n";

    return 0;
}

Rezultatai:

Pradiniai duomenys
-----------------------------------------
Vardas, pavarde        Amzius     Ugis, m
-----------------------------------------
Tomas                  23         1.8
Giedrius               25         1.75
Inga                   24         1.67
Paulina                20         1.7
Ignas                  19         1.9
-----------------------------------------

Vyriausias(-ia) zmogus
Giedrius Giedriauskas (25 m.) yra 1.75 m. ugio.

Zemiausias(-ia) zmogus
Inga Ingauskiene (24 m.) yra 1.67 m. ugio.

Ugiu suma: 8.82 m.

Ugiu vidurkis: 1.764 m.

# Pavyzdys 2

Kodas:

#include <iostream>
using namespace std;

struct preke
{
    string pavadinimas;
    double kaina;
    double savikaina;
    int kiekis;

    preke(string pavadinimas, double kaina, double savikaina, int kiekis)
    {
        this->pavadinimas = pavadinimas;
        this->kaina = kaina;
        this->savikaina = savikaina;
        this->kiekis = kiekis;
    }

    void isvedimas()
    {
        cout << "Pavadinimas: " << pavadinimas << endl
            << "Kaina: " << kaina << " eur\n"
            << "Savikaina: " << savikaina << " eur\n"
            << "Kiekis: " << kiekis << " vnt.\n\n";
    }

    double pelningumas()
    {
        return (kaina - savikaina) * kiekis;
    }
};

void isvedimas(preke prekes[], int kiek)
{
    cout << "-------------------\n\n";

    for (int i = 0; i < kiek; i++)
    {
        cout << i + 1 << "-oji preke:\n\n";
        prekes[i].isvedimas();
    }

    cout << "-------------------\n\n";
}

preke didziausias_pelnas(preke prekes[], int kiek)
{
    preke did = prekes[0];

    for (int i = 0; i < kiek; i++)
    {
        if ((prekes[i].kaina - prekes[i].savikaina) > (did.kaina - did.savikaina))
        {
            did = prekes[i];
        }
    }

    return did;
}

int maziausias_kiekis(preke prekes[], int kiek)
{
    int maz = prekes[0].kiekis;

    for (int i = 0; i < kiek; i++)
    {
        if (prekes[i].kiekis < maz)
        {
            maz = prekes[i].kiekis;
        }
    }

    return maz;
}

preke pelningiausia_preke(preke prekes[], int kiek)
{
    preke pelningiausia = prekes[0];

    for (int i = 0; i < kiek; i++)
    {
        if (prekes[i].pelningumas() > pelningiausia.pelningumas())
        {
            pelningiausia = prekes[i];
        }
    }
    
    return pelningiausia;
}

int prekiu_kiekis_kuriu_daugiau_nei(preke prekes[], int kiekis, int daugiau_nei)
{
    int atrinktu_kiekis = 0;

    for (int i = 0; i < kiekis; i++)
    {
        if (prekes[i].kiekis > daugiau_nei)
        {
            atrinktu_kiekis++;
        }
    }

    return atrinktu_kiekis;
}

void skaiciavimai(preke prekes[], int kiekis)
{
    cout << "Didziausias pelnas (kaina - savikaina):\n\n";
    preke didz_pelnas = didziausias_pelnas(prekes, kiekis);
    didz_pelnas.isvedimas();
    cout << "Paskaiciuotas pelnas: "
        << didz_pelnas.kaina - didz_pelnas.savikaina << " eur\n\n";

    cout << "-------------------\n\n";

    cout << "Maziausias kiekis: " << maziausias_kiekis(prekes, kiekis)
        << " vnt.\n\n";

    cout << "-------------------\n\n";

    cout << "Pelningiausia preke (pardavus visus vnt, skaiciuojant pelna):\n\n";
    preke pelning = pelningiausia_preke(prekes, kiekis);
    pelning.isvedimas();
    cout << "Jos galimas pelningumas: " << pelning.pelningumas() << " eur\n\n";

    cout << "-------------------\n\n";

    cout << "Prekiu kiekis, kuriu daugiau nei 100 vnt.: "
        << prekiu_kiekis_kuriu_daugiau_nei(prekes, kiekis, 100) << "\n\n";

    cout << "-------------------\n\n";
}

int main()
{
    preke prekes[] = {
        preke("Dzemperis", 24.99, 10, 45),
        preke("Juodos kelnes", 15.99, 8, 158),
        preke("Sportbaciai", 26.49, 12.87, 215),
        preke("Kepure", 4.99, 2.5, 8),
        preke("Basutes", 3.49, 2.1, 78),
    };

    int kiekis = 5;

    isvedimas(prekes, kiekis);
    skaiciavimai(prekes, kiekis);

    return 0;
}

Rezultatai:

-------------------

1-oji preke:

Pavadinimas: Dzemperis
Kaina: 24.99 eur
Savikaina: 10 eur
Kiekis: 45 vnt.

2-oji preke:

Pavadinimas: Juodos kelnes
Kaina: 15.99 eur
Savikaina: 8 eur
Kiekis: 158 vnt.

3-oji preke:

Pavadinimas: Sportbaciai
Kaina: 26.49 eur
Savikaina: 12.87 eur
Kiekis: 215 vnt.

4-oji preke:

Pavadinimas: Kepure
Kaina: 4.99 eur
Savikaina: 2.5 eur
Kiekis: 8 vnt.

5-oji preke:

Pavadinimas: Basutes
Kaina: 3.49 eur
Savikaina: 2.1 eur
Kiekis: 78 vnt.

-------------------

Didziausias pelnas (kaina - savikaina):

Pavadinimas: Dzemperis
Kaina: 24.99 eur
Savikaina: 10 eur
Kiekis: 45 vnt.

Paskaiciuotas pelnas: 14.99 eur

-------------------

Maziausias kiekis: 8 vnt.

-------------------

Pelningiausia preke (pardavus visus vnt, skaiciuojant pelna):

Pavadinimas: Sportbaciai
Kaina: 26.49 eur
Savikaina: 12.87 eur
Kiekis: 215 vnt.

Jos galimas pelningumas: 2928.3 eur

-------------------

Prekiu kiekis, kuriu daugiau nei 100 vnt.: 2

-------------------

# Užduotys

# Užduotis 1

Žemiau nurodytą programą papildykite tokiais skaičiavimais ar paieškos funkcijomis:

  • Brangiausia knyga.
  • Pigiausia knyga.
  • Kainų skirtumas tarp pigiausios ir brangiausios knygos.
  • Seniausios knygos puslapių skaičius.
  • Bendra visų knygų puslapių suma.
  • Knygų kainų vidurkis.
  • Kiek yra knygų, parašytų 2010 ar vėlesniais metais (metus perduoti per funkcijos parametrus, kad funkcijai būtų galima nurodyti ir kitus metus).

Nepamirškite visų gautų atsakymų išvesti ekrane.

#include <iostream>
#include <iomanip>
using namespace std;

struct knyga
{
    string pavadinimas;
    string autorius;
    int puslapiu_sk;
    double kaina;
    int metai;

    knyga(string pavadinimas, string autorius, int puslapiai, double kaina, int metai)
    {
        this->pavadinimas = pavadinimas;
        this->autorius = autorius;
        this->puslapiu_sk = puslapiai;
        this->kaina = kaina;
        this->metai = metai;
    }

    void isvedimas(string komentaras)
    {
        cout << "---------------------------------\n";
        cout << komentaras << endl;
        cout << "Knyga: " << pavadinimas << endl;
        cout << "Autorius: " << autorius << endl;
        cout << "Puslapiu skaicius: " << puslapiu_sk << endl;
        cout << "Kaina: " << kaina << " eur." << endl;
        cout << "Metai: " << metai << "\n";
        cout << "---------------------------------\n\n";
    }
};

void isvedimas(string komentaras, knyga knygos[], int kiekis)
{
    cout << komentaras << endl;

    cout << "------------------------------------------------------------------------------------------------\n";
    cout << "Knygos pavadinimas                            Autorius           Psl. sk.   Kaina, eur  Metai\n";
    cout << "------------------------------------------------------------------------------------------------\n";

    for (int i = 0; i < kiekis; i++)
    {
        cout << setw(45) << left << knygos[i].pavadinimas << " "
            << setw(18) << knygos[i].autorius << " "
            << setw(10) << knygos[i].puslapiu_sk << " "
            << setw(11) << setprecision(2) << fixed << knygos[i].kaina << " "
            << knygos[i].metai << endl;
    }

    cout << "------------------------------------------------------------------------------------------------\n\n";
}

int main()
{
    knyga knygos[] = {
        knyga("Haris Poteris ir Azkabano kalinys", "Rowling", 250, 19.99, 2005),
        knyga("7 efektyviai veikianciu zmoniu iprociai", "P. Petraitis", 200, 15.49, 2018),
        knyga("Lietuvos istorija", "Istorikas Jonas", 320, 19.99, 2010),
        knyga("Knyga apie automobilius", "Meistras M", 145, 10, 2008),
        knyga("Programavimo ABC", "P. Progr", 149, 15.99, 2016),
        knyga("Bibliografija apie A", "Albertas B.", 246, 18.45, 2017)
    };

    int kiekis = 6;

    isvedimas("PRADINIAI DUOMENYS", knygos, kiekis);

    return 0;
}

# Užduotis 2

Žemiau nurodytą programą papildykite tokiais skaičiavimais ar paieškos funkcijomis:

  • Studento vidurkis.
  • Studentas su didžiausiu vidurkiu.
  • Studentas, turintis mažiausiai pažymių (mažiausias pažymių kiekis);
  • Studentas su ilgiausiu vardu.
  • Visų studentų pažymių vidurkis.
  • Didžiausias gautas bet kurio studento pažymys.
  • Mažiausias gautas bet kurio studento pažymys.
  • Kurio pažymio yra didžiausias atsikartojimas (pavyzdžiui: pažymys 8 kartojasi 6 kartus).

Nepamirškite visų gautų atsakymų išvesti ekrane.

Papildomai: papildykite šią programą su studento amžiumi ir sugalvokite dar bent dvi skaičiavimų / paieškos funkcijas.

#include <iostream>
#include <iomanip>
using namespace std;

struct studentas
{
    string vardas;
    string pavarde;
    int pazymiai[20];
    int paz_kiekis;

    studentas(string vardas, string pavarde, int pazymiai[], int paz_kiekis)
    {
        this->vardas = vardas;
        this->pavarde = pavarde;
        for (int i = 0; i < paz_kiekis; i++)
        {
            this->pazymiai[i] = pazymiai[i];
        }
        this->paz_kiekis = paz_kiekis;
    }

    void isvedimas(string komentaras)
    {
        cout << "---------------------------------\n";
        cout << komentaras << endl;
        cout << "Vardas: " << vardas << endl;
        cout << "Pavarde: " << pavarde << endl;
        cout << "Pazymiai: ";
        for (int i = 0; i < paz_kiekis; i++)
        {
            cout << pazymiai[i] << " ";
        }
        cout << endl;
        cout << "---------------------------------\n\n";
    }
};

void isvedimas(string komentaras, studentas studentai[], int kiekis)
{
    cout << komentaras << endl;

    cout << "---------------------------------------------------\n";
    cout << "Vardas          Pavarde         Pazymiai\n";
    cout << "---------------------------------------------------\n";

    for (int i = 0; i < kiekis; i++)
    {
        cout << setw(15) << left << studentai[i].vardas << " "
            << setw(15) << studentai[i].pavarde << " ";
        for (int j = 0; j < studentai[i].paz_kiekis; j++)
        {
            cout << studentai[i].pazymiai[j] << " ";
        }
        cout << endl;
    }

    cout << "---------------------------------------------------\n\n";
}

int main()
{
    studentas studentai[] = {
        studentas("Petras", "Petraitis", new int [] {7, 8, 6, 5, 4}, 5),
        studentas("Ignas", "Ignauskas", new int [] {8, 8, 9, 7, 5}, 5),
        studentas("Gintare", "Gintaryte", new int [] {9, 8, 9}, 3),
        studentas("Indre", "Indrute", new int [] {8, 7, 4, 8, 9, 6, 8}, 7),
        studentas("Jolanta", "Jolantyte", new int [] {7, 8, 7, 8, 9}, 5),
        studentas("Paulius", "Paulinskas", new int [] {9, 9, 8, 7, 9}, 5)
    };

    int kiekis = 6;

    isvedimas("PRADINIAI DUOMENYS", studentai, kiekis);

    return 0;
}

# Užduotis 3

Pasirinktą programą (užduotis 1 arba užduotis 2) pritaikykite darbui su failais.

# Užduotis 4 (laisva forma)

Sugalvokite savo norimą struktūrą su kuria pavyktų atlikti bent 5 skirtingus skaičiavimus ar paieškas.

# Struktūros: objektų masyvai (rikiavimas)

# Pavyzdžiai

# Pavyzdys 1

Rikiavimas pagal vieną savybę.

Kodas:

#include <iostream>
#include <iomanip>
using namespace std;

struct zmogus
{
    string vardas;
    string pavarde;
    int amzius;
    double ugis;

    zmogus(string vardas, string pavarde, int amzius, double ugis)
    {
        this->vardas = vardas;
        this->pavarde = pavarde;
        this->amzius = amzius;
        this->ugis = ugis;
    }

    void isvedimas(string komentaras)
    {
        cout << komentaras << endl;
        cout << vardas << " " << pavarde
            << " (" << amzius << " m.) yra "
            << ugis << " m. ugio.\n\n";
    }
};

void isvedimas(string komentaras, zmogus zmones[], int kiekis)
{
    cout << komentaras << endl;
    cout << "-----------------------------------------\n";
    cout << "Vardas, pavarde        Amzius     Ugis, m\n";
    cout << "-----------------------------------------\n";

    for (int i = 0; i < kiekis; i++)
    {
        cout << setw(22) << left << zmones[i].vardas << " "
            << setw(10) << zmones[i].amzius << " "
            << zmones[i].ugis << endl;
    }

    cout << "-----------------------------------------\n\n";
}

void rikiavimas(zmogus zmones[], int kiekis)
{
    bool rikiuoti = true;

    while (rikiuoti)
    {
        rikiuoti = false;

        for (int i = 0; i < kiekis - 1; i++)
        {
            if (zmones[i].amzius > zmones[i + 1].amzius)
            {
                swap(zmones[i], zmones[i + 1]);
                rikiuoti = true;
            }
        }
    }
}

int main()
{
    zmogus zmones[] = {
        zmogus("Tomas", "Tomauskas", 23, 1.8),
        zmogus("Giedrius", "Giedriauskas", 25, 1.75),
        zmogus("Inga", "Ingauskiene", 24, 1.67),
        zmogus("Paulina", "Povilaityte", 20, 1.7),
        zmogus("Ignas", "Ignauskas", 19, 1.9)
    };

    int kiekis = 5;

    isvedimas("Pradiniai duomenys", zmones, kiekis);
    rikiavimas(zmones, kiekis);
    isvedimas("Surikiuoti pagal amziu duomenys", zmones, kiekis);

    return 0;
}

Rezultatai:

Pradiniai duomenys
-----------------------------------------
Vardas, pavarde        Amzius     Ugis, m
-----------------------------------------
Tomas                  23         1.8
Giedrius               25         1.75
Inga                   24         1.67
Paulina                20         1.7
Ignas                  19         1.9
-----------------------------------------

Surikiuoti pagal amziu duomenys
-----------------------------------------
Vardas, pavarde        Amzius     Ugis, m
-----------------------------------------
Ignas                  19         1.9
Paulina                20         1.7
Tomas                  23         1.8
Inga                   24         1.67
Giedrius               25         1.75
-----------------------------------------

# Pavyzdys 2

Rikiavimas pagal dvi savybes (kai pirmas sutampa, tada pagal antrą).

Kodas:

#include <iostream>
#include <iomanip>
using namespace std;

struct zmogus
{
    string vardas;
    string pavarde;
    int amzius;
    double ugis;

    zmogus(string vardas, string pavarde, int amzius, double ugis)
    {
        this->vardas = vardas;
        this->pavarde = pavarde;
        this->amzius = amzius;
        this->ugis = ugis;
    }

    void isvedimas(string komentaras)
    {
        cout << komentaras << endl;
        cout << vardas << " " << pavarde
            << " (" << amzius << " m.) yra "
            << ugis << " m. ugio.\n\n";
    }
};

void isvedimas(string komentaras, zmogus zmones[], int kiekis)
{
    cout << komentaras << endl;
    cout << "-----------------------------------------\n";
    cout << "Vardas, pavarde        Amzius     Ugis, m\n";
    cout << "-----------------------------------------\n";

    for (int i = 0; i < kiekis; i++)
    {
        cout << setw(22) << left << zmones[i].vardas << " "
            << setw(10) << zmones[i].amzius << " "
            << zmones[i].ugis << endl;
    }

    cout << "-----------------------------------------\n\n";
}

void rikiavimas(zmogus zmones[], int kiekis)
{
    bool rikiuoti = true;

    while (rikiuoti)
    {
        rikiuoti = false;

        for (int i = 0; i < kiekis - 1; i++)
        {
            if (zmones[i].amzius > zmones[i + 1].amzius
                || (zmones[i].amzius == zmones[i + 1].amzius &&
                    zmones[i].vardas > zmones[i + 1].vardas))
            {
                swap(zmones[i], zmones[i + 1]);
                rikiuoti = true;
            }
        }
    }
}

int main()
{
    zmogus zmones[] = {
        zmogus("Tomas", "Tomauskas", 23, 1.8),
        zmogus("Giedrius", "Giedriauskas", 25, 1.75),
        zmogus("Inga", "Ingauskiene", 25, 1.67),
        zmogus("Paulina", "Povilaityte", 20, 1.7),
        zmogus("Adomas", "Adomaitis", 25, 1.9)
    };

    int kiekis = 5;

    isvedimas("Pradiniai duomenys", zmones, kiekis);
    rikiavimas(zmones, kiekis);
    isvedimas("Surikiuoti pagal amziu ir varda duomenys", zmones, kiekis);

    return 0;
}

Rezultatai:

Pradiniai duomenys
-----------------------------------------
Vardas, pavarde        Amzius     Ugis, m
-----------------------------------------
Tomas                  23         1.8
Giedrius               25         1.75
Inga                   25         1.67
Paulina                20         1.7
Adomas                 25         1.9
-----------------------------------------

Surikiuoti pagal amziu ir varda duomenys
-----------------------------------------
Vardas, pavarde        Amzius     Ugis, m
-----------------------------------------
Paulina                20         1.7
Tomas                  23         1.8
Adomas                 25         1.9
Giedrius               25         1.75
Inga                   25         1.67
-----------------------------------------

# Užduotys

# Užduotis 1

Žemiau nurodytoje programoje aprašykite rikiavimo funkciją, kuri duomenis surikiuotų pagal pavardę didėjimo tvarka.

Išveskite pradinius ir surikiuotus duomenis.

Papildomai: taip pat, pamėginkite išrikiuoti kiekvieno studento pažymius didėjimo tvarka.

#include <iostream>
#include <iomanip>
using namespace std;

struct studentas
{
    string vardas;
    string pavarde;
    int pazymiai[20];
    int paz_kiekis;

    studentas(string vardas, string pavarde, int pazymiai[], int paz_kiekis)
    {
        this->vardas = vardas;
        this->pavarde = pavarde;
        for (int i = 0; i < paz_kiekis; i++)
        {
            this->pazymiai[i] = pazymiai[i];
        }
        this->paz_kiekis = paz_kiekis;
    }
};

void isvedimas(string komentaras, studentas studentai[], int kiekis)
{
    cout << komentaras << endl;

    cout << "---------------------------------------------------\n";
    cout << "Vardas          Pavarde         Pazymiai\n";
    cout << "---------------------------------------------------\n";

    for (int i = 0; i < kiekis; i++)
    {
        cout << setw(15) << left << studentai[i].vardas << " "
            << setw(15) << studentai[i].pavarde << " ";
        for (int j = 0; j < studentai[i].paz_kiekis; j++)
        {
            cout << studentai[i].pazymiai[j] << " ";
        }
        cout << endl;
    }

    cout << "---------------------------------------------------\n\n";
}

int main()
{
    studentas studentai[] = {
        studentas("Petras", "Petraitis", new int [] {7, 8, 6, 5, 4}, 5),
        studentas("Ignas", "Ignauskas", new int [] {8, 8, 9, 7, 5}, 5),
        studentas("Gintare", "Gintaryte", new int [] {9, 8, 9}, 3),
        studentas("Indre", "Indrute", new int [] {8, 7, 4, 8, 9, 6, 8}, 7),
        studentas("Jolanta", "Jolantyte", new int [] {7, 8, 7, 8, 9}, 5),
        studentas("Paulius", "Paulinskas", new int [] {9, 9, 8, 7, 9}, 5)
    };

    int kiekis = 6;

    isvedimas("PRADINIAI DUOMENYS", studentai, kiekis);

    return 0;
}

# Užduotis 2

Žemiau nurodytą programą papildykite taip, kad knygas būtų galima rikiuoti tokiais būdais:

  • Pagal puslapių skaičių mažėjimo tvarka.
  • Pagal kainą didėjimo tvarka.

Abiejais atvejais, kai skaičius (puslapiai ar kaina) sutampa - antras rikiavimo kriterijus yra pagal pavadinimą didėjimo tvarka.

Išveskite pradinius ir surikiuotus duomenis.

#include <iostream>
#include <iomanip>
using namespace std;

struct knyga
{
    string pavadinimas;
    string autorius;
    int puslapiu_sk;
    double kaina;
    int metai;

    knyga(string pavadinimas, string autorius, int puslapiai, double kaina, int metai)
    {
        this->pavadinimas = pavadinimas;
        this->autorius = autorius;
        this->puslapiu_sk = puslapiai;
        this->kaina = kaina;
        this->metai = metai;
    }
};

void isvedimas(string komentaras, knyga knygos[], int kiekis)
{
    cout << komentaras << endl;

    cout << "------------------------------------------------------------------------------------------------\n";
    cout << "Knygos pavadinimas                            Autorius           Psl. sk.   Kaina, eur  Metai\n";
    cout << "------------------------------------------------------------------------------------------------\n";

    for (int i = 0; i < kiekis; i++)
    {
        cout << setw(45) << left << knygos[i].pavadinimas << " "
            << setw(18) << knygos[i].autorius << " "
            << setw(10) << knygos[i].puslapiu_sk << " "
            << setw(11) << setprecision(2) << fixed << knygos[i].kaina << " "
            << knygos[i].metai << endl;
    }

    cout << "------------------------------------------------------------------------------------------------\n\n";
}

int main()
{
    knyga knygos[] = {
        knyga("Haris Poteris ir Azkabano kalinys", "Rowling", 250, 19.99, 2005),
        knyga("7 efektyviai veikianciu zmoniu iprociai", "P. Petraitis", 200, 15.49, 2018),
        knyga("Lietuvos istorija", "Istorikas Jonas", 320, 19.99, 2010),
        knyga("Knyga apie automobilius", "Meistras M", 145, 10, 2008),
        knyga("Programavimo ABC", "P. Progr", 149, 15.99, 2016),
        knyga("Bibliografija apie A", "Albertas B.", 246, 18.45, 2017)
    };

    int kiekis = 6;

    isvedimas("PRADINIAI DUOMENYS", knygos, kiekis);

    return 0;
}

# Užduotis 3 (laisva forma)

Pasirinkite vieną iš anksčiau parašytų programų, kurioje būtų objektų masyvai ir išrikiuokite duomenis norima tvarka.

Papildomai: naudokite du kriterijus rikiavimui.