Sunteți pe pagina 1din 34

MINISTERUL EDUCAŢIEI, CULTURII ŢI CERCETĂRII

AL REPUBLICII MOLDOVA
Centrul de Excelenţă în Informatică şi Tehnologii Informaţionale

RAPORT
LA PRACTICA DE INIŢIERE ÎN SPECIALITATE
SPECIALITATEA "Programare şi analiza produselor program"

TEMA : "Sfere"

A elaborat elevul
***********
Grupa ****
Conducătorul practicii
Frunza Olga

Chişinău ****
Cuprins
Cuprins 2
Introducere 3
Sarcinile de lucru 4
Listingul Programului 5
Testarea programului 17
Înregistrea a o nouă sferă 17
Excludre din fişierele de intrare liniile ce corespund codului figurii, introdus de latastatură: 17
Determinarea volumului sumar ale tuturor sferelor 18
Afişează pe ecran atributele figurilor, de culoarea indicată de la tastatură, în ordinea crescătoare a ariilor
suprafeţelor acestora 18
Afişează pe ecran atributele figurilor de volume identice 18
Determină figura de volum minim şi, respectiv, cea de volum maxim, confecţionate din materialul cu
denumirea introdusă de la tastatură 18
Enumără figurile confecţionate din metal, ariile suprafeţelor căror nu depăşeşte valoarea introdusă de la
tastatură 19
Creează fişierul textual Galben.txt în care se vor copia acele linii ale fişierului de intrare,care corespund
figurilor de culoare galbenă: 19
Functii suplimentare 19
Functia de afisare a listei 19
Functia help 19
Registrul de calcul tabelar 20
Inserarea pentru fiecare tabel titlul și denumirile câmpurilor respective 20
Adaugarea lista prdefinita pentru Culoare, Material si Codul sferei 20
Adaugarea o coloana in care introducem cate o imagine petru fiecare sfera 20
Aria suprafetei la fiecare sfera, volumul la fiecare sfera si volumul sumar al sferelor: 21
Numarul de sfere cu volumul mai mare de cat mediu 21
Numarul sferelor de fiecare material 21
Volumul maxim per culoare si volumul minim per material 21
Reprezentarea grafica a numarului de sfere per culoare si material: 21
Lista sferelor confectionate din metal, denumirea caruia sete selectata dintr-o lista ascunsa 21
Sarcina suplimentara 22
Listingul programului suplimentar 24
Concluzie 33
Bibliografie: 33

2
Introducere
Conform obiectivelor generale, practica de inițiere în specialitate se va realiza sub genericul
„Elaborarea algoritmilor destinați rezolvării problemelor de structură complexă mixtă”. În rezultatul
reprezentării unor asemenea algoritmi prin mijloacele unui limbaj de programare de nivel înalt se
obțin, de regulă, modele computerizate mari, care se bazează pe utilizarea largă a diverselor tipuri
structurate de date: tablouri, șiruri de caractere, fișiere etc.
În cadrul lecțiilor de programare și de procesare tabelară elevii se familiarizează cu
programarea și calculul tabelar, de regulă, în baza elaborării algoritmilor de rezolvare a unor
probleme concrete simple. Astfel, este posibilă examinarea doar a principiilor generale de elaborare
a programelor/registrelor de calcul și anumitor aspecte ale rezolvării problemelor. Însă, rezolvarea
problemelor reale presupune elaborarea unor produse computerizate mari, constituită dintr-o gamă
întreagă de etape: proiectarea sistemului, elaborarea părților componente ale algoritmului, reunirea
diverselor fragmente ale proiectului într-un produs final, 5 / 13 documentarea etc.
În acest context, practica de inițiere în specialitate preconizează imitarea întregului proces de
elaborare a unui produs program/registru de calcul mare, permite elevilor să evolueze în rolul de
elaborator și organizator al proiectului. Lucrul pe parcursul practicii de inițiere se programează în
așa mod, încât să se obțină un produs funcțional și corect.Practica tehnologică se va desfășura în
cadrul instituției de învățământ. Instituția îi va asigura fiecărui elev loc dotat cu calculator personal
pentru realizarea sarcinilor înaintate. Locul de practică va fi amenajat ținând cont de cerințele și
condițiile de muncă ergonomice. De asemenea instituția își va asuma obligații de a asigura
securitatea vieții și sănătății elevului, prevenirea riscurilor profesionale, accesul elevilor și al
conducătorului de practică la locul de desfășurare a stagiului de practică. Iar înainte de începerea
stagiului de practică, elevul va fi instruit referitor la respectarea normelor de securitate și sănătate în
muncă, a disciplinei de muncă și a normelor legislative în vigoare din instituția dată.

Obiectivele practicii de initiere in specialitate

Obiectivele generale ale practicii de inițiere în specialitate:


□ consolidarea cunoștințelor teoretice și aprofundarea deprinderilor practice, obținute de elevi la
modulele studiate;
□ aplicarea tehnologiilor de elaborare a produselor program, a registrelor de calcul tabelar, a
documentelor text și a prezentărilor electronice;
□ dezvoltarea abilităților muncii de sine stătător și în echipă;
Sarcinile de lucru

