Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrare de laborator nr. 1
la Structuri de Date si Algoritmi
A efectuat:
st. gr. AI-182 Croitoru Tudor
A verificat:
dr., conf. univ. Sorin Botnaru
2019
Lucrarea de laborator nr.1 la SDA
entru studenţii an. 1, FCIM, UTM
Tema: Implementarea tipului de date abstract “Tablou de structuri” în limbajul C.
2. Fişierul tablou.cpp sau tablou.c care conţine codurile (implementările) tuturor funcţiilor
declarate în fişierul antet.
3. Fişierul utilizatorului lab1.cpp sau lab1.c care reprezintă un program cu funcţia main ( )
pentru prelucrarea tabloului de structuri cu afişarea meniului de opţiuni pe ecran si anume:
alocarea memoriei dinamice pentru tabloul de structuri cu n elemente, introducerea
informaţiei despre elementele tabloului de la tastatură, afişarea informaţiei despre elementele
tabloului pe ecran, căutarea elementului tabloului după unui cîmp al structurei, modificarea
cîmpurilor elementului tabloului, interschimbarea a 2 elemente indicate ale tabloului,
sortarea elementelor tabloului după unui cîmp, adăugarea unui element nou la sfîrșitul
tabloului, adăugarea unui element nou la începutul tabloului, inserarea unui element nou în
tabloul la pozitia indicată, stergerea (eliminarea) unui element din tabloul, scrierea (salvarea)
informaţiei despre elementele tabloului în fişier, citirea informaţiei despre elementele
tabloului din fişier, eliberarea memoriei dinamice alocate pentru tabloul, ieşire din program.
Variantele structurilor:
1. Carte 9. Imobil
Toate aceste operațiuni (options) pot fi implementate într-un program de limbaj C pentru o
serie de procesări de baze de date structurate prin crearea unui număr corespunzător de
funcții (subprograme) și apoi prin apelarea lor din funcția main () într-o anumită ordine. De
obicei, ordinea și numărul acestor apeluri de funcții (ordinea și numărul de opțiuni necesare
pentru a efectua) depind și sunt determinate de utilizator în timpul unei sesiuni de lucru cu
baza de date. De ce este necesar să se dezvolte interfața de utilizator adecvată pentru
comunicarea dintre utilizator și program. Să luăm în considerare procesul de dezvoltare a
unei interfețe simple de utilizare în limbajul C pe baza utilizării instrucțiunii de selecție
"Switch" și un ciclu infinită care oferă posibilitatea de a ieși pe ecran un simplu meniu de
operații (opțiuni) în timpul unei sesiuni de lucru cu baza de date. În primul rând, este necesar
să se ia în considerare Switch de selecție a selecției.
Instrucțiunea de selecție "Switch" în limbajul C.
switch(expression)
{ case literal1 : statement(s);
break;
case literal2 : statement(s);
break;
...................
case literalN : statement(s);
break;
default : statement(s);
}
next statement;
1. Evaluează expresia și compară valoarea sa de tip int sau char cu literele int sau
char după fiecare etichetă.
2. Dacă se găsește o potrivire între expresie și unul dintre literali, execuția este
transferată în instrucțiunile urmând eticheta Case.
3. Dacă nu se găsește nici o potrivire, execuția este transferată în instrucțiunile
urmând eticheta default opțională.
4. Dacă nu se găsește nici o potrivire și nu există etichetă default, execuția trece la
prima instrucțiune urmând instrucțiunea de închidere a instrucțiunii switch,
următoarea instrucțiune.
5. Pentru a vă asigura că sunt executate numai instrucțiunile asociate șablonului de
potrivire, includeți o instrucțiune de pauză acolo unde este necesar, care termină
întreaga instrucțiune de Switch.
Input data:
n,k,c, ,i integer variable
Marfa *A, *RN – Vareabile de tip „marfa”
filename[20], ch - char
FILE *fp;
3
Output data:
funtiile: (declaration)
marfa.h_____________________________________________
typedef struct marfa
{
char nume[20];
float pret;
float masa;
int cantitate;
} marfa;
void introduce(marfa * A,int n);
void afisare(marfa * A,int n);
void sortare(marfa *A,int n);
int cautare(marfa *A, int n, char *nume);
marfa *realocarea(marfa *A, int *n, marfa a);
marfa *appenddata(marfa *A, int *n, marfa a);
marfa *deletedata(marfa *A, int *n, int k);
void savedata(marfa *A, int n, char *filename);
void readdata(char *filename);
functions.c_________________________________________
#include "marfah.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
}
}
}
}
}
if(stricmp(A[i].nume,nume)==0)
{
return i;
return -1;
}
}
}
scanf("%d",&t);
if (t)
return A;
}
marfa *appenddata(marfa *A, int *n, marfa a)
{ marfa *RN;
RN=(marfa*)realloc(A,(*n+1)*sizeof(*A));
if(!RN)
return RN;
RN[*n]=a;
*n=*n+1;
return RN;
}
marfa* deletedata(marfa *A, int *n, int k)
{
int i;
marfa *RN;
for(i=k; i<*n-1; i++)
{A[i]= A[i+1];}
RN = (marfa *)realloc(A, (*n-1)*sizeof(*RN) );
if (RN==NULL) {return RN;}
*n=*n-1;
return RN;
}
}
fclose(fp);
}
void readdata(char *filename)
{
FILE *fp;
marfa *A;
int n=3,i=0;
fp=fopen(filename,"r");
if(!fp)
{
printf("Fisierul nu exista!\n");
system("pause");
exit(1);
}
fscanf(fp,"%s%f%f%i",&A[i].nume,&A[i].pret,&A[i].masa,&A[i].cantitate);
fclose(fp);
printf("Denumirea: %s\n Pretul: %f\n Masa: %f\n Cantitatea: %i\n",
A[i].nume,A[i].pret,A[i].masa,A[i].cantitate);
#include "marfah.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
if(stricmp(A[i].nume,nume)==0)
{
return i;
return -1;
}
}
}
return A;
}
marfa *appenddata(marfa *A, int *n, marfa a)
{ marfa *RN;
RN=(marfa*)realloc(A,(*n+1)*sizeof(*A));
if(!RN)
return RN;
RN[*n]=a;
*n=*n+1;
return RN;
}
marfa* deletedata(marfa *A, int *n, int k)
{
int i;
marfa *RN;
for(i=k; i<*n-1; i++)
{A[i]= A[i+1];}
RN = (marfa *)realloc(A, (*n-1)*sizeof(*RN) );
if (RN==NULL) {return RN;}
*n=*n-1;
return RN;
}
}
main.c_______________________________________________
#include "marfac.c"
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main() {
int n, c, k;
marfa *A, *RN;
char filename[20];
char nume[20];
marfa a;
FILE *fp;
while (1) {
puts("\t\tMeniu");
puts("1. Alocarea memoriei");
puts("2. Introducerea informatiei");
puts("3. Afisarea datelor pe ecran");
puts("4. Cautarea elementului conform denumirei");
puts("5. Sortarea disciplinilor dupa denumire");
puts("6. Modificarea elementului");
puts("7. Adaugarea unui element");
puts("8. Stergerea unui element");
puts("9. Salvarea bazei in fisier");
puts("10. Citirea din fisier");
puts("0. Iesire");
printf("\nComanda <<< ");
scanf("%d", &c);
switch (c) {
case 0:
if (A) {
free(A);
A = NULL;
}
exit(1);
break;
case 1:
printf("Introduceti numarul de marfe: ");
scanf("%d", &n);
A = (marfa *) malloc(n * sizeof(*A));
if (A == NULL) {
printf("Memoria nu a fost alocata\n");
return -1;
}
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 2:
introduce(A, n);
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 3:
afisare(A, n);
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 4:
printf("Dati denumirea marfei: ");
fflush(stdin);
gets(nume);
k = cautare(A, n, nume);
system("pause");
if (k == -1) {
puts("Denumirea nu a fost gasita");
} else {
printf("Marfa este :\n Marfa %i \n", k + 1);
printf(" Denumirea:%s \n Pretul(lei):%f \n Masa(kg):%f \n Cantitatea:%d\n\n ", A[k].nume,
A[k].pret,
A[k].masa, A[k].cantitate);
}
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 5:
sortare(A, n);
puts("Sortarea a fost efectuata cu succes , pentru a vedea lista de marfuri sortate tasteaza in meniu
<<3>>");
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 6:
puts("\n/t/t Alegeti marfa care o doriti sa o modificati:");
scanf("%i", &k);
modificare(A, n);
puts("Modificarea a fost realizata cu succes");
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 7:
puts("Dati informatie despre marfa noua:");
printf("Denumirea: ");
fflush(stdin);
gets(a.nume);
printf("Pret: ");
scanf("%f", &a.pret);
printf("Masa: ");
scanf("%f", &a.masa);
printf("Cantitate: ");
scanf("%i", &a.cantitate);
RN = appenddata(A, &n, a);
if (!RN) {
puts("Adaugarea nu a avut loc!");
puts("\nTastati o tasta pentru continuare");
getch();
break;
}
puts("Operatiunea afost efectuata cu succes!");
A = RN;
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 8:
puts("Dati pozitia necesara, pentru eliminare din baza");
scanf("%i", &k);
RN = deletedata(A, &n, k - 1);
if (!RN) {
("Eliminarea nu a avut loc!");
puts("\nTastati o tasta pentru a continua");
getch();
break;
}
puts("Operatiunea s-a efectuat cu succes");
A = RN;
puts("\nTastati o tasta pentru a continua");
getch();
break;
case 9:
//puts("Dati numele fisierului: ");
//fflush(stdin);
//gets(filename);
//strcat(filename,".txt");
// savedata(A, n, "file.txt");
// puts("Fisierul dumnevoastra a fost salvat!");
getch();
break;
case 10:
//puts("Dati numele fisierului: ");
//fflush(stdin);
//gets(filename);
//strcat(filename,".txt");
// readdata("file.txt");
break;
default:
puts("\nOptiunea introdusa nu exista!");
puts("\nTastati o tasta pentru continuare");
getch();
}
}
getch();
return 0;
}
Menu___________________________
Introducere Imobiliare:
Cautarea Imobiliare:
Sortarea Imobiliare:
Editarea Imobiliare:
Aduagarea Imobil Nou:
Stergerea Imobiliare:
Salvarea In Fila:
marfafile.txt:
Citirea Imobil Din Fila:
Concluzie:
În această lucrare de laborator am creat trei fișiere în limbajul C, pentru realizarea și utilizarea
Tabloul de Structuri.
- un titlu header.h pentru descrierea structurii de date a elementului matricei (structura unei
Imobil) și, de asemenea, pentru prototipuri de funcții, oferind operații de procesare a matricei.
- Un fisier functie.c pentru definirea functiilor (texte de functii), declarate in fisierul de titlu.
bibliografie
1. http://cprogramminglanguage.net/
2. „The C programming language” By Brian W. Kernighan and Dennis M. Ritchie
3. Conspects on Computer Programming of Lector dr., conf. univ. M.Kulev. Chișinău:
UTM, 2014.
4. http://www.programiz.com/c-programming/c-file-input-output
5. http://www.programiz.com/c-programming/c-structures
6. http://www.cprogramming.com/tutorial/c/lesson7.html
7. http://www.codingunit.com/c-tutorial-structures-unions-typedef
8. https://www.youtube.com/watch?v=38I_AUMpKpQ&index=50&list=PL6gx4Cwl9D
GAKIXv8Yr6nhGJ9Vlcjyymq