Nguyễn Duy Khánh Linh – 20204839 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI BÁO CÁO KỸ THUẬT LẬP TRÌNH Hàm và tối ưu mã nguồn BUỔI 2 – TUẦN 37 NGUYỄN DUY KHÁNH LINH Linh ndk204839@sis hust edu vn Ngành Kỹ Thuật[.]
Nguyễn Duy Khánh Linh – 20204839 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI BÁO CÁO KỸ THUẬT LẬP TRÌNH Hàm tối ưu mã nguồn BUỔI – TUẦN 37 NGUYỄN DUY KHÁNH LINH Linh.ndk204839@sis.hust.edu.vn Ngành Kỹ Thuật Lập Trình – IT2 Giảng viên hướng dẫn: Lê Thị Hoa Bộ mơn: Kỹ thuật lập trình Viện: Cơng nghệ Thơng tin Truyền thông IT3040 – 20212 – 715027 HÀ NỘI, 12/6/2022 Chữ ký GVHD Nguyễn Duy Khánh Linh – 20204839 MỤC LỤC Bài thực hành – tuần 37: Hàm tối ưu mã nguồn Phần Thực hành hàm .3 I Truyền tham trị, tham chiều tham số ngầm định: .3 Bài tập 1: Truyền tham trị Bài tập 2: Truyền tham chiếu .4 Bài tập 3: Tham số ngầm định II Đa hóa hàm: Bài tập 4: Đa hóa hàm .6 Bài tập 5: Đa hóa tốn tử III Con trỏ hàm tham số hóa hàm Bài tập 6: Con trỏ hàm .9 Bài tập 7: Khái quát hóa hàm 11 IV Biểu thức Lamda hàm nặc danh 12 Bài tập 8: Sắp xếp 12 Phần Thực hành tối ưu mã nguồn .13 Bài tập 9: Tính hàm sigmoid 13 Bài tập 10: Tính tích hai ma trận vuông 17 Phần 3: Bài tập nhà 20 Bài tập 11: Tính tích hai đa thức 20 Bài tập 12: Map Sort 22 Bài tập 13: Big Integer .24 IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 Bài thực hành : Hàm tối ưu mã nguồn Phần Thực hành hàm I Truyền tham trị, tham chiều tham số ngầm định: Bài tập 1: Truyền tham trị Viết hàm tính độ dài cạnh huyền tam giác theo độ dài hai cạnh góc vng Bài làm #include #include float get_hypotenuse(float x, float y) { return sqrt(x*x+y*y); // cạnh huyền bậc hai tổng bình phương hai cạnh cịn lại } int main(){ printf("HO VA TEN: Nguyen Duy Khanh Linh\nMSSV: 20204839\n"); float x, y; scanf("%f%f", &x, &y); float z = get_hypotenuse(x, y); printf("z = %.2f\n", z); return 0; } IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 Bài tập 2: Truyền tham chiếu Viết hàm hoán vị vòng tròn biến a, b, c Sau thực hàm, biến a, b, c tương ứng nhận giá trị b, c, a Bài làm #include void rotate(int&x, int&y, int&z) { int t=x; //tạo biến t để tránh liệu x=y; y=z; z=t; } //hàm hốn vị vịng trịn biến int main() { printf("HO VA TEN: Nguyen Duy Khanh Linh\nMSSV: 20204839\n"); int x, y, z; scanf("%d %d %d", &x, &y, &z); //nhập số nguyên x, y, z printf("Before: %d, %d, %d\n", x, y, z); //in giá trị x, y, z trước hoán vị rotate(x, y, z); // gọi hàm hoán vị printf("After: %d, %d, %d\n", x, y, z); //in giá trị x, y, z sau hoán vị return 0; } IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 Bài tập 3: Tham số ngầm định Viết chương trình yêu cầu nập giá trị cho số nguyên x nhỏ 100 In giá trị ax2+bx+c với a, b, c định sẵn Bài làm #include /*nếu không khai báo giá trị a b c giá trị mặc định a, b, c 2, 1, */ int get_value(int x, int a=2, int b=1, int c=0) { return a*x*x + b*x + c; } //hàm tính giá trị biểu thức ax2+bx+c int main() { printf("HO VA TEN: Nguyen Duy Khanh Linh\nMSSV: 20204839\n"); int x; scanf("%d", &x); int a=2; // giá trị mặc định a int b=1; // giá trị mặc định a int c=0; // giá trị mặc định a scanf("%d %d %d", &a, &b, &c); // nhập số nguyên a, b, c từ bàn phím printf("a=2, b=1, c=0: %d\n", get_value(x)); //hàm chạy với giá trị x, a=2, b=1, c=0 printf("a=%d, b=1, c=0: %d\n", a, get_value(x, a)); //hàm chạy với giá trị x, a, b=1, c=0 printf("a=%d, b=%d, c=0: %d\n", a, b, get_value(x, a, b)); //hàm chạy với x, a, b, c=0 printf("a=%d, b=%d, c=%d: %d\n", a, b, c, get_value(x, a, b, c)); //hàm chạy với x, a, b, c return 0; } IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 II Đa hóa hàm: Bài tập 4: Đa hóa hàm Viết hàm tính lập phương số nguyên số thực Bài làm include int cube(int x) { return x*x*x; } // Hàm tính lập phương số nguyên double cube(double x) { return x*x*x; } //Hàm tính lập phương số thực int main() { printf("HO VA TEN: Nguyen Duy Khanh Linh\nMSSV: 20204839\n"); int n; double f; scanf("%d %lf", &n, &f); //Nhập số nguyên số thực printf("Int: %d\n", cube(n)); //gọi hàm thị giá trị lập phương số nguyên printf("Double: %.2lf\n", cube(f)); //gọi hàm thị giá trị lập phương số thực return 0; } IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 Bài tập 5: Đa hóa tốn tử Viết tốn tử tính tổng, hiệu, tích thương hai số phức Bài làm #include #include #include #include using namespace std; struct Complex { double real; double imag; Complex(double r, double i) { real = r; imag = i; } }; Complex operator+(Complex a, Complex b) { // xây dựng toán tử cộng số thực return Complex(a.real + b.real, a.imag + b.imag); } // xây dựng toán tử cộng số thực Complex operator-(Complex a, Complex b) { return Complex(a.real - b.real, a.imag - b.imag); } // xây dựng toán tử trừ số thực Complex operator*(Complex a, Complex b) { return Complex(a.real * b.real - a.imag * b.imag, IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 a.real * b.imag + a.imag * b.real); }// xây dựng toán tử nhân số thực Complex operator/(Complex a, Complex b) { return Complex((a.real * b.real + a.imag * b.imag) / (b.real * b.real + b.imag * b.imag), (a.imag * b.real - a.real * b.imag) / (b.real * b.real + b.imag * b.imag)); } // xây dựng toán tử chia số thực ostream &operator