Documente Academic
Documente Profesional
Documente Cultură
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 nm (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:
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 == ' '));
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()
{
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Label1->Visible = true;
Edit1->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
Label2->Visible = true;
Edit2->Visible = true;
}
//---------------------------------------------------------------------------
if (Key==VK_BACK) return;
if (Key==VK_RETURN)
{
Button4->SetFocus();
return;
}
if ( (Edit1->Text).Length() != 0 ) Button4->Visible = true;
}
//---------------------------------------------------------------------------
if (Key==VK_RETURN)
{
Button3->SetFocus();
return;
}
int f;
int ls;
AnsiString st;
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);
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);
}
FileClose(f);
}
else
{
ShowMessage("");
Edit2->Text = "";
Edit2->SetFocus();
}
Tab2Sizes();
}
int f;
int ls;
AnsiString st;
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;
}
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;
}
}
//---------------------------------------------------------------------------
}
//---------------------------------------------------------------------------
if (flag == 0)
{
der[k]= StringGrid1->Cells[j][i];
k++;
}
}
}
//---------------------------------------------------------------------------
NRows++;
StringGrid1->RowCount ++;
StringGrid2->RowCount ++;
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++)
//---------------------------------------------------------------------------
if(FileExists(FileName1)) DeleteFile(FileName1);
f1 = FileCreate (FileName1);
if (f1!=-1)
{
File1Rewrite(f1);
FileClose(f1);
Button1->Visible = false;
}
else
ShowMessage);
}
//---------------------------------------------------------------------------
f2 = FileCreate (FileName2);
if (f2!=-1)
{
File2Rewrite(f2);
FileClose(f2);
Button2->Visible = false;
}
else
ShowMessage);
}
//---------------------------------------------------------------------------
StringGrid1->Cells[0][NRows] = NRows;
StringGrid2->Cells[0][NRows] = NRows;
Tab1Sizes();
Tab2Sizes();
Button1->Visible = true;
Button2->Visible = true;
}
//---------------------------------------------------------------------------
StringGrid1->Cells[MColumns][0] = MColumns;
StringGrid2->Cells[MColumns][0] = MColumns;
Tab1Sizes();
Tab2Sizes();
Button1->Visible = true;
Button2->Visible = true;
}
//---------------------------------------------------------------------------
StringGrid1->Cells[MColumns][0] = MColumns;
StringGrid2->Cells[MColumns][0] = MColumns;
Tab1Sizes();
Tab2Sizes();
Button1->Visible = true;
Button2->Visible = true;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
Edit3->Text=nmax;
Edit4->Text=nmax1;
}
//---------------------------------------------------------------------------
Edit5->Text=k/l;
}
//---------------------------------------------------------------------------
Edit6->Text="";
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;
}
//---------------------------------------------------------------------------
int f;
int ls;
AnsiString st;
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;
}
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 ++;
Edit6->Text="";
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;
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;
Edit3->Text=nmax;
Edit4->Text=nmax1;
4.5. FORMA "MEDIU BUTOAIE"
Double k;
int i,j,l;
k=0;
l=0;
Edit5->Text=k/l;
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