Sunteți pe pagina 1din 24

MINISTERUL EDUCAIEI AL REPUBLICII MOLDOVA

CENTRUL DE EXCELEN N INFORMATIC I


TEHNOLOGII INFORMAIONALE

RAPORT
LA PRACTICA DE SPECIALITATE
SPECIALITATEA: Informatica
TEMA: 17.Pdure

Eleva: Moraru Loridana


Conductor: Mindrigan Dumitru

Chiinu 2016

Cuprins :
1. INTRODUCERE.......................................................................................3
2. Obiectivele practicii:..................................................................................4
2.1 Obiectivele generale ale practicii instructive:.........................................4
2.2 Compentenele profesionale:...................................................................4
2.3 Competenele specifice:..........................................................................4
3. Enunul sarcinii individuale......................................................................5
3. Descrierea modului de elaborare a aplicaiei..........................................7
4. Listing-ul programului............................................................................11
5. Estimarea complexitii algoritmilor aplicaiei.....................................18
6. Rezultatele testri subprogramelor........................................................19
6.1 Date de intrare.......................................................................................19
6.2 Date de ieire.........................................................................................19
7. Concluzie...................................................................................................22
8. Bibliografie...............................................................................................23

1. INTRODUCERE
Stagiu de practic reprezint activitatea desfurat de noi studenii, n
conformitate cu planul de nvmnt, care are drept scop verificarea cunotinelor
teoretice nsuite de acetia n cadrul programului de instruire i nafara acestuia.
Instruirea practic a elevilor este o parte component a procesului educaional i are
ca scop aprofundarea cunotinelor teoretice i a formrii deprinderilor practice n
pregtirea de specialitate, realizate la leciile practice lucrri de laborator, stagii de
practic.
ns, rezolvarea problemelor reale presupune elaborarea unor complexe programate
mari, care includ o gam ntreag de probleme: proiectarea sistemului, elaborarea
prilor componente ale algoritmului, reunirea diverselor fragmente ale programului
ntr-un produs final, documentarea.
Practica de instruire constituie o prim lucrare complex de sine stttoare a
studenilor i va contribui la formarea i dezvoltarea calitilor stric necesare nu numai
viitorilor programatori, dar i fiecrui om cult care, la sigur, va tri i va activa ntr-un
mediu bazat pe cele mai moderne tehnologii informaionale.

Practica s-a desfurat pe baza unei programe analitice i a unei sarcini de lucru,
ntocmite de instituia de nvmnt n care studiem. Durata practicii, formele de
evaluare, i creditele acordate pentru activitatea de practic sunt cele cuprinse n planul
de nvmnt.

Activitatea de practic inclus n planul de nvmnt este obligatorie i constituie


condiie de promovare. Prezena la practic este obligatorie, cci ea este posibilitatea
noastr de promovare, dezvoltare i integrare.

2. Obiectivele practicii:

2.1 Obiectivele generale ale practicii instructive:


- consolidarea cunotinelor teoretice, obinute de studeni pe parcursul studierii
limbajului de programare C++ i mediului de programare CBuilder ;
- nsuirea tehnologiei de elaborare a programelor mari;
- dezvoltarea abilitilor muncii de sine stttoare i lucrul n echip;
- formarea deprinderilor de cercettor.

2.2 Compentenele profesionale:


1. Respectarea dreptului de autor asupra resurselor digitale, a normelor de etic
i securitate informaional.
2. Identificarea principiilor de funcionare, clasificare i proiectare a conexiunii
ntre echipamentele reelelor de calculatoare.
3. Proiectarea algoritmilor i codificarea lui ntr-un limbaj de programare.
4. Utilizarea metodelor i tehnicilor eficiente de programare.
5. Elaborarea aplicaiilor, utiliznd elementele programrii orientate pe obiecte.
6. Modelarea, proiectarea i implementarea sistemelor informatice.
7. Aplicarea fundamentelor teoretice ale tiinelor juridice, sociale i economice
n activitatea profesional.

2.3 Competenele specifice:


1. Analiza structural a problemei n studiu.
2. Aplicarea principiilor programrii structurate, programrii procedurale i
programrii orientate pe obiecte n scrierea algoritmilor i elaborarea aplicaiei.
3. Utilizarea tipurilor structurate de date (tablou, ir de caractere, mulime, articol,
fiier etc.) adecvate pentru organizarea i prelucrarea datelor.
4. Aplicarea tehnicilor de testare i depanare a programelor elaborate.
5. Elaborarea unei aplicaii cu interfa grafic de interaciune cu utilizatorul;
6. Gestionarea informaiei utiliznd resursele Internet.
4

3. Enunul sarcinii individuale


17. Pdure. Planul unei Pduri Magice de form dreptunghiular cu dimensiunea
nm este format din zone ptrate cu latura 1 (vezi figura 1). Pentru fiecare zon real
din pdure se tie tipul copacilor care o acoper (numr natural mai mic dect 101). O
zon este acoperit numai cu copaci de acelai tip. n form numeric planul pdurii
este redat prin tabloul A cu n linii i m coloane.
S se creeze o aplicaie care s realizeze, la
solicitarea utilizatorului, urmtoarele prescripii:
(Design-ul aplicaiei v aparine).
1) Interschimb n matricea A dou linii;
indicii liniilor de interschimb se vor introduce
de la tastatur;
2) Exclude din planul tablei o coloan
marginal; poziia coloanei (vest/est) de exclus se
va preciza de la tastatur;
3) Determin lungimea celui mai lung subir
nedescresctor al irului elementelor coloanei
(matricei A) cu indicele precizat de la tastatur;
4) nscrie n tabloul liniar B[1..n] n ordinea descendent valorile Ai,n ( 1 i n);
datele se vor sorta prin metoda interclasrii;
5) Determin cota (n procente) zonelor cu copaci de tipul indicat de la tastatur, n
raport cu numrul total de zone ale planului pdurii;
6) Creeaz fiierul text ParCol.txt, n care se vor transcrie, pe linii, elementele
coloanelor pare ale matricei A;
7) Gsete n matricea A un ptrat pentru care diferena (max min) este minimal,
unde max, min sunt, respectiv, maximul i minimul elementelor din ptratul selectat.
Pe ecran se vor afia coordonatele colurilor stnga-sus i lungimea laturii ptratului
gsit;
8) Rezolv problema. Prinul Algorel se afl pierdut undeva prin Pdurea Magic i
cut cu disperare drumul napoi spre castelul su. El se poate deplasa n cele patru
direcii: Nord, Sud, Est i Vest, dar nu poate s ias din pdure fiindc dincolo de pdure
e trmul Spnului cel Ru. In drumul su ctre castel, prinul trebuie s plteasc
5

Pdurarului Magician un diamant pentru fiecare trecere dintr-o zon n alta n care se
schimb tipul copacilor (adic dac cele dou zone sunt acoperite cu tipuri diferite de
copaci). Pentru trecerile ntre zonele acoperite de acelai tip de copaci el nu pltete
nimic.

Cum diamantele sunt resursa cea mai important n regat, prinul vrea s tie numrul
minim de diamante pe care trebuie s-l plteasc pentru a ajunge la castel.
Elaborai un subprogram, care, cunoscnd planul pdurii, adresa curent [pl, pc] a
prinului i adresa [cl, cc] a castelului, l va ajuta pe Algorel s se descurce n situaia sa
dificil.
Date de intrare. Pe prima linie a
fiierului Padure.in se afla 6
numere naturale n, m, pl, pc, cl,cc,
separate prin spaii, cu semnificaia
de mai sus. Urmtoarele n linii
conin cate m numere naturale
separate prin spatii, reprezentnd
tipul copacilor care acoper fiecare
zon din Pdurea Magic.

Exemplu:
Padure.in
651154
00056
77111
11131
11221
00900
00009

Padure.out
2
Restricii: 1 n, m 1000
1 pl, cl n i
m

1 pc, cc

Date de ieire. Fiierul de ieire


Padure.out va conine pe prima
linie un singur numr ntreg D reprezentnd minimul de diamante pe care Algorel este
nevoit s-l plteasc pentru a ajunge la castel.

3. Descrierea modului de elaborare a aplicaiei


Am elaborat programul propriu-ziscu ajutorul unui program care permite asistarea
programatorului n toate fazele de elaborare a unui program, scris intr-un limbaj de
programare (editare, depanare, compilare, execuie).
Un astfel de mediu de programare este CodeBlocks. Pentru realizarea acestei sarcini a
trebuit s aplic toate cunotinele dobndite pn n prezent. El permite scrierea sursei,
compilarea acesteia, lansarea n execuie a programului executabil. n plus, ofer i alte
faciliti care depesc cadrul acestui articol.

Pentru crearea unui astfel de program am efectuat urmtorii pa i:


1. Deschidem programul i crem un fiier nou ( File -> New -> Empty File sau
scurttura Ctrl+Shift+N).

Este foarte important ca fiierul s fie salvat corect. Acesta poate fi de tipul: C/C++
files sau All files i este recomandat s adugm extensia cpp. Lipsa extensiei cpp va
conduce la erori n etapele urmtoare.

2. Dup ce ncepem s scriem codul surs, salvm fiierul ( File -> Save file sau
scurttura Ctrl+S).

3. Scriem codul surs i salvm. La final va trebui s avem urmtorul fiier, afi at i mai
sus, n acest articol:

4. Acest pas este foarte simplu, dar foarte important. Urmeaz compilarea i, dac
aceasta reuete, urmeaz crearea executabilului i lansarea lui. Code::Blocks ofer mai
multe opiuni pentru aceste operaii; dintre ele eu am folosit opiunea de Build ->
Build and run, cu scurttura F9, care include toate aceste operaii.

5. Rularea programului va avea urmtorul efect:

Erori la compilare:
Cazul descris mai sus este cel final; programul scris este corect, se compileaz i l
putem executa. Din nefericire, acest caz nu a fost a a de la nceput. Pn a ajunge la
acesta, am trecut prin cteva compilri care erau inexecutabile din cauza unor erori..
10

La scrierea programelor greim. Aceasta este realitatea, i nu trebuie s ne sperie.


Este important s descoperim erorile i s le corectm. Aici intervine etapa de
compilare, care semnaleaz o categorie larg de erori, erorile de sintax. Acestea in de
nerespectarea regulilor de scriere a programelor n C++, reguli care se nva n timp.

Imaginea de mai jos ne arat ce se ntmpl dac omitem s scriem linia


1.using namespace std;
Observm c n partea de jos a ferestrei se afieaz o list cu erori, pentru fiecare eroare
precizndu-se linia unde s-a gsit i un scurt mesaj explicativ.

Deci pentru execuia programului este necesar maximum de atenie, corecie i


cunotine n domeniu. Erorile ne ofer posibilitatea de a perfec iona programul i
consider c corectarea lor este perfecionarea propriilor abiliti de profesionist.

4. Listing-ul programului
#include <iostream>
#include <conio.h>
11

#include <stdlib.h>
#include <fstream>
#include <iomanip>
int l1,l2,i,j,m,n,v[20][20],temp,pl,pc,cl,cc;
int B[100];

using namespace std;

void citire()
{ ifstream f("Padure.in");
f>>n; f>>m;
f>>pl;f>>pc;
f>>cl; f>>cc;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{f>>v[i][j];}
f.close();}

void afisare()
{for (i=1; i<=n; i++)
{for (j=1; j<=m; j++)
{cout<<v[i][j]<<" ";}
cout<<"\n";}}

void interschimbare()
{cout<<"\n Dati cele doua linii";
cout<<endl;
cin>>l1>>l2;
12

cout<<endl;
for (j=1; j<=m; j++)
{temp=v[l1][j];
v[l1][j]=v[l2][j];
v[l2][j]=temp;}
for (i=1; i<=n; i++)
{for (j=1; j<=m; j++)
{cout<<v[i][j]<<" ";}
cout<<"\n";} }

void coloana()
{int m;
cout<<"Excludeti coloana :";
cin>>m;
cout<<"Matricea fara coloana "<<m<<" este:";
cout<<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)
if(j!=m)
cout<<v[i][j]<<" ";
cout<<endl;}
}

void lungimea()
{int aux[n],i=0,j=0;
for (int i=0;i<=n;i++)
aux[i]=0;
13

cout<<"\nDati coloana: ";


int col;
cin>>col;
for (int i=1; i<n; i++)
{ r1:
if (v[i][col]<=v[i+1][col])
aux[j]++;
else {j++;
i++;
goto r1; }}
cout<<endl;
int maxi=aux[0];
for (int i=1; i<=j; i++)
if (aux[i]>maxi)
maxi=aux[i];
cout<<"\nLungimea celui mai lung subsir al coloanei "<<col<<" este: "<<maxi+1;}

void tablou()
{ cout<<"\nDati intervalul liniilor: ";
int lin1,lin2;
cin>>lin1;
cin>>lin2;
int x=0;
for (int i=lin1; i<=lin2; i++)
for (int j=1; j<=m; j++)
{B[x]=v[i][j];
x++;
}
cout<<"\nAfisare tabloul B nesortat: \n";
14

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


cout<<B[i]<<' ';
cout<<endl;
//sortare tabloul B
x--;
int i,j, flag=1;
int temp;
for(i = 0; (i<=x) && flag; i++)
{flag = 0;
for (j=0;j<(x -1);j++)
{ if (B[j+1]> B[j])
{temp=B[j];
B[j]=B[j+1];
B[j+1]=temp;
flag=1;

}}
cout<<"\nAfisare tabloul B SORTAT: ";
cout<<endl;
for (int i=0; i<x; i++)
cout<<B[i]<<' ';
cout<<endl; }

void cota()
{int copac=0;
float procente=0;
cout<<"Dati copacul: ";
15

cin>>copac;
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
if (v[i][j]==copac)
procente+=1;
cout<<"\n Procente= "<<(procente/(n*m))*100<<setprecision(3)<<" %";}

void Inscriere()
{ ofstream g("ParCool.txt");
for (int j=1; j<=m; j++)
if (j%2==0)
{for (int i=1;i<=n;i++)
g<<v[i][j]<<' ';
g<<endl;}
g.close(); }

int main()
{ int men;
citire();
q: cout<<"\n --------------------------MENIU--------------------------------------";
cout<<"\n

ALEGE OPTIUNEA DORITA";

cout<<endl;
cout<<"\n 1: Citirea datelor din fisier:";
cout<<"\n 2: Operatia de afisare";
cout<<"\n 3: Operatia de interschimbare a 2 linii";
cout<<"\n 4: Excluderea unei coloane";
16

cout<<"\n 5: Determinarea lungimii sirului nedescrescator";


cout<<"\n 6: Inscrierea in tabloul liniar B[1..n]";
cout<<"\n 7: Determinarea cotei zonelor de copaci ";
cout<<"\n 8: Inscrie in fisier elementele coloanei pare ale matricei";
cout<<"\n 0: Exit";
cout<<endl;
cout<<"\n Aleg: ";
cin>>men;

switch (men)
{
case 1:citire();
break;
case 2:afisare();
break;
case 3:afisare(); interschimbare();
break;
case 4:afisare(); coloana();
break;
case 5:afisare(); lungimea();
break;
case 6:afisare(); tablou();
break;
case 7:afisare(); cota();
break;
case 8:Inscriere();
break;
17

case 0:goto exit;


}

getch();
system("cls");
goto q;
getch();
exit:
return 0;
}

5. Estimarea complexitii algoritmilor aplicaiei


Teoria complexitii este o ramur component a informaticii care se ocup cu
studierea complexitii algoritmilor. Complexitatea reprezint puterea de calcul
necesar implementrii unui algoritm. Ea are dou componente principale, i anume
complexitatea n timp i cea n spaiu.
18

Complexitatea n spaiu se refer la volumul de memorie necesar calculelor, iar cea n


timp se refer la timpul necesar efecturii calculelor, ambele fiind exprimate ca func ii
de n, unde n este mrimea datelor de intrare. Orict de rapid ar fi un calculator, sau
orict de mult s-ar ieftini memoria, eficiena este factorul decisiv n alegerea unui
algoritm.
n general, complexitatea este exprimat folosind notaia big O ( ), notaie ce reine
doar termenul care crete cel mai repede odat cu creterea lui n[2], deoarece acest
termen are impactul cel mai mare asupra timpului de execuie al implementrilor
algoritmului, ceilali termeni devenind neglijabili pentru valori mari ale lui n.
Ordinul de mrime (g) se definete n felul urmtor:

unde g este o funcie definit pe N cu valori n R.

n termenul de complexitate pot include i procedurile care le-am folosit. Am


folosit n general un algoritm bazat pe cteva proceduri, fiecare din ele coninnd
rezolvarea a cite o sarcin. Am deci n program urmtoarele proceduri: citire(), afisare(),
interschimbare(), coloana(), lungime(), tablou(), cota(), inscriere(). Am folosit proceduri
utile, scurte, corecte i usor de citit. Nu m-am piardut n detalii si am punctat exact ce
este important. De asemenea, am folosit aceste proceduri, deoarece exist mai multe
modaliti de a indeplini aceste sarcini si eu ca programist individual am ales doar una
dintre ele. In felul acesta am reuit s evit confuzia sau eventualele neatenii. O
procedur bine facut ajut la creterea productivitii programului. Astfel am reu it s
reduc numrul de erori i omisiuni i mie personal mi-a fost cu mult mai u or s
efectuez aceste sarcini complexe mult mai rapid ca timp si mult mai eficient ca
productivitate.
Timpul de execuie a programului n ntregime l putem afla direct de la execu ia
acestuia:

Padure.in

6. Rezultatele testri subprogramelor

19

651154
00056
77111
11131
11221
00900
00009

6.1 Date de intrare

Padure.out
2

6.2 Date de ieire

Meniul:

20

Sarcina 1: Interschimb n matricea A dou linii ;


indicii liniilor de interschimb se vor introduce de la
tastatur;

Sarcina 2: Exclude din planul tablei o


coloan marginal; poziia coloanei
(vest/est) de exclus se va preciza de la
tastatur;

Sarcina 3: Determin
lungimea celui mai lung
subir nedescresctor al
irului elementelor coloanei
(matricei A) cu indicele
precizat de la tastatur;

21

Sarcina 4: nscrie n tabloul liniar


B[1..n] n ordinea descendent valorile
A i ,n

(1in) ; datele se vor sorta prin


metoda interclasrii;

Sarcina 5: Determin cota (procente) zonelor cu


copaci de tipul indicat de la tastatur, n raport cu
numrul total de zone ale planului pdurii;

Sarcina 6: Creeaz fiierul text ParCol.txt, n care


se vor transcrie, pe linii, elelmentele coloanelor pare
ale matricei A;

22

7. Concluzie
Cu ajutorul acestei practici am putut nelege mai bine cum lucreaz programul cu
fiiere. Am neles cum e mai bine s fac programul ca s fie mai eficient i ct mai mic
n volum. n perioada practicii instructive am reuit s recapitulez tehnicile de
pogramare i instruciunile de programare.
Am aprofundat cunotinele n utilizarea tipurilor structurate i de date aa ca:
tablourile bidimensionale, fiierele, citirea datelor din fiier, nscrierea i opererea
datelor din acestea. Practica de iniiere reprezint o parte component a procesului
educativ care este o perioad important pentru noi, deoarece anume in timpul petrecerii
practicii ne aprofundm cunostinele acumulate timp de doi ani, de asemenea ne permite
s aplicm in practic i cunostinele teoretice la obiectul Programarea
Calculatorului.
La rndul su, practica de iniiere imit ntregul proces de elaborare a unui
complex programat mare, care mi permite s evoluez n rolul de elaborator i
organizator al proiectului. Pot spune c nu a fost foarte simpl efectuarea acestei lucrri,
ns puin informare de pe paginile WEB, ajutorul colegilor, cunotinele personale,
ideile, aptitudinile i munca asidu mi-au fost de mare ajutor.
Consider c pe parcursul acestor trei sptmni i a ntregii practici de
specialitate am reuit s-mi ating obiectivele profesionale formate de la nceput i
anume:
dezvoltarea abilitilor muncii de sine stttoare ;
lucrul n echip;
formarea deprinderilor de cercettor;
nsuirea tehnologiei de elaborare a programelor mari;
utilizarea metodelor i tehnicilor eficiente de programare;
i desigur proiectarea algoritmilor i codificarea lui ntr-un limbaj de
programare.

23

8. Bibliografie
1. I. Bolun, I. Covalenco.

Bazele informaticii aplicate, ediia a III-a. Chiinu,

Editura ASEM, 2005.


2. Gh. Bostan. Culegere de probleme de informatic. Chiinu , Editura "Lumina
3. A. Gremalschi, Iu. Mocanu, I. Spinei. INFORMATICA. Limbajul Pascal.
Chiinu , Editura .E.P. tiina, 2003
4. S.Corlat, L.Ivanov, V.Brsan.

Informatica, Ghid de implementare a

curriculumului modernizat, pentru treapta liceal. Chiinu, "Cartier", 2010.


5. UNIVERSITATEA DE STAT TIRASPOL COLEGIUL FINANCIAR - BANCAR
Silviu GNCU. Metodologia rezolvrii problemelor de informatic n stilul
orientat pe obiecte.
6. http://www.infoarena.ro/problema/scmax
7. https://walkinthroughlife.wordpress.com/2010/11/15/programare-dinamica-subsirmaximal-crescator/
8. https://alexmoldovan1.wikispaces.com/interschimbare+linii+matrice
9. http://algoritmifundamentali.blogspot.md/2012/10/stergere-coloaa.html
10.http://tys.ro/programare/cpp/matrici.html
11.http://www.codeblocks.org/
12.http://totuldesprecalculatoare.weebly.com/tutorial-c.html
13.http://www.pbinfo.ro/?pagina=intrebari-afisare&id=27

24

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