Mô tả chƣơng trình thiết kế hệ thống cáp ngang

Một phần của tài liệu Thiết kế hệ thống cáp cấu trúc trong tòa nhà thương mại (Trang 44 - 51)

- Sử dụng kiểu dữ liệu 2 chiều

Để xác định thông số của mặt sàn gồm chiều dài và chiều rộng (d r) em sử dụng kiểu dữ liệu 2 chiều, đồng thời khai báo một số hằng số xác định trƣớc:

// Các thông số cho trước

#define MAX_X d

#define MAX_Y r

#define chieucao z

#define SoTO m

#define vitriFDp //(= xF×r+yF)

44 struct Pos { int x; int y; }

- Xây dựng các hàm con phục vụ tính toán

Tạo hàm tính khoảng cách giữa 2 điểm Distance(Pos A, Pos B): Cách 1 tính theo khoảng cách Euclid

double Distance (Pos A, Pos B) {

return sqrt((double)(A.x-B.x)*(A.x-B.x)+(double)(A.y-B.y)*(A.y-B.y)); }

Cách 2 tính theo cách đi dây theo các trục của tòa nhà

double Distance(Pos A, Pos B) {

return (sqrt((double)(A.x-B.x)*(A.x-B.x))+sqrt((double)(A.y-B.y)*(A.y-B.y))+

2*chieucao); }

Tạo hàm tính khoảng cách từ FD tới các TO DistanceFDtoNode(Pos A, Pos ArrTOInput[SoTO]):

45

{

double result = 0;

for(int i = 0; i < SoTO; i++) {

result = result + Distance(A,ArrTOInput[i]); }

return result; }

Tạo hàm xác định vị trí FD FindPos(Arr [MAX_X*MAX_Y]):

int FindPos(double ArrFD [MAX_X * MAX_Y]) {

double result = ArrFD[0]; int pos = 0;

for (int index = 0;index < MAX_X * MAX_Y; index ++) { if(result > ArrFD[index]) { result = ArrFD[index]; pos = index; } }

46

return pos; }

- Xây dựng chƣơng trình chính:

+ Khai báo các thông số sẽ sử dụng:

void main() {

Pos ArrTOInput [SoTO]; Pos ArrFD [MAX_X * MAX_Y]; int x;

int y; int pos;

double result [MAX_X * MAX_Y]; int index = 0;

+ Yêu cầu nhập vào vị trí m nút mạng TO:

-> em có mảng m nút mạng TO: ArrTOInput[SoTO]

printf("\tNhap toa do cac nut mang TO \n"); for(int i = 0;i<SoTO;i++)

{

printf("\tNhap x%d: ",i); scanf("%d",&x);

47

printf("\tNhap y%d: ",i); scanf("%d",&y);

ArrTOInput[i].x = x; ArrTOInput[i].y = y; }

+ Tạo mảng các vị trí FD là toàn bộ các vị trí của mặt sàn gồm d×r vị trí: -> em có mảng các vị trí FD: ArrFD [MAX_X * MAX_Y]

for(int k = 0;k< MAX_X;k++) { for(int j = 0;j< MAX_Y; j++) { ArrFD[index].x = k; ArrFD[index].y = j; index++; } }

+ Sử dụng hàm tính tổng khoảng cách của từng FD tới các TO: -> xác đinh đƣợc tập các giá trị tổng khoảng cách

for(index = 0; index < MAX_X*MAX_Y;index++) {

48

result[index] = DistanceFDtoNode(ArrFD[index],ArrTOInput); }

+ Sử dụng hàm xác định vị trí FD tối ƣu và cho ra kết quả -> xác định đƣợc vị trí FD tối ƣu cần tìm trong mảng.

pos = FindPos(result);

printf("Vi tri FD toi uu trong mang la: %d \n",pos);

+ Yêu cầu xuất ra kết quả xác đinh đƣợc -> tọa độ FD trong mảng

-> tổng khoảng cách từ FD tới các nút mạng TO

printf("toa do FD toi uu can tim la: X = %d; Y = %d", ArrFD[pos].x,ArrFD[pos].y); printf("\nTong khoang cach tu FD toi uu toi cac TO la: %f m \n\n",result[pos]);

+ Với những trƣờng hợp chỉ định trƣớc vị trí FD(xF,yF), em sẽ gán vị trí FD trong mảng

-> chỉ ra vị trí FD trong mảng.

pos = vitriFD;

printf("Vi tri FD trong mang la: %d \n",pos);

+ Yêu cầu xuất ra kết quả xác đinh đƣợc -> tọa độ FD trong mảng

49

printf("toa do FD can tim la: X = %d; Y = %d", ArrFD[pos].x,ArrFD[pos].y); printf("\nTong khoang cach tu FD toi cac TO la: %f m \n\n",result[pos]); getch();

}

+ Tính thời gian chƣơng trình chạy

clock_t start, end; start = clock();

chương trình chạy …

end = clock();

50

CHƢƠNG III: ÁP DỤNG BÀI TOÁN THIẾT KẾ VÀO THỰC TẾ: DỰ ÁN NGÂN HÀNG NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN CHI

NHÁNH HOÀNG QUỐC VIỆT

Một phần của tài liệu Thiết kế hệ thống cáp cấu trúc trong tòa nhà thương mại (Trang 44 - 51)