Sunteți pe pagina 1din 29

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA

Centrul de Excelenta in Informatica si Tehnologii Informationale

RAPORT
PENTRU PRACTICA DE INIŢIERE
SPECIALITATEA INFORMATICĂ
TEMA : №12 HRUBE
Cuprins
1. INTRODUCERE.........................................................................................................................................................3
2.ENUNŢUL SARCINII INDIVIDUALE......................................................................................................................4
3.DESCRIEREA MODULUI DE ELABORARE A APLICATIEI................................................................................6
4.LISTINGUL PROGRAMULUI...................................................................................................................................6
4.1. FORMA "DUBLEAZA LINIE".....................................................................................................................20
4.2. FORMA"DUBLEAZA COLOANA".............................................................................................................20
4.3. FORMA "ACTUALIZARE"..........................................................................................................................21
4.4. FORMA "MAXIM BUTOAIE"......................................................................................................................22
4.5. FORMA "MEDIU BUTOAIE".......................................................................................................................22
4.6. FORMA "SORTARE"....................................................................................................................................23
4.7. FORMA "COPIERE".....................................................................................................................................23
4.8.FORMA "PATRAT"........................................................................................................................................23
5.REZULTATELE TESTĂRII SUBPROGRAMELOR...............................................................................................24
5.1.DATELE DE INTRARE...................................................................................................................................24
5.2.DATELE DE IEȘIRE........................................................................................................................................24
8. CONCLUZIA............................................................................................................................................................28
9.BIBLIOGRAFIE.......................................................................................................................................................29
1. INTRODUCERE

Pe parcursul practicii am creat un program care este alcătuit din 8 cerințe care au fost
stabilite pentru a le rezolva cu succes. Pentru început aceste cerințe au părut a fi simple și
ușor de realizat însă pe parcursul programării au apărut unele probleme care au influențat
timpul în care a fost realizat programul. Nu este atât de eficientă teoria fără practică așa că
am avut nevoie de această experiență ca pentru viitor să cunoaștem cum putem aplica
cunoștințele noastre în domeniul dat.
Aplicația Borland C++ Builder a fost destul de captivantă și a creat o impresie bună
asupra persoanelor care au lucrat cu ea. În urma elaborării programului am crescut ca
programator și elaborator de produs program.
Programul pe care l-am avut la practică este un program în domeniul bazelor de date,
această bază de date are ca obiectiv realizarea anumitor calcule mai profunde asupra lucrului
cu matricele bidimensionale, excluderea liniilor, înserarea liniilor, introducerea datelor în
fișiere, etc.
Această practică a avut ca scop principal de a ne vedea ca viitorii angajați și de a ne
asuma toate responsabilitățile și obligațiile sale.
2.ENUNŢUL SARCINII INDIVIDUALE
12. *Hrube. Planul unor hrube de formă dreptunghiulară cu dimensiunea nm (n, m ≤ 50)
este format din pătrăţele cu latura 1 (vezi fig. 1). Pătrăţelele haşurate reprezintă obstacolele
(pereţi, butoaie), iar cele nehaşurate – spaţiile libere. Pătrăţelele de pe perimetrul planului,
cu excepţia celor de intrare sau ieşire, sunt haşurate prin definiţie. În formă numerică planul
hrubelor este redat prin tabloul A cu n linii şi m coloane. Elementele acestui tablou au
următoarea semnificaţie: 0 –spaţiu liber; 1 –perete; 2 –butoi, 3 –intrarea în hrube; 4 –
ieşirea din hrube.
Informaţiile despre zonele hrubelor în studiu
sunt înregistrate în fişierul text Hrube.in, care
conţine pe prima linie numerele întregi n, m
separate prin spaţiu. Pe fiecare din următoarele n
linii se conţin câte m numere întregi din mulţimea
{0, 1, 2, 3, 4}, reprezentând elementele A[i,j] (1
≤ i ≤ n, 1 ≤ j ≤ m), separate prin câte un spaţiu.
Să se creeze o aplicație care să realizeze, la
solicitarea utilizatorului, următoarele prescripţii:

(Design-ul aplicației vă aparține).

1) Dublează (pentru securitate) lăţimea unui


perete marginal al hrubelor; poziţia peretelui (nord/sud / vest/est) de dublat se va preciza de
la tastatură;

2) Actualizează (prin substituire în fişierul de intrare) conţinutul unei linii/coloane din


planul hrubelor; alternativa aleasă şi numărul de ordine al liniei/coloanei de actualizat se vor
preciza de la tastatură;

3) Determină linia/coloana în care sunt amplasate un număr maximal de butoaie;


