chuyên đề tin học chương 3 giải thuật

58 405 3
chuyên đề tin học chương 3 giải thuật

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chuyên Tin 10 CHƯƠNG 22 MỘT SỐ KHÁI NIỆM MỞ ĐẦU VỀ GIẢI THUẬT VÀ VỀ TURBO PASCAL BÀI GIAI THUẬT I / Định nghĩa giải thuật : Giải thuật hệ thống chặt chẽ rõ ràng qui tắc nhằm xác định dãy động tác đối tượng , cho sau số hữu hạn bước thực động tác ta thu kết mong muốn II / Các đặc trưng giải thuật : - Tính kết thúc Tính rõ ràng , chặt chẽ Tính phổ dụng Tính hiệu III / Biểu diễn giải thuật : / Phương pháp dùng ngôn ngữ liệt kê động tác bản: + Bắt đầu , thông báo yêu cầu + Lệnh gán trị + Lệnh thực phép tính số học , phép tính lơ gíc + Lệnh kiểm tra điều kiện + Lệnh chuyển khơng điều kiện , lệnh chuyển có điều kiện + Lệnh lặp lại + Kết thúc / Phương pháp sơ đồ khối : +Dùng hình vẽ mơ tả động tác , mũi tên thứ tự thực động tác F Bắt đầu Nhóm lệnh 2,3 Điều kiện Lệnh Kết thúc T Thí dụ số thuật giải thường gặp : / Trao đổi giá trị biến A B thông qua biến trung gian C : B0 Bắt đầu B1 Nhập giá trị cho A B B2 C lấy giá trị A ( Gọi gán giá trị A cho C , viết C := A ) B3 A lấy giá trị B ( Gọi gán giá trị B cho A , viết A := B ) B4 B lấy giá trị C ( Gọi gán giá trị C cho B , viết B := C ) B5 Thông báo kết CH2: MỘT SỐ KH NIỆM VỀ GIẢI THUẬT & VỀ TURBO PASCAL Chuyên Tin 10 B6 Kết thúc 23 / Tìm phần tử nhỏ dãy số A ,A , ,A n : B0 B1 B2 B3 B4 B5 B6 B7 B8 Bắt đầu Nhập giá trị N , A ,A , ,A n Gán i := Nếu A i < A A := A i Tăng i lên đơn vị Nếu i N A nhỏ Thông báo kết Kết thúc / Duyệt dãy A , A , , A n xem có phần tử X hay khơng : B0 B1 B2 B3 B4 B5 B6 B7 Bắt đầu Nhập giá trị N, A ,A , ,A n Gán trị i :=1 Nếu i >N chuyển sang B6 Nếu A i X tăng i lên đơn vị , Chuyển B3 Thông báo kết : có X dãy A ,A , ,A n , chuyển sang B7 Thơng báo kết : Khơng có X dãy A ,A , ,A n , Kết thúc chương trình / Sắp xếp dãy A ,A , ,A n , theo thứ tự tăng dần : B0 Bắt đầu B1 Nhập N, A ,A , ,A n B2 Gán i :=1 B3 Gán k :=i+1 B4 Nếu A i T2-1 tới B15 B12 Nếu A[i]=2 i:=i +1 B12 B13 Tìm vị trí số băng , gọi vị trí z B14 Đổi A[i] A[z] ; tăng i := i+1 , B12 B15 Hiện dãy xếp tăng B16 Kết thúc A[i] A[i] Bài tập nhà ) Nêu thuật tốn giải phương trình bậc 2 ) Nêu thuật tốn giải hệ phương trình bậc ẩn ) Nêu thuật toán xếp giảm dãy số ) Để tìm Ước số chung lớn số , dùng thuật tốn Ơclit sau : (a,b) = ( a,b-a) = = ( d,0) = d ( Ta giả sử b>a) Hãy trình bày thuật tốn ) Vẽ sơ đồ khối cho thuật toán ( 2,3,4,7, 11 ) diễn tả ngôn ngữ nêu ) Để khẳng định số N có số ngun tố hay khơng dùng định nghĩa số nguyên tố : Cho i nhận giá trị từ đến N div , N mod i=0 N hợp số , ngược lại khơng có giá trị i để N mod i = N nguyên tố Trình bày thuật tốn sơ đồ khối ) Để tìm số ngun tố < N dùng thuật toán sàng Érastosthène sau : Xoá 1, phạm vi từ tới bậc hai N , tìm số nguyên dương k nhỏ chưa bị xoá xoá bội k nhỏ N bình phương k Các số cịn lại chưa bị xố số ngun tố nhỏ N Trình bày thuật tốn sơ đồ khối ) Có đội bóng A,B,C,D,E,F thi đấu để tranh giải vô địch ( đấu vòng ) Đội A đấu với đội B C Đội B đấu với đội D F Đội E đấu với đội F C Mỗi đội đấu với đội khác trận tuần Hãy nêu thuật toánlập lịch thi đấu cho trận CH2: MỘT SỐ KH NIỆM VỀ GIẢI THUẬT & VỀ TURBO PASCAL Chuyên Tin 10 28 lại thực thời gian ngắn CH2: MỘT SỐ KH NIỆM VỀ GIẢI THUẬT & VỀ TURBO PASCAL Chuyên Tin 10 29 CHỮA BÀI TẬP VỀ NHÀ MỘT SỐ THUẬT TOÁN NÊU Ở TRANG 28 ) Thuật tốn giải phương trình bậc : B0 B1 B2 B3 B4 B5 Bắt đầu Nhập A,B,C với A0 Tính D = B*B - 4*A*C Nếu D < : Hiện “phương trình vơ nghiệm” Chuyển bước Bkt Nếu D = : Tính x = -(b/(2*a)) Hiện “phương trình có nghiệm kép x” ; Bkt Nếu D > : Tính x1 = (-b - sqrt( D ) ) / , x2 = (-b + sqrt( D ) ) / , Hiện “phương trình có nghiệm phân biệt x1 , x2” Về Bkt Bkt Kết thúc ) Thuật tốn giải hệ phương trình bậc ẩn : B0 B1 B3 B4 B5 B6 Bắt đầu Nhập A1,B1,C1,A2,B2,C2 Nếu A1=A2=B1=B2=C1=C2=0 Hiện cặp (x,y) nghiệm ; Bkt Nếu A1=A2=B1=B2=0 (C10 C20) phương trình vơ nghiệm; Bkt Tính D = A1*B2 - A2*B1 , Dx = C1*B2 - C2*B1 , Dy = A1*C2 - A2*C1 Nếu D : Phương trình có nghiệm cặp số x = Dx/D , y = Dy/D ; Bkt B7 Nếu D = Dx=Dy=0 : phương trình có vơ số nghiệm (x,y) thoả mãn phưong trình hệ ; Bkt B8 Nếu D=0 ( Dx0 Dy0 ) phương trình vơ nghiệm Bkt Kết thúc ) Thuật tốn Ơclit tìm USCLN : B0 B1 B2 B3 B4 B5 B6 B7 B8 Bắt đầu Nhập số nguyên a, b a:= abs(a) b := abs(b) Nếu b Trunc(SQRT(N)) } Nếu N mod i = chuyển tới B7 Chuyên Tin 10 30 B5 i := i +1 , chuyển B3 B6 Hiện kết N số nguyên tố ; Bkt B7 Hiện : N không số nguyên tố Bkt Kết thúc ) Tìm số nguyên tố Sàng Érastosthène B0 Bắt đầu B1 Nhập N ,tạo mảng A gồm N phần tử kiểu Boolean , đánh dấu phần tử chưa xoá B2 Đánh dấu xoá phần tử B3 c := Sqrt(N) B4 k >c chuyển tới B9 B5 Nếu A[k] bị đánh dấu xố k := k+1 , chuyển B4 B6 i := k*k B7 Nếu i > N chuyển tới B B8 Đánh dấu xoá phần tử i , i := i+k ; chuyển B B9 Hiện số phần tử mảng A chưa bị đánh dấu xoá Bkt Kết thúc ) Gợi ý : Trên mặt phẳng vẽ điểm A,B,C,D,E,F Mỗi trận lại vẽ đoạn thẳng nối điểm tương ứng với đội ( trận ) Mỗi trận đấu tuần tô màu Vậy số màu cần dùng số thời gian tiến hành trận cịn lại Vì tuần , đội đấu với đội khác nên khơng thể có đoạn thẳng màu xuất phát từ điểm Hãy chuyển tốn tơ màu đoạn thẳng thành tốn tơ màu đỉnh sau : Coi đoạn thẳng đỉnh ,điểm chung đoạn thẳng (nếu có) trở thành cạnh chung Vậy toán trở thành quen thuộc ( nêu thuật toán trang - chương ) Chuyên Tin 10 31 BÀI KIỂU DỮ LIỆU Các thông tin thực tế cần xử lý đa dạng Cần mô hình hố thơng tin để việc quản lý xử lý thuận lợi Mọi ngơn ngữ lập trình xây dựng số kiểu liệu sở , với phương tiện ngôn ngữ tạo thành kiểu liệu phức tạp từ kiểu sở ( ta nói ngơn ngữ có tính cấu trúc tổ chức liệu ) Thí dụ ngơn ngữ Pascan có số kiểu liệu sở : Kiểu số nguyên ( Integer ), kiểu số thực ( Real ), kiểu kí tự ( Char ), kiểu lơgíc (Boolean), kiểu vô hướng liệt kê ( Enumerated scalar ) , kiểu đoạn ( Subrange ) , kiểu xâu kí tự ( String ) Trong Pascan cịn có kiểu liệu có cấu trúc : Kiểu mảng ( Array ), kiểu tập hợp ( Set of ) , kiểu ghi ( Record ) , kiểu File , kiểu trỏ kiểu liệu phức hợp : Kiểu danh sách , kiểu Stack , kiểu Queue , kiểu đồ thị , kiểu Thí dụ để biểu diễn thông tin điểm số mơn Tốn , Lý ,Hố lớp học tổ chức kiểu Mảng có phần tử Record sau : Type Hocsinh = Record stt : Byte ; Hoten : String; Nam_nu : Boolean; Toan,Ly,Hoa , Tb : Real; End; Lophoc = Array[1 50] of Hocsinh; CÁC CẤU TRÚC ĐIỀU KHIỂN Ngôn ngữ lập trình cịn cung cấp cho người lập trình cơng cụ diễn đạt thuật tốn cấu trúc điều khiển ( Control Struture ) Các cấu trúc điều khiển : / Phép gán ( Assignment ) / Cấu trúc ( Sequential ) / Cấu trúc lựa chọn rẽ nhánh ( Selection ) / Cấu trúc lặp có điều kiện không điều kiện ( Iteration ) * Phép gán Phép gán phép tạo giá trị cho vùng nhớ máy tính , vùng nhớ cấp phát cho biến người lập trình yêu cầu Lệnh : Biến := Biểu thức ; Chú ý : Kiểu liệu biến biểu thức phải * Cấu trỳc tun t : Tàì liệu Chuyên Tin 10 64 If cos0) and (h0) and(k0) and(l0) and(m0) and(n then dactrung := Else dactrung := -1; End; Function Dagiacloi(sd1 : Byte) : Boolean; Var i,j,k,h : Byte; t : ShortInt; Begin For i:=1 to sd1 Begin j := i+1; If j=N then j:= 1; k := j+1; If k=N then k:= 1; T := dactrung(i,j,k); For h := to sd1 If (hi) and (hj) and( hk) then If T*dactrung(i,j,h) < then Begin DagiacLoi := False; Exit; End; End; DagiacLoi := True; End; Function Trong : Boolean; Var i,j,k : Byte; T : ShortInt; Begin For i:=1 to sd Begin j:=i+1; If j=N then j:=1; k :=j+1; If k=N then k:=1; t := dactrung(i,j,N); If t*dactrung(i,j,k) < then Begin Trong := False; Exit; End; End; Trong := True; End; Procedure Thuchien; Begin If Not Dagiacloi(sd) then Begin Writeln(' Theo thứ tự liên tiếp đỉnh Khong phai da giac loi '); Readln; Halt; End Else Begin Writeln('Dung la da giac loi '); If not Trong then CH2 : KN thuật giải turbo pascal Tàì liệu Chuyên Tin 10 70 Begin Write('Diem ',Char(N+64),'(',x[N]:3,',',y[N]:3,')'); Writeln(' o ngoai da giac loi da cho '); End Else Begin Write('Diem ',Char(N+64),'(',x[N]:3,',',y[N]:3,')'); Writeln(' o da giac loi da cho '); End; End End; BEGIN Clrscr; Nhap; Hien; Thuchien; Readln END Tương tự Bài 14 +15+ 16 { Kiểm tra đa giác lồi tính diện tích đa giác lồi } Uses Crt; Const Max = 20; Type Toado = Array[1 Max] of Real; Var X,Y : Toado; B : Array[1 1000] of Boolean; ds : Array[1 1000] of Word; n,top : Word; Procedure Input; Var i : Word; Begin { Nhập giá trị đỉnh đa giác vào mảng X Y } End; Function CungFia(X1,X2,X3,X4,Y1,Y2,Y3,Y4 : Real) : Boolean; Var d1,d2 : Real; Begin d1 := (Y3-Y1)*(X2-X1)-(X3-X1)*(Y2-Y1); d2 := (Y4-Y1)*(X2-X1)-(X4-X1)*(Y2-Y1); cungFia:=d1*d2>=0; End; Function DG_Loi(X,Y : Toado): Boolean; { Kiem tra tinh Loi cua da giac } Var i,j,k,L : Word; s : Real; Begin For i:=1 to n Begin k := i+2; L := i+1; If k=n+1 then k := 1; If L=n+1 then L := 1; For j:=1 to n If (ji) and ( Not CungFia(x[i],x[L],x[j],x[k],y[i],y[L],y[j],y[k])) then Begin Write('Da Giac Khong Loi');{Theo thứ tự liên tiếp đỉnh nhập} DG_Loi := False; Halt; CH2 : KN thuật giải turbo pascal Tàì liệu Chuyên Tin 10 71 End; End; Writeln('Da Giac Loi'); DG_Loi := True; End; Procedure Dientich(X,Y : Toado); Var s,Min : Real; i,j : Byte; Begin Min := 100000; { Tịnh tiến đa giác dọc trục tung , để đa giác nằm hồn tồn phía ox} For i:=1 to n If Y[i]b then Trao(a,b); Writeln; For i:=1 to sa CH2 : KN thuật giải turbo pascal Tàì liệu Chuyên Tin 10 73 Begin Write('Nhap kich thuoc c,d cua buu anh ',i,' : '); Repeat {$I-} Readln(c[i],d[i]); {$I+} Until ( Ioresult = ) and ( c[i]>0 ) and (d[i]>0); If c[i]>d[i] then trao(c[i],d[i]); End; End; Procedure Hien; Var i : Byte; Begin Writeln('Phong bi (',a:5:2,b:5:2,')'); For i:=1 to sa Writeln('Buu anh ',i:2,'(',c[i]:5:2,d[i]:5:2,')'); End; Procedure Khoitri; Begin FillChar(Kq,Sizeof(Kq),False); End; Function Kt1(x,y : Real) : Boolean; Begin If (x

Ngày đăng: 07/09/2014, 07:11

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan