rendered paste bodyPristatymo 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 <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <fstream>
using namespace std;
#include <iomanip>
//--------------------------------------------------------------
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 <vcl.h>
#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