11. Sfere. Informaţiile despre un set de sfere sunt înregistrate în următoarele 2 fişiere textuale:
-fişierul Figuri.txt, fiecare linie a cărui corespunde unei singure sfere şi reciproc. O linie din fişier
conţine următoarele date, separate prin spaţiu: CodSf (Codul sferei); Culoarea (roşie, galbenă,
verde, albastră), Material ( Materialul din care e confecţionată: argilă, lemn, metal, plastic).
-fişierul Dimens.txt, fiecare linie a cărui corespunde unei singure sfere şi reciproc. O linie din
fişier conţine următoarele date, separate prin spaţiu: CodSf (Codul sferei); cele 3 dimensiuni: Xc
(Abscisa centrului sferei), Yc (Ordonata centrului sferei), R (Raza sferei);
⮚ Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea
utilizatorului, următoarele prescripţii:
1) Înregistrează o nouă sferă;
2) Exclude din fişierele de intrare liniile ce corespund codului figurii, introdus de la tastatură;
3 ) Determină volumul sumar ale tuturor sferelor;
4) Afişează pe ecran atributele figurilor, de culoarea indicată de la tastatură, în ordinea crescătoare
a ariilor suprafeţelor acestora;
5) Afişează pe ecran atributele figurilor de volume identice;
6) Determină figura de volum minim şi, respectiv, cea de volum maxim, confecţionate din
materialul cu denumirea introdusă de la tastatură;
7) Enumără figurile confecţionate din metal, ariile suprafeţelor căror nu depăşeşte valoarea
introdusă de la tastatură;
8) Creează fişierul textual Galben.txt în care se vor copia acele linii ale fişierului de intrare, care
corespund figurilor de culoare galbenă.

⮚ Realizaţi următoarele sarcini în aplicaţia MSExcel:

1) De creat registrul Sfere. Importați datele din fișierele Figuri.txt, Dimens.txt în foi separate;
denumirea foii să coincidă cu numele fișierului respectiv.
2) Inserați pentru fiecare tabel titlul și denumirile câmpurilor respective.
3) Formatați tabelul: stabiliți chenarul, proprietățile textului etc.
4) Valorile pentru câmpurile Culoare, Material din foaia Figuri şi câmpul Codul sferei din
foaia Dimens vor fi selectate dintr-o listă de valori predefinite.
5) În foaia Figuri adăugați un câmp nou și inserați în celule pentru fiecare CodF imaginea
sferei respectiv.
6) De calculat aria suprafeței laterale a fiecărei sfere în cm 2, volumul pentru fiecare sferă,
volumul sumar ale tuturor sferelor per material, volumul sumar ale tuturor sferelor.
7) Calculați: numărul sferelor a căror volum este mai mare decât volumul mediu, numărul
sferelor de fiecare material, volumul maxim per culoare, volumul minim per material.
Rezultatele calculelor vor fi afișate într-o foaie nouă cu numele Statistica.
8) Reprezentați grafic numărul de sferelor per culoare şi material.
9) Afișați lista sferelor confecționate din material, denumirea căruia este selectată dintr-o listă
ascunsă (ComboBox).

Design-ul tabelelor din foile de calcul vă aparține. Tabelele să fie realitate respectând criteriile de
formatare a documentelor.
Listingul Programului:
functii.h:
#include <iostream>
#include <fstream>
#include <string.h>
#include <cmath>
#include <windows.h>

using namespace std;

struct sfere
{
int cod;
char culoare[20];
char material[20];
int Xc;
int Yc;
int raza;
}lista[100];

void adaugare()
{
fstream f;
f.open("Figuri.txt",ios::app);
int x=1;
while(x)
{x=0;
cout<<"Codul sferei : ";
cin>>lista[0].cod;

ifstream r("Figuri.txt");
if(r.is_open())
{fstream r1("Figuri.txt");
int n=0; while(!
r1.eof())
{
n++;
r1>>lista[n].cod;
r1>>lista[n].culoare;
r1>>lista[n].material;
}
r1.close();
for(int i=1;i<n;i++)
{
if(lista[i].cod==lista[0].cod)
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),116);
cout<<endl<<"ERORR"<<endl;

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),112);
cout<<"Acest cod deja exista!!!"<<endl;
cout<<"Introdu din nou"<<endl<<endl;
x=1;
}
}
}
r.close();
}
cout<<"Culoarea sferei : ";
cin>>lista[0].culoare;

cout<<"Materialul sferei : ";


cin>>lista[0].material;

f<<lista[0].cod<<" "<<lista[0].culoare<<" "<<lista[0].material<<endl;


f.close();

fstream g;
g.open("Dimens.txt",ios::app);

cout<<"Abscisa centrului sferei : ";


cin>>lista[0].Xc;

cout<<"Ordonata centrului sferei : ";


cin>>lista[0].Yc;

cout<<"Raza sferei : ";


cin>>lista[0].raza;

g<<lista[0].cod<<" "<<lista[0].Xc<<" "<<lista[0].Yc<<"


"<<lista[0].raza<<endl;

