Sunteți pe pagina 1din 9

Lucrare de laborator

la disciplina
Structuri de Date și Algoritmi
Lucrare de laborator nr. 1:

Tema:
Implementarea tipului de date abstract “Tablou de structuri” în limbajul C.

Scopul lucrării
Scopul lucrării este de a familiariza studentul cu mecanismul de creare a tablourilor
statice și dinamice de structuri și operații elementare asupra acestuia, utilizînd pentru
aceasta limbajul C.
Problema

1. Să se elaboreze un program ce va aloca static un tablou unidimensional de


structuri și va realiza următoarele funcții:
- citirea de la tastatură a elementelor tabloului;
- afișarea la consolă a elementelor tabloului;
- căutarea unui element după o valoare a unui cîmp din structură și returnarea
poziției unde se află primul element găsit.

2. Să se elaboreze un program ce va aloca dinamic un tablou unidimensional de


structuri și va realiza următoarele funcții, unde funcțiile date reprezintă
opțiuni organizate într-un meniu în cadrul programului:
- citirea de la tastatură a elementelor tabloului;
- afișarea la consolă a elementelor tabloului;
- căutarea unui element după o valoarea a unui cîmp din structură și returnarea
poziției unde se află primul element găsit;
- eliberarea memoriei tabloului;
- sortarea elementelor după un cîmp a structurii;
- inserarea unui element nou la capătul tabloului;
- inserarea unui element nou la începutul tabloului;
- insearea unui element la o poziție X (introdusă de la tastatură) în cadrul tabloului;
- ștergerea unui element de pe o poziție X ( introdusă de la tastatură) din cadrul
tabloului.

Rezultatul
Rezultaul lucrării se va plasa într-un raport, unde va fi inclusă foaia de titlu și codul
sursă a programului cu o poză de execuție a acestuia.
#includAafde<stdio.h>
#include<string.h>

struct Student
{
int rollNumber;
char studentName[10];
float percentage;
};

