Trong một ứng dụng tin học để quản lý hàng hóa tại một cơ sở kinh doanh, các mặt hàng bao gồm mã số (code), tên (name), số lượng (amount) và giá tiền (price), được biểu diễn bỡi một cây nhị phân tìm kiếm theo dạng mã số mặt hàng.
a. Định nghĩa cấu trúc cây nhị phân tìm kiếm TREE trong C/C++ để lưu trữ quản lý mặt hàng.
b. Viết giải thuật in ra tên của các mặt hàng có giá tiền bằng k.
c. Viết giải thuật tính tổng số mặt hàng hiện có trong cây.
d. Viết giải thuật tính giá tiền tất cả mặt hàng có trong cây.
//Code by: Kien KK
//date: 03/06/2015
//visual studio 2013
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int code;
char name[30];
int amount;
float price;
}mathang;
typedef struct Node{
struct Node *lc, *rc;
mathang data;
}node;
typedef node *Tree;
node *getnode()
{
node *p;
p = (node*)malloc(sizeof(node));
p->lc = NULL;
p->rc = NULL;
return p;
}
int insert(node *tr, node *root)
{
if (tr->data.code == root->data.code) return 0;
if (tr->data.code > root->data.code)
{
if (tr->lc == NULL)
tr->lc = root;
else{
insert(tr->lc, root);
}
}
if (tr->data.code < root->data.code)
{
if (tr->rc == NULL)
tr->rc = root;
else{
insert(tr->rc, root);
}
}
return 1;
}
void LNR(node *tr)
{
if (tr != NULL){
LNR(tr->lc);
printf("\nTen mat hang %s\nMa hang %d\nSo luong %d\nGia tien %f ", tr->data.name, tr->data.code, tr->data.amount, tr->data.price);
LNR(tr->rc);
}
}
void HangDongGia(node *tr, float gia)
{
if (tr != NULL)
{
if (tr->data.price == gia)
printf("\nTen mat hang %s\nMa hang %d\nSo luong %d\nGia tien %f ", tr->data.name, tr->data.code, tr->data.amount, tr->data.price);
HangDongGia(tr->lc, gia);
HangDongGia(tr->rc, gia);
}
}
int TinhTongMatHang(Tree c){
if (c != NULL){
int a = TinhTongMatHang(c->lc);
int b = TinhTongMatHang(c->rc);
return c->data.amount + a + b;
}
return 0;
}
float TinhTongGiaTien(Tree c){
if (c != NULL){
float a = TinhTongGiaTien(c->lc);
float b = TinhTongGiaTien(c->rc);
return c->data.price + a + b;
}
return 0;
}
int main()
{
node *root, *p;
root = NULL;
int n, x, i, kt = 0;
printf("Nhap so luong mat hang: ");
scanf("%d", &n);
printf("--------------------------------------\n");
for (i = 0; i < n; i++)
{
p = getnode();
do{
printf("Nhap mat hang thu %d: \n", i + 1);
fflush(stdin);
printf("nhap ten mat hang: ");
gets(p->data.name);
printf("Nhap ma hang: ");
scanf("%d", &x);
p->data.code = x;
printf("Nhap so luong hang: ");
scanf("%d", &x);
p->data.amount = x;
printf("Nhap gia tien hang: ");
scanf("%d", &x);
p->data.price = x;
if (root == NULL)
{
root = p;
kt = 1;
}
else{
kt = insert(root, p);
}
} while (kt == 0);
}
printf("Danh sach LNR: \n");
LNR(root);
printf("\n Nhap vao gia tien:");
float k;
scanf("%f", &k);
HangDongGia(root, k);
printf("\n Tong so luong hang: %d", TinhTongMatHang(root));
printf("\n Tong gia tiet cac mat hang la: %f", TinhTongGiaTien(root));
getch();
return 0;
}
Thứ Tư, 3 tháng 6, 2015
Bài tập quản lý hàng bằng cây nhị phân
Đăng ký:
Đăng Nhận xét (Atom)
0 nhận xét:
Đăng nhận xét