4) Află numărul mediu de butoaie amplasate în zonele fiecărei linii pare a hrubelor;
5) Afişează pe ecran lista coloanelor în ordinea ascendentă a numerelor de butoaie
amplasate în hrube pe coloane; Datele se vor sorta prin metoda interclasării.

6) Creează fişierul Butoi.txt, prin copierea tuturor componentelor fişierului Hrube.in, cu


excepţia cifrelor de 2, care se vor înlocui respectiv prin denumiri ale soiurilor de vinuri,
citite de la tastatură;
7) Găseşte în reţeaua hrubelor un pătrat de arie maximală, ce conţine pe diagonala
principală doar butoaie; la ecran se va afişa lungimea L a laturii şi coordonatele colţurilor
stânga –jos ale pătratului găsit;
8) Rezolvă problema. După o vizită la renumitele hrube de la Cricova, un informatician
a construit un robot care lucrează în hrube. Robotul poate executa doar instrucţiunile SUS,
JOS, DREAPTA, STANGA, conform cărora el se deplasează în unul din pătrăţele vecine.
Elaboraţi un subprogram, care, cunoscând planul hrubelor, deplasează robotul prin
încăperile subterane, de la intrarea în hrube la ieşire. Colecţia de vinuri fiind foarte bogată,
nu se cere vizitarea obligatorie a tuturor încăperilor subterane.
Exemplu:
Date de intrare. Fişierul text Hrube.in, descris Hrube.in Hrube.out
79 SUS
anterior.
1 1 1 1 1 1 1 1 1 DREAPTA
Date de ieşire. Fişierul text Hrube.out va conţine 1 0 0 2 0 0 0 0 1 DREAPTA
pe fiecare linie câte una din instrucţiunile SUS, 1 0 2 0 0 2 0 2 1 DREAPTA
JOS, DREAPTA, STANGA, scrise în ordinea 1 0 0 0 2 0 0 0 1 DREAPTA
executării lor de către robot. Dacă problema admite 1 0 2 0 2 0 2 0 1 SUS
mai multe soluţii, în fişierul de ieşire se va scrie 1 0 0 0 0 0 2 0 1 SUS
1 3 1 1 1 1 1 4 1 DREAPTA
doar una, oricare din ele.
DREAPTA
JOS
JOS
3.DESCRIEREA MODULUI DE ELABORARE A APLICATIEI
Elaborarea acestei aplicații în Borland c++ constă din următorii pași :
 Crearea unei forme principale pe care doar vizualizăm datele din fișierul textual
Hrube.txt.
 Cu ajutorul unui meniu creăm pe rînd cîte o formă nouă pentru fiecare punct din
problemă de practică, astfel oferind aplicației o mobilitate mai bună.
 Fiecare punct este realizat cu un scop , mobilitate maximă si minimul de timp pentru
execuția aplicației.
 Pentru a evita repetarea unuia și aceluiași cod sunt scrise funcții aparte care sunt
apelate în caz de necesitate.
 Fiecare formă și element al formei sunt editate pentru a oferi utilizatorului o conexiune
mai bună cu aplicația.

4.LISTINGUL PROGRAMULUI
#include <vcl.h>
#pragma hdrstop

#include "uPraktika3.h"
#include "uMax.h"
#include "uSredUroj.h"
#include "uRabotnik.h"
#include "uDelRow.h"
#include "uDelCol.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
const int nmax = 20;
AnsiString FileName1, FileName2;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------
int GetData (int f, AnsiString *st)
{
unsigned char buf[256];
unsigned char *p = buf;
int n;
int len = 0;
do
n = FileRead(f, p, 1);
while ((n != 0)&&(*p == ' '));

while ((n != 0)&&(*p != ' ')){


if (*p == '\r'){
n = FileRead(f, p, 1);
break;
}
len++;
p++;
n = FileRead(f, p, 1);
}
*p = '\0';
if (len != 0)
st->printf("%s", buf);
return len;
}
//---------------------------------------------------------------------------
void GetRC(int f, int &n1, int &m)
{
unsigned char buf[256];
unsigned char *p = buf;

int n,i=0,j=0;
do
{
n = FileRead(f, p, 1);

if (n != 0)
{
if (*p == '\n') i++;
if ((*p == '\n') || (*p == ' ')) j++;
}
}
while (n != 0);
n1=i;
m=j/n1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Tab1Sizes()
{

StringGrid1->Width = (StringGrid1->ColCount * (StringGrid1->DefaultColWidth+2))-1;


StringGrid1->Height = (StringGrid1->RowCount * (StringGrid1->DefaultRowHeight+2))-
2;
StringGrid1->ScrollBars = ssNone;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Tab2Sizes()
{

StringGrid2->Width = (StringGrid2->ColCount * (StringGrid2->DefaultColWidth+2))-1;


StringGrid2->Height = (StringGrid2->RowCount * (StringGrid2->DefaultRowHeight+2))-
2;
StringGrid2->ScrollBars = ssNone;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Label1->Visible = true;
Edit1->Visible = true;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
Label2->Visible = true;
Edit2->Visible = true;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)


{

if (Key==VK_BACK) return;

if (Key==VK_RETURN)
{
Button4->SetFocus();
return;
}
if ( (Edit1->Text).Length() != 0 ) Button4->Visible = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)


{
if (Key==VK_BACK) return;

if (Key==VK_RETURN)
{
Button3->SetFocus();
return;
}

if ( (Edit2->Text).Length() != 0 ) Button3->Visible = true;


}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)


{
StringGrid2->Visible = true;

int f;
int ls;

AnsiString st;

if (Edit2->Text.Length() ==0 ) ShowMessage();

else
{
FileName2=Edit2->Text;

if ( FileExists(FileName2) )
f = FileOpen(FileName2,fmOpenRead);

else {
ShowMessage();
return;
}

if ( f != -1 )
{
GetRC(f,NRows,MColumns);
StringGrid2->Visible = true;
StringGrid2->RowCount = NRows + 1;
StringGrid2->ColCount = MColumns + 1;
FileClose(f);
}

else
{
ShowMessage(
Edit2->Text = "";
Edit2->SetFocus();
}

if ( FileExists(FileName2) )
f = FileOpen(FileName2,fmOpenRead);

else ShowMessage();//f = FileCreate(FileName);

if ( f != -1 )
{
for(int i=0; i<NRows; i++)
for(int j=0; j<MColumns; j++)
{
ls=GetData(f,&st);

if(ls) StringGrid2->Cells[j+1][i+1]=StrToInt(st);
}

for(int i=0; i<NRows; i++)


StringGrid2->Cells[0][i+1] = i+1;

for(int j=0; j<MColumns; j++)


StringGrid2->Cells[j+1][0] = j+1;

FileClose(f);
}
else
{
ShowMessage("");
Edit2->Text = "";
Edit2->SetFocus();
}

Tab2Sizes();
}

if (StringGrid1->Visible == true && StringGrid2->Visible == true)


{
N4->Enabled = true;
N9->Enabled = true;
N12->Enabled = true;
N15->Enabled = true;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)


{
StringGrid1->Visible = true;

int f;
int ls;
AnsiString st;

if (Edit1->Text.Length() ==0 ) ShowMessage("");


else
{

FileName1=Edit1->Text;

if ( FileExists(FileName1) )
f = FileOpen(FileName1,fmOpenRead);
else
{
ShowMessage("f = FileCreate(FileName);
return;
}
if ( f != -1 )
{
GetRC(f,NRows,MColumns);
StringGrid1->Visible = true;
StringGrid1->RowCount = NRows + 1;
StringGrid1->ColCount = MColumns + 1;
FileClose(f);
}
else
{

Edit1->Text = "";
Edit1->SetFocus();
}

if ( FileExists(FileName1) )
f = FileOpen(FileName1,fmOpenRead);
else ShowMessage("f = FileCreate(FileName);

if ( f != -1 )
{
for(int i=0; i<NRows; i++)
for(int j=0; j<MColumns; j++)
{
ls=GetData(f,&st);
if(ls) StringGrid1->Cells[j+1][i+1]=st;
}

for(int i=0; i<NRows; i++)


StringGrid1->Cells[0][i+1] = i+1;
for(int j=0; j<MColumns; j++)
StringGrid1->Cells[j+1][0] = j+1;

FileClose(f);
}
else
{
ShowMessage();
Edit1->Text = "";
Edit1->SetFocus();
}

Tab1Sizes();

}
if (StringGrid1->Visible == true && StringGrid2->Visible == true)
{
N4->Enabled = true;
N9->Enabled = true;
N12->Enabled = true;
N15->Enabled = true;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N10Click(TObject *Sender)


{
Form2->FormRef = Form1;
Form2->Show();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::N11Click(TObject *Sender)


{
Form3->FormRef = Form1;
Form3->Show();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N17Click(TObject *Sender)


{
Form4->FormRef = Form1;
Form4->Show();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N13Click(TObject *Sender)


{
int k=0;
int flag;
AnsiString der[nmax*nmax],
der[k]="0";

for(int i=1; i<=NRows; i++)


for(int j=1; j<=MColumns; j++)
{
int flag = 0;

for(int t=0; t<=k;t++)


if (StringGrid1->Cells[j][i] == der[t]) flag++;

if (flag == 0)
{
der[k]= StringGrid1->Cells[j][i];
k++;
}
}

for(int i=0; i<k-1; i++)


for(int j=0; j<k-i-1; j++)
if (der[j]>der[j+1])
{
spisok = der[j];
der[j] = der[j+1];
der[j+1] = spisok;
}

for(int t=0; t<k;t++)


spisok= spisok + "\n" + der[t];
ShowMessage(spisok);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::N7Click(TObject *Sender)


{

NRows++;
StringGrid1->RowCount ++;
StringGrid2->RowCount ++;

for(int j=1; j<=MColumns; j++)


{
StringGrid1->Cells[j][NRows] = "";
StringGrid2->Cells[j][NRows] = "";
}

StringGrid1->Cells[0][NRows] = NRows;
StringGrid2->Cells[0][NRows] = NRows;

Tab1Sizes();
Tab2Sizes();

Button1->Visible = true;
Button2->Visible = true;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::File1Rewrite(int f)
{
AnsiString str_ln="\x0D\x0A";
AnsiString str_sp=" ";
ShowMessage(NRows);
for(int i=1; i<=NRows; i++)

for(int j=1; j<=MColumns; j++)


{
FileWrite(f,(StringGrid1->Cells[j][i]).c_str(),(StringGrid1->Cells[j]
[i]).Length());
if (j == MColumns )
FileWrite(f,str_ln.c_str(),str_ln.Length());
else FileWrite(f,str_sp.c_str(),str_sp.Length());
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::File2Rewrite(int f)
{
AnsiString str_ln="\x0D\x0A";
AnsiString str_sp=" ";

for(int i=1; i<=NRows; i++)

for(int j=1; j<=MColumns; j++)


{
FileWrite(f,(StringGrid2->Cells[j][i]).c_str(),(StringGrid2->Cells[j]
[i]).Length());
if (j == MColumns )
FileWrite(f,str_ln.c_str(),str_ln.Length());
else FileWrite(f,str_sp.c_str(),str_sp.Length());
}
}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)


{
int f1;

if(FileExists(FileName1)) DeleteFile(FileName1);

f1 = FileCreate (FileName1);

if (f1!=-1)
{
File1Rewrite(f1);
FileClose(f1);
Button1->Visible = false;
}
else
ShowMessage);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)


{
int f2;
if(FileExists(FileName2)) DeleteFile(FileName2);

f2 = FileCreate (FileName2);

if (f2!=-1)
{
File2Rewrite(f2);
FileClose(f2);
Button2->Visible = false;
}
else
ShowMessage);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N18Click(TObject *Sender)


{
NRows++;
StringGrid1->RowCount ++;
StringGrid2->RowCount ++;

for(int i=NRows; i>2; i--)


for(int j=1; j<=MColumns; j++)
{
StringGrid1->Cells[j][i] = StringGrid1->Cells[j][i-1];
StringGrid2->Cells[j][i] = StringGrid2->Cells[j][i-1];
}

for(int j=1; j<=MColumns; j++)


{
StringGrid1->Cells[j][1] = "";
StringGrid2->Cells[j][1] = "";
}

StringGrid1->Cells[0][NRows] = NRows;
StringGrid2->Cells[0][NRows] = NRows;

Tab1Sizes();
Tab2Sizes();

Button1->Visible = true;
Button2->Visible = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N8Click(TObject *Sender)


{
MColumns++;
StringGrid1->ColCount ++;
StringGrid2->ColCount ++;

for(int i=1; i<=NRows; i++)


{
StringGrid1->Cells[MColumns][i] = "";
StringGrid2->Cells[MColumns][i] = "";
}

StringGrid1->Cells[MColumns][0] = MColumns;
StringGrid2->Cells[MColumns][0] = MColumns;

Tab1Sizes();
Tab2Sizes();

Button1->Visible = true;
Button2->Visible = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N19Click(TObject *Sender)


{
MColumns++;
StringGrid1->ColCount ++;
StringGrid2->ColCount ++;

for(int j=MColumns; j>2; j--)


for(int i=1; i<=NRows; i++)
{
StringGrid1->Cells[j][i] = StringGrid1->Cells[j-1][i];
StringGrid2->Cells[j][i] = StringGrid2->Cells[j-1][i];
}

for(int i=1; i<=NRows; i++)


{
StringGrid1->Cells[1][i] = "";
StringGrid2->Cells[1][i] = "";
}

StringGrid1->Cells[MColumns][0] = MColumns;
StringGrid2->Cells[MColumns][0] = MColumns;

Tab1Sizes();
Tab2Sizes();

Button1->Visible = true;
Button2->Visible = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N5Click(TObject *Sender)


{
Form5->FormRef = Form1;
Form5->Show();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N6Click(TObject *Sender)


{
Form6->FormRef = Form1;
Form6->Show();
}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Click(TObject *Sender)


{
Edit1->Text="";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2Click(TObject *Sender)


{
Edit2->Text="";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)


{
double g[100],h[100],mmax,nmax,nmax1,mmax1;
int i,j,l;
mmax=0;
mmax1=0;

for( int i=1; i<StringGrid1->RowCount;i++) {


g[i]=0;
for(int j=1; j<StringGrid1->ColCount; j++)
if (StringGrid1->Cells[i][j]==2){
g[i]=g[i]+StrToInt(StringGrid1->Cells[j][i]); }
if (g[i]>mmax) { mmax=g[i]; nmax=i;} }

for( int i=1; i<StringGrid1->ColCount;i++) {


h[i]=0;
for(int j=1; j<StringGrid1->RowCount; j++)
if (StringGrid1->Cells[i][j]==2)
h[i]=h[i]+StrToInt(StringGrid1->Cells[i][j]);
if (h[i]>mmax1) { mmax1=h[i]; nmax1=i;} }

Edit3->Text=nmax;
Edit4->Text=nmax1;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)


{
Double k;
int i,j,l;
k=0;
l=0;

for( int i=1; i<StringGrid1->ColCount;i++)


for(int j=1; j<StringGrid1->RowCount; j++)
if ((j%2==0) && (StringGrid1->Cells[i][j]==2))
k=k+StrToInt(StringGrid1->Cells[i][j]);

for( int i=1; i<StringGrid1->ColCount;i++)


for(int j=1; j<StringGrid1->RowCount; j++)
if ((j%2==0) && (StringGrid1->Cells[i][j]==2)) l++;

Edit5->Text=k/l;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)


{
double g;
WideString str;
TStringList *sl = new TStringList;
for(int i = 1 ; i<StringGrid1->RowCount ;++i)
{ g=0;
for(int j = 1; j< StringGrid1->ColCount;++j){
g=g+StrToInt(StringGrid1->Cells[j][i]);
str +=StringGrid1->Cells[j][i]+ " "; }
sl->Add(str);
str = "" ;
str = "";
}
sl->SaveToFile("Butoi.txt");
delete sl;
ShowMessage("Filul sa salvat cu succes");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button8Click(TObject *Sender)


{
Form1->Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)


{
Form1->Color=clBlack;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button9Click(TObject *Sender)


{
double g[20],h,max[20],mm[20];
int i,j,l;
Memo1->Visible=True;
for( int i=1; i<StringGrid1->ColCount;i++) {
h=0;
for(int j=1; j<StringGrid1->RowCount; j++)
if(StringGrid1->Cells[i][j]==2)
h=h+StrToInt(StringGrid1->Cells[i][j]);
max[i]=h;
mm[i]=i;
}
int aux;AnsiString s;
for(i=1;i<StringGrid1->ColCount;i++) {
for(j=i+1;j<StringGrid1->ColCount;j++)
if(max[i]>max[j])
{aux=mm[i];
mm[i]=mm[j];
mm[j]=aux;} s=s+AnsiString(mm[i])+" ";}
Memo1->Lines->Add(s);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button10Click(TObject *Sender)


{
int rn = StrToInt(Edit6 -> Text);
NRows++;
StringGrid1->RowCount ++;

for ( int i = NRows; i>rn; i--)


for ( int j = 1; j <= MColumns; j++)
{
StringGrid1->Cells[j][i] = StringGrid1->Cells[j][i-1];
}
for (int j=1; j<=MColumns; j++)
{
StringGrid1->Cells[1][rn] = "1";
StringGrid1->Cells[2][rn] = "3";
StringGrid1->Cells[3][rn] = "1";
StringGrid1->Cells[4][rn] = "1";
StringGrid1->Cells[5][rn] = "4";
StringGrid1->Cells[6][rn] = "1";
}
StringGrid1->Cells[0][NRows] = NRows;

Edit6->Text="";

StringGrid1->Width = (StringGrid1->ColCount * (StringGrid1->DefaultColWidth+2))-1;


StringGrid1->Height = (StringGrid1->RowCount * (StringGrid1->DefaultRowHeight+2))-2;
StringGrid1->ScrollBars = ssNone;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button11Click(TObject *Sender)


{
int rn = StrToInt(Edit7->Text);
MColumns++;
StringGrid1->ColCount ++;

for(int j=MColumns; j>rn; j--)


for(int i=1; i<=NRows; i++)
{
StringGrid1->Cells[j][i] = StringGrid1->Cells[j-1][i];
}

for(int i=1; i<=NRows; i++)


{
StringGrid1->Cells[rn][i] = "1";
}

StringGrid1->Cells[MColumns][0] = MColumns;
Edit7->Text="";
StringGrid1->Width = (StringGrid1->ColCount * (StringGrid1->DefaultColWidth+2))-1;
StringGrid1->Height = (StringGrid1->RowCount * (StringGrid1->DefaultRowHeight+2))-2;
StringGrid1->ScrollBars = ssNone;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button12Click(TObject *Sender)


{
StringGrid1->Visible = true;

int f;
int ls;
AnsiString st;

if (Edit1->Text.Length() ==0 ) ShowMessage("Ââåäèòå èìÿ );


else
{

FileName1=Edit1->Text;

if ( FileExists(FileName1) )
f = FileOpen(FileName1,fmOpenRead);
else
{
ShowMessage("");//f = FileCreate(FileName);
return;
}
if ( f != -1 )
{
GetRC(f,NRows,MColumns);
StringGrid1->Visible = true;
StringGrid1->RowCount = NRows + 1;
StringGrid1->ColCount = MColumns + 1;
FileClose(f);
}
else
{
ShowMessage("");
Edit1->Text = "";
Edit1->SetFocus();
}

if ( FileExists(FileName1) )
f = FileOpen(FileName1,fmOpenRead);
else ShowMessage("");//f = FileCreate(FileName);

if ( f != -1 )
{
for(int i=0; i<NRows; i++)
for(int j=0; j<MColumns; j++)
{
ls=GetData(f,&st);
if(ls) StringGrid1->Cells[j+1][i+1]=st;
}

for(int i=0; i<NRows; i++)


StringGrid1->Cells[0][i+1] = i+1;

for(int j=0; j<MColumns; j++)


StringGrid1->Cells[j+1][0] = j+1;
FileClose(f);
}
else
{
ShowMessage("");
Edit1->Text = "";
Edit1->SetFocus();
}

Tab1Sizes();

}
if (StringGrid1->Visible == true && StringGrid2->Visible == true)
{
N4->Enabled = true;
N9->Enabled = true;
N12->Enabled = true;
N15->Enabled = true;
}
}
4.1. FORMA "DUBLEAZA LINIE"
int rn = StrToInt(Edit6 -> Text);
NRows++;
StringGrid1->RowCount ++;

for ( int i = NRows; i>rn; i--)


for ( int j = 1; j <= MColumns; j++)
{
StringGrid1->Cells[j][i] = StringGrid1->Cells[j][i-1];
}
for (int j=1; j<=MColumns; j++)
{
StringGrid1->Cells[1][rn] = "1";
StringGrid1->Cells[2][rn] = "3";
StringGrid1->Cells[3][rn] = "1";
StringGrid1->Cells[4][rn] = "1";
StringGrid1->Cells[5][rn] = "4";
StringGrid1->Cells[6][rn] = "1";
}
StringGrid1->Cells[0][NRows] = NRows;

Edit6->Text="";

StringGrid1->Width = (StringGrid1->ColCount * (StringGrid1->DefaultColWidth+2))-1;


StringGrid1->Height = (StringGrid1->RowCount * (StringGrid1->DefaultRowHeight+2))-2;
StringGrid1->ScrollBars = ssNone;
4.2. FORMA"DUBLEAZA COLOANA"
int rn = StrToInt(Edit7->Text);
MColumns++;
StringGrid1->ColCount ++;

for(int j=MColumns; j>rn; j--)


for(int i=1; i<=NRows; i++)
{
StringGrid1->Cells[j][i] = StringGrid1->Cells[j-1][i];
}
for(int i=1; i<=NRows; i++)
{
StringGrid1->Cells[rn][i] = "1";
}

StringGrid1->Cells[MColumns][0] = MColumns;
Edit7->Text="";
StringGrid1->Width = (StringGrid1->ColCount * (StringGrid1->DefaultColWidth+2))-1;
StringGrid1->Height = (StringGrid1->RowCount * (StringGrid1->DefaultRowHeight+2))-2;
StringGrid1->ScrollBars = ssNone;
4.3. FORMA "ACTUALIZARE"
StringGrid1->Visible = true;

int f;
int ls;
AnsiString st;

if (Edit1->Text.Length() ==0 )
else
{

FileName1=Edit1->Text;

if ( FileExists(FileName1) )
f = FileOpen(FileName1,fmOpenRead);
else
{
ShowMessage(!");//f = FileCreate(FileName);
return;
}
if ( f != -1 )
{
GetRC(f,NRows,MColumns);
StringGrid1->Visible = true;
StringGrid1->RowCount = NRows + 1;
StringGrid1->ColCount = MColumns + 1;
FileClose(f);
}
else
{
Edit1->Text = "";
Edit1->SetFocus();
}

if ( FileExists(FileName1) )
f = FileOpen(FileName1,fmOpenRead);
else ShowMessage();//f = FileCreate(FileName);

if ( f != -1 )
{
for(int i=0; i<NRows; i++)
for(int j=0; j<MColumns; j++)
{
ls=GetData(f,&st);
if(ls) StringGrid1->Cells[j+1][i+1]=st;
}
for(int i=0; i<NRows; i++)
StringGrid1->Cells[0][i+1] = i+1;

for(int j=0; j<MColumns; j++)


StringGrid1->Cells[j+1][0] = j+1;

FileClose(f);
}
else
{
Edit1->Text = "";
Edit1->SetFocus();
}

Tab1Sizes();

}
if (StringGrid1->Visible == true && StringGrid2->Visible == true)
{
N4->Enabled = true;
N9->Enabled = true;
N12->Enabled = true;
N15->Enabled = true;
}
}
4.4. FORMA "MAXIM BUTOAIE"
double g[100],h[100],mmax,nmax,nmax1,mmax1;
int i,j,l;
mmax=0;
mmax1=0;

for( int i=1; i<StringGrid1->RowCount;i++) {


g[i]=0;
for(int j=1; j<StringGrid1->ColCount; j++)
if (StringGrid1->Cells[i][j]==2){
g[i]=g[i]+StrToInt(StringGrid1->Cells[j][i]); }
if (g[i]>mmax) { mmax=g[i]; nmax=i;} }

for( int i=1; i<StringGrid1->ColCount;i++) {


h[i]=0;
for(int j=1; j<StringGrid1->RowCount; j++)
if (StringGrid1->Cells[i][j]==2)
h[i]=h[i]+StrToInt(StringGrid1->Cells[i][j]);
if (h[i]>mmax1) { mmax1=h[i]; nmax1=i;} }

Edit3->Text=nmax;
Edit4->Text=nmax1;
4.5. FORMA "MEDIU BUTOAIE"
Double k;
int i,j,l;
k=0;
l=0;

for( int i=1; i<StringGrid1->ColCount;i++)


for(int j=1; j<StringGrid1->RowCount; j++)
if ((j%2==0) && (StringGrid1->Cells[i][j]==2))
k=k+StrToInt(StringGrid1->Cells[i][j]);

for( int i=1; i<StringGrid1->ColCount;i++)


for(int j=1; j<StringGrid1->RowCount; j++)
if ((j%2==0) && (StringGrid1->Cells[i][j]==2)) l++;

Edit5->Text=k/l;

4.6. FORMA "SORTARE"


double g[20],h,max[20],mm[20];
int i,j,l;
Memo1->Visible=True;
for( int i=1; i<StringGrid1->ColCount;i++) {
h=0;
for(int j=1; j<StringGrid1->RowCount; j++)
if(StringGrid1->Cells[i][j]==2)
h=h+StrToInt(StringGrid1->Cells[i][j]);
max[i]=h;
mm[i]=i;
}
int aux;AnsiString s;
for(i=1;i<StringGrid1->ColCount;i++) {
for(j=i+1;j<StringGrid1->ColCount;j++)
if(max[i]>max[j])
{aux=mm[i];
mm[i]=mm[j];
mm[j]=aux;} s=s+AnsiString(mm[i])+" ";}
Memo1->Lines->Add(s);
}
4.7. FORMA "COPIERE"
double g;
WideString str;
TStringList *sl = new TStringList;
for(int i = 1 ; i<StringGrid1->RowCount ;++i)
{ g=0;
for(int j = 1; j< StringGrid1->ColCount;++j){
g=g+StrToInt(StringGrid1->Cells[j][i]);
str +=StringGrid1->Cells[j][i]+ " "; }
sl->Add(str);
str = "" ;
str = "";
}
sl->SaveToFile("Butoi.txt");
delete sl;
ShowMessage("Filul sa salvat cu succes");
}
4.8.FORMA "PATRAT"
double g[100],h[100],mmax,nmax,nmax1,mmax1;
int i,j,l;
mmax=0;
mmax1=0;

for( int i=1; i<StringGrid1->RowCount;i++) {


g[i]=0;
for(int j=1; j<StringGrid1->ColCount; j++)
if (StringGrid1->Cells[i][j]==2){
g[i]=g[i]+StrToInt(StringGrid1->Cells[j][i]); }
if (g[i]>mmax) { mmax=g[i]; nmax=i;} }

for( int i=1; i<StringGrid1->ColCount;i++) {


h[i]=0;
for(int j=1; j<StringGrid1->RowCount; j++)
if (StringGrid1->Cells[i][j]==2)
h[i]=h[i]+StrToInt(StringGrid1->Cells[i][j]);
if (h[i]>mmax1) { mmax1=h[i]; nmax1=i;} }
ShowMessage("Patratul nu exista");

5.REZULTATELE TESTĂRII SUBPROGRAMELOR

5.1.DATELE DE INTRARE
Pentru a putea folosi aplicația creată este nevoie să introducem datele în fișierul textual : "Hrube.in"

5.2.DATELE DE IEȘIRE
Ceea ce vedem la deschiderea aplicației este prima formă:

La accesarea butonului Deschide datele din fișierul Hrube.in.txt se vor afișa în forma noastră în tabelul cu
celule:
La introducerea numărului rîndului pe care dorim să-l dublăm și la tastarea butonului Rind se va dubla
rîndul dorit:

La introducerea numărului coloanei pe care dorim să o dublăm și la tastarea butonului Coloana se va dubla
coloana dorită:

La tastarea butonului Actulaizare datele din fișierul Hrube.in.txt se vor actualiza în program automat:
La tastarea butonului Maxim butoaie se va afișa rîndul și coloana pe care sunt plasate maxim butoaie:

La tastarea butonului Mediu butoaie se va afișa numărul mediu de butoaie de pe rîndurile pare:

Accesînd butonul Sortare se va afișa pe ecran lista coloanelor în ordinea ascendentă a numerelor de butoaie
amplasate în hrube pe coloane:
Accesînd butonul Copiere se vor copia datele din fișierul Hrube.in.txt în fișierul Butoi.txt și se va afișa un
mesaj Filul a fost salvat

Pentru a găsi un pătrat în hrube tastăm butonul Patrat iar în caz că nu va fi găsit se va afișa un mesaj
corespunzător:
8. CONCLUZIA

Această practică s-a dovedit a fi destul de folositoare avînd ca scop principal aprofundarea
cunoștințelor acumulate pe parcursul întregului an. Am înțeles multe lucruri care pe
parcursul anului nu am reușit să le înțeleg.
  Cu ajutorul acestei practici am putut înţelege mai bine cum lucrează programul. Am
înţeles cum e mai bine să fac programul ca să fie mai eficient şi cît mai mic în volum. La fel
am înţeles că trebuie să te atîrni destul de serios faţă de aceea ce faci (de program), pentru al
face mai plăcut la folosire şi mai uşor de înţeles. Mi-au apărut unele idei pe viitor la care mă
gândeam înainte dar nu ştiam cum să le fac în program.
La rîndul său, practica de instruire imită întregul process de elaborare a unui program
complex, permite studentului să evolueze în rolul de elaborator şi organizator al proiectului.
Dacă pe parcursul anului am acumulat o anumită cantitate de informații atunci în timpul
practicii am avut ocazia să aplicăm acele cunoștințe.
Practica de specialitate are ca obiectiv realizarea unui program de sine stătător pentru a
avea posibilitatea de a înțelege la ce nivel suntem și cît de eficient putem să programăm.
Pentru început cerințele păruse complicate dar cu timpul am reușit să trec peste acele greutăți
și am reușit să le corectez.
9.BIBLIOGRAFIE

1. I. Bolun, I. Covalenco. Bazele informaticii aplicate, ediţia a III-a, Chişinău, Editura


ASEM, 2005.
2. Gh. Bostan. Culegere de probleme de informatică, Chişinău , Editura "Lumina.
3. A. Braicov. Turbo Pascal. Culegere de probleme, Chişinău, Editura "Prut Internaţional",
2007.
4. S.Corlat, L.Ivanov, V.Bîrsan. Informatica, Ghid de implementare a curriculumului
modernizat, pentru treapta liceală, Chişinău, "Cartier", 2010.

S-ar putea să vă placă și