ĐÁP án đề THI TIN học CHUYÊN NGÀNH máy tàu BIỂN 1

30 309 0
ĐÁP án đề THI TIN học CHUYÊN NGÀNH máy tàu BIỂN 1

Đ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

Phần Câu1 Đáp án câu hỏi thi Giống nh ngôn ngữ lập trình khác, Matlab có quy định riêng tên biến Trơc tiên tên biến phải từ, không chứa dấu cách tên biến phải tuân thủ quy tắc sau - Tên biến có phân biệt chữ hoa chữ thờng - Tên biến chứa nhiều 31 ký tự, ký tự sau ký tự thứ 31 bị bỏ - Tên biến bắt đầu phải chữ cái, chữ số số gạch dới - Kí tự chấm câu không đợc phép dùng có ý nghĩa đặc biệt Matlab có biến đặc biệt sau Các biến đặc biệt ans pi inf nan nan i (và) j realmin realmax Giá trị Tên biến mặc định dùng để trả kết =3.1415 Để số vô nh kết 1/0 Dùng để số không xác đinh nh 0/0 i=j= Số nhỏ đợc số thực Số lớn đợc số thực Khi gán biến a cho giá trị m náo ta viết nh sau a=m a= m Các biến không gian Matlab xoá không điều kiện lệnh clear Ví dụ: >> Clear a Chỉ xoá biến a >> Clear a b Xoá hai biến a,b >> Clear c* Dấu * để xoá tất biến bắt đầu ký tự c >> Clear Xoá tất biến không gian làm việc Bạn khộng đợc hỏi để xác nhận câu lệnh tất biến bị xoá khôi phục lại Câu M-file đợc sử dụng dới dạng Script M-file hàm (*) Script M-file Trong Matlab, yêu cầu đợc thực dấu nhắc Matlab cửa sổ lệnh nhanh hiệu Tuy nhiên số lệnh tăng lên, bạn muốn thay đổi giá trị nhiều biến thực lại số lệnh với giá trị mới, đánh lặp lại dấu nhắc Matlab trở lên buồn tẻ, Matlab cung cấp giải pháp cho vấn đề là: cho phép bạn thay lệnh Matlab file văn đơn giản lúc ta chi việc gõ tên file dấu nhắc Matlab thực xác lệnh đợc sử dụng file này, file gọi script file, đơn giản M_file Danh từ script để thực tế Matlab đọc từ file kịch tìm thấy file Danh từ M_ file để tên script file phải kết thúc phần mở rộng .m nh ví dụ example1.m Để tạo scrip M_file, chọn New bảng chọn file chọn M_file Thủ tục tạo hình soạn thảo, ta đánh đợc lệnh Matlab vào Ví dụ sau cho ta biết đợc diện tích hình chữ nhật function example1 dai=4; rong=5; dientich = dai*rong Ta ghi lu trữ file cách chọn Save từ bảng chọn file Khi ghi tên file phải ý đánh tên file trùng với tên hàm (example1) không cần đánh vào phần mở rộng, Matlab tự gán cho Khi từ dấu nhắc ta đánh: >> example1 dientich = 20 Dới số lệnh hệ thống tơng tác với *.mfile thờng gặp Tên lệnh disp(ans) echo on Chức Hiển thị kết mà không tên biến Lệnh cho phép xem lệnh có *.mfile chúng đợc thực echo off Lệnh không cho phép xem lệnh có *.m file chúng đợc thực type Lệnh cho xem nội dung file, ngầm định file dạng Mfile what Lệnh cho biết tất files M-files MAT-file có vùng làm việc hành hay không input Sử dụng dấu nhắc để đa liệu vào pause Dừng lại ngời dùng nhấn phím bất ký pause(n) Dừng lại n giây waitforbuttonpress Dừng lại ngời dùng nhấn chuột phím (*) Hàm tạo hàm Matlab Các hàm ngời sử dụng viết đợc lu M-file Chúng đợc sử dụng giống nh hàm Matlab Các file hàm đợc viết theo quy tắc chặt chẽ *Các quy tắc viết hàm M-file FUNCTION Hàm phải đợc function, sau lần lợt tham số đầu ra, dấu bằng, tên hàm Tham số đầu vào viết tên hàm đợc bao ngoặc đơn Dòng định nghĩa tham số đầu vào tham số đầu ra; phân biệt khác file hàm file script Một số dòng nên viết thích cho hàm Khi sử dụng lệnh help với tên hàm, thích hàm đợc hiển thị Các thông tin trả lại hàm đợc lu vào tham số (ma trận) đầu Vì kiểm tra chắn hàm có chứa cấu lệnh ấn định giá trị tham số đầu Các biến (ma trận) tên đợc sử dụng hàm chơng trình cần đến Không có lộn xộn xảy hàm chơng trình đợc thực cách tách biệt Các giá trị tính toán hàm, tham số đầu không chịu tác động chơng trình Nếu hàm cho nhiều giá trị đầu phải viết tất giá trị trả lại hàm thành vector dòng khai báo hàm Một hàm có nhiều tham số đầu vào cần thiết phải liệt kê chúng khai báo hàm Các biến đặc biệt nargin nargout xác định tham số đầu vào tham số đầu đợc sử dụng hàm Các tham số biến cục Câu (*) Tạo mảng theo cách thông thờng Trong Matlab để tạo mảng đơn 1,2,4,5,6,7 ta việc gõ dòng lệnh sau vào dấu nhắc Matlab >>x=[1,2,4,5,6,7] x= (*) Tạo mảng dựa quy luật mảng Ví dụ để tạo mảng x ví dụ trớc ta tạo mảng bắt đầu phần tử 1, sau phần tử truớc cộng một, phần tử cuối >> x=(1:1:7) x= Cách thứ giúp ta tạo mảng mà cần vào khoảng cách giá trị phần tử mà không cần biết số phần tử (*) Tạo mảng gồm phần tử x hàm linspace Cú pháp hàm nh sau: linspace (giá trị phần tử đầu, giá trị phần tử cuối, số phần tử) Cách thứ hai ta cần vào số phần tử mảng (không cần biết khoảng cách giá trị phần tử) Ví dụ: >>x=linspace (1,7,7) x= (*)Các mảng mảng mà phần tử đợc tạo lên theo quy luật định Nhng mảng đợc yêu cầu mà tạo phần tử phơng pháp trên, chuẩn để tạo mảng Trờng hợp ta tạo mảng cách vào nhiều phần tử lúc Ví dụ: >> a=1:1:5,b=1:2:9 a= 5 >> c=[a,b] c= b= 5 ví dụ ta tạo hai mảng thành phần a,b sau tạo mảng c cách ghép hai mảng a b Ta tạo mảng nh sau: >> d=[a(1:2:5) 1] d= 1 a mảng gồm phần tử [1 5], mảng d mảng gồm phần tử a ghép thêm phần tử [1 1] (*)Ngoài mảng trên, Matlap cung cấp mảng không gian theo logảithm hàm losgpace Cú pháp hàm logspace nh sau : Logspace(số mũ đầu, số mũ cuối, số phần tử) Ví dụ >>logspace(1,4,2) ans = 10 Câu 10000 Có tất cách (*) Để truy nhập đến phần tử mảng ta dùng số thứ tự phần tử mảng Ví dụ cho mảng x=1,2,3,4,5,6,7 hay cho biết giá trị phần tử thứ mảng ta có câu lệnh sau >> x=[1,2,3,4,5,6,7] x= >> x(2) ans = (*) Để truy nhập nhiều phần tử mảng Ví dụ để truy nhập từ phần tử thứ đến phần tử thứ mảng >> x(1:4) ans = (*)Để truy nhập từ phần tử thứ đến phần tử cuối mảng x >> x(3:end) ans = (*) Để truy nhập từ phần tử thứ ba đến phần tử thứ mảng x >>x(3:-1:1) ans = (*) Để truy nhập từ phần tử thứ đến phần tử thứ mảng x biết vị trí phần tử sau vị trí phần tử trớc cộng >>x(2:2:7) ans = Câu Đối với mảng vector cột, tức mảng có cột nhiều hàng, trờng hợp thao tác tính toán mảng nh không thay đổi Nhng khác với trớc ta dùng dấu cách hay dấu phẩy để phân cách hai cột tròng hợp ta dùng dấu chấm phẩy để phân cách hai hàng Ví dụ để tạo vector x : >>x=[1;3;5;7] x= Một cách khác để tạo vector cột dùng hàm linspace, logspace, hay từ vector hàng, sau dùng phơng pháp chuyển vị, Matlap dùng toán tử chuyển vi () để chuyển từ vector hàng thành vector cột ngợc lại Ví dụ tạo vector x gồm hàng cột từ đến 7: >>x=[1:1:7] x= Ngoài Matlab sử dụng toán tử chuyển dấu chấm đằng trớc (.) (toán tử chuyển vị chấm) Toán tử khác với toán tử chuyển vị () phần tử mảng số phức, tức từ vector nguồn với phần tử số phức, toán tử () tạo số phức liên hợp chuyển vị, toán tử (.) tạo vector chuyển vị Ví dụ sau làm rõ điều trên: >> a=[1:1:7]; % tao vector a gồm hàng cột >>d=a+i*a %tạo vector số phức d từ vector a d= Columns through 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i Columns through 5.0000 + 5.0000i 6.0000 + 6.0000i 7.0000 + 7.0000i >> e=d. % Tạo vector từ vector d toán tử chuyển vị chấm (.) e= 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000i 7.0000 + 7.0000i >>f=d% Tạo vector từ vector d toán tử chuyển vị chấm () f= 1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i 4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i 7.0000 - 7.0000i Câu 6: (*) Phép toán mảng với số đơn Các phép toán đơn giản mảng với số đơn phép cộng, phép trừ, phép nhân phép chia cua mảng cho số cách thực phép toán phần tử mảng (*) Phép toán gia mảng với mảng Đối với hai mảng có kích cỡ ta có phép toán sau: phép cộng, trừ, nhân, chia tơng ứng phần tử hai mảng Ví dụ: >>g=[1 4; 8; 10 11 12] g= 10 11 12 >>h=[1 1 1; 2 2;3 3 3] h= 1 1 2 2 3 3 >>h+g ans = 10 12 13 14 15 >> ans h % Lấy kết trớc trừ mảng h ta đợc lại mảng g ans = 10 11 12 Chú ý Trong phép nhân phép nhân ta dùng toán tử chấm nhân (.*), phép chia ta dùng toán tử chấm chia (./) (.\) để chia tơng ứng phần tử mà không dùng phép nhân (*) phép chia (/) (\) đối hai phép Matlab yêu cầu ma trận phải có số hàng số cột tơng ứng Ví dụ >> g.*h ans = 10 12 14 16 27 30 33 36 >>g*h ??? Error using ==> * Inner matrix dimensions must agree (*) Mảng với luỹ thừa Matlap dùng toán tử (.^) để định nghĩa luỹ thừa mảng Ví dụ >>g.^2 % Các phần tử g đợc luỹ thừa với số ans = 16 25 36 49 64 81 100 121 144 >> 2.^g %Các phần tử g số mũ ans = 16 32 64 128 256 512 1024 2048 4096 >> g.^ (h-1) % Các phần tử g đợc luỹ thừa với số mũ tuơng ứng phần tử h trừ ans = Câu 1 1 81 100 121 144 Có hai cách tất Ví dụ sau ma trận g có hai hàng bốn cột >>g=[1 4; 8] g= Trong ví dụ ta dùng dấu cách để vào phần tử hàng dấu chấm phẩy để tạo hai hàng, ta tạo ma trận nh sau: >> g=[1 5678 10 11 12] g= 10 11 12 Chú ý: Khi nhập vào ma trận hàng số phần tử phải không chơng trình bị báo lỗi (*) Thao tác với mảng Ta có bảng sau Địa mảng A(r,c) Địa mảng mảng A, r hàng, c cột A(r,:) Địa mảng mảng A, r hàng tất cột A A(:,c) Địa mảng mảng A, c cột tất hàng A A(:) Địa tất phần tử A nh vector cột, cách ghép thứ tự cột vector A A(i) Địa mảng mảng A, định nghĩa số vector đơn đợc thiết kế i, với giả sử A vector cột A(x) Địa mảng A, định nghĩa mảng logic x, x phải kích cỡ với A Tìm kiếm mảng i=find(x) Trả lại số mảng nơi mà phần tử khác không [r,c]=find(x) Trả lại số hàng số cột mảng x nơi mà phân tử khác không So sánh mảng isequal(A,B) Đúng A B giống ismember(A,B) Đúng phần tử A phần tử B intersect(A,B) Các phần tử chung A B setdiff(A,B) Các phần tử có A mà B setxor(A,B) Các phần tử không thuộc phần chung A B union(A,B) Tất phần tử có A B whos S=size(A) [r,c]=size(A) r=size(A,1) c=size(A,2) n=length(A) Kích cỡ mảng Hiển thị biến, hàm tôn không gian làm việc kích cỡ chúng Trả lại vector hàng s, mà phần tử thứ số hàng A, phần tử thứ hai số cột A Trả lại hai số vô hớng r,c chứa số hàng số cột A Trả lại số hàng A biến r Trả lại số cột A biến c Trả lại max(size(A)) biến n A không rỗng Câu Vòng lặp For Vòng lặp for cho phép nhóm câu lệnh thực lặp lại số lần cố định Cú pháp vòng lệnh for nh sau for x=array Command %Khối lệnh end Các câu lệnh hai trạng thái for end đợc thực lần cho tất cột mảng (array) Tại lần lặp lại, x đợc gán cho phần tử cột nh suốt n lần vòng lặp, x=array(:,n) >> for n=1:10 x(n)=5*n; end >> x x= 10 15 20 25 30 35 40 45 50 Nói cách khác, trạng thái thứ yêu cầu: Cho n từ đến 10, tính giá trị tất trạng thái trạng thái trạng thái end Đầu tiên vòng lặp for n=1, n=2, nh trờng hợp n=10 Sau trờng hợp n=10, vòng lặp for kết thúc tất lệnh sau trạng end vòng lặp đợc thực Vòng lặp for kết thúc cách gán lại biến điều khiển n vòng lặp Trạng thái 1:10 trạng thái tạo lên mảng Matlab tiêu chuẩn Bất kiểu mảng Matlab đợc chấp nhận vòng lặp for >>data =[1 ; 6] data = >>for n=data x=n*2 end x= x= 10 x= 12 Hai vòng lặp for lồng vào nhau: >> for i=1:5 a(i)=0; for m=1:6 a(i)=a(i)+2*m; end; end; = == ~= ý nghĩa Nhỏ Nhỏ Lớn Lớn Bằng Không Các phép toán logic Toán tử logic and or not Ký hiệu & / ~ (*) ý nghĩa biểu thức Nếu a b c khác d với Nếu e nhỏ f với Nếu g h i nhỏ h với Nếu l m n nhỏ o p q u đợc gán Câu 16 Không gian làm việc MATLAb Matlab sử dụng hai cửa sổ: sổ thứ đợc dùng để đa lệnh liệu vào đồng thời để in kết quả; cửa sổ thứ hai trợ giúp cho việc truy xuất đồ hoạ dùng để thể lệnh hay kết đầu dới dạng đồ hoạ Để nhớ chơng trình vừa thực song ta dùng lệnh save (program) program tên chơng trình Hoặc kích chuột vào saveworkspace as menu file Để gọi chơng trình ta dùng lệnh load(program), program tên chơng trình cần gọi, kích chuột vào load menu file Để thoát khỏi môi trờng Matlab ta dùng lệnh quit exit kích chuột vào exit matlab menu file Việc ngắt chơng trình dâng thực thực không theo yêu cầu thông qua phím nóng Ctrl+C Làm việc với cửa sổ lệnh Cũng nh làm việc với cửa số lệnh Matlab nhớ lệnh gõ vào nh giá trị gán cho nó đợc tạo lên Những lệnh biến đợc gọi lu giữ không gian làm việc Matlab đợc gọi lại muốn Ví dụ, để kiểm tra giá trị biến tape Ví dụ để kiểm tra giá trị biến tape, tất phải làm yêu cầu Matlab cho biết giá trị biến tape cách đánh vào tên biến dấu nhắc >> tape tape = Nếu không nhớ tên biến, ta yêu cầu Matlab cho danh sách biến cách đánh lệnh who từ dấu nhắc lệnh >> who Your variables are: tape Chú ý Matlab không đa giá trị tất biến, muốn biết giá trị, đánh tên biến vào dấu nhắc lệnh Matlab Để gọi lệnh dùng, Matlab dùng phím mũi tên () bàn phím Ví dụ để gọi lệnh bạn gõ vào lúc gần tạo nhất, ta ấn phím mũi tên Tiếp tục nhấn phím này, lại gọi tiếp lệnh trớc Nếu dùng phím mũi tên gọi lại lệnh từ lệnh lệnh gần Các mũi tên dùng để thay đổi vị trí trỏ dòng lệnh dấu nhắc Matlab, nh sửa chữa dòng lệnh , thêm dùng chuột với nhớ đệm để cắt dán , copy sửa chữa văn dấu nhắc dòng lệnh Câu 17 a) Hàm hold Có thể thêm nét vẽ vào đồ thị có sẵn cách dùng lệnh hold Khi thiết lập hold on, Matlab không bỏ hệ trục tồn lệnh plot thực hiện, thay vào đó, thêm đờng cong vào hệ trục nhiên nh liệu không phù hợp với hệ trục toạ độ cũ, trục đợc chia lại Thiết lập hold off bỏ cửa sổ figure thay vào đồ thị Lệnh hold mà đối số bật tắt chức chế độ thiết lập hold trớc Để kiểm tra trạng thái hold ta dùng hàm ishold Trong giá trị hold trạng thái on hold trạng thái off b)Hàm ginput Lệnh ginput đợc sử dụng để lấy liệu tù man hình đồ hoạ Lệnh dùng để thay trỏ cửa sổ Con trỏ đợc dịch chuyển thông qua chuột hay bàn phím ngời sử dụng Khi ấn chute hay phím enter giá trị đợc chuyển vào Matlab Nếu giá trị toạ độ điểm không xác định Matlab giữ lại có lần liệu khác Câu lệnh [x,y]=ginput [x,y]=ginput(n) [x,y,t]=ginput(n) Chức Đọc toạ độ điểm từ hình đồ hoạ(đợc xác định bàn phím hay chuột) trao kết cho x,y Đọc n toạ độ điểm từ hình đồ hoạ Trả giá trị tọa độ cho x y; t có giá trị mảng ký tự tơng ứng với phím trái chuột, phím phải chuột, phím Nếu bàn phím đợc sử dụng t nhận giá trị cho mã ASCII phím Câu 18 a) Đồ thị hình múi tiêu chuẩn Để tạo đồ thị dạng ta dùng hàm pie(a,b) Trong a vector giá trị b vector logic tuỳ trọn Phần i đồ thị đợc tính a[i]/sum(a) b đợc sử dụng để kéo phần đặc biệt đồ thị khỏi miêng bánh Ví dụ >> a=[ 3]; >> pie(a, a=min(a)) b) Biểu đồ pareto Trong biểu đồ giá trị vector đợc vẽ thành khối hình chữ nhật Ví dụ >>pareto (a) c) Vẽ đồ thị với thang chia khác Đôi ta muốn vẽ hai hàm khác hệ trục mà lại sử dụng thang chia khác nhau, plotyy làm điều Ví dụ >> x=[1 4]; >> y= x.^2+2*x-7; >> z= x./2 -2*x; >> plotyy(x,y,x,z) Câu19 (*) Tạo mảng số phức >> a=[1:1:7]; % tao vector a gồm hàng cột >>d=a+i*a %tạo vector số phức d từ vector a d= Columns through 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i Columns through 5.0000 + 5.0000i 6.0000 + 6.0000i 7.0000 + 7.0000i (*) Tạo mảng luỹ thừa Matlap dùng toán tử (.^) để định nghĩa luỹ thừa mảng Ví dụ >>g.^2 % Các phần tử g đợc luỹ thừa với số ans = 16 25 36 49 64 81 100 121 144 >> 2.^g %Các phần tử g số mũ ans = 16 32 64 128 256 512 1024 2048 4096 >> g.^ (h-1) % Các phần tử g đợc luỹ thừa với số mũ tuơng ứng phần tử h trừ ans = 1 1 81 100 121 144 (*) Mảng có phần tử Matlap cung cấp hàm để tạo mảng mà phần tử chúng 1: Ví dụ >> ones(3) % Tạo mảng hàng, cột với phần tử ans = 1 1 1 1 >> zeros(2,5) % tạo mảng hàng, 5cột với phần tử ans = 0 Câu 20 Tên lệnh disp(ans) echo on 0 0 0 0 Chức Hiển thị kết mà không tên biến Lệnh cho phép xem lệnh có *.mfile chúng đợc thực echo off Lệnh không cho phép xem lệnh có *.m file chúng đợc thực type Lệnh cho xem nội dung file, ngầm định file dạng Mfile what Lệnh cho biết tất files M-files MAT-file có vùng làm việc hành hay không input Sử dụng dấu nhắc để đa liệu vào pause Dừng lại ngời dùng nhấn phím bất ký pause(n) Dừng lại n giây waitforbuttonpress Dừng lại ngời dùng nhấn chuột phím Câu 21 Sai số tuyệt đối Định nghĩa 1.2 Hiệu a= A-a ( a= a-A) gọi sai số số xấp xỉ a Trị tuyệt đối: = a = A-a gọi sai số tuyệt đối số xấp xỉ a Thông thờng, số A, không xác định đợc số tuyệt đối số xấp xỉ a Vì vậy, với khái niệm sai số tuyệt đối ngời ta đa thêm khái niệm sai số tuyệt đối giới hạn Định nghĩa 1.3 Sai số tuyệt đối giới hạn số xấp xỉ a số không nhỏ sai số tuyệt đối số xấp xỉ a Vậy a1 sai số tuyệt đối giới hạn số xấp xỉ a thì; a = A-a a1 (1.2) Từ đó, suy ra: a- a1 A a+ a1 (1.3) Vậy a- a1 số xấp xỉ thiếu A, a+ a1 xấp xỉ thừa A Để đơn giản, thờng quy ớc viết nh sau A= aa1 (1.4) Ví dụ Xác định Sai số tuyệt đối giới hạn số xấp xỉ a= 3,14 thay cho Vì 3,14 < < 3,15 nên: a- am, việc tìm kiếm x giới hạn nửa thứ hai dãy, gồm a m+1, am+2,.,an Nếu x không lớn am, tìm kiếm giới hạn nửa dãy đầu dãy gồm a1, a2, am Bây tìm kiếm giới hạn bảng liệt kê có số phần tử nhỏ [ n + ] Dùng thủ tục so sánh x với số hạng bảng liệt kê đợc hạn chế Sau lại hạn chế việc tìm kiếm nửa thứ nửa thứ hai bảng liệt kê lặp lại trình cho tơi nhận đợc bảng liệt kê có số hạng Sau đó, chí xác định số hạng có phải x hay không Sau giả mã cho thuật toán tìm kiếm nhị phân Procedure Tìm kiếm nhị phân ( x: integer, a1,a2,.an: integer tăng dần) i:=1 { i điểm mút trái khoảng tìm kiếm} j:=n {j điểm mút phải khoảng tìm kiếm} While i am then i:=m+1 {Lệnh có nghĩa x > a m việc tìm kiếm đợc hạn chế bảng liệt kê thứ hai qua việc gán giá trị điểm mút trái khoảng tìm kiếm thứ hạng số bảng liệt kê thứ hai} Else j:=m {Lệnh có nghĩa x[ am việc tìm kiếm đợc hạn chế bảng liệt kê thứ qua việc gán giá trị điểm mút phải khoảng tìm kiếm thứ hạng số cuối bảng liệt kê thứ nhất} end If x=ai then location:=i else location :=0 { location số dới số hạng x có giá trị x không tìm đợc x} Chơng trình mô tả thuật toán tìm kiếm nhị phân đợc tiến hành cách thu hẹp liên tiếp phần cần tìm kiếm dãy bất giai đoạn nào, chí có số hạng bắt đầu với kết thúc với aj đợc xem xét Nói cách khác, i j số nhỏ lớn số hạng lại, tơng ứng Chơng trình tiếp tục thu hẹp phần dãy cần tìm kiếm lại phần tử dãy Khi làm đến đó, so sánh cho thấy số hạng có x hay không Câu 25 Bây nghiên cứu toán tìm kiếm độ dài đờng ngắn a z đơn đồ thị liên thông, vô hớng có trọng số Thuật toán Dijkstra đợc thực cách tìm độ dài đờng ngắn từ a tới đỉnh đầu tiên, độ dài ngắn từ a tới đỉnh thứ hai, Cho tới tìm thấy đợc độ dài đờng ngắn từ a tới đỉnh z Thuật toán dựa dãy bớc lặp Một tập đặc biệt đỉnh đợc xây dựng cách cộng thêm đỉnh bớc lặp Thủ tục gán nhãn đợc thực bớc lặp Trong thủ tục gán nhãn này, đỉnh w đợc gán nhãn độ dài đờng ngắn từ a tới w qua đỉnh thuộc tập đặc biệt Một đỉnh đợc thêm vào tập đỉnh có nhãn nhỏ so với đỉnh cha có tập Bây ta đa chi tiết thuật toán Dijkstra Đầu tiên gán cho đỉnh a nhãn đỉnh khác Ta ký hiệu LO(a)=0 LO(v)= cho tất đỉnh khác (bớc lặp thứ 0) Các nhãn độ dài đờng ngắn từ đỉnh a tới đỉnh Theo thuật toán Dijkstra ta xây dựng tập đặc biệt đỉnh Gọi S k tập sau bớc lặp thứ k thủ tục gán nhãn Chúng ta bắt đầu S o= ( Ký hiệu có nghĩa tập rỗng) Tập S k đợc tạo thành từ tập S k-1 cách thêm vào đỉnh u không thuộc S k-1 có nhãn nhỏ Khi đỉnh u đợc gộp vào Sk sửa đổi nhãn đỉnh không thuộc S k cho Lk(v), nhãn v bớc k, độ dài đờng ngắn từ a tới v mà đờng chứa đỉnh thuộc Sk (tức đỉnh thuộc tập đặc biệt đỉnh với u) Giả sử v đỉnh không thuộc S k Để sửa nhãn v ta thấy Lk(v) độ dài đờng ngắn từ a tới v chứa đỉnh thuộc Sk Để sửa đổi nhãn ta lu ý đờng ngắn từ a tới v chứa phần tử S k đờng ngắn từ a tới v chứa phần tử Sk-1 đờng ngắn từ a tới u bớc k-1 với cạnh (u,v) Nói cách khác ta có Lk(a,v) = {Lk-1(a,v), Lk-1(a,u)+w(u,v)} Thủ tục đợc lặp cách liên tiếp thêm đỉnh vào tập đặc biệt đỉnh đạt tới đỉnh z Khi thêm z vào tập đặc biệt đỉnh nhãn độ dài đờng ngắn từ a tới z Thuật toán Dijkstra đợc cho thuật toán Thuật toán thuật toán Dijkstra Procedure Dijkstra (G:đơn đồ thị liên thông có trọng số, với trọng số dơng) { G có đỉnh a=v0,v1,,vn =z trọng số w(vi,vj), với w(vi,vj)= {vi,vj} không cạch G} L(a):=0 For i:=1 to n L(vi):= S:= {Ban đầu nhãn đợc khởi tạo cho nhãn a không, đỉnh khác , tập S rỗng} while z S { Lệnh có nghĩa vòng lặp kết thúc z đợc nạp vào tập S} Begin u:= đỉnh không thuộc S có nhãn L(u) nhỏ S:= S {u} For tất đỉnh v không thuộc S If L(u)+ w(u,v) < L(v) then L(v):=L(u)+w(u,v) { Lệnh nhằm sửa nhãn đỉnh không thuộc S} End {L(z) = độ dài đờng ngắn từ a tới z} Câu 26 Sắp xếp kiểu bọt thuật toán xếp đơn giản nhng thuật toán có hiệu Thuật toán đặt danh sách theo thứ tự tăng dấn cách so sánh liên tiếp phần tử kế nhau, đổi chỗ chúng cho chúng cha có thứ tự tăng dần Để tiến hành xếp kiểu bọt thực tháo tác bản, đổi chỗ phần tử lớn với phần tử nhỏ sau, đầu danh sách duyệt qua toàn danh sách Chúng ta lặp thủ tục tới việc xếp hoàn thành Ta tởng tợng phần tử đợc đặt vào cột Trong xếp kiểu bọt phần tử nhỏ nên phần tử lớn chìm xuống đáy Điều đợc minh hoạ ví dụ sau Ví dụ: Hãy xếp 3, 2, 4, 1, theo thứ tự tăng dần cách dùng thuật toán bọt Giải Trớc tiên ta so sánh phần tử Vì 3>2 nên đổi chỗ cho 2, ta đợc danh sách 2, 3, 4, 1, Vì 1 nên đổi chỗ với 1, ta nhận đợc danh sách 2,3,1,4,5 Vì 4>5 nên vòng duyệt thứ đợc hoàn thành Vòng đảm bảo phần tử lớn nhất, đợc đạt vào vị trí Vòng duyệt thứ hai bắt đầu việc so sánh Vì 3>2 nên ta tiếp tục so sánh với Vì 3>1 nên đổi chỗ chúng cho ta đợc danh sách 2,1,3,4,5 Vì 31 kết ta đợc 1,2,3,4,5 Vì 2 10 m-(n -1) (1. 12) Ví dụ: Số xấp xỉ a=3 ,14 159 số A= với a1=0, 01. .. hạn: a=6(m10m + m -11 0m -1 + m- 210 m-2 + .+ m-(n -1) 10m (n -1) +) (1. 10) m,n số nguyên, i (i=m -1, m-2) Ví dụ 2 51, 45= 2 .10 2+5 .10 1 +1. 100+4 .10 -1+ 5 .10 -2 Bây giờ, giả sử số a biểu diễn dới dạng (1. 10) số... cho (1. 7), ngời ta dùng công thức: a1= a *a (1. 8) Thay (1. 8) vào (1. 4) ta có A= a a *a= a(1a) (1. 9) VD: Tính a công thức l1 =10 0 0 ,1 (cm) l2 = 50 0 ,1 (cm) Với công thức A=l1, a =10 0, a =0 ,1/ 100

Ngày đăng: 08/06/2017, 08:51

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

Tài liệu liên quan