140 likes | 407 Views
Struktūros duomenų tipas. Struktūros aprašymas, kintamieji. Struktūros duomenų tipu (angl. struct ) vadinamas įvairių duomenų elementų rinkinys. Pascal programavimo kalbų šeimoje tai vadinama įrašu (angl. record ).
E N D
Struktūros aprašymas, kintamieji • Struktūros duomenų tipu (angl. struct) vadinamas įvairių duomenų elementų rinkinys. • Pascal programavimo kalbų šeimoje tai vadinama įrašu (angl. record). • Struktūros tipo kintamasis laiko atmintyje tarpusavyje logiškai susietus duomenis.
Struktūros tipo aprašo sintaksė • struct vardas { kintamųjų aprašas }; Pvz.: struct pirkinys { stringpav; // pavadinimas double kaina; // kaina int kiekis; // kiekis double suma; // pinigų suma kintamųjų sąrašas tipo pavadinimas Struktūros tipo bazinis žodis
Struktūros tipo aprašo sintaksė • Struktūros tipo kintamieji aprašomi naudojant sukurto tipo vardą, pavyzdžiui, Pirkinys A, B; • Struktūros tipo kintamojo kopiją galima gauti priskyrimo veiksmu: B = A • Tai vienintelis galimas veiksmas atliekamas su struktūros tipo kintamuoju. • Kiti veiksmai galimi tik su konkrečiais duomenimis.
Struktūros tipo aprašo sintaksė • Struktūros tipo kintamojo vardas sudaromas iš struktūros tipo kintamojo vardo ir vidinio kintamojo vardo, tarp kurių rašomas taškas. Pvz.: A.pav= “Agurkas”; A.kaina= 2.56; A.kiekis= 15; A.suma= A.kaina* A.kiekis;
Struktūros tipo aprašo sintaksė • Jeigukintamojo A atskirasreikšmeslaikokitikintamieji, juosgalimapanaudotipriskyrimo veiksmuose. Pvz.: A.pav= vardas;// kopijuojama kintamojo vardas reikšmė (simbolių eilutė) A.kaina= kainaNauja; A.kiekis= kiekisNaujas;
Struktūros kintamojo rašymas • Struktūros kintamojo reikšmės rodomos ekrane arba rašomos į failą taip pat, kaip ir kitų tipų kintamųjų reikšmės. • Tik neužmirškite visur rašyti sudėtinį kintamojo vardą. cout << A.pav <<“ “ <<A.kaina <<“ “ << A.kiekis << “ “ << A.suma
Struktūros kintamojo skaitymas • Kai faile duomenys surašyti eilutėmis arba visos reikšmės yra skaitinės, skaitoma tomis pačiomis priemonėmis, kaip ir kitų tipų kintamuosius. • Kai struktūroje yra eilutės tipo kintamieji ir jų reikšmės surašytos ne atskiromis eilutėmis, o su kitomis reikšmėmis, tuomet skaitymo metu reikia atpažinti, kur baigėsi simbolių eilutė. Pvz.: Agurkas 2.56 5
Struktūros kintamojo skaitymas • Jei pavadinimai yra iš kelių žodžių, tuomet duomenų nuskaitymas gali tapti sudėtingu. Pvz.: Pekino salotos 2.56 5 Raudonieji gūžiniai kopūstai 2.56 5
Struktūros kintamojo skaitymas • Skaitant skaičius, visi tarpai iki skaičiaus praleidžiami. • Jei po skaičiaus rašoma simbolių eilutė, tarpas turi didelę reikšmę, nes reikia žinoti, keli iš jų priklauso simbolių eilutei, o keli – ne. • Tada patogu naudoti pozicinį duomenų surašymą, kai kiekviena duomenų reikšmė pateikiama pradedant sutarta pozicija. Nuo 1 pozicijos Nuo 32 pozicijos Nuo 45 pozicijos Pekino salotos 2.56 5 Raudonieji gūžiniai kopūstai 12.15 5
Struktūros kintamojo skaitymas Nuo 1 pozicijos Nuo 32 pozicijos Nuo 45 pozicijos Pekino salotos 2.56 5 Raudonieji gūžiniai kopūstai 12.15 5 Pvz.: ifstreamfd(“Duom.txt”)’ charsimb[30]; fd.get (simb, sizeofsimb); A.pav= simb; fd >> A.kiekis >> A.kaina; fd.ignore(); fd.get (simb, sizeofsimb); B.pav= simb; fd >> B.kiekis >>B.kaina; fd.ignore(); fd.close(); Prisiminkite fd.ignore(80, ‘\n’); fd.ignore(); Naudojame, kai reikia pašalinti iš įvesties srauto visus simbolius iki eilutės galo (arba 1 simbolį – 2 pvz.) ir pereiti į naują eilutę. Norint visus tarpo simbolius iki eilutės pradžios praleisti naudokite manipuliatorių ws fd >> ws;
Struktūrų masyvas Aprašomas taip pat, kaip ir skaičių masyvas Aprašome: Pirkinys A[50]; Kreipiniai į struktūrų masyvo elementus: A[5], A[i], A[k+2] Kreipiniai į elementų laukus: A[5].pav, A[i].kiekis, A[k+r].pav
Užduotis Tarkime, kad yra toks duomenų failas Duom.txt: Olandiškas sūris 12.5 45 Vilniaus duona 1.5 12 Pienas 2.5 25 Parašykite programą, kuri nuskaitytų duomenis iš failo į struktūrų masyvą, bei skaičiuotų, kiek kainavo mokiniui pirkinys. Rezultatus surašykite į failą. Rezultatų failas Rez.txt: MOKĖJIMAI ------------------------------------------ Olandiškas sūris 562.5 Lt Vilniaus duona 18 Lt Pienas 62.5 Lt ------------------------------------------- Mokinys sumokėjo: 643 Lt