Sunteți pe pagina 1din 12

Cuprins

1. Planul de dezvoltare software……………………………………….3


1.1.Introducere……………………………………………………………………………….3

1.2.Organizarea proiectului………………………………………………………………3

1.3Analiza riscurilor………………………………………………………………………...3
1.4Constrangeri legate de resursele hardware si software …………….3
1.5.Bugetul………………………………………………………….....4
1.6.Planificarea efortului de lucru si orarul proiectului……………….4
2. Documentatia de sistemDocumentul specificatiilor formale………5
2.1.Documentul de proiectare arhitecturala……………………………...5

2.2.Planul testelor finale………………………………………………....6

2.3.Codul sursa comentat……………………………………………….7

3.Documentatia utilizatorului care are urmatoarele…………………9


3.1.Descrierea functionala care exprima ce poate sa faca sistemul …...9
3.2.Manual introductive……………………………………………...11
3.3.Manual de referinta……………………………………………....13
Planul de dezvoltare software

Introducere
Proiectul are ca obiectiv dezvoltarea unei aplicatii care sa permita utilizatorului vizualizarea a cinci
probleme cu scop diferit, fiecare dintre acestea avand in component un fisier de intrare si unul de
iesire.

Organizarea proiectului
Analiza riscurilor
Exista posibiltatea aparitiei unor evenimente neprevazute, care pot afecta dezvoltarea aplicatiei in
intervalul de timp propus, cum ar fi:

 probleme de sanatate
 situatii neprevazute in familie
 prelungirea vacantei de 1 Mai
Pentru ca aplicatia sa poata fi livrata la data stabilita , echipa va avea mai multi programatori care se
vor putea ajuta intre ei si un programator de rezerva care va prelua locul programatorului sef in cazul
aparitiei un astfel de eveniment. De asemenea, editorul de documentatie va putea fi ajutat de
bibliotecar. Totusi, se recomanda ca personalul sa isi indeplineasca datoriile si sa apeleze la ajutor din
partea colegilor doar in situatii critice.

Constrangeri legate de resursele hardware si software

Rularea pe 64 de biti a windowsului,


Limbajul de programare dezvolta resurse pe 8 biti si 16 biti,
RAM-ul in timpul compilarii programului, capacitatea acestuia se miscoreaza,
Viteaza procesorului (care determina si rapiditatea rularii programului).

Bugetul
Nu am avut nevoie de buget, deoarece:
Microsoft project a fost oferit de facultate
Code blocks
Planificarea efortului de lucru si orarul proiectului

2
Documentatia de sistem

Documentul specificatiilor formale

3
Problema 1: Se citeste dintr-un fisier numere.txt n numere natural. Sa se tipareasca intr-un fisier
secventa.txt lungimea maxima a unei secvente de numere din sirul dat care in scrierea binara au numai
cifra 1.
Problema 2: Se citesc din fisierul de intrare in.txt de pe prima linie numerele n si k, iar pe a doua
linie n numere nenule, separate prin spatii. Sa se tipareasca intr-un fisier out.txt numarul secventelor
din sir care au produsul elementelor egal cu 2k , unde k este un numar dat de la tastatura.

Problema 3: Scrieti un program care citeste din fisierul de intrare in.txt un numar natural n si
construieste si tipareste in fisierul de iesire out.txt o matrice patratica avand n linii si n coloane, cu
elemente 0 si 1, dispuse in patrate concentrice, fiecare patrat fiind format doar din valori 1 sau doar din
valori 0, ca in exemplul de mai jos, astfel incat elemntul aflat pe prima linie si prima coloana sa fie egal
cu 1.
Problema 4: Se citeste dintr-un fisier numere.txt n numere natural. Sa se tipareasca intr-un fisier
secventa.txt cea mai lunga secventa de elemente din vector care incepe si se termina cu aceeasi
valoare. Daca in vector exista mai multe secvente corecte de lungima maxima se va determina cea mai
din stanga.
Problema 5: Se citeste dintr-un fisier in.txt n numere natural. Sa se tipareasca intr-un fisier out.txt
cea mai lunga secventa de elemente ordonate strict crescator dintr-un vector.

Documentul de proiectare arhitecturala

Main

Case1 Case2 Case3 Case4 Case5

lungimesecventabin crescator matrice afislungime nrsecv