void excludere()
{
ifstream r("Figuri.txt");
if(!r.is_open())cout<<"Nu mai sunt elemente in lista";
r.close();

int codin;

cout<<"Introduceti codul pe care vreti sa il stergeti : ";


cin>>codin;

fstream f("Figuri.txt");

int n=0;
while(!f.eof())
{
n++;
f>>lista[n].cod;
f>>lista[n].culoare;
f>>lista[n].material;
}
f.close();

remove("Figuri.txt");

ofstream f2("Figuri.txt");

for(int i=1;i<n;i++)
{
if(lista[i].cod!=codin)
{
f2<<lista[i].cod<<" "<<lista[i].culoare<<"
"<<lista[i].material<<endl;
}
}
f2.close();

fstream g("Dimens.txt");

n=0;
while(!g.eof())
{
n++;
g>>lista[n].cod;
g>>lista[n].Xc;
g>>lista[n].Yc;
g>>lista[n].raza;
}
g.close();

remove("Dimens.txt");

ofstream g2("Dimens.txt");

for(int i=1;i<n;i++)
{
if(lista[i].cod!=codin)
{
g2<<lista[i].cod<<" "<<lista[i].Xc<<" "<<lista[i].Yc<<"
"<<lista[i].raza<<endl;
}
}
g2.close();
}

float volum()
{
float volsum=0;
float vol;

fstream g("Dimens.txt");
int n=0; while(!
g.eof())
{
n++;
g>>lista[n].cod;
g>>lista[n].Xc;
g>>lista[n].Yc;
g>>lista[n].raza;
}
g.close();

for(int i=0;i<n;i++)
{
vol=(4*3.14*pow(lista[i].raza,3))/3;
volsum+=vol;
}

return volsum;
}

void culoare()
{
char cul[20];
cout<<"Introduceti culoare cautata : ";
cin>>cul;

fstream f("Figuri.txt");

int n=0;
while(!f.eof())
{
n++;
f>>lista[n].cod;
f>>lista[n].culoare;
f>>lista[n].material;
}
f.close();

fstream g("Dimens.txt");
n=0;
while(!g.eof())
{
n++;
g>>lista[n].cod;
g>>lista[n].Xc;
g>>lista[n].Yc;
g>>lista[n].raza;
}
g.close();

for(int i=1;i<=n;i++)
{
for(int f=i;f<=n;f++)
{

if((4*3.14*pow(lista[i].raza,2))>(4*3.14*pow(lista[f].raza,2)))
{
lista[0]=lista[i];
lista[i]=lista[f];
lista[f]=lista[0];
}
}
}

for(int i=1;i<=n;i++)
{
if(strcmp(lista[i].culoare,cul)==0)
{
cout<<endl;
cout<<"Codul sferei : "<<lista[i].cod<<endl;

cout<<"Culoarea sferei : "<<lista[i].culoare<<endl;

cout<<"Materialul sferei : "<<lista[i].material<<endl;

cout<<"Abscisa centrului sferei : "<<lista[i].Xc<<endl;

cout<<"Ordonata centrului sferei : "<<lista[i].Yc<<endl;

cout<<"Raza sferei : "<<lista[i].raza<<endl;


Sleep(600);

}
}
}
void identic()
{
fstream f("Figuri.txt");
int n=0; while(!
f.eof())
{
n++;
f>>lista[n].cod;
f>>lista[n].culoare;
f>>lista[n].material;
}
f.close();

fstream g("Dimens.txt");
n=0;
while(!g.eof())
{
n++;
g>>lista[n].cod;
g>>lista[n].Xc;
g>>lista[n].Yc;
g>>lista[n].raza;
}
g.close();

int ok=0;
for(int i=1;i<n;i++)
{
for(int f=i+1;f<n;f++)
{
if((4*3.14*pow(lista[i].raza,3))/3==(4*3.14*pow(lista[f].raza,3))/3)
{
ok=1;
cout<<endl;
cout<<"Codul sferei : "<<lista[i].cod<<endl;
cout<<"Culoarea sferei : "<<lista[i].culoare<<endl;
cout<<"Materialul sferei : "<<lista[i].material<<endl;
cout<<"Abscisa centrului sferei : "<<lista[i].Xc<<endl;
cout<<"Ordonata centrului sferei :"<<lista[i].Yc<<endl;
cout<<"Raza sferei : "<<lista[i].raza<<endl<<endl;
cout<<" Identic "<<endl;
cout<<"Codul sferei : "<<lista[f].cod<<endl;
cout<<"Culoarea sferei : "<<lista[f].culoare<<endl;
cout<<"Materialul sferei : "<<lista[f].material<<endl;
cout<<"Abscisa centrului sferei : "<<lista[f].Xc<<endl;
cout<<"Ordonata centrului sferei :"<<lista[f].Yc<<endl;
cout<<"Raza sferei : "<<lista[f].raza<<endl;
}
}
}

if(ok==0)cout<<"Nu sunt sfere cu volum identic."<<endl;


}

void volumax()
{
fstream f("Figuri.txt");
int n=0; while(!
f.eof())
{
n++;
f>>lista[n].cod;
f>>lista[n].culoare;
f>>lista[n].material;
}
f.close();

fstream g("Dimens.txt");
n=0;
while(!g.eof())
{
n++;
g>>lista[n].cod;
g>>lista[n].Xc;
g>>lista[n].Yc;
g>>lista[n].raza;
}
g.close();

char mat[20];

cout<<"Introduceti materialul : ";


cin>>mat;

cout<<endl<<"Maxim : "<<endl<<endl;
int max=0;

for(int i=1;i<n;i++)
{
if((4*3.14*pow(lista[i].raza,3))/3>(4*3.14*pow(lista[max].raza,3))/3
&& strcmp(lista[i].material,mat)==0)
{
max=i;
}
}

cout<<"Codul sferei : "<<lista[max].cod<<endl;

cout<<"Culoarea sferei : "<<lista[max].culoare<<endl;

cout<<"Materialul sferei : "<<lista[max].material<<endl;

cout<<"Abscisa centrului sferei : "<<lista[max].Xc<<endl;

cout<<"Ordonata centrului sferei : "<<lista[max].Yc<<endl;

cout<<"Raza sferei : "<<lista[max].raza<<endl<<endl;

cout<<endl<<"Minim : "<<endl<<endl;

for(int i=1;i<n;i++)
{
if((4*3.14*pow(lista[i].raza,3))/3<(4*3.14*pow(lista[max].raza,3))/3
&& strcmp(lista[i].material,mat)==0)
{
max=i;
}
}
cout<<"Codul sferei : "<<lista[max].cod<<endl;

cout<<"Culoarea sferei : "<<lista[max].culoare<<endl;

cout<<"Materialul sferei : "<<lista[max].material<<endl;

cout<<"Abscisa centrului sferei : "<<lista[max].Xc<<endl;


cout<<"Ordonata centrului sferei : "<<lista[max].Yc<<endl;

cout<<"Raza sferei : "<<lista[max].raza<<endl<<endl;

void metal()
{
fstream f("Figuri.txt");
int n=0; while(!
f.eof())
{
n++;
f>>lista[n].cod;
f>>lista[n].culoare;
f>>lista[n].material;
}
f.close();

fstream g("Dimens.txt");
n=0;
while(!g.eof())
{
n++;
g>>lista[n].cod;
g>>lista[n].Xc;
g>>lista[n].Yc;
g>>lista[n].raza;
}
g.close();

int ariemax;

cout<<"Introduceti aria maxima : ";


cin>>ariemax;
cout<<endl;
for(int i=1;i<n;i++)
{
if(strcmp(lista[i].material,"metal")==0 &&
4*3.14*pow(lista[i].raza,2)<ariemax)
{
cout<<"Codul sferei : "<<lista[i].cod<<endl;

cout<<"Culoarea sferei : "<<lista[i].culoare<<endl;

cout<<"Materialul sferei : "<<lista[i].material<<endl;

cout<<"Abscisa centrului sferei : "<<lista[i].Xc<<endl;

cout<<"Ordonata centrului sferei : "<<lista[i].Yc<<endl;

cout<<"Raza sferei : "<<lista[i].raza<<endl<<endl<<endl;


}
}
}

void galben()
{
fstream f("Figuri.txt");
int n=0; while(!
f.eof())
{
n++;
f>>lista[n].cod;
f>>lista[n].culoare;
f>>lista[n].material;
}
f.close();

fstream g("Dimens.txt");
n=0;
while(!g.eof())
{
n++;
g>>lista[n].cod;
g>>lista[n].Xc;
g>>lista[n].Yc;
g>>lista[n].raza;
}
g.close();

ofstream x("Galben.txt");
for(int i=1;i<n;i++)
if(strcmp(lista[i].culoare,"galben")==0)
{
x<<lista[i].cod<<" "<<lista[i].culoare<<" "<<lista[i].material<<" ";
x<<lista[i].Xc<<" "<<lista[i].Yc<<" "<<lista[i].raza<<endl;
}
}

void perebivca()
{
cout<<endl<<" "<<endl;
}

void ls()
{

ifstream r("Figuri.txt");
if(!r.is_open())cout<<"Nu mai sunt elemente in lista";
else
{
r.close();

fstream f("Figuri.txt");
int n=0;
int codl=0;
int culoarel=0;
int materiall=0;

while(!f.eof())
{
n++;
f>>lista[n].cod;
int num=0;
int x=lista[n].cod;
while(x)
{
x/=10;
num++;
}

if(num>codl)codl=num;
f>>lista[n].culoare;

if(strlen(lista[n].culoare)>culoarel)culoarel=strlen(lista[n].culoare);

f>>lista[n].material;

if(strlen(lista[n].material)>materiall)materiall=strlen(lista[n].material)
;

}
f.close();

fstream g("Dimens.txt");
n=0;
int xcl=0;
int ycl=0;
int razal=0;
while(!g.eof())
{
n++;
g>>lista[n].cod;
g>>lista[n].Xc;
int num=0;
int x=lista[n].Xc;
while(x)
{
x/=10;
num++;
}

if(num>xcl)xcl=num;

g>>lista[n].Yc;

num=0;
x=lista[n].Yc;
while(x)
{
x/=10;
num++;
}

if(num>ycl)ycl=num;

g>>lista[n].raza;

num=0;
x=lista[n].raza;
while(x)
{
x/=10;
num++;
}

if(num>razal)razal=num;
}
g.close();

cout<<endl;
cout<<" COD ";
if(strlen("COD")>codl)codl=strlen("COD");
for(int i=strlen("COD");i<codl;i++)
{
cout<<" ";
}

cout<<"| CULOARE ";


if(strlen("CULOARE")>culoarel)culoarel=strlen("CULOARE");
for(int i=strlen("CULOARE");i<culoarel;i++)
{
cout<<" ";
}

cout<<"| MATERIAL ";


if(strlen("MATERIAL")>materiall)materiall=strlen("MATERIAL");
for(int i=strlen("MATERIAL");i<materiall;i++)
{
cout<<" ";
}

cout<<"| Xc ";
if(strlen("Xc")>xcl)xcl=strlen("Xc");
for(int i=strlen("Xc");i<xcl;i++)
{
cout<<" ";
}

cout<<"| Yc ";
if(strlen("Yc")>ycl)xcl=strlen("Yc");
for(int i=strlen("Yc");i<ycl;i++)
{
cout<<" ";
}

cout<<"| Raza ";


if(strlen("Raza")>razal)razal=strlen("Raza");
for(int i=strlen("Raza");i<razal;i++)
{
cout<<" ";
}cout<<"";
cout<<endl<<" ";

for(int i=0;i<codl+razal+ycl+xcl+materiall+culoarel+17;i++)cout<<"-";

cout<<endl;
for(int i=1;i<n;i++)
{cout<<" ";
cout<<" "<<lista[i].cod<<" ";
int num=0;
int x=lista[i].cod;
while(x)
{
x/=10;
num++;
}
for(int i=0;i<codl-num-1;i++)
{
cout<<" ";
}cout<<"|";
cout<<" "<<lista[i].culoare<<" ";
x=strlen(lista[i].culoare);
for(int i=0;i<culoarel-x;i++)
{
cout<<" ";
}cout<<"|";
cout<<" "<<lista[i].material<<" ";
x=strlen(lista[i].material);
for(int i=x;i<materiall;i++)
{
cout<<" ";
}cout<<"|";

cout<<" "<<lista[i].Xc<<" ";

num=0;
x=lista[i].Xc;
while(x)
{
x/=10;
num++;
}
for(int i=0;i<=xcl-num-1;i++)
{
cout<<" ";
}cout<<"|";

cout<<" "<<lista[i].Yc<<" ";

num=0;
x=lista[i].Yc;
while(x)
{
x/=10;
num++;
}
for(int i=0;i<=ycl-num-1;i++)
{
cout<<" ";
}cout<<"|";

cout<<" "<<lista[i].raza<<" ";

num=0;
x=lista[i].raza;
while(x)
{
x/=10;
num++;
}
for(int i=0;i<=razal-num-1;i++)
{
cout<<" ";
}cout<<" ";

cout<<endl;
}
cout<<" ";
}

}
Programul_pricipal:

#include<iostream>
#include<windows.h>
#include"functii.h"
using namespace std;
void slep(char a[1000])
{
for(int i=0;i<=strlen(a);i++)
{
cout<<a[i]; if(!
GetKeyState(VK_RETURN))Sleep(1);
}
if(GetKeyState(VK_RETURN))Sleep(20);
else Sleep(200);
}

int help()
{Sleep(200);
slep(" Ca sa adaugati tastati \n");
slep(" -add- \n");
slep("Ca sa stergeti tastati \n");
slep(" -delete- \n");
slep("Ca sa aflati volumul sumat taastati \n");
slep(" -volsum- \n");
slep("Ca sa vedeti ce figuri au culoare identica tastati \n");
slep(" -culoare- \n");
slep("Ca sa vedeti ce figuri au volum identic tastati \n");
slep(" -volid- \n");
slep("Ca sa vedeti figurile cu volum max si min in dependenta de material
tstati \n");
slep(" -volm- \n");
slep("Ca sa vedeti figurile metalice cu aria maxima respectiva tastati
\n");
slep(" -metal- \n");
slep("Ca sa creati un fisier Galben.txt tastati \n");
slep(" -galben- \n");
slep("Pentru a vedea lista tastati \n");
slep(" -ls- \n");
}

int main()
{ system("color 70");
help();
slep("Pentru a vedea din nou lista tastati <help> \n");
char a[20];
cout<<"Ce faceti ?"<<endl;
while(1)
{
cin>>a; if(strcmp(a,"add")==0)
{adaugare();perebivca();} if(strcmp(a,"delete")==0)
{excludere();perebivca();}
if(strcmp(a,"volsum")==0){cout<<"Volum "<<volum();perebivca();}
if(strcmp(a,"culoare")==0){culoare();perebivca();}
if(strcmp(a,"volid")==0){identic();perebivca();}
if(strcmp(a,"volm")==0){volumax();perebivca();}
if(strcmp(a,"metal")==0){metal();perebivca();}
if(strcmp(a,"galben")==0){galben();perebivca();}
if(strcmp(a,"help")==0){help();perebivca();}
if(strcmp(a,"ls")==0){ls();perebivca();}
}
return 0;
}
Testarea programului

Meniul programului:

Fig 1.1
Înregistrea a o nouă sferă:

Fig 1.2

Fig 1.3

Excludre din fişierele de intrare liniile ce corespund codului figurii, introdus de latastatură:

Fig 1.4

Fig 1.5

Fig 1.6
Determinarea volumului sumar ale tuturor sferelor:

Fig 1.7

Afişează pe ecran atributele figurilor, de culoarea indicată de la tastatură, în ordinea crescătoare a


ariilor suprafeţelor acestora:

Fig 1.8

Afişează pe ecran atributele figurilor de volume identice:

Fig 1.9

Determină figura de volum minim şi, respectiv, cea de volum maxim, confecţionate din materialul
cu denumirea introdusă de la tastatură:

Fig 2.2

18
Enumără figurile confecţionate din metal, ariile suprafeţelor căror nu depăşeşte valoarea
introdusă de la tastatură:

Fig 1.11
Creează fişierul textual Galben.txt în care se vor copia acele linii ale fişierului de intrare,care
corespund figurilor de culoare galbenă:

Fig 1.12

Fig 1.13

Functii suplimentare
Functia de afisare a listei:

Functia help: Fig 2.1


Registrul de calcul tabelar:
Inserarea pentru fiecare tabel titlul și denumirile câmpurilor respective:

Fig 3.2

Fig 3.1

Adaugarea lista prdefinita pentru Culoare, Material si Codul sferei:

Fig 3.5
Fig 3.4

Fig 3.3

Adaugarea o coloana in care introducem cate o imagine petru fiecare sfera:


Aria suprafetei la fiecare sfera, volumul la fiecare sfera si volumul sumar al sferelor:

Fig 3.7

Numarul de sfere cu volumul mai mare de cat mediu:

Fig 3.8
Numarul sferelor de fiecare material:

Fig 3.9

Volumul maxim per culoare si volumul minim per material:

Fig 3.10

Reprezentarea grafica a numarului de sfere per culoare si material:

Fig 3.11 Fig 3.12

Lista sferelor confectionate din metal, denumirea caruia sete selectata dintr-o lista ascunsa:

Fig 3.13
21
Sarcina suplimentara

4. Bila. Se consideră o tablă de dimensiunea n×m (n, m ≤ 50), împărţită în zone pătrate de
lungimea 1 (vezi figura 1). Fiecare zonă a tablei are o anumită înălţime şi culoare.

1 2 3 … j … m

i Zona [i, j]

Fig. 1. Planul tablei

Informaţiile necesare despre zonele tablei considerate sunt înregistrate în următoarele două
fişiere:
. fişierul text Tabla.in conţine pe prima linie numerele naturale n şi m, separate prin spaţiu.
Următoarele n linii ale acestui fişier conţin câte m numere reale, separate prin câte un spaţiu,
fiecare din aceste valori reprezentând înălţimea zonei respective [i, j];

. fişierul text Culoare.in, fiecare din cele n linii ale căruia conţine câte m denumiri de culori
(alb, negru, verde, rosu, cafeniu, albastru etc.), separate prin câte un spaţiu, reprezentând
culorile zonelor respective [i, j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.

Să se elaboreze o aplicație care, folosind meniuri şi subprograme, să realizeze, la solicitarea


utilizatorului, următoarele prescripţii:

22
1)Înterschimbă în fişierele de intrare prima cu ultima linii;

2)Exclude din planul terenului un rând / o coloană; alternativa aleasă şi numărul respectiv
al rândului / coloanei de exclus se va preciza de la tastatură;

3)Determină coordonatele (numărul rândului şi numărul coloanei) zonelor de minim absolut


al înălţimilor zonelor de pe întreaga tablă;

4)Determină înălţimile medii ale zonelor din fiecare linie pară a tablei;

5)Afişează pe ecran lista culorilor distincte, asociate zonelor tablei, în ordinea descendentă a
numerelor totale de zone ce reprezintă culoarea respectivă; sortarea datelor se va realiza prin
metoda numărării.
6)Creează fişierul text ZonCol.txt, în care se vor copia acele linii ale fişierului de intrare
Culoare.in, care corespund doar zonelor de înălţimi mai mari ca 10;
7) Determină în reţeaua planului tablei un dreptunghi de arie maximală, ce conţine pe
perimetru său (pe margine) doar zone de anumită culoare DenCol; laturile dreptunghiului vor
coincide cu laturile zonelor din plan. Denumirea culorii DenCol se va citi de la tastatură; la ecran
se va afişa aria S şi coordonatele colţurilor stânga –jos şi dreapta –sus ale dreptunghiului găsit;
8) Rezolvă problema: În unul din
Poziţia
P p pătrăţelele tablei se plasează o bilă. Bila se
poate deplasa din poziţia curentă în unul din
pătrăţelele vecine, pe una din cele maxim 8
direcţii posibile, numai dacă acesta are o
înălţime strict mai mică decât cea a
Fig.2.
pătrăţelului pe care se află bila. Pentru
eventualele deplasări pe direcţii diagonale
sunt prevăzute găuri de cădere de tipul celor
din colţurile mesei de biliard.
Fiind dată poziţia iniţială P a bilei, prin
coordonatele [xp, yp] ale zonei respective, să
se afle traseul cel mai scurt, suficient pentru a
Una din
Zone vizitate
ieşiri părăsi tabla.
Date de intrare. Numerele naturale xp şi yp
se citesc de la tastatură, iar informaţiile necesare despre teren –din fişierul text Tabla.in,
descris anterior.
Date de ieşire. Se va afişa pe ecran drumul găsit prin coordonatele zonelor respective.
De exemplu, pentru ilustrarea din figura 2, drumul parcurs se va afişa astfel: [2, 2]–[3, 2]–[4, 3]–
[5, 2]–[6, 3]–[6, 4]–[5, 5]– [6, 6]–[7, 7].

Listingul programului suplimentar :


#include<iostream>
#include<fstream>
#include<string.h>

using namespace std;

void interschimba_1_m()
{
fstream f("Tabla.in");
int n,m;
f>>n>>m;
float a[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}

f.close();

remove("Tabla.in");
ofstream f1("Tabla.in");
f1<<n<<" "<<m<<endl;
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(i==1)f1<<a[n][ii]<<" ";
else if(i==n)f1<<a[1][ii]<<" ";
else f1<<a[i][ii]<<" ";
}f1<<endl;
}
f1.close();
}

void delet_rand()
{
cout<<"Introduceti linia : ";
int l;
cin>>l;

fstream f("Tabla.in");
int n,m;
f>>n>>m;
float a[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}

f.close();

remove("Tabla.in");

ofstream f1("Tabla.in");
f1<<n-1<<" "<<m<<endl;
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(i!=l)f1<<a[i][ii]<<" ";
}if(i!=l)f1<<endl;
}
f1.close();

fstream g("Culoar.in");
char culori[n][m][20];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
g>>culori[i][ii];
}
}
g.close();

remove("Culoar.in");

ofstream g1("Culoar.in");
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(i!=l)g1<<culori[i][ii]<<" ";
}if(i!=l)g1<<endl;
}
g1.close();
}

void delet_coloana()
{
cout<<"Introduceti coloana : ";
int c;
cin>>c;

fstream f("Tabla.in");
int n,m;
f>>n>>m;
float a[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}
f.close();

remove("Tabla.in");

ofstream f1("Tabla.in");
f1<<n<<" "<<m-1<<endl;
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(ii!=c)f1<<a[i][ii]<<" ";
}f1<<endl;
}
f1.close();

fstream g("Culoar.in");
char culori[n][m][20];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
g>>culori[i][ii];
}
}
g.close();

remove("Culoar.in");

ofstream g1("Culoar.in");
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(ii!=c)g1<<culori[i][ii]<<" ";
}g1<<endl;
}
g1.close();
}

void minimul_absolut()
{
fstream f("Tabla.in");
int n,m;
f>>n>>m;
float a[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}
f.close();

float min=a[1][1];

for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(a[i][ii]<min)min=a[i][ii];
}
}

for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(a[i][ii]==min)cout<<i<<":"<<ii<<endl;
}
}
}

void inaltimile_medii_pe_liniile_pare()
{
fstream f("Tabla.in");
int n,m;
f>>n>>m;
float a[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}
f.close();

for(int i=2;i<=n;i+=2)
{float med=0;
for(int ii=1;ii<=m;ii++)
{
med+=a[i][ii];
}
cout<<i<<") "<<med/m<<endl;
}
}

void lista_culorilor_distincte()
{
fstream f("Tabla.in");
int n,m;
f>>n>>m;
float a[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}
f.close();

fstream g("Culoar.in");
char culori[n][m][20];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
g>>culori[i][ii];
}
}
g.close();

char clr[n][20];
int x=1;
strcpy(clr[1],culori[1][1]);
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{int ok=0;
for(int iii=1;iii<=x;iii++) if(strcmp(culori[i]
[ii],clr[iii])==0)
{
ok=1;
}
if(ok==0)
{
x++;
strcpy(clr[x],culori[i][ii]);
}
}
}

int clri[x];

for(int iii=1;iii<=x;iii++)
{clri[iii]=0;
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(strcmp(culori[i][ii],clr[iii])==0)
{
clri[iii]++;
}

}
}
}

int b[x];char c[x][20];


for(int i=1;i<=x;i++)
{
strcpy(c[i],clr[i]);
}
for(int i=1;i<=x;i++)
{b[i]=0;
for(int ii=1;ii<=x;ii++)
{
if(clri[i]<clri[ii])b[i]++;
}

28
}

for(int i=1;i<=x;i++)
{
strcpy(clr[b[i]+1],c[i]);
}

for(int i=1;i<=x;i++)
{
cout<<clr[i]<<endl;
}
}

void zone_mai_mari_ca_10()
{
fstream f("Tabla.in");
int n,m;
f>>n>>m;
int a[n][m],c[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}
f.close();

fstream g("Culoar.in");
char culori[n][m][20];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
g>>culori[i][ii];
}
}
g.close();

ofstream x("ZonCol.txt");
for(int i=1;i<=n;i++)//nu lucreaza ceva
{int ok=0;
for(int ii=1;ii<=m;ii++)
{
if(a[i][ii]<10)ok=1;
}
if(ok==0)
{
for(int ii=1;ii<=m;ii++)
{
x<<culori[i][ii]<<" ";
}x<<endl;
}
}
x.close();
}

void aria_max()
{
fstream f("Tabla.in");
int n,m;
f>>n>>m;
int a[n][m],c[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}
f.close();

fstream g("Culoar.in");
char culori[n][m][20];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
g>>culori[i][ii];
}
}
g.close();

cout<<"Introduceti culoarea :";


char culoare[20];
cin>>culoare;

int x[n][m];
for(int i=0;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
x[i][ii]=0;
}
}
int r=1;
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(strcmp(culoare,culori[i][ii])==0 && x[i-1][ii]!=0)
{
x[i][ii]=x[i-1][ii];
}
else if(strcmp(culoare,culori[i][ii])==0 && x[i][ii-
1]!=0)
{
x[i][ii]=x[i][ii-1];
}
else if(strcmp(culoare,culori[i][ii])==0)
{
x[i][ii]=r;
r++;
}
}
}
int x2[r];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
x2[i*ii]=0;
}

for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
x2[x[i][ii]]++;
}
}
int max=0;
x2[max]=-1;
for(int i=1;i<r;i++)
{
if(x2[i]>x2[max])
{
max=i;
}
}
cout<<max<<endl;
int px,py,px1,py1,b=0;
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
if(x[i][ii]==max && b==0)
{
b++;
px=ii;
py=i;
}
else if(x[i][ii]==max)
{
px1=ii;
py1=i;
}
}
}
cout<<py<<":"<<px1<<endl<<py1<<":"<<px<<endl;
cout<<"Aria : "<<(py1-py+1)*(px1-px+1)<<endl;
}

void joc()
{
fstream f("Tabla.in");
int n,m;
f>>n>>m;
float a[n][m];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
f>>a[i][ii];
}
}
f.close();

fstream g("Culoar.in");
char culori[n][m][20];
for(int i=1;i<=n;i++)
{
for(int ii=1;ii<=m;ii++)
{
g>>culori[i][ii];
}
}
g.close();

int dir=8;
int dx[]={-1,-1,-1,0,1,1,1,0};
int dy[]={-1,0,1,1,1,0,-1,-1};
int px[n*m],py[n*m];
int r=0,r2;int x,y;
cout<<"Introduceti x : ";
cin>>x;
cout<<"Introduceti y : ";
cin>>y;
while(r!=-1)
{
for(int i=0;i<dir;i++)
{

if(a[x][y]>a[x+dx[i]][y+dy[i]])
{r++;r2=r;
x+=dx[i];
y+=dy[i];
px[r]=x;
py[r]=y;
}
if(x==1 || y==1 || x==n || y==m)
{ r++;
px[r]=x;
py[r]=y;
r=-1;i=dir+1;
}
}
}
for(int i=1;i<r2+1;i++)
cout<<px[i]<<" "<<py[i]<<endl;
}
int main()
{
cout<<”Pentru a interschimba primul cu ultimul rand tastati : 1”<<endl;
cout<<”Pentru a strege un rand : 2”<<endl;
cout<<”Pentru a strege o coloana : 3”<<endl;
cout<<”Pentru a afla minimul absolut : 4”<<endl;
cout<<”Pentru a afla inaltimile medii aale linilor pare : 5”<<endl;
cout<<”Pentru a afla lista culorilor distincte : 6”<<endl;
cout<<”Pentru a afla lista liniilor mai mari ca 10 : 7”<<endl;
cout<<”Pentru a afla aria maxima si pozitia sa : 8”<<endl;
cout<<”Pentu a vedea rezolvarea problemei : 9”<<endl;

while(1)
{int x;
cout<<"-";
cin>>x;
switch(x)
{
case 1 : interschimba_1_m();break;
case 2 : delet_rand();break;
case 3 : delet_coloana();break;
case 4 : minimul_absolut();break;
case 5 : inaltimile_medii_pe_liniile_pare();break;
case 6 : lista_culorilor_distincte();break;
case 7 : zone_mai_mari_ca_10();break;
case 8 : aria_max();break;
case 9 : joc();break;
}
}
return 0;
}
Concluzie

Dupa trecerea practicii de initiere in specialitate am aplicat cunostintele accumulate pe


parcursul anului de studii. Nu au aparut dificultai pe parcursul acestor saptamani, de aceea nu am
avut nevoie de a apela la literature suplimentara.

In perioada practicii am reusit sa recapitulez tehnicile de programare sis a imi reamintesc


siretlicuri din semestrul 1. La fel miam dezvoltat competente de lucru cu fisiere si crearea
programelor de dimensiuni mai mari.

Am aprofundat cunostintele in utilizarea tipurilor de date structurate si de date ca tabolurile,


matrice, fisiere, citirea datelor din fisier , inscrierea ,excluderea si inlocuitea datelor din fisier. Am
creat un meniu destul de clar si simplu pentru ca programul sa poata fi folosit de utilizatorii
simplii.Am creat si niste functii pentru ca utilizatorul sa fie mai atras de programul dat, pentru este
mai “viu”. Eu cred ca aceste programe facut de noi inca sunt prea simple pentru a ceea interes
utilizatorilor simplii, deoarece pe oameni ii atrag mai mult interfata de cat functionalitatea.Se poate
de spus ca aceasta trebuie sa fie prima incercare “serioasa” pentru mine.
Consider ca pentru un programator este mai importanta practica de cat teoriea, deoarece fara
sa stim cum lucreaza o functie, fara sa vedem mai multe erori nu o vom intelege pe deplin.

Bibliografie:

Tutoriale pe Internet :

1. http://www.programming.com;

2. http://www.cplusplus.com;

3. http://www.infoarena.ro

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