Sunteți pe pagina 1din 17

Ministerul Educației ,Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică
Departamentul Informatica și Ingineria Sistemelor

Raport
Lucrarea de laborator nr.2
La disciplina:
STRUCTURI DE DATE ȘI ALGORITMI

Eefectuat, studentul gr.IBM-211 Marchitan Mihail

A verificat Buzurniuc Șt.


Tema: Prelucrarea tabloului de structuri si utilizarea fisierelor
Scopul lucrarii: Programarea algoritmelor pentru prelucrarea
tabloului de structuri prin utilizarea functiilor , pointerilor ,
alocarii dinamice si a fisierelor in limbajul C.
Sarcina lucrarii: Pentru tabloul unidimensional dat cu elemente de
tip structura si sa se afiseze la ecran urmatorul meniu de optiuni:
 Crearea fisierelor
 Afisarea fisirelor
 Adaugarea in fisiere
 Modificarea fisierelor
 Iesire din program
Varianta 9
Sa se elaboreze functiile pentru implementarea optiunilor
meniului. Variante pentru structure:
**********************************************************************************

************************************************************************************************

Mersul lucrarii:
1.Familarizarea cu notiunile principale din teorie si metode pe
care la vom utiliza.
2.Analiza datelor.
3.Efectuarea codului.
4.Rezultatul executarii programului.
5.Concluzia.
7.Bibliografie.
1.Notiuni principale din teorie si metode folosite
Programarea reprezinta activitatea complexa de elaborare a
programelor. Programarea nu se refera strict la scrierea codului
sursa (descrierea in limbaj de programare a rezolvarii
problemei); aceasta activitate implica parcurgerea mai multor
etape.
Structura generală a unui program in limbajul C este urmatoarea:
- directivele preprocesorului (după necisitate);
- declarațiile variabelelor globale și a funcțiilor programului
(după necesitate);
- cudul functiei principale main( );
- codurile altor funcții programului (după necesitate).
Proiectarea algoritmului poate fi considerata etapa de creativitate
a programarii, in care folosindu-se de cunostintele si experienta
dobandite, programatorul va identifica metoda de rezolvare a
problemei date si va dezvolta algoritmul corespunzator.
Un algoritm ramificat poate indeplini diferite functii in
dependenta de conditia data. Exista mai multe tipuri de algoritmi
de structura ramificata.
Algoritmele in C se realizeaza prin doua metode:
a)Prin instructiunile if,if else si else.
b)Prin instructiunile switch case , breake si default.
Instrucțiunea IF
Forma generală
if (expresie) else
instrucțiuni 1; instrucțiuni 2;

Semnificație
Dacă expresia este adevărată, se execută setul de instrucțiuni 1,
altfel se execută setul de instrucțiuni 2.
Instrucţiunea introdusă prin cuvântul cheie if exprimă o decizie
binară şi poate avea două forme: o formă fără cuvântul else şi o
formă cu else.
Exemplu din program:

Instrucţiunea while
while execută un bloc de instrucţiuni atâta timp cât o anumită
condiţie este adevărată. Forma generală a unui ciclu while este:

Câtă vreme expression are o valoare nenulă, instrucţiunile din blocul de


după while sunt executate. Expresia este reevaluată după fiecare ciclu.
Un astfel de ciclu poate să se execute o dată, de mai multe ori sau
niciodată, în funcţie de valoarea la care se evaluează expresia.
Meniul programului

 Alocarea Memoriei

 Completarea Structurilor
 Afisare

 Adaugare la sfirsit

 Modificarea structurii n
 Sortarea

 Eliberarea unei structure


 Eliberarea Memoriei

3.Codul programului:
#include<stdio.h>
#include<stdlib.h>
typedef struct Muzeu {
char denumirea[50], adresa[50], numarul[50];
int telefonul, pretul;
}Muzeu;

