Documente Academic
Documente Profesional
Documente Cultură
Universitatea Tehnică
Departamentul Informatica și Ingineria Sistemelor
Raport
Lucrarea de laborator nr.2
La disciplina:
STRUCTURI DE DATE ȘI ALGORITMI
************************************************************************************************
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:
Alocarea Memoriei
Completarea Structurilor
Afisare
Adaugare la sfirsit
Modificarea structurii n
Sortarea
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;
}