Documente Academic
Documente Profesional
Documente Cultură
INTRODUCERE.........................................................................................................................................3
OBIECTIVELE GENERALE ALE PRACTICII DE SPECIALITATE II.................................................4
COMPETENŢE TRANSVERSALE..........................................................................................................4
COMPETENŢE PROFESIONALE............................................................................................................5
COMPETENŢE SPECIFICE PRACTICII DE SPECIALITATE II........................................................6
1. Enunțul sarcinii..................................................................................................................................7
2. Modul de elaborare a aplicației........................................................................................................8
Punctul 1..................................................................................................................................................8
Punctul 2..................................................................................................................................................8
Punctul 3..................................................................................................................................................8
Punctul 4..................................................................................................................................................8
Punctul 6..................................................................................................................................................8
Punctul 7..................................................................................................................................................8
Punctul 8..................................................................................................................................................8
3. Listing-ul programului......................................................................................................................9
4. Estimarea complexității algoritmilor.............................................................................................16
5. Rezultatele testării subprogramelor...............................................................................................18
6. Concluzie...........................................................................................................................................23
7. Bibliografie.......................................................................................................................................24
INTRODUCERE
Practica de instruire a anului doi s-a început pe 30 mai și are lor pina pe 17 iunie, fiecarui
elev i sa dat sarcina sa individuală ce conținea 8 itemi. Pentru realizarea ei am avut nevoie de
limbajul de programare C++ in mare parte.
Pe parcursul practicii am avut de realizat acei 8 itemi ai sarcinii în aplicația Borland C+
+ Builder. Realizînd programul noi elevii avem o responsabilitate de a finisa acest program
conform cerinţelor date de conducătorul practicii și sa nu dam greș. După finisarea programului
şi a perioadei de practică, noi avem pare de o experiență buna ce ne va ajuta in viitor la un
serviciu.
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
matricile bidimensionale, excluderea liniilor,înserarea liniilor, introducerea datelor în fișiere,
citirea datelor din fișier. Acestea sunt câteva din lista cu întrebări care trebuie de realizat pe baza
obiectivului practicii. Pe tot timpul practicii la elaborarea programului am avut necesitatea să
citim noi surse de informaţie care ne dezvolta capacităţile de programare în limbajul C++ și
folosirea acestuia în aplicația Borland C++ Builder în care am realizat această aplicație de tip
software.
Practica de instruire la rindul sau reprezintă un program complex format din mai multe
subprograme și realizînd toate sarcinile reprezintă o finisare cu succes al practicii.
2
OBIECTIVELE GENERALE ALE PRACTICII DE SPECIALITATE II
- consolidarea cunoştinţelor teoretice, obţinute de studenţi pe parcursul studierii
limbajului de programare C++ şi mediului de programare CBuilder (sau C#, Visual
C+);
COMPETENŢE TRANSVERSALE
3
COMPETENŢE PROFESIONALE
(La specialitate):
1. Respectarea dreptului de autor asupra resurselor digitale, a normelor de etică şi
securitate informaţională.
4
COMPETENŢE SPECIFICE PRACTICII DE SPECIALITATE II
4. Utilizarea tipurilor structurate de date (tablou, şir de caractere, mulţime, articol, fişier
etc.) adecvate pentru organizarea şi prelucrarea datelor.
5
1. Enunțul sarcinii
Harta unui continent poate fi văzută ca un dreptunghi având înălţimea de n unităţi, iar lăţimea de m
unităţi. Colţul din stânga –sus al hărţii are coordonatele [0, 0] , iar colţul din dreapta-jos are
coordonatele [n, m]. Coordonatele oraşelor de pe hartă sunt întotdeauna numere întregi, adică sunt de
forma [i, j] cu 0 ≤ i ≤ n, reprezentând linia şi 0 ≤ j ≤ m, reprezentând coloana.
Informaţii despre harta considerată sunt înregistrate în fişierul text Harta.in, care conţine pe
prima linie numerele naturale n şi m, separate prin spaţiu, reprezentând dimensiunile hărţii. A doua linie
a fişierului conţine naturalul k –numărul de oraşele de pe hartă. Pe următoarele k linii se găsesc câte
două numere naturale, separate printr-un spaţiu, reprezentând coordonatele a câte unui oraş de pe hartă.
Să se creeze o aplicație care să realizeze, la solicitarea utilizatorului, următoarele prescripţii:
(Design-ul aplicației vă aparține).
1) Înregistrează pe harta continentului un nou oraş; coordonatele oraşului de înregistrat se vor
introduce de la tastatură;
2) Exclude de pe harta continentului un oraş, coordonatele cărui se vor introduce de la tastatură;
3)Determină coordonatele oraşului, care este cel mai îndepărtat de la colţul stânga –sus al hărţii;
4) Determină numărul de oraşe plasate pe coloana rasterului cu indicele indicat de la tastatură;
5) Afişează pe ecran indicii liniilor rasterului hărţii, care nu conţin nici un oraş;
6) Creează fişierul text SortDist.txt, în care se vor transcrie liniile fişierului de intrare
Harta.in în ordinea descrescătoare a distanţelor Di ( 0 ≤ i ≤ n ) ale oraşelor respective de la colţul
stânga –sus al hărţii; la sfârşitul liniilor fişierului creat se vor ataşa valorile Di, precedate de câte un
spaţiu; datele se vor sorta prin metoda interclasării;
7) Găseşte pe harta continentului o zonă pătratică ce conţine un număr maximal de oraşe;
8) Rezolvă problema. În unul din oraşele de pe hartă în studiu se găseşte un turist. El doreşte să
pornească într-o expediţie deosebită. A decis să plece într-o anumită direcţie, şi să păstreze acea direcţie
pănă ajunge la marginea continentului (a hărţii) unde se încheie expediţia sa. Doreşte însă să aleagă acea
direcţie care îl asigură că pe drumul său va trece prin cât mai multe oraşe.
Fiind date dimensiunile hărţii, coordonatele L şi C ale oraşului în care se găseşte iniţial turistul şi
coordonatele tuturor celorlalte oraşe de pe hartă, elaboraţi un subprogram care determină numărul
maxim de oraşe pe care le va vizita turistul.
Date de intrare. Fişierul de intrare Harta.in, descris anterior, şi numere naturale L, C care se
introduc de la tastatură.
Date de ieşire. Fişierul de ieşire Harta.out va avea pe prima sa linie, un număr natural
reprezentând numărul maxim de oraşe pe care le vizitează turistul.
Exemplu : L=3 C=2
Harta.in Harta.out Explicaţii
5 10 3 Datele de intrare corespund hărţii din figura următoare, în care
7 am marcat cu poziţia iniţială a turistului, iar cu oraşele de
0 0 pe hartă. Traseul ales este cel indicat de linia trasată.
0 8
1 6
2 2
2 4
3 7
4 5
.
6
2. Modul de elaborare a aplicației
Aplicația am elaborat-o în mediul de programare Borland C++ Builder (v. 6.0). A fost un program
destul de complex și destul de dificil, în comparație cu alte aplicații ce le-am elaborat pe parcursul
anului de studii.
Pentru program am avut nevoie de cîteva funcții, și anume pentru citirea datelor din fișier. GetData(); și
GetRC();
Punctul 1
Am elaborat un algoritm simplu.Am înregistrat 2 variabile ca și latitudine și longitudine ce sunt
coordonatele orașului. Introduc acele coordonate în fișier cu ajutorul casetei StringGrid.
Punctul 2
La fel am avut nevoie de un algoritm simplu.Introduc coordonatele orașului ce doresc s-ăl exclud.
Introduc coordonatele prin variabilele a și b dintr-o casetă TEdit.
Punctul 3
La acest punct am elaborat un algoritm mai complex și mai lung dar nu complicat.Introduc punctul din
care voi calcula distanta pină la orașul la care urmeaza sa intoduc coordonatele prin caseta TEdit și
rezultatul se afișează inregistrinduse în fișier.
Punctul 4
La acest punct nu prea am avut bătăi de cap, am găsit pe internet un algoritm simplu și l-am aplicat.
Rezultatul se afișează în caseta Label după ce accesăm optiunea din meniul formei.
Punctul 5
Acest punct are ceva asemă nă tor cu punctul precedent a problemei datorită acestei asemă nă ri a
fost nevoie doar să schimb cîteva instrucțiuni pentru a-l rezolva.
Punctul 6
Acest punct mi-a dat mari bătăi de cap deoarece nu prea am înțeles metoda de sortare propusă la
rezolvarea problemei și în plus mai este nevoie de a lucra cu fișierele înregistrînd date în fișier.Mi-a luat
mult timp pentru a înțelege de ce metodă am nevoie pentru rezolvare.Pînă la urmă am decis că trebuie
rezultatele sortării să le afișez în un label direct di-n fișier.
Punctul 7
A fost cel mai greu punct. Am avut dificultăți la calcularea aranjarii numarului de orașe în patrat
deoarece trebuia să parcurg toată matricea în căutarea orașelor.
Punctul 8
A fost un punct greu ce l-am rezolvat mult timp deoarece nu prea am înțeles din condițiile programului
cum să calculez numărul de orașe prin care va trece turistul și din cauza lipsei de informație am avut
probleme la acest punct.
7
3. Listing-ul programului
Program Turist:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <fstream.h>
#include "UPro.h"
#include <string.h>
#include <math.hpp>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include "UPro3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int f;
int tag,g,n,m,line,line1;
int siz=225;
AnsiString ffile;
bool o=false;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Edit1->Visible=False;
Label1->Visible=False;
Label2->Visible=True;
Label3->Visible=False;
Label4->Visible=False;
Label5->Visible=False;
BitBtn1->Visible=False; \
//N1->Enabled=false;
N3->Enabled=false;
N10->Enabled=false;
N15->Enabled=false;
N11->Enabled=false;
//N2->Enabled=false;
N4->Enabled=false;
N5->Enabled=false;
N11->Enabled=false;
Memo2->Visible=false;
Memo1->Visible=False;
Form1->Caption="MapReader";
Label2->Caption="Bun venit in MapReader!\nPentru a continua tastati tasta
File.";
Label2->Font->Name="Palatino Linotype";
BitBtn1->Caption="OK";
Label2->Font->Size=16;
Memo2->Lines->Clear();
Label2->Color=clInactiveBorder;
Label1->Color=clInactiveBorder;
// Form1->LoadFromfile();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Label2->Font->Name="MS Sans Serif";
8
// Image1->Visible=false;
Label2->Font->Size=8;
BitBtn1->Caption="OK";
Label2->Color=clInactiveBorder;
Label3->Color=clInactiveBorder;Label1->Color=clInactiveBorder;
Label4->Color=clInactiveBorder;
if (tag==1)
{
AnsiString st,str,str1,str2;
// st=Edit1->Text;
st=Edit1->Text;
ffile=st;
if (FileExists(st))
{
g=1;
Memo1->Visible=True;
Label3->Visible=True;
Label4->Visible=True;
Label5->Visible=True;
}
else
{
ShowMessage("Nume incorect!"
"Vereficati daca numele care lati introdus coencide nu
numele fisierului");
return;
}
if(g==1)
{
char n1,m1;
o=true;
N3->Enabled=true;
N10->Enabled=true;
N15->Enabled=true;
N11->Enabled=true;
//N2->Enabled=false;
N4->Enabled=true;
N5->Enabled=true;
N11->Enabled=true;
int i,line2,line1,k,xst,yst;
int a[50];
int b[50];
Label4->Caption=st;
Label5->Caption="Harta";
Memo1->Lines->LoadFromFile(st);
line=Memo1->Lines->Count;
str=Memo1->Lines->Strings[0];
line1=str.Length();
line2=0;
for(i=1;i<=line1;i++)
{
}
}
for(i=line2+1;i<=line1;i++)
{
str2=str2+str[i];
}
n=StrToInt(str1);
m=StrToInt(str2);
int z=0;
for(i=23;i<200;i=i+23)
{
if(z>n) break;
Form1->Canvas->MoveTo(500, 70+i);
Form1->Canvas->LineTo(500+(m+1)*23, 70+i);
z++;
}
z=0;
for(i=23;i<250;i=i+23)
{
if(z>m) break;
Form1->Canvas->MoveTo(500+i, 70);
Form1->Canvas->LineTo(500+i, 70+(n+1)*23);
z++;
}
line=Memo1->Lines->Count;
str1="";
str2="";
for(k=3;k<line;k++)
{
st=Memo1->Lines->Strings[k];
line2=0;
line1=st.Length();
for(i=1;i<=line1;i++)
{
}
}
for(i=line2+1;i<=line1;i++)
10
{
str2=str2+st[i];
}
a[k]=StrToInt(str1);
b[k]=StrToInt(str2);
str2="";
str1="";
}
int begx=500;
int begy=70;
for(i = 3;i<line;i++)
Form1->Canvas->Ellipse((begx+(b[i]*23)),(begy+(a[i]*23)), (begx+(b[i]*23))+5,
(begy+(a[i]*23))+5);
Form1->Canvas->Brush->Color = RGB(255, 255, 255);
}
}
}
if(tag==2)
{
AnsiString st,str1,str2;
int xst,yst;
str1="";
int line,line1,line2,i;
st=Edit1->Text;
line2=0;
int a[50];
int b[50];
line1=st.Length();
for(i=1;i<=line1;i++)
{
for(i=line2+1;i<=line1;i++)
{
str2=str2+st[i];
}
xst=StrToInt(str1);
yst=StrToInt(str2);
if(((xst>n)||(xst<0))||((yst>m)||(yst<0)))
ShowMessage("Coordinate incorecte!");
else
{
Memo1->Lines->Add(st);
line=StrToInt(Memo1->Lines->Strings[1]);
11
line++;
Memo1->Lines->Strings[1]=IntToStr(line);
Memo1->Lines->SaveToFile(ffile);
ShowMessage("Orasul a fost introdus cu succes!");
if((n>9)||(m>9)) {ShowMessage("Continetul e prea mare.\nHarta nu va fi
creata.");
Label5->Visible=false;}
else
{
Label5->Caption="Harta";
if((n>9)||(m>9)) {ShowMessage("Continetul e prea mare.\nHarta nu va fi
creata.");
Label5->Visible=false;}
else
{
int z=0;
for(i=23;i<200;i=i+23)
{
if(z>n) break;
Form1->Canvas->MoveTo(500, 70+i);
Form1->Canvas->LineTo(500+(m+1)*23, 70+i);
z++;
}
z=0;
for(i=23;i<250;i=i+23)
{
if(z>m) break;
Form1->Canvas->MoveTo(500+i, 70);
Form1->Canvas->LineTo(500+i, 70+(n+1)*23);
z++;
}
line=Memo1->Lines->Count;
str1="";
str2="";
for(int k=3;k<line;k++)
{
st=Memo1->Lines->Strings[k];
line2=0;
line1=st.Length();
for(i=1;i<=line1;i++)
{
}
}
for(i=line2+1;i<=line1;i++)
{
str2=str2+st[i];
}
a[k]=StrToInt(str1);
b[k]=StrToInt(str2);
12
str2="";
str1="";
}
int begx=500;
int begy=70;
for(i = 3;i<line;i++)
Form1->Canvas->Ellipse((begx+(b[i]*23)),(begy+(a[i]*23)), (begx+(b[i]*23))+5,
(begy+(a[i]*23))+5);
Form1->Canvas->Brush->Color = RGB(255, 255, 255);
}
}
}
}
if(tag==3)
{
AnsiString st,str1,str2;
int line,count,line1,line2=0;
int a[50];
int b[50];
st=Edit1->Text;
count=Memo1->Lines->Count;
bool k=false;
for(int i=0;i<count;i++)
if(CompareText(st, Memo1->Lines->Strings[i])==0)
{
Memo1->Lines->Delete(i);
line=StrToInt(Memo1->Lines->Strings[1]);
line--;
Memo1->Lines->Strings[1]=IntToStr(line);
Memo1->Lines->SaveToFile(ffile);
ShowMessage("Orasul a fost introdus cu succes");
if((n>9)||(m>9)) {ShowMessage("Continetul e prea mare.\nHarta nu va fi
creata.");}
else
{
Label5->Caption="Harta";
Form1->Canvas->Brush->Color = RGB(255, 255, 255);
Form1->Canvas->Rectangle(500, 70, 500+(m+1)*23, 70+(n+1)*23);
int z=0;
for(i=23;i<200;i=i+23)
{
if(z>n) break;
Form1->Canvas->MoveTo(500, 70+i);
Form1->Canvas->LineTo(500+(m+1)*23, 70+i);
z++;
}
z=0;
for(i=23;i<250;i=i+23)
{
if(z>m) break;
Form1->Canvas->MoveTo(500+i, 70);
Form1->Canvas->LineTo(500+i, 70+(n+1)*23);
z++;
}
13
line=Memo1->Lines->Count;
str1="";
str2="";
for(int k=3;k<line;k++)
{
st=Memo1->Lines->Strings[k];
line2=0;
line1=st.Length();
for(i=1;i<=line1;i++)
{
}
}
for(i=line2+1;i<=line1;i++)
{
str2=str2+st[i];
}
a[k]=StrToInt(str1);
b[k]=StrToInt(str2);
str2="";
str1="";
}
int begx=500;
int begy=70;
for(i = 3;i<line;i++)
Form1->Canvas->Ellipse((begx+(b[i]*23)),(begy+(a[i]*23)), (begx+(b[i]*23))+5,
(begy+(a[i]*23))+5);
Form1->Canvas->Brush->Color = RGB(255, 255, 255);
Label5->Visible=false; k=true;
} }
if(!k)
ShowMessage("Orasul dat nu e gasit");
if(tag==4)
{
int line,i,j,k,line1,line2;
AnsiString str,str1,str2,st;
int yst;
line=Memo1->Lines->Count;
Interfață punctul 1
15
Interfață punctul 2
Interfață punctul 3
16
Interfață punctul 4
Interfață punctul 5
17
Interfață punctul 6
18
Interfață punctul 7
Interfață punctul 8
19
Conținutul fișierelor:
Fișierele proiectului:
20
6. Concluzie
Practica are o mare importanta in autocunoasterea fiecarui elev,prin efectuarea sarcinii de la practica
elevul iși încearca puterile și cunoștințele acumulate pe toată perioada studierii obiectului. Astfel el își
creează un spirit de autocunoaștere și se aprofundează în toate informațiile din care învață mai multe
lucruri utile în viitor.
După cum am menționat și în introducere, practica are un rol foarte important în dezvoltarea mea ca
programist. Învăț să elaborez algoritmi de dificultate mare și la fel de complexe. Am avut timp la
dispoziție destul după părerea mea. Dar luînd în considerație faptul că noi nu am avut foarte multe lecții
la acest obiect și nu am învățat toate comenzile necesare am avut destul timp pentru a ne informa de
sinestatator .
La început avusesem neclarități mari în ce prevede enunțul sarcinii, dar cu ajutorul mecesar am
realizat și acele neclarități.
La rezolvarea sarcinii mele am folosit aplicații precum Borland C++ Builder (v. 6.0) dar și
CodeBlocks pentru anumiți algoritmi, ca mai apoi să-i convertesc în C++ Builder.
Sarcina a fost una dificilă, deoarece s-a folosit un limbaj inexplicabil și foarte greu de înțeles. Cu
ajutorul acestei practici am reușit să mă deprind mult în lucrul cu fișierele și în general programele mari.
21
După petrecerea acestor 15 zile de practică mi-am format noi competențe și deprinderi pentru viitor
în domeniul programării orientate pe obiecte. Am aplicat pe deplin cunoștințele despre limbajul de
programare C++, acomulate pe parcursul unui an de studii. Mai exact mi-am aprofundat cunoștințele
asupra structurilor de date bidimensionale, lucrul cu fișierele, citirea datelor din fișier, scrierea lor în
fișier, efectuarea diferitor operații cu datele din acel fișier.
Cu toate dificultățile în cale, totuși am dus la capăt și rezolvarea acestei sarcini, ca la final să scot o
aplicație adevărată, de care să mă simt mîndru.
Pe viitor, aș sugera ca enunțurile programelor să fie mai bine explicate deoarece de data aceasta sa
folosit un limbaj pur și simplu inexplicabil la care am avut nevoie de mult timp și de ajutorul profesoarei
pentru a-l țnțelege.
7. 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.
5. G. Damian-Timoşenco, E. Ionaşcu-Cuciuc, Ghid de elaborare a curriculumului profesional,
Chişinău, 2011.
6. A. Gremalschi, Iu. Mocanu, I. Spinei.INFORMATICA. Limbajul Pascal.Chişinău , Editura
Î.E.P. Ştiinţa, 2003.
22