Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
35,29 KB
Nội dung
Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 BÀI BÁO CÁO WEEK 06 I. Phương pháp lập trình cấu trúc Lập trình cấu trúc là một phương pháp lập trình có các đặc trưng cơ bản sau : tính đơn thể, cấu trúc điều khiển và tính vào/ra đơn. Tuân thủ theo nguyên tắc lập trình có cấu trúc sẽ giúp các chương trình dễ viết, dễ đọc, dễ hiểu, dễ kiểm lỗi và dễ hiệu chỉnh. Tính đơn thể (modules) : Với lập trình cấu trúc, các vấn đề trong lập trình được phân rã (chia nhỏ) thành những phần nhỏ hơn gọi là các đơn thể. Mỗi đơn thể, được gọi là một chương trình con trong các ngôn ngữ lập trình, sẽ thực hiện một nhiệm vụ định trước trong chương trình. Ðiểm lợi chính của kỹ thuật này là nó đơn giản hóa việc phát triển chương trình vì mỗi đơn thể chương trình có thể được phát triển một cách độc lập. Khi các đơn thể được lắp ghép lại, chúng tạo thành một chương trình hoàn chỉnh tạo ra được kết quả mong muốn. Sơ đồ cấu trúc (structure chart) hay còn gọi là sơ đồ phân cấp (hierarchy chart) thường được dùng để phân rã và biểu diễn cho các đơn thể trong chương trình. Khi một quá trình phân rã chương trình hoàn tất, toàn bộ cấu trúc của chương trình sẽ được biểu diễn bằng một sơ đồ phân cấp. Cấu trúc điều khiển (control structure) : Trong lập trình cấu trúc, người ta sử dụng 3 cấu trúc điều khiển để tạo nên logic của chương trình. Mọi vấn đề logic đều có thể giải quyết được bằng cách phối hợp 3 cấu trúc này. 3 cấu trúc này là : cấu trúc tuần tự , cấu trúc chọn và cấu trúc lặp. Cấu trúc tuần tự : trong cấu trúc này, việc các quá trình được thực hiện tuần tự, từ quá trình này đến quá trình theo sau nó. Cấu trúc chọn : hay còn gọi là cấu trúc nếu … thì …ngược lại (if….then…else) cho phép các lập trình viên diễn đạt được các logic điều kiện trong chương trình. Ý nghĩa của cấu trúc này là nếu điều kiện là đúng thì thực hiện quá trình ứng với điều kiện đúng, ngược lại, thực hiện quá trình ứng với điều kiện sai. Một dạng khác của cấu trúc chọn là cấu trúc case. Cấu trúc case được dùng khi một điều kiện được kiểm tra có thể dẫn đến 2 hay nhiều quá trình xử lý khác nhau. Trong một chương trình, menu là một ví dụ về cấu trúc case vì nó cung cấp nhiều chọn lựa xử lý khác nhau. Cấu trúc lặp: cho phép thực hiện nhiều lần một quá trình dựa trên một điều kiện cho trước. Có 2 dạng cơ bản của cấu trúc lặp là cấu trúc lặp for và while. Cấu trúc lặp for cho phép lặp lại một Trang 1 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 quá trình xử lý một số lần xác định trước. Còn cấu trúc lặp while thì lặp lại quá trình xử lý cho đến lúc điều kiện kiểm tra không còn đúng nữa. Vào/ra đơn( single entry/exit) : Đây là một khái niệm quan trọng trong lập trình cấu trúc. Vào/ ra đơn nghĩa là chỉ có một điểm vào và một điểm ra đối với mỗi cấu trúc trong 3 cấu trúc ở trên. Ðiểm vào là điểm bắt đầu cấu trúc điều khiển và điểm ra là điểm kết thúc cấu trúc điều khiển. Tính chất này cải thiện đáng kể logic của một chương trình, bởi vì, khi đọc một chương trình, lập trình viên có thể đảm bảo rằng cho dù có chuyện gì xảy ra trong cấu trúc đi nữa thì cấu trúc điều khiển chỉ đi ra ở một điểm duy nhất. Trước khi có lập trình cấu trúc, nhiều lập trình viên hay có thói quen chuyển điều khiển đến những phần khác trong chương trình mà không tuân theo luật vào/ra đơn. Ðiều này sẽ dẫn đến một thiết kế chương trình tồi, cực kỳ khó khăn để đọc và kiểm tra lỗi cũng như hiệu chỉnh. Chương trình viết theo lối này sẽ giống như một mớ dây rối !! II. Điểm khác biệt giữa thủ tục và hàm 1. Thủ tục (procedure) Thủ tục (procedure) là chương trình con thực hiện các thao tác nhất định nhưng không trả về giá trị nào qua tên của nó. Ví dụ các thủ tục vào ra chuẩn: writeln, readln… Thủ tục có cấu trúc như sau (pascal): procedure <tên thủ tục>[(<danh sách tham số>)]; [<phần khai báo>] Begin [<dãy các lệnh>] End; Phần đầu thủ tục gồm tên dành riêng procedure, tiếp theo là tên thủ tục. Danh sách tham số có thể có hoặc không. Phần khai báo dùng để xác định hằng, kiểu, biến và cũng có thể xác định các chương trình con khác được sử dụng tring thủ tục. Dãy các lệnh được viết giữa cặp tên dành riêng begin và end tạo thành thân cảu thủ tục. 2. Hàm (function) Trang 2 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 Hàm: là chương trình con thực hiên một số thao tác nào đó và trả vế một giá trị qua tên của nó. Ví dụ hàm toán: sin(x) nhận giá trị thực x và trả vế giá trị sinx. sqrt(x) nhận giá trị x và trả về giá trị căn bậc hai của x. Hàm có cấu trúc tương tự như thủ tục, tuy nhiên có khác nhau phần đầu. Khai báo phần đầu một hàm như sau: function <tên hàm>[(<danh sách tham số>)]:<kiểu dữ liệu>; Trong đó,kiểu dữ liệu là kiểu dữ liệu của giá trị mà hàm trả về và chỉ có thể là các kiểu integer, real,char, boolean, string. 3. Điểm khác biệt giữa thủ tục và hàm: Khác nhau về cách khai báo: + Thủ tục không có giá trị trả về (nên không thể viết trong các biểu thức). + Hàm luôn luôn có giá trị trả về thông qua tên cua hàm (giá trị kết quả thuộc kiểu xác định) và do đó nó có thể được sử dụng trong biểu thức. Kiểu giá trị trả về của hàm phải được khai báo trong phần đầu của hàm. Khác nhau về lời gọi + Lời gọi thủ tục đứng riêng, và như một câu lệnh độc lập. + Lời gọi hàm không bao giờ đúng một mình, mà chỉ có thể nằm trong một biểu thức nào đó (ví dụ lới gọi hàm là một câu lệnh gán nào đó). III. Tham số hình thức – tham số thực, tham số giá trị - tham số biến. 1. Tham số hình thức – tham số thực Tham số hình thức: Các biến được khai báo cho dữ liệu vào/ra được gọi là tham số hình thức của chương trình con. Các biến được khai báo chỉ dùng riên cho chương trình con được gọi là biến cục bộ. Nói chung, chương trình chính và các chương trình con khác không thể sử dụng các biến cục bộ của một chương trình con, nhưng mọi chương trình con Trang 3 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 đều sử dụng được các biến của chương trình chính. Do vậy các biến của chương trình chính được gọi là biến toàn cục. Tham số thực sự: Để thực hiện (gọi) một chương trình con, ta cần phải có lệnh gọi nó tương tự lệnh gọi hàm hay thủ tục chuẩn, bao gồm tên chương trình con với tham số (nếu có) là các hằng và biến chứa dữ liệu vào ra tương ứng với các tham số hình thức tring cặp ngoặc ( và ). Các hằng và biến này được gọi là tham số hình thức. Ví dụ: sqr(225) Khi thực hiện chương trình con,các tham số hình thức được dùng để nhập dữ liệu vào sẽ nhận giá trị của tham số thực sự tương ứng,còn các tham số hình thức được dùng để lưu trữ dữ liệu ra sẽ trả giá trị đó cho tham số thực sự tương ứng. 2. Tham số giá trị - tham số biến Điểm khác biệt giữa tham số giá tị và tham số biến là: Ở tham số giá trị, thì mọi thay đổi về giá trị của các tham số dạng tham trị trong chương trình con đều không làm thay đổi giá trị của biến thực tương ứng của chương trình gọi nó. Ở tham số biến, thì mọi thay đổi về giá trị của các tham số dạng tham chiếu trong chương trình con đều làm thay đổi giá trị của biến thực tương ứng của chươg trình gọi nó. IV. Bài tập chương 06 – handout 06 1. Bài 1: Viết hàm tính diện tích và cạnh huyền của một tam giác vuông biết hai cạnh gốc vuông. Chương trình viết bằng ngôn ngữ C #include "stdio.h" #include "conio.h" #include "math.h" float dt(float a,float b) { float dien_tich; dien_tich=0.5*a*b; return(dien_tich); } float canhhuyen(float a,float b) Trang 4 Tham số thực sựTên chương trình con Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 { float ch; ch=sqrt(pow(a,2)+pow(b,2)); return ch; } void main() { float x,y; float dientich,canh_huyen; printf("nhap vao hai canh goc vuong x ,y: "); scanf("%f%f",&x,&y); dientich=dt(x,y); canh_huyen=canhhuyen(x,y); printf("dien tich tam giac vuong la : %f\n",dientich); printf("canh huyen: %f",canh_huyen); getch(); } Chương trình viết bằng ngôn ngữ Pascal Program bai1; uses crt; var x,y,dientich,canhhuyen : real; Function dt(a,b:real) : real; var d_t : real; begin d_t:=0.5*a*b; dt:=d_t; end; procedure ch(a,b:real); var c_h:real; begin c_h:=sqrt(sqr(a)+sqr(b)); writeln('canh huyen cua tam giac vuong la : ',c_h); end; begin writeln('nhap vao hai canh goc vuong x ,y: '); readln(x,y); dientich:=dt(x,y); ch(x,y); writeln('dien tich tam giac la: ',dientich); readln; end. Trang 5 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 2. Bài tập 2: Viết hàm tính giá tiền phải trả với tham số truyền vào là số lượng đĩa DVD. Viết chương trình bằng ngôn ngữ C #include "stdio.h" #include "conio.h" long tien(int soluong) { int t; t=soluong*5000; return t; } void main() { int n; long tien_tra; printf("nhap vao so luong dia: "); scanf("%d",&n); if (n>10) tien_tra=tien(n)*0.9; else tien_tra=tien(n); printf("so tien phai tra khi mua %d cai dia la: %ld",n,tien_tra); getch(); } Viết chương trình bằng ngôn ngữ Pascal. program handout6_2; uses crt; var n,tien_tra:real; function tien(soluong:real):real; var t:real; begin t:=soluong*5000; tien:=t; end; begin WriteLn('nhap vao so luong dia'); Readln(n); if (n>10) then tien_tra:=tien(n)*0.9 else tien_tra:=tien(n); writeln('so tien phai tra la: ',tien_tra); readln; end. Trang 6 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 3. Bài tập 4: viết hàm để hoán vị trí hai số x và y. Viết chương trình bằng ngôn ngữ C #include "stdio.h" #include "conio.h" void hoandoi(int a,int b) { int t; t=a; a=b; b=t; printf("x=%d\n",a); printf("y=%d",b); } void main() { int x,y; int da_doi; printf("nhap vao hai so x,y: \n"); scanf("%d%d",&x,&y); hoandoi(x,y); getch(); } Viết chương trình bằng ngôn ngữ Pascal. program hoandoivitri; uses crt; var x,y:integer; procedure hoandoi(a,b:integer); var t:integer; begin t:=b; b:=a; a:=t; writeln('x= ',a); Trang 7 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 writeln('y= ',b); end; begin WriteLn('nhap vao hai so x vay!'); Readln(x,y); hoandoi(x,y); readln; end. 4. Bài 5: viết hàm nhập 1 phân số tính: Tổng,Hiệu,Tích,Thương. Viết chương trình tính tổng hiệu tích thương hai phân số bằng ngôn ngữ C #include "stdio.h" #include "conio.h" #include "math.h" int m,n,k; int tuso1,tuso2,mauso1,mauso2; int tu, mau; int USCLN(int a, int b) { int t; a=abs(a); b=abs(b); while (b!=0) { t=b; b=a%b; a=t; } return t; } void main() { printf("nhap vao tu so 1: "); scanf("%d",&tuso1); printf("nhap vao mau so 1: "); scanf("%d",&mauso1); printf("nhap vao tu so 2: "); scanf("%d",&tuso2); printf("nhap vao mau so 2: "); scanf("%d",&mauso2); if (tuso1!=0) Trang 8 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 { { n=USCLN(tuso1,mauso1); tuso1=tuso1/n; mauso1=mauso1/n; } if (mauso1<0) { tuso1=-tuso1; mauso1=-mauso1; } } else mauso1=1; if (tuso2!=0) { { m=USCLN(tuso2,mauso2); tuso2=tuso2/m; mauso2=mauso2/m; } if(mauso2<0) { tuso2=-tuso2; mauso2=-mauso2; } } else mauso2=1; mau=(mauso1/USCLN(mauso1,mauso2))*mauso2; tu=tuso1*(mau/mauso1)+tuso2*(mau/mauso2); /*mau=(mauso1/USCLN(mauso1,mauso2))*mauso2; tu=tuso1*(mau/mauso1)-tuso2*(mau/mauso2);*/ /*mau=mauso1*mauso2; tu=tuso1*tuso2;*/ /*mau=tuso2*mauso1; tu=tuso1*mauso2;*/ if(tu!=0) { { k=USCLN(tu,mau); tu=tu/k; mau=mau/k; } if(mau<0) { tu=-tu; Trang 9 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 36103081 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:36103041 mau=-mau; } } else mau=1; printf("tong hai phan so tren la: %d/%d",tu,mau); getch(); } 5. Bài 7: Viết hàm tìm ước số chung lớn nhất với tham số truyền vào là hai số nguyên dương. Viết chương trình bằng ngôn ngữ C #include "stdio.h" #include "conio.h" #include "math.h" int uscln(int a,int b) { int t; a=abs(a); b=abs(b); while(b!=0) { t=b; b=a%b; a=t; } return t; } void main() { int x,y,USCLN; printf("nhap vao hai so x,y: "); scanf("%d%d",&x,&y); USCLN=uscln(x,y); printf("uoc so chung lon nhat la: %d",USCLN); getch(); } Trang 10 [...]... Trang 11 Trường Đại Học Sư Phạm TP.HCM Khoa: Công Nghệ Thông Tin Lớp: SP Tin 1 Nhóm: 25 Hoàng Văn Triều MSSV: 3 610 30 81 Nguyễn Thanh Nam MSSV:3 610 30 41 uses crt; var i,n:integer; function fibo(n:integer):integer; begin if (n =1) or(n=2) then fibo: =1 else fibo:=fibo(n -1) +fibo(n-2); end; begin clrscr; WriteLn('nhap vao so nguyen n: '); Readln(n); for i: =1 to n do write(fibo(i):3); readln; end Trang 12 Trường... fibo[i]:=fibo[i -1] +fibo[i-2]; writeln(); for i: =1 to n do write(fibo[i]:3); readln; end 7 Bài 9: Viết hàm tính n! Viết chương trình bằng ngôn ngữ C #include "stdio.h" #include "conio.h" Trang 13 Trường Đại Học Sư Phạm TP.HCM Khoa: Công Nghệ Thông Tin Lớp: SP Tin 1 Nhóm: 25 Hoàng Văn Triều MSSV: 3 610 30 81 Nguyễn Thanh Nam MSSV:3 610 30 41 long giai_thua(int n) { int i,gt; if (n==0) gt =1; else { gt =1; for (i =1; i . MSSV:3 610 30 41 { { n=USCLN(tuso1,mauso1); tuso1=tuso1/n; mauso1=mauso1/n; } if (mauso1<0) { tuso1=-tuso1; mauso1=-mauso1; } } else mauso1 =1; if (tuso2!=0) { { m=USCLN(tuso2,mauso2); tuso2=tuso2/m; . mauso2 =1; mau=(mauso1/USCLN(mauso1,mauso2))*mauso2; tu=tuso1*(mau/mauso1)+tuso2*(mau/mauso2); /*mau=(mauso1/USCLN(mauso1,mauso2))*mauso2; tu=tuso1*(mau/mauso1)-tuso2*(mau/mauso2);*/ /*mau=mauso1*mauso2; tu=tuso1*tuso2;*/ /*mau=tuso2*mauso1; tu=tuso1*mauso2;*/ if(tu!=0) { { k=USCLN(tu,mau); tu=tu/k; mau=mau/k; } if(mau<0) { tu=-tu; Trang. (tuso1!=0) Trang 8 Trường Đại Học Sư Phạm TP.HCM Nhóm: 25 Khoa: Công Nghệ Thông Tin Hoàng Văn Triều MSSV: 3 610 30 81 Lớp: SP Tin 1 Nguyễn Thanh Nam MSSV:3 610 30 41 { { n=USCLN(tuso1,mauso1); tuso1=tuso1/n; mauso1=mauso1/n; } if