int main(void)
{
int n,std,dd;
char search[10];
int counter;
struct Student studentRecord[5];

printf("\t| Welcome to School Student Information | \n\t\t| Student Search Program |");
printf("\nHow many have Student ===>");
scanf("%d", &std);

for(counter=0; counter<std; counter++)


{
printf("\nEnter Roll Number:");
scanf("%d",&studentRecord[counter].rollNumber);
printf("\nEnter Name:");
scanf("%s",&studentRecord[counter].studentName);
printf("\nEnter percentage:");
scanf("%f",&studentRecord[counter].percentage);

}
test:
printf("\nWhich you need ?:");
printf("\n1.Student Information List:");
printf("\n2.Search in Database:");
scanf("%d",&dd);
switch(dd) {
case 1:
printf("\nStudent Information List:");

for(counter=0; counter<std; counter++)


{
printf("\nRoll Number:%d\t Name:%s\t Percentage :%.2f\n",
studentRecord[counter].rollNumber,studentRecord[counter].studentName,
studentRecord[counter].percentage);
}
goto test;
break;

case 2:
printf("Search in Database the Student Name>> ");
scanf("%9s", &search[0]);

for (n=0;n<std;n++)
{
if(strcmp(studentRecord[n].studentName, search) == 0)
{
printf ("\nrollNumber = %d",studentRecord[n].rollNumber);
printf ("\npercentage = %.2f\n",studentRecord[n].percentage);
goto test;
break;
}
return;
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct hotel{
char denumirea[100];
char adresa[100];
char stele[100];
int costul;
struct hotel* next;
};
typedef struct hotel hotel;
hotel *head;

void introducere(hotel* head);


int create(int n);
void read(hotel* head,int n);
void show(hotel* head);
hotel* searchs(hotel* head,char adr[]);
void modify(hotel *head,hotel* a);
int lenght(hotel* head);
void sorts(hotel* head);
void swaps(hotel* a,hotel* b);
hotel* freem(hotel* head);

void introducere(hotel* head)


{
hotel *p;
p=head;
if(!p)
p = (hotel*)malloc(sizeof(*p));
printf(" Denumirea: ");
fflush(stdin);
gets(p->denumirea);
printf(" Adresa: ");
fflush(stdin);
gets(p->adresa);
printf(" Stele: ");
gets(p->stele);
printf(" Costul: ");
scanf("%d",&p->costul);
p=p->next;
}

int create(int n)
{
hotel *c,*p;
int i;

for(i=0;i<n;i++)
{
c=(hotel*)malloc(sizeof(*c));
if (i==0)
{
head=c;
} else {
p->next=c;
}
p=c;
}
c->next=NULL;
return 1;
}

void read(hotel* head,int n){


hotel *p;
int i=1;
printf(" Dati informatia despre hotel\n");
p=head;
while(p){
printf("\nHotel %d\n",i++);
printf(" Denumirea: ");
fflush(stdin);
gets(p->denumirea);
printf(" Adresa: ");
fflush(stdin);
gets(p->adresa);
printf(" Stele: ");
fflush(stdin);
gets(p->stele);
printf(" Costul: ");
scanf(" %d",&p->costul);
p=p->next;
if(p==head){
break;}
}
}
void show(hotel* head){
int i=1;
hotel *p;
p=head;
while(p){
printf("Hotel %d\n ",i++);
printf(" Denumirea: %s\n ",p->denumirea);
printf(" Adresa: %s\n ",p->adresa);
printf(" Stele: %s\n ",p->stele);
printf(" Costul: %d\n ",p->costul);
p=p->next;

}
}

hotel* searchs(hotel* head,char adr[]){


hotel *p;
p=head;
while(p){
if(stricmp(p->denumirea,adr)==0){return p;}
p=p->next;
}
return NULL;
}
void modify(hotel *head,hotel* a){
int t;
printf(" Doriti sa modificati denumirea?(1/0): ");
scanf("%d",&t);
if(t){
printf(" Dati denumirea noua: ");
fflush(stdin);
gets(a->denumirea);
}
printf(" Doriti sa modificati adresa?(1/0): ");
scanf("%d",&t);
if(t){
printf(" Dati adresa noua: ");
fflush(stdin);
gets(a->adresa);
}
printf(" Doriti sa modificati stele?(1/0): ");
scanf("%d",&t);
if(t){
printf(" Dati stele nou: ");
fflush(stdin);
gets(a->stele);
}

printf(" Doriti sa modificati costul?(1/0): ");


scanf("%d",&t);
if(t){
printf(" Dati numarul nou al costului: ");
fflush(stdin);
scanf("%d",&a->costul);
}
}
int lenght(hotel* head){
hotel *p;
int l=0;
p=head;
while(p){
l++;
p=p->next;
if(p==head)break;
}
return l;
}
void sorts(hotel* head){
hotel *a,*b;
int i,k,l;
a=(hotel*)malloc(sizeof(hotel));
if(!a){puts(" Memoria nu a fost alocata");
exit(1);}
b=(hotel*)malloc(sizeof(hotel));
if(!b){puts(" Memoria nu a fost alocata");
exit(1);}
l=lenght(head);
for(i=0;i<l-1;i++){
a=head;
b=a->next;
for(k=0;k<l-1-i;k++){
if(stricmp(a->denumirea,b->denumirea)>0){
swaps(a,b);
}
a=a->next;
b=b->next;
}
}
}
void swaps(hotel* a,hotel* b){
hotel *na,*nb;
hotel t;
na=a->next;
nb=b->next;
t=*a;
*a=*b;
*b=t;
a->next=na;
b->next=nb;
}
hotel *freem(hotel* head){
hotel*p,*q;
if(head==NULL)
return NULL;
p=head;
while(p){
q=p;
p=p->next;
free(p);
if(p==head)
break;
}
head=NULL;
return NULL;
}

int main(){

int i=0,l=0,k,n,n1,m=0,id=0,f,rs;
hotel *a,*b,*p,*cautat,*v;
hotel s,y;
char adr[100],adr1[100],adr2[100],num[100],*fname;
int optiune;
optiune=0;
do{
system("CLS");
printf("\tHotel Managemant Program\n");
puts(" >> MENU <<");
puts(" 1. Crearea listei.");
puts(" 2. Introducerea datelor.");
puts(" 3. Afisarea datelor.");
puts(" 4. Cautarea unui element.");
puts(" 5. Sortarea elementelor.");
puts(" 6. Eliberaraea memoriei.");
puts(" 0. Iesire.");
printf("\n Alegeti optiunea: ");
scanf("%d",&optiune);
switch (optiune){
case 1: {
printf(" Dati numarul de hotele: ");
scanf("%d",&n);
n1=create(n);
system("PAUSE");
break;
}
case 2: {
if(!head){
puts(" Memoria nu a fost alocata");
getch();
break;
}
if(!id)
{ read(head,n);
id=1;
}
else
puts(" Datele au fost deja introduse");
system("PAUSE");
break;
}
case 3: {
if(!head){puts(" Memoria nu a fost alocata");}
if(id)
{
puts(" Lista de structuri");
show(head);
}
else
{
printf(" Doriti sa introduceti informatia?(1/0): ");
scanf("%d",&f);
if(f)
{read(head,n);
id=1;
puts(" Lista de structuri");
show(head);
}
}

system("PAUSE");
break;
}
case 4: {
printf(" Introduceti denumirea de cautat: ");
fflush(stdin);
gets(adr);
p=searchs(head,adr);
if(p==0){
puts(" Hotelul nu a fost gasit in baza de date");
puts(" Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
puts(" Hotelul cautat");
printf(" Denumirea: %s\n Adresa: %s\n Stele: %s\n Costul: %d\n",p->denumirea,p-
>adresa,p->stele,p->costul);
system("PAUSE");
break;
}

case 5: {
sorts(head);
puts(" Lista a fost sortata");
printf(" Doriti sa afisati lista sortata(1/0): ");
scanf("%d",&f);
if(f)
{
puts(" Lista dupa sortare");
show(head);
}
puts("\n Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
system("PAUSE");
break;
}
case 6: {
head=freem(head);
if(head)
puts(" Lista nu a fost eliberata") ;
if(!head)
id=0;
puts(" Memoria a fost eliberata cu succes!!!");
system("PAUSE");
break;
}
case 0:{

printf(" Doriti sa iesiti?(1/0): ");


scanf("%d",&f);
if(f)
{
if(head)
{
free(head);
head=NULL;
}
return 0;
}
else
break;
default:
puts(" Alegeti optiunea corect");
getch();
}
}
}
while(optiune!=0);
getch();
return 0;
}