Documente Academic
Documente Profesional
Documente Cultură
al Republicii Moldova
RAPORT
despre lucrarea de laborator Nr. 10-11
la Structuri de date şi algoritmi
A efectuat:
st. gr. CR-191 Axenti Alina
A verificat:
Lector univ. Munteanu Silvia
Chişinău – 2021
Scopul lucrării:
Obţinerea deprinderilor practice de implementare și de utilizare a tipului abstract de date (TAD)
„Arbore binar” cu asigurarea operațiilor de prelucrare de bază ale arborelui binar oarecare prin
parcurgerea recursivă a nodurilor arborelui, folosind algoritmi recursivi.
1. Fişier antet cu extensia .h, care conține specificarea structurii de date a nodului arborelui binar
(conform variantelor) şi prototipurile funcţiilor de prelucrare ale arborelui binar oarecare, bazate pe
algoritmi recursivi.
2. Fişier cu extensia .cpp sau .c, care conține implementările funcţiilor (codurile funcţiilor),
declarate în fişierul antet.
3. Fişier al utilizatorului, funcţia mаin() pentru prelucrarea arborelui binar oarecare cu afişarea la
ecran a următorului meniu de opţiuni:
Varianta 2. Structura Film cu câmpurile: denumirea, ţara, regizorul, genul filmului, anul.
Mersul lucrării:
Noțiuni teoretice:
•Biblioteca stdio.h conține funcții speciale pentru citirea și afișarea datelor – prin urmare instrucțiunea
de includere a acesteia va fi practic prezentă în orice program. #include <stdio.h>;
•Int-variabila simpla de tip integer(intreg);
•While-execută un bloc de instrucţiuni atâta timp cât o anumită condiţie este adevărată;
•Printf-pentru afișarea datelor;
•Scanf-pentru citirea datelor;
•If,-instrucțiune;
•Malloc-funcție de alocare are ca rezultat adresa zonei de memorie alocate (de tip void*);
Codul programului în C
Main_film.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "film.h"
int main(){
Node* root;
int c, ult = 1;;
while(ult){
#ifdef OSisWindows
system("cls");
#else
system("clear");
#endif
print_menu();
printf("\nAlegeti punctul din meniu: ");
scanf("%d", &c);
switch (c){
case 1: {
int n, i;
char left_right[10];
printf("\nNumarul de elemente in arbore: ");
scanf("%d", &n);
root = new_node(input_data());
for(i = 1; i < n; i++){
printf("Nodul nr [%d].\n\n\tAlegeti stanga(left) sau dreapta(right) pentru urmatorul nod: ", i+1);
scanf("%s", left_right);
insert(root, left_right);
}
}break;
case 2: {
print(root);
}break;
case 3: {
char denum[40];
printf("\nIntroduceti denumirea elementului cautat: ");
scanf("%s", denum);
if(search(root, denum))
printf("\nExista !!!\n");
else
printf("\nNu exista !!!\n");
}break;
case 4: {
char denum[40];
printf("\nDenumirea elementului care doriti sa-l modificati: ");
scanf("%s", denum);
modify_a_node(root, denum);
}break;
case 5: {
printf("Numarul de noduri = %d\n", number_of_nodes(root));
}break;
case 6: {
printf("Inaltimea arborelui: %d", max_depth(root));
}break;
case 7: {
delete_tree(root);
printf("Memoria a fost eliberata !!!");
}break;
case 0: {
ult = 0;
}break;
default:
delete_tree(root);
break;
}
return 0;
}
Film.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "film.h"
void print_menu(){
printf("\n\t+==============================================+\n");
printf( "\t+ <1> Creaza Arbore. +\n");
printf( "\t+ <2> Afiseaza informatia despre arbore. +\n");
printf( "\t+ <3> Cautarea nodului in arbore. +\n");
printf( "\t+ <4> Modificare informatiei a unui nod. +\n");
printf( "\t+ <5> Determinarea numarului de noduri. +\n");
printf( "\t+ <6> Determinarea inaltimea arborelui. +\n");
printf( "\t+ <7> Eliberarea memoriei. +\n");
printf( "\t+ <0> Iesire din program. +\n");
printf( "\t+==============================================+\n\n");
strcpy(root->data.denumirea, data.denumirea);
strcpy(root->data.tara, data.tara);
strcpy(root->data.regizor, data.regizor);
return (root);
}
Film input_data(){
Film a;
printf("Denumirea: ");
scanf("%s", a.denumirea);
printf("Tara: ");
scanf("%s", a.tara);
printf("regizor: ");
scanf("%s", a.regizor);
printf("an: ");
scanf("%d", &a.an);
printf("\n\n");
return a;
}
printf("\n-----------------------------\n");
print(root->right);
}
}
if (!strcmp(left_right, "left"))
node->left = insert(node->left, "left");
else if (!strcmp(left_right, "right"))
node->right = insert(node->right, "right");
return node;
}
if (!strcmp(node->data.denumirea, denum))
return TRUE;
return res2;
}
if(root == NULL)
return;
if ( !strcmp(root->data.denumirea, denum)){
printf("Modifica !\n");
Film a = input_data();
strcpy(root->data.denumirea, a.denumirea);
strcpy(root->data.tara, a.tara);
strcpy(root->data.regizor, a.regizor);
strcpy(root -> data.gen_film, a.gen_film);
delete_tree(node->left);
delete_tree(node->right);
free(node);
} Film.h
#ifndef FILM_H
#define FILm_H
#define TRUE 1
#define FALSE !TRUE
typedef struct {
char denumirea[40];
char tara[40];
char regizor[40];
char gen_film[40];
int an;
}Film;
void print_menu();
Node * new_node( Film );
Film input_data();
Node * insert(Node*, char*);
void print(Node*);
int search(Node* node, char* denum);
void modify_a_node(Node*, char*);
int number_of_nodes(Node *);
int max_depth(Node*);
void delete_tree(Node*);
#endif
Rezultate :
Concluzie:
În lucrarea de laborator nr.11 trei fişiere-text în limbajul C pentru implementarea și utilizarea TAD
„Arbore binar” cu asigurarea operațiilor de prelucrare de bază ale arborelui binar oarecare prin
parcurgerea nodurilor arborelui cu ajutorul algoritmilor recursivi: un fişier antet cu extensia .h, care
conține specificarea structurii de date a nodului arborelui binar şi prototipurile funcţiilor de prelucrare
ale arborelui binar oarecare, bazate pe algoritmi recursivi, un fişier cu extensia .cpp sau .c, care conține
implementările funcţiilor ,declarate în fişierul antet si funcţia mаin() pentru prelucrarea arborelui binar
oarecare cu afişarea la ecran a următorului meniu de opţiuni.