Muzeu *A=NULL;
int n=0,i;
//Alocare pentru n structuri
int *Alocare()
{

printf("Numarul de structuri=");scanf("%d",&n);//n>0
A=(Muzeu*)malloc(n*sizeof(Muzeu));
if(A==NULL){
printf("Memoria nu a fost alocata.\n");
return NULL;}
}
//Completarea structurilor
void Citire()
{ if (A==NULL)
{printf ("Nu s-a alocat memorie\n");
} else
{
for(i=0;i<n;i++)
{
printf("Introduceti valori pentru Muzeul: %d\n",i+1);
printf("Denumiarea:");
fflush(stdin);
gets(A[i].denumirea);
printf("Adresa:");
fflush(stdin);
gets(A[i].adresa);
printf("Telefonul:");
scanf("%d",&A[i].telefonul);
printf("Pretul:");
scanf("%d",&A[i].pretul);
printf("Numarul de exponate:");
fflush(stdin);
gets(A[i].numarul);
}
}
}
//Afisare
void Show()
{
if(i==0 ){
printf("Nu s-a efectuat procedura de introducere.\n");return ;}
else
{
printf("Nr\tDenumirea\t Adresa\t Telefonul\t Pretul\t
Numarul de exponate\n");
for(i=0;i<n;i++)
printf("%d\t%s\t\t%s\t%d\t\t%d\t\t%s\
n",i+1,A[i].denumirea,A[i].adresa,A[i].telefonul, A[i].pretul, A[i].numarul);
}
}
//Adaugare la sfarsit
void Adaugare()
{ if (A==NULL)
{printf ("Nu s-a alocat memorie\n");
} else
{
n++;
A=(Muzeu*)realloc(A,n*sizeof(Muzeu));
printf("Introduceti informatii pentru structura %d\n",n);
printf("Denumirea:");
fflush(stdin);
gets(A[n-1].denumirea);
printf("Adresa:");
fflush(stdin);
gets(A[n-1].adresa);
printf("Telefonul:");
scanf("%d",&A[n-1].telefonul);
printf("Pretul:");
scanf("%d",&A[n-1].pretul);
printf("Numarul de exponate:");
fflush(stdin);
gets(A[n-1].adresa);
}
}
//Modificarea
void Modificare()
{ if (A==NULL)
{printf ("Nu s-a alocat memorie\n");
} else
{
int v;
printf("Introdu structura care trebuie
modificata:");scanf("%d",&v);//Introducerea structurii care trebuie
modificata
if (v<=0 || v>n){
printf("Nu exista structura data.\n");
} else {
printf("Denumirea:");
fflush(stdin);
gets(A[v-1].denumirea);
printf("Adresa:");
fflush(stdin);
gets(A[v-1].adresa);
printf("Telefonul:");
scanf("%d",&A[v-1].telefonul);
printf("Pretul:");
scanf("%d",&A[v-1].pretul);
printf("Numarul de exponate:");
fflush(stdin);
gets(A[v-1].adresa);
}
}
}
//Cautarea
void Cautare()
{ if (A==NULL)
{printf ("Nu s-a alocat memorie\n");
} else
{
int c;
printf("Introdu structura cautata:");scanf("%d",&c);//Introducerea
structurii cautate
if (c<=0 || c>n){
printf("Nu exista structura data.\n");
} else {
printf("Nr\tDenumirea\tAdresa\tTelefonul\tPretul\tNumarul de
exponate\n");
printf("%d\t%s\t\t%s\t%d\t\t%d\t\t%s\n",c,A[c-1].denumirea,A[c-
1].adresa,A[c-1].telefonul, A[c-1].pretul, A[c-1].numarul);
}
}
}
//Sortare (dupa pret)
void Sortare()
{if (A==NULL)
{printf ("Nu s-a alocat memorie\n");
} else
{
int sort;
Muzeu temp;
do{
sort=0;
for( i=0;i<n-1;i++)
{
if(A[i].pretul>A[i+1].pretul)
{
sort=1;
temp=A[i];
A[i]=A[i+1];
A[i+1]=temp;
}
}
}while(sort);
printf("Sortarea dupa Pret s-a efectuat cu succes\n");
}
}
//Eliminarea unei structuri
void Eliminare()
{ if (A==NULL)
{printf ("Nu s-a alocat memorie\n");
} else
{
int nr;
printf("Introdu numarul structurii care trebuie
eliminata:");scanf("%d",&nr);
if(nr<=0 || nr>n){
printf("ERROR");return;}
nr--;
if(nr==n-1)n--;
for( i=nr;i<n-1;i++)
{
A[i]=A[i+1];
n--;
}
A=(Muzeu*)realloc(A,n*sizeof(Muzeu));
}
}
//Eliberarea memoriei
void free_mem()
{
if(A!=NULL)
{
free(A);
A=NULL;
}
}
int Menu()
{
printf("1. Alocarea dinamica a memoriei pentru tabloul de structuri. \n");
printf("2. Introducerea elementelor tabloului de la tastatura. \n");
printf("3. Afisarea elementelor tabloului la ecran.\n");
printf("4. Sortarea tabloului.\n");
printf("5. Modificarea structurii aparte.\n");
printf("6. Adaugarea unui element nou la sfarsit.\n");
printf("7. Eliminarea structurii din tablou. \n");
printf("8. Eliberarea memoriei alocate pentru tablou si iesirea din
program.\n");
int option;
printf("Enter: ");scanf("%d",&option);
return option;
}

int main()
{
int x;

do{
x=Menu();
switch (x)
{
case 1 : Alocare();break;
case 2 : Citire();break;
case 3 : Show();break;
case 6 : Adaugare();break;
case 5 : Modificare();break;
case 4 : Sortare();break;
case 7 : Eliminare();break;
case 8 : free_mem();break;
default : printf("Introdu alta obtiune\n");
}
system("pause");
system("cls");}while(x!=8);

return 0;
}

5.Rezultatele executarii programului


6.Concluzii
1.In aceaasta lucrare am obtinut cunostinte necesare pentru elaborarea ,
compilare, rulare si testare a unui program in limbajul de programare C.
2.Am elaborat un program bazat pe o functie care schimba cu locul prima si
ultima litera dintr-un sir de caractere .
4. Au fost obţinute deprinderi de elaborare, compilare, rulare și testare a
unui program simplu în
limbajul de programare C.
5. Programul elaborat nu verifică datele de intrare, ce reprezintă un
dezavantaj al algoritmului.
6. Programul elaborat poate fi dezvoltat ulterior prin adăugarea operațiilor
de verificare a datelor de intrare.
7.Bibliografie
https://else.fcim.utm.md/pluginfile.php/40696/mod_resource/content/2/
Kulev_PC_lab_raport_model_2021.pdf
https://else.fcim.utm.md/pluginfile.php/33914/mod_resource/content/1/
Programare_in_C.pdf
3. Tutorial in C language. http://devcentral.iftech.com/learning/tutorials/c-cpp/c/
4. http://andrei.clubcisco.ro/cursuri/anul-1/semestrul-1/programarea-calculatoarelor.html

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