Pristatymo data: 2004 11 02 Atliko: IF 4/11 gr. Studentas Mantas Vaidotas Priėmė: 1. Laboratorinio darbo L3 ataskaita 1.1 UŽDUOTIS (L3B-328) Duoti du masyvai. Su kiekvienu masyvu atlikite tokius veiksmus. Pirmųjų k elementų sumą įrašykite vietoje elementų didesnių už šią sumą. k įvedimui naudojamas Edit komponentas. Suskaičiuokite ir atspausdinkite kiek elementų pakeitėte. Atspausdinkite k reikšmes, pradinius ir galutinius masyvus. 1.2 PROGRAMOS APRAŠYMAS Komponentas Keičiama savybė Reikšmė Paskirtis Form1 Caption Masyvai Pagrindinė programos forma Button1 Caption Vykdyti Veiksmams vykdyti Button2 Caption Baigti Baigti programos darbą Label1 Caption k= Parodyti k kintamųjų skaičių Label2 Caption Masyvas 1 Paaiškinimams Label3 Caption Masyvas 2 Paaiškinimams Label4 Caption Prieš pakeitimus Paaiškinimams Label5 Caption Po pakeitimų Paaiškinimams Label6 Caption Parodyti elementų skaičių masyve A Label7 Caption Parodyti elementų skaičių masyve B Label8 Caption Masyvas 1 Paaiškinimams Label9 Caption Masyvas 2 Paaiškinimams Memo1 Lines Masyvo reikšmėms Memo2 Lines Masyvo reikšmėms Memo3 Lines Masyvo reikšmėms Memo4 Lines Masyvo reikšmėms  Klasės tekstas Unite.h //-------------------------------------------------------------- #ifndef Unit1H #define Unit1H //-------------------------------------------------------------- #include #include #include #include #include using namespace std; #include //-------------------------------------------------------------- const Cmk = 100; // Maksimalus masyvo el. kiekis class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; // Vykdyti TEdit *Edit1; // Kintamąjam k įvesti TLabel *Label1; // "k =" TMemo *Memo1; // Masyvo reikšmėms TMemo *Memo2; // Masyvo reikšmėms TLabel *Label2; // Masyvo pavadinimui TLabel *Label3; // Masyvo pavadinimui TLabel *Label4; // Pagalbine informacija TMemo *Memo3; // Masyvo reikšmėms TLabel *Label5; // Pagalbine informacija TButton *Button2; // Baigti TMemo *Memo4; // Masyvo reikšmėms TLabel *Label6; // Masyvas 1 pakeistu el. skaicius TLabel *Label7; // Masyvas 2 pakeistu el. skaicius TLabel *Label8; // Masyvo pavadinimui TLabel *Label9; // Masyvo pavadinimui void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: // User declarations int A[Cmk]; // 1 masyvas int B[Cmk]; // 2 masyvas int nA; // 1 masyvo el. kiekis int npA; // Pakeistu el kiekis A masyve int nB; // 2 masyvo el. kiekis int npB; // Pakeistu el kiekis B masyve int k; // k kintamasis void IvestiMasyva(const char Cfv[], int Mas[], int &kiek); // Skaito masyva iš failo void Pakeisti(int Mas[],int kiek,int &np); // Pakeičia elementus didesnius už k elementų sumą void SpausdintiPradiniMasyva(const char Dfv[]); // Spausdina rezultatus prieš pakeitimą void SpausdintiPoPakeitimuMasyva(const char Dfv[]); // Spausdina rezultatus po pakeitimo public: // User declarations __fastcall TForm1(TComponent* Owner); }; //-------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //-------------------------------------------------------------- #endif  Metodų aprašai void TForm1::IvestiMasyva(const char Cfv[],int Mas[], int &kiek) Kol ne failo pabaiga arba kol masyvo elementų skaičius mažesnis už konstantą (Cmk = 100) skaitomi duomenys prie esamo kiekio pridėjus vienetą. Pradžia void IvestiMasyva(const char Cfv[],int Mas[], int &kiek) Atidaryti (fd); Kintamasis kiek = 0 Kol (ne fd pabaiga ir kiek < Cmk); Skaityti (fd, Mas[kiek]); Kiek = Kiek + 1; Uždaryti failą fd; Pabaiga void TForm1::SpausdintiPradiniMasyva(const char Dfv[]) Įvedami į failą masyvas 1 ir masyvas 2 duomenys. Pradžia void SpausdintiPradiniMasyva(const char Dfv[]) Atidaryti (fr); Spausdinti ("----------------------------"); Spausdinti ("| PRIES PAKEITIMUS |"); Spausdinti ("----------------------------"); Spausdinti (" MASYVAS 1 "); i = 0, nA -1 Įvesti (fr, A[i]); Spausdinti (" MASYVAS 2 "); i = 0, nB -1 Įvesti (fr, B[i]); Uždaryti failą fr; Pabaiga void TForm1::SpausdintiPoPakeitimuMasyva(const char Dfv[]) Senieji duomenys papildomi naujeisiais duomenimis. Pradžia void SpausdintiPradiniMasyva(const char Dfv[]) Atidaryti (fr); Spausdinti ("----------------------------"); Spausdinti ("| Po PAKEITIMU |"); Spausdinti ("----------------------------"); Spausdinti (" MASYVAS 1 "); i = 0, nA -1 Spausdinti (fr, A[i]); Spausdinti (" MASYVAS 2 "); i = 0, nB -1 Spausdinti (fr, B[i]); Uždaryti failą fr; Pabaiga void TForm1::Pakeisti(int Mas[],int kiek,int &np) Vykdo pakeitimus masyvuose Pradžia void Pakeisti(int Mas[],int kiek,int &np) sum = 0, np = 0 T k > kiek F nk = kiek; nk = k; i = 0, nk – 1; sum += Mas[i]; nk > 0 i = 0, kiek – 1; Mas[i] > sum; Mas[i] = sum; np + 1; Pabaiga 2.1 PROGRAMOS TEKSTAS //-------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //-------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //-------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------Skaito masyvus iš failo------------------------- void TForm1::IvestiMasyva(const char Cfv[],int Mas[], int &kiek) { ifstream fd(Cfv); // Atidaromas failas kiek = 0; // Pradinis el. kiekis while (!fd.eof() && kiek < Cmk) // Skaito, tol, kol nuskaito maksimalų el. Kiekį { fd >> Mas[kiek]; kiek++; // Skaito elementus } fd.close(); // Uždaro failą } //--------------Spausdina masyvus prieš pakeitimą--------------- void TForm1::SpausdintiPradiniMasyva(const char Dfv[]) { ofstream fr; fr.open (Dfv); // Atidaro failą fr << "----------------------------" << endl; fr << "| PRIES PAKEITIMUS |" << endl; fr << "----------------------------" << endl; fr << ""<< endl; fr << " MASYVAS 1 " << endl; Memo1->Lines->Clear(); // Išvalo Memo1 langa for (int i = 0; i < nA; i++) // Spausdina A masyvo elementus { fr << setw(5) << A[i]; Memo1->Lines->Add(IntToStr(A[i])); } fr << endl; // Spausdina gaile nauja eilute fr << ""<< endl; fr << " MASYVAS 2 " << endl; Memo2->Lines->Clear(); // Isvalo Memo2 langa for (int i = 0; i < nB; i++) // Spausdina B masyvo elementus { fr << setw(5) << B[i]; Memo2->Lines->Add(IntToStr(B[i])); } fr << endl; // Spausdina gaile nauja eilute fr.close(); // Uždaro faila } //----------------Spausdina masyvus po pakeitimo---------------- void TForm1::SpausdintiPoPakeitimuMasyva(const char Dfv[]) { ofstream fr; fr.open (Dfv,ios::app); // Atidaro failą papildymui Memo3->Lines->Clear(); // Išvalo Memo3 langa fr << ""<< endl; fr << "----------------------------" << endl; fr << "| PO PAKEITIMU |" << endl; fr << "----------------------------" << endl; fr << ""<< endl; fr << " MASYVAS 1 " << endl; for (int i = 0; i < nA; i++) // Spausdina 1 masyvo elementus po pakeitimo { fr << setw(5) << A[i]; Memo3->Lines->Add(IntToStr(A[i])); } fr << endl; Memo4->Lines->Clear(); // Isvalo Memo4 langĄ fr << ""<< endl; fr << " MASYVAS 2 " << endl; for (int i = 0; i < nB; i++) { fr << setw(5) << B[i]; Memo4->Lines->Add(IntToStr(B[i])); } fr << endl; // Spausdina gaile nauja eilute fr << ""<< endl; fr << "-----------------------------" << endl; //--Spausdina pakeistų elementų skaicių abiejuose masyvuose----- Label6->Caption = "Masyvas 1 pakeista " + IntToStr(npA) + " elementu"; Label7->Caption = "Masyvas 2 pakeista " + IntToStr(npB) + " elementu"; fr << "Masyvas 1 Pakeista " << npA << " elementu" << endl; fr << "Masyvas 2 Pakeista " << npB << " elementu" << endl; fr << "k =" << k << endl; fr.close(); // Uždaro failą } //----------------Vykdo pakeitimus masyvuose-------------------- void TForm1::Pakeisti(int Mas[],int kiek,int &np) { int sum = 0; // Elementų sumos pradinė reiksmė int nk; // Maksimalus k elementų kiekis np = 0; if ( k > kiek) // Patikrina, ar k nevirsyja elementų kiekio nk = kiek; else nk = k; for (int i = 0; i < nk; i++) // Suranda k el. kiekį sum += Mas[i]; if (nk > 0) // Jei susumuotas nors vienas elementas for (int i = 0; i < kiek; i++) // Pakeicia el. didesnius uz sumą if (Mas[i] > sum) { Mas[i] = sum; np++; } } //----------------------Vykdo visus veiksmus-------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { IvestiMasyva("Masyvas1.txt",A,nA); // Skaito 1 masyva IvestiMasyva("Masyvas2.txt",B,nB); // Skaito 2 masyva SpausdintiPradiniMasyva("Rez.txt"); // Spausdina pradinius duomenis k = StrToInt(Edit1->Text); // Išsaugo k reiksme k kintamajame Pakeisti(A,nA,npA); // Vykdo pakeitimus 1 masyve Pakeisti(B,nB,npB); // Vykdo pakeitimus 2 masyve SpausdintiPoPakeitimuMasyva("Rez.txt"); // Spausdina rezultatus po pakeitimų } //------------------------Baigia programa----------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Close(); // Uzdaro programa } //-------------------------------------------------------------- Duomenų failai: Masyvas 1 3 4 56 2 11 342 32 121 445 454 0 Masyvas 2 7 34 2 3 324 234 2 34 27 5 534 Rezultatų failas ---------------------------- | PRIES PAKEITIMUS | ---------------------------- MASYVAS 1 3 4 56 2 11 342 32 121 445 454 0 MASYVAS 2 7 34 2 3 324 234 2 34 27 5 534 0 ---------------------------- | PO PAKEITIMU | ---------------------------- MASYVAS 1 3 4 56 2 11 63 32 63 63 63 0 MASYVAS 2 7 34 2 3 43 43 2 34 27 5 43 0 ----------------------------- Masyvas 1 Pakeista 4 elementu Masyvas 2 Pakeista 3 elementu k =3