intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài thực hành số 10: Tổ chức chương trình có cấu trúc

Chia sẻ: Hoangthi Luong | Ngày: | Loại File: DOC | Số trang:19

125
lượt xem
12
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tổ chức chương trình có cấu trúc : Cấu trúc về lệnh, cấu trúc về dữ liệu, cấu trúc về chương trình (modul, hàm. . .)

Chủ đề:
Lưu

Nội dung Text: Bài thực hành số 10: Tổ chức chương trình có cấu trúc

  1. Bài thực hành số 10: Tổ chức chương trình có cấu trúc Mục tiêu A. Tổ chức chương trình có cấu trúc : Cấu trúc về lệnh, cấu trúc về dữ liệu,  cấu trúc về chương trình (modul, hàm. . .) Vận dụng các nguyên lý lập trình cấu trúc cơ bản: phân rã bài toán theo chức  năng, làm mịn dần từng bước, thiết kế từ trên xuống để tổ chức chương trình có cấu trúc Phân biệt phạm vi, tác dụng các loại biến  Tổ chức thư viện chương trình.  Ôn tập: B. Các nguyên lý lập trình cơ bản  Phạm vi, tác dụng các loại biến : toàn cục, cục bộ, biến tĩnh  Tổ chức Project có tập tin thư viện *.h  I. Phân rã bài toán theo chức năng và tiếp cận từ trên xuống: Các nguyên lý lập trình cơ bản: 1. • Phân rã theo chức năng: Dựa vào các chức năng, các yếu tố cấu thành bài toán, ta phân rã bài toán thành các bài toán con. Lời giải của bài toán đã cho sẽ được xác đ ịnh từ các lời giải của các bài toán con. Lời giải của bài toán có thể xem là chương trình cần viết, tạo ra từ các modul, hàm (là lời giải của các bài toán con). • Thiết kế từ trên xuống Đi từ cái chung đến cái riêng,từ kết luận đến cái đã biết • Phương pháp làm mịn dần Làm mịn dần từng bước gắn liền với quá trình phân rã và thiết kế từ trên xuống, nó chính xác dần thao tác và dữ liệu theo từng mức. II. Phạm vi, tác dụng các loại biến Biến cục bộ (biến trong): 1.
  2. Vị trí khai báo Thời gian tồn tại Phạm vi tác dụng -Trong hàm, khối lệnh. Trong khoảng thời gian hàm Hàm hay khối lệnh -Đối của hàm. hay khối lệnh hoạt động chứa nó. Lưu ý: Khi chương trình ra khỏi khối lệnh hay hàm chứa biến cục bộ thì chúng tự động mất đi. Biến toàn cục (biến ngoài): 2. Vị trí khai báo Thời gian tồn tại Phạm vi tác dụng Ngoài tất cả các hàm. Trong suốt thời gian chương Từ vị trí khai báo trình chứa nó hoạt động. đến cuối tập tin Lưu ý: • Mọi hàm đều có thể thâm nhập vào biến toàn cục bằng cách tham trỏ đến tên của nó. • Biến toàn cục không tự xuất hiện và tự biến đi, cho nên chúng còn giữ l ại giá trị qua mỗi lầm gọi hàm. Biến tĩnh trong: 3. Vị trí khai báo Thời gian tồn tại Phạm vi tác dụng Cách khai báo Thêm từ khóa static Trong suốt thời Bên trong hàm chứa Trong hàm. trước định nghĩa biến gian chương trình nó thông thường. Lưu ý: Biến tĩnh trong khác với biến cục bộ ở điểm : Giá trị của biến tỉnh trong vẫn được lưu giữ khi ra khỏi hàm . Biến tĩnh ngoài: 4. Vị trí khai báo Thời gian tồn tại Phạm vi tác dụng Cách khai báo Ngoài tất cả Thêm từ khóa static Trong suốt thời Từ vị trí khai báo trước định nghĩa biến gian chương trình đến cuối tập tin các hàm. thông thường. III. Tổ chức project có tập tin thư viện *h Ta đã biết cách tổ chức project có một tập tin .cpp : giả sử đã có project với tên Lab_Vd, với tập tin chương trình là Cpp_Vd.cpp Ta tao thêm tập tin *.h, đặt tên h_Vd như sau: Chọn Header Files – Nhấn phím phải chuột – Add – New item – Chọn Code (trong Categories – Code) – Chọn header file (.h) ( trong Templates) – đặt tên h_Vd (trong ô Name) – chọn Add.
  3. Trong mỗi tập tin (*.h, *cpp) ta sọan thảo nội dung theo cấu trúc đã qui định. • Trong tập tin *h, nội dung nên bao gồm các định nghĩa hằng, đ ịnh nghĩa kiểu dữ liệu, định nghĩa các hàm chức năng • Trong tập tin *.cpp, cài đặt hàm main(), có thể có các hàm tổ chức menu, các hàm nhập xuất dữ liệu. Luyện tập: C. Ví dụ 1: Ta xem tên là một xâu ký tự bao gồm nhiều từ tách biệt bằng các ký tự trắng. Từ là một dãy liên tiếp các ký tự khác ký tự trắng. Viết chương trình nắn các tên nhập từ bàn phím theo qui cách: • Khử các ký tự trắng ở đầu và cuối của tên. • Khử bớt các dấu cách ở giữa các từ, chỉ để lại một ký tự trắng (khoảng cách). • Các chữ cái đầu từ được viết hoa, ngoài ra mọi chữ cái còn lại được viết thường. Phân tích: • Tên gồm nhiều từ, các từ phân biệt bằng các ký tự trằng (khoảng cách) • Vậy bài toán Nắn tên chuyền về Nắn từ. • Nắn các từ theo qui cách : Đầu từ phải là ký tự hoa, nên phải gọi thao tác chuyển đổi một ký tự thành ký tự hoa: Hoa(x). Các ký tự còn lại trong Từ phải là ký tự thường, nên phải gọi thao tác chuyển đổi một ký tự thành ký tự th ường: Thuong(x) • Nếu ta xử lý mỗi từ xong, ta ghi từ đó vào một xầu ký tự tạm, vật ta c ần thao tác ghép từ vào cuối một xâu ký tự.
  4. Nếu ta thực hiện việc xử lý xong một ký tự c ủa từ thì ghép ký t ự đó vào xâu ký tự, thì ta có thể thay thao tác ghép 1 từ vào sau xâu ký tự bằng thao tác ghép m ột ký tự vào cuối xâu ký tự: GhepKT(x,a). main() Nhap(a) NanTen(a) Xuat(a) Hoa(x) Thuong(x) GhepKT(x,a) Thực hiện: Bước 1: Tạo Project với tên “Lab10_Vd1”. Bước 2: Tạo các tập tin: Cpp_Vd1.cpp, h_Vd1.h Bước 3: Trong các tập tin Cpp_Vd1.cpp, h_Vd1.h, soạn code theo cấu trúc: • Trong tập tin thư viện h_Vd1.h: (trong tập tin này không có định nghĩa hàm main) //Chen cac tap tin thu vien can thiet #include using namespace std; //Dinh nghia cac hang #define CACH ‘ ‘ #define MAX 100 //Dinh nghia kieu du lieu //Khai bao nguyen mau cac ham void Nanten(char *a); char Hoa(char Kt); char Thuong(char Kt); void GhepKT(char Kt, char *a); //Dinh nghia cac ham //Nan ten void Nanten(char *a) {
  5. char *b; int i; b = new char[100]; *b = NULL; i = 0; while (*(a+i) == CACH ) i++; while (*(a+i) != NULL) { GhepKT(Hoa(*(a+i)),b); i++; while ((*(a+i) != CACH )&& (*(a+i) != NULL)) { GhepKT(Thuong(*(a+i)),b); i++; } while (*(a+i) == CACH) i++; if (a[i] != NULL) GhepKT(CACH,b); } strcpy( a,b); delete []b; } //Ghep ky tu vao cuoi xau void GhepKT(char Kt, char *a) { int l = strlen(a); *(a+l++) = Kt; *(a+l) = NULL; } //Chuyen ky tu thanh ky tu hoa char Hoa(char Kt) { if ('a'
  6. if ('A'
  7. int Cscc(int *a, int n, int x); int Tong_nT(int *a, int n); int So_DC(int *a, int n); int nt(int x); //-------------------------------- int Cscc(int *a, int n, int x) { int Kq; if (n == 1) if (*a == x) Kq = 0; else Kq = -1; else if(n > 1) if(*(a+n-1)==x) Kq = n-1; else Kq = Cscc(a,n-1,x); return Kq; } int Tong_nT(int *a, int n) { int Kq; if ( n==1) if (nt(*a)) Kq = *a; else Kq = 0; else if (n >1) if (nt(*(a+n-1))) Kq = Tong_nT(a,n-1) + *(a+n-1); else Kq = Tong_nT(a,n-1); return Kq; } int So_DC(int *a, int n) { int Kq; if (n == 1) Kq = 1;
  8. else if(n > 1) if(*(a+n-1)
  9. { int *a, n, Chon; coutn; a = new int[n]; Nhap(a,n); do { Chon = ChonMenu(); XL_Menu(a,n, Chon); } while(1); cout
  10. Xuat(a, n); coutx; Kq = Cscc(a,n, x); if (Kq == -1) cout
  11. int i; cout
  12. //Cac bien toan cuc SINHVIEN Sv[MAX]; int n = 0; //Khai bao nguyen mau void Output(); void Output_Data(); void Output_Struct(SINHVIEN p); void Setup(); void Chen_Ct(char *Maso,char *HoTen,char *Lop,double Dtb, int Tichluy); void Xoa_Ct(char *Maso); int Tim_Maso (char *Maso); //Khoi tao danh sach sinh vien void Setup() { Chen_Ct("0213345","Nguyen Van","CTK100",4.5,41); Chen_Ct("0210340","Truong Van A","CTK101",8.0,39); Chen_Ct("0201381","Duong Mai","CTK100",4.5,38); Chen_Ct("0211348","Tran Vuong","CTK100",5,34); Chen_Ct("0210042","Hoang Trong","CTK101",6,38); Chen_Ct("0201380","Duong Mai","CTK100",6,36); Chen_Ct("0201180","Tran Hoan","CTK100",5,37); Chen_Ct("0211380","Luu Trong","CTK100",6.5,36); } //Chen mot sinh vien vao danh sach Sinh vien void Chen_Ct(char *Maso,char *HoTen,char *Lop,double Dtb, int Tichluy) { if (n < MAX) { flushall(); Sv[n].Maso = new char[12]; strcpy(Sv[n].Maso, Maso); flushall(); Sv[n].HoTen = new char[20]; strcpy(Sv[n].HoTen,HoTen); flushall(); Sv[n].Lop = new char[10];
  13. strcpy(Sv[n].Lop,Lop); Sv[n].Dtb = Dtb; Sv[n].Tichluy = Tichluy; } n++; } //Xoa sinh vien theo ma so void Xoa_Ct(char *Maso) { int i, Kq = Tim_Maso (Maso); if (n == 0) { cout
  14. { for (int i = 0; i < n; i++) Output_Struct(Sv[i]); } //In tieu de void Output() { cout
  15. //Xuat ten cac chuc nang cua CT ra man hinh void Menu() { cout
  16. if(Kq == -1) cout
  17. break; case 3: cout
  18. Bài tập D. Bài 1: Tổ chức chương trình menu thực hiện các thao tác trên phân số : • Cộng phân số. • Trừ phân số. • Nhân phân số. • Chia phân số. Bài 2: Xác định đường tròn đi qua 4 điểm cho trước ? Nếu có, xuất đường tròn tương ứng; nguợc lại thông báo không có. Viết chương trình giải quyết bài toán trên. Phân tích: • Nếu có 3 điểm thẳng hàng, thông báo không có đường tròn qua 4 điểm, k ết thúc • Tạo đường tròn qua 3 điểm không thẳng hàng. • Kiểm tra điểm còn lại có thuộc đường tròn đã tạo hay không ?  Nếu không, thông báo không có đường tròn đi qua 4 điểm ?  Nếu có xuất đường tròn (tâm & bán kính) Hướng dẫn: 1. Tổ chức dữ liệu struct DIEM { double x; double y; }; struct DUONG_TRON { DIEM Tam; double R; //Ban kinh binh phuong }; 2. Các chức năng a. Nhập 4 điểm (lưu trử trong mảng 1 chiểu kiểu cấu trúc DIEM void Nhap(DIEM M[4]); b. Xuất đường tròn kết quả (Tâm, bán kính) void Xuat(DUONG_TRON Dt); c. Tạo đường tròn từ 3 điểm không thảng hàng int Taodt(DIEM A, DIEM B, DIEM C, DUONG_TRON &Dt);
  19. d. Kiểm tra 3 điểm có thẳng hàng hay không? int Thang_hang(DIEM A, DIEM B, DIEM C); e. Kiểm tra điểm A có nằm trên đường tròn Dt hay không? int Thuoc(DIEM A, DUONG_TRON Dt); f. Xác định đường tròn từ 4 điểm int Xddt(DIEM M[4], DUONG_TRON &Dt); g. Xác định tâm đường tròn đi qua 3 điểm không thẳng hàng DIEM Tam_dt(double a11,double a12,double b1,double a21, double a22, double b2); main() Nhap(M) Xddt(M,Dt) Xuat(Dt) Thuoc(A,Dt) Tdt(A,B,C,Dt) Thang_hang(A,B, Tam_dt(a1,a2,a3,a4,a5,a6) C)
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2