secventabin detlungime calculk

Planul testelor finale


Programul este testat individual, astfel fiecare subprogram va fi supus mai multor teste. Pentru
subprogramele care contin vectori, in cazul in care se va introduce o valoare mai mare el ma afisa

4
mesajul:”Trebuie sa se dea un numar natural mai mic”, iar pentru cele care contin matrici programul nu
va rula.
Programul creat poate rula atat un subprogram, cat si toate odata. Prin darea in executie a
programului, pe ecran se va afisa :”Alegeti o problema:”,dupa introducerea numarului problemei,
aceasta va afisa mesajul:”Pentru a rula alta problema apasati 0, iar pentru a iesi din program tasta 6”.

Exemple de teste:
Pentru problema nr 1: Intrare: 5
4671588
Iesire: 2
Pentru problema nr 2: Intrare: n=9
k=2
234515432
Iesire: 2

Pentru problema nr 3: n=5


11111
10001
10101
10001
11111
Pentru problema nr 4: Intrare:12
668366384334
Iesire: 3 6 6 3 8 4 3 3
Pentru problema nr 5: Intrare: 9
264589634
Nu avem cazuri de exceptie, deoarece cerintele spun ca variabilele sunt numere naturale, deci nu se
vor introduce altfel de numere decat natural, dar in cazul in care se dau numere care nu sunt naturale
programul nu va rula.

Codul sursa comentat

#include <stdio.h> #include <stdlib.h>

5
FILE *f1, *f2,*f3,*f4,*f5,*f6,*f7,*f8,*f9,*f10; for(int j=0;j<n3;j++)
int a[50][50],v2[50],v3[50]; fprintf(f6,"%d ",a[i][j]);
int secventabin(int n); fprintf(f6,"\n");
int lungimesecventabin(int n); }
void crescator(int n); }
void matrice(int n); break;
int detlungime(int n); case 4:
void afislungime(int n); //secventa care incepe si se termina cu aceeasi valoare
int calculk(int k); fscanf(f7,"%d",&n4);
int nrsecv(int n, int k); if(n4>50)
int main() fprintf(f8,"Introduceti un numar natural mai mic decat 50");
{ else
f1=fopen("numere.txt","r"); {
f2=fopen("secventa.txt","w"); for(int i=0;i<n4;i++)
f3=fopen("in.txt","r"); fscanf(f7,"%d",&v2[i]);
f4=fopen("out.txt","w"); afislungime(n4);
f5=fopen("in2.txt","r"); }
f6=fopen("out2.txt","w"); break;
f7=fopen("numere2.txt","r"); case 5:
f8=fopen("secventa2.txt","w"); //2^k
f9=fopen("in3.txt","r"); fscanf(f9,"%d %d",&n5,&k);
f10=fopen("out3.txt","w"); if(n5>50)
fprintf(f10,"Introduceti un numar natural mai mic decat 50");
int n1,k,sw,n2,n3,n4,n5,ok=0; else
printf("Alegeti problema:\n1-lungimea maxima a unei {
secvente de numere care au numai 1 in scriere binara-citire in for(int i=0;i<n5;i++)
fisierul numere.txt si afisare in secventa.txt \n"); fscanf(f9,"%d",&v3[i]);
printf("2-secventa de elemente ordonate strict crescator-citire fprintf(f10,"numarul de secvente care au produsul
in fisierul in.txt si afisare in out.txt \n"); elementelor egal cu 2^k este: %d\n",nrsecv(n5,k));
printf("3-matrice formata din patrate concentrice de 1 si 0-
citire in fisierul in2.txt si afisare in out2.txt\n"); }
printf("4-cea mai lunga secventa care incepe si se termina cu break;
aceeasi valoare-citire in fisierul numere2.txt si afisare in }
secventa2.txt \n"); printf("Pentru a rula alta problema apasati 0, iar pentru a iesi
printf("5-numarul secventelor din sir care au produsul egal cu din program tasta 6 \n");
2^k-citire in fisierul in3.txt si afisare in out3.txt \n"); scanf("%d",&ok);
if(ok==0)
while(ok==0) //cat timp se introduce valoare 0 programul va printf("Introduceti numarul problemei pe care doriti sa o
rula rulati \n");
//posibilitate a rula proiectul pe mai multe probleme diferite
{ in acelasi timp
scanf("%d",&sw); }
switch(sw) fclose(f1);
{ fclose(f2);
case 1: fclose(f3);
//secventa binara fclose(f4);
fscanf(f1,"%d",&n1); fclose(f5);
k=lungimesecventabin(n1); fclose(f6);
fprintf(f2,"lungimea maxima a secventei de numere care au fclose(f7);
numai 1 in scriere binara este:\n %d",k); fclose(f8);
break; return 0;
case 2: }
//secventa de lungime maxima cu numere crescatoare int secventabin(int n)
fscanf(f3,"%d",&n2); {
crescator(n2); //testam daca numarul are numai 1 in scriere binara prin
break; impartiri repetate la 2
case 3: while(n>=1)
//matrice cu 1 si 0 if(n%2==0)
fscanf(f5,"%d",&n3); return 0;
matrice(n3); else
if(n3>50) n=n/2;
fprintf(f6,"Introduceti un numar natural mai mic decat 50"); return 1;
else }
{ fprintf(f6,"matricea de %dx%d este:\n",n3,n3);
for(int i=0;i<n3;i++) int lungimesecventabin(int n)
{ {

6
int i,l=0,lmax=0,k; a[j][n-i-1]=k%2;
a[n-i-1][j]=k%2;
for(i=0;i<n;i++) a[j][i]=k%2;
{ }
fscanf(f1,"%d",&k); k++;
/*testam pentru fiecare k din fisier daca are numai 2 in }
scriere binara si in caz if(n%2==1)
afirmativ crestem lungimea secventei cu 1, comparand a[n/2][n/2]=k%2;
dupa aceea cu lungimea maxima*/ }
if(secventabin(k)==1) int detlungime(int n)
l++; {
else //determinarea lungimii maxime a secventei care incepe si se
l=0; termina cu acelasi numar
if(l>lmax) int i,j,l,lmax=0;
lmax=l; for(i=0;i<n-1;i++)
} { l=0;
for(j=i+1;j<n;j++)
return lmax; {
} l++;
if(v2[i]==v2[j] && lmax<l)
lmax=l;
void crescator(int n) }
{ }
int i,j,v[51],lc,lmax; return lmax;
for(i=0;i<n;i++) }
fscanf(f3,"%i",&v[i]);
lc=1; void afislungime(int n)
lmax=1; {
for(i=0;i<n;i++) int i,j,l,lmax,k;
if(v[i]<v[i+1]) lmax=detlungime(n);
lc++; //afisarea secventei de lungime maxima care incepe si se
else termina cu acelasi numar
{ for(i=0;i<n-1;i++)
if(lc>lmax) { l=0;
lmax=lc; for(j=i+1;j<n;j++)
lc=1; {
} l++;
//afisarea secventei de lungime maxima if((v2[i]==v2[j]) && (lmax==l))
lc=1;
for(i=0;i<n;i++) {
{ fprintf(f8,"cea mai lunga secventa care incepe si se
if(v[i]<v[i+1]) termina cu aceeasi valoare este:\n");
lc++; for(k=j-lmax;k<j+1;k++)
else fprintf(f8,"%d ",v2[k]);
{ break;
if(lc==lmax) }
{ }
fprintf(f4,"secventa de lungime maxima cu numere ordonate }
strict crescator este:\n"); }
for(j=i-lc+1;j<=i;j++)
fprintf(f4,"%i ",v[j]); int calculk(int k)
fprintf(f4,"\n"); {
} //calculul numarului 2^k
lc=1; int p=1;
} for(int i=0;i<k;i++)
} p*=2;
} return p;
}
void matrice(int n)
{ int nrsecv(int n, int k)
int i,j,k=1; {
for(i=0;i<n/2;i++) int kmax,p=1,nr=0,fin=1,i=0;
{ //formarea matricei de 0 si 1 kmax=calculk(k);
for(j=i;j<n-i;j++) //determinarea numarului de secvente de numere care
{ inmultite dau 2^k
a[i][j]=k%2; while(i!=n)

7
{ {
p*=v3[i]; i=fin;
if(p==kmax) fin++;
{ p=1;
nr++; }
i=fin; else if(p<kmax)
fin++; i++;
p=1; }
} return nr;
else if(p>kmax) }

Documentatia utilizatorului care are urmatoarele


Descrierea functionala care exprima ce poate sa faca sistemul
Case 1:

Alte exemple
 Intrare: 6
2 3 7 15 88
Iesire: 1
 Intrare: 4
2 12 6 7
Iesire: 1

Case 2:

Alte exemple

8
 Intrare: 9
26 4 5 8 9 6 3 4
Iesire: 4 5 8 9
 Intrare: 7
2345196
Iesire: 2 3 4 5

Case 3:

Alte exemple

 Intrare: 7  Intrare: 6
Iesire: 1 1 1 1 1 1 1 Iesire: 1 1 1 1 1 1
1000001 100001
1011101 101101
1010101 101101
1011101 100001
1000001 111111
1111111
Case 4:

Alte exemple

9
 Intrare: 12
668366384334
Iesire: 3 6 6 3 8 4 3 3
 Intrare: 6
626436
Iesire:6 2 6 4 3 6

Case 5:

Alte exemple
 Intrare: 11
3
2 2 2 22 1 2 2 2 2 2
Iesire: 9
 Intrare: 13
4
3333331333333
Iesire: 0

Manual introductiv
Proiectul nostru contine cinci probleme , fiecare fiind aleasa de un membru al echipei. Proiectul
este destul de ordonat deoarece contine comentarii care ajuta la intelegerea si determinarea
problemelor , fiecare dintre ele fiind notate cu o cifra de la 1 la 5. Pentru ca proiectul sa ruleze apasam
tasta F9 sau iconita build and run.

10
Dupa apasarea iconitei proiectul ne ofera sansa sa alegem una dintre probleme pentru a o rula si
testa. In cazul in care ne razgandim asupra alegerii problemei sau am gresit numarul proiectul ne ofera
posibilitatea de a corecta prin apasarea cifrei 0 urmata de enter.

Apasand tasta 6 urmata de enter vom rula programul ales.Inainte de a rula programul avem
posibilitatea sa dam exemple de date de intrare specifice fiecarei problem.
Exemplu problema 1:

Pentru problema 1 se introduce pe prima linie lungimea vectorului, iar pe cea de a doua elementele
sale.

11
Pentru problema 2 si 4 se vor introduce aceleasi date , valoarile afisate fiind diferite.
Pentru problema 3 se va introduce un numar care va reprezenta numarul de linii si de coloane ale
matricei rezultante,

Manual de referinta
1. În cazul în care se doreşte schimbarea setului de date de intrare, respectiv a matricei, sau a vectorilor,
utilizatorul este nevoit să meargă în fişierele de intrare şi să îl modifice cu valorile dorite.

2. În cazul modificărilor valorilor din fişiere, trebuie avut în vedere faptul că matricea este declarată în
program de dimensiune a [50][50], vectorii tot de dimensiune v2[50], respectiv v3[50], dacă se doresc
tablouri de dimensiune mai mare, trebuie modificată şi declararea lor în program.

3. În cazul vectorilor, atunci când se modifică valorile lor în fişierul de intrare, trebuie avut grijă ca pe
prima linie a fişierului să se modifice numărul care arată câte elemente are vectorul, altfel, dacă
numărul de pe prima linie este mai mic decât numărul de elemente introduse pe cea de-a doua linie, nu
vor fi citite toate elementele din fişier, prin urmare rezultatul va fi eronat.

4. În cazul modificării numelui fişierului trebuie ca noul nume să se înlocuiască şi în program, altfel
vor apărea erori.

5. În cazul creării unui fişier nou de intrare/ieşire, trebuie neapărat ca acesta să fie creat sau să fie
ulterior mutat în locaţia în care se află şi programul.

6.. După execuţia programului va apărea o fereastră Reload file unde este necesar să apăsaţi Yes de
fiecare dată când apare, în caz contrar nu se va afişa nimic în fişierul de ieşire.

7. Nu se recomandă ca utilizatorul să facă alte modificări în program, în afara celor prezentate mai sus,
orice modificare trebuie făcută de programator.

8. În cazul în care aplicaţia nu mai răspunde se recomandă încercarea închiderii acesteia, iar dacă nu
funcţionează nici după ce a fost deschisă din nou, trebuie să apelaţi la programator.

12

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