Mot so van de ve ngon ngu lap trinh pascal

50 19 0
Mot so van de ve ngon ngu lap trinh pascal

Đ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

Máy tính hỗ trợ cho người thầy một số công đoạn trong quá trình dạy học: Vai trò này của máy tính được sử dụng trong các ngành kỹ thuật từ khi máy tính ra đời.. Máy tính hỗ trợ thí nghiệ[r]

(1)

CHƯƠNG : TIN HỌC VÀ GIÁO DỤC A ĐƯA TIN HỌC VÀO TRƯỜNG PHỔ THÔNG

I Sự phát triển có tính chất bùng nổ tin học II Tác động công nghệ tin học đến trường học

III Nhu cầu hồn cảnh nhà trường phổ thơng Việt Nam B SỬ DỤNG MÁY TÍNH ĐIỆN TỬ NHƯ CƠNG CỤ DẠY HỌC

I Sử dụng máy tính điện tử công cụ dạy học II Phát triển tư thuật toán cho học sinh

A ÐƯA TIN HỌC VÀO TRƯỜNG PHỔ THÔNG

I Sự phát triển có tính chất bùng nổ tin học TOP Quan niệm cũ: Xem tin học phận toán học

Quan niệm mới: Cho xem tin học phận tốn học kìm hãm phát triển tin học Ngày tin học trở thành ngành khoa học độc lập với nhiều ngành khoa học liên quan có đối tượng nghiên cứu riêng công nghệ phần mềm, tin học lý thuyết, sở liệu

Giai đoạn phát triển chất tin học bắt đầu vào năm 70, với phát minh kỹ thuật vi xử lý tạo sở cho việc chế tạo hệ máy tính ngày gọn nhẹ, tốc độ xử lý nhanh, độ tin cậy cao, điều khiển đơn giản hơn, Về phần mềm ngơn ngữ lập trình tiến gần đến ngơn ngữ thơng thường Nhờ máy tính điện tử nhanh chóng thâm nhập vào lĩnh vực sản xuất, kinh tế đời sống xã hội Tin học cung cấp cho người công cụ khai thác xử lý thông tin cách nhanh chóng hiệu

Ngày tin học ứng dụng rộng rãi lĩnh vực từ ngành khoa học xác, khoa học đến điều khiển tự động, thông tin liên lạc, Ðặc biệt tin học sử dụng nhiều công tác quản lý quản lý sản xuất, quản lý người, quản lý tài nguyên, Tin học xem ngành mũi nhọn, chiếm vị trí hàng đầu sách kinh tế khoa học kỹ thuật nước phát triển

II Tác động công nghệ tin học đến trường học: TOP Sự nghiệp giáo dục phải đáp ứng đòi hỏi khoa học kỹ thuật Ðó u cầu có tính chất ngun tắc Trong thời đại ngày máy tính điện tử ngày sử dụng rộng rãi, hiểu biết định máy tính điện tử phải trở thành học vấn phổ thông thành viên xã hội Nếu phát triển mạnh mẽ ứng dụng rộng rãi tin học đặc điểm bật cách mạng khoa học công nghệ kỷ này, đòi hỏi việc đào tạo nhà trường phải gắn liền với thực tế xã hội khơng thể thối thác việc đưa tin học vào trường phổ thơng Việc làm đón đầu với yêu cầu thực tiễn kỹ nguyên thơng tin tự động hóa

Có xu hướng việc đưa tin học vào trường phổ thơng:

 Ðưa tin học vào chương trình giảng dạy, xem tin học môn học tương tự môn học khác

(2)

Ðối với học sinh phổ thơng hướng dẫn em dùng máy tính cơng cụ để học mơn khác tốn, ngoại ngữ, Ở bậc học cao đại học dùng máy tính để mơ thí nghiệm, đánh giá chất lượng học sinh

III Nhu cầu hoàn cảnh nhà trường phổ thông Việt Nam: TOP 1 Nhu cầu xã hội:

Xã hội ngày xuất nhiều ngành nghề địi hỏi phải có hiểu biết tin học

Giáo dục tin học trường phổ thông nhằm chuẩn bị cho hệ trẻ Việt Nam mặt tri thức kỹ hoạt động, sử dụng trang thiết bị đại Phát triển mặt lực, trí tuệ để nhanh chóng thích ứng với thời đại

2 Khả thực hiện:

Nhiều trường phổ thông trang bị máy tính để giảng dạy cho học sinh.

Đối với trường chưa đủ điều kiện trang bị máy tính phục vụ cho nhu cầu học tập học sinh dạy nhiều yếu tố liên quan đến văn hóa tin học thuật tốn, phát triển tư thuật tốn, kích thích tính sáng tạo học sinh

3 Quan điểm "Phân hóa" việc đưa tin học vào nội dung dạy học:

Xã hội tương lai cần nhiều tri thức tin học người nắm vững tri thức Tuy nhiên, người đời trở thành cán hoạt động tin học Mặt khác, để họ "bị mù" tin học Vì vậy, việc đưa tin học vào nội dung dạy học trường phổ thông tùy theo điều kiện trang thiết bị người phân làm diện:

Diện phổ cập: Cung cấp cho học sinh phổ thông kiến thức tin học, chẳng hạn khái niệm thuật giải, tư thuật giải, cấu trúc nguyên tắc làm việc máy tính, Diện mũi nhọn: Tập trung học sinh có khiếu tin học, dạy cho em nhiều kiến thức tin học Tạo điều kiện để em trở thành cán hoạt động chuyên sâu tin học hay trở thành chuyên gia tin học sau

4 Nội dung, mục đích, đường đưa giáo dục tin học vào nhà trường Việt Nam: Nội dung: Giáo dục tin học xét phương diện:

Truyền thụ kiến thức tin học nội dung mơn học bình đẳng mơn học khác chương trình giảng dạy

Giáo dục tin học thông qua nội dung môn học khác Sử dụng máy tính điện tử cơng cụ để dạy học Mục đích:

Giáo dục tin học trường phổ thông nhằm chuẩn bị cho hệ trẻ Việt Nam mặt tri thức, kỷ năng, mặt lực, trí tuệ phẩm chất cần thiết giúp học sinh thích ứng với thời đại vi tính hóa

Về mặt tri thức kỷ năng: Giúp cho học sinh sau tốt nghiệp nắm số yếu tố tin học Trong có số em (diện đào tạo mũi nhọn) có khả sử dụng máy tính để xử lý thơng tin, dùng máy tính công cụ phục vụ cho việc học tập hoạt động

Về mặt lực, trí tuệ: Giúp phát triển nhiều phương thức, tư liên hệ mật thiết với việc sử dụng kỹ thuật xử lý thông tin như: tư thuật toán, tư điều khiển, tư ngơn ngữ, Ðồng thời hình thành phát triển lực hoạt động trí tuệ nói chung phân tích, tổng hợp, khái qt hóa, trừu tượng hóa,

Con đường đưa giáo dục tin học vào nhà trường: Giáo dục tin học đưa vào nhà trường theo đường:

Truyền thụ số yếu tố tin học mơn học hay nói cách khác đưa tin học vào nhà trường bình đẳng mơn học truyền thống khác

Giáo dục tin học thông qua nội dung môn học khác nhau, sử dụng hình thức nội khóa, ngoại khóa,

(3)

I Sử dụng máy tính điện tử cơng cụ dạy học: TOP Với tư cách tiến khoa học và cơng nghệ máy tính sử dụng trình dạy học để cải tiến phương pháp giảng dạy nhằm nâng cao chất lượng giáo dục Nhiều ý tưởng đưa cho mục tiêu này, tựu chung có hướng chính:

1 Máy tính thay người giáo viên cách hồn toàn dạy học:

Về mặt lý luận xu hướng bị nhiều người phê phán kiểu dạy học phi nhân tính Ngồi nhiệm vụ truyền đạt kiến thức, nhiệm vụ giáo dưỡng người thầy đóng vai trị vơ quan trọng q trình hình thành nhân cách học sinh

Tuy nhiên, mặt lý luận dạy học thiết kế chương trình có nội dung phong phú, khơng nhàm chán, tiện sử dụng nhằm "kéo dài học" học sinh Nếu máy tính đến gia đình thầy giáo giới thiệu số chương trình để em tự học, tự nghiên cứu, củng cố kiến thức học trường Ngoài em cịn sử dụng máy tính chương trình có sẳn để học ngoại ngữ hay tìm hiểu thêm kiến thức mà nhà trường chưa trang bị cho

2 Máy tính hỗ trợ cho người thầy số cơng đoạn q trình dạy học: Vai trị máy tính sử dụng ngành kỹ thuật từ máy tính đời

Máy tính hỗ trợ thí nghiệm:

Gián tiếp: Lấy số liệu từ thí nghiệm, nhập vào máy tính để có kết

Trực tiếp: Nối thí nghiệm với máy tính thơng qua sensor (bộ cảm biến), sensor có nhiệm vụ chuyển số liệu thu từ thí nghiệm thành tín hiệu thích hợp đưa vào máy tính để xử lý cho kết Ưu điểm phương pháp nhanh xác Khuyết điểm thí nghiệm cần phải có thu phát sensor riêng Ðặc biệt đứng mặt sư phạm máy tính thay hoạt động cần thiết cho kỹ thực hành học sinh Người học không rèn luyện thao tác thực hành tính tốn Tuy nhiên, xu hướng phát triển trường đại học

Máy tính hổ trợ cho việc kiểm tra đánh giá chất lượng học sinh:

Ngoài chức lưu trữ, truy xuất xử lý điểm học tập học sinh Máy tính cịn giúp người giáo viên tổ chức cho học sinh thi trắc nghiệm cách nhanh chóng, xác an tồn Việc thi trắc nghiệm chia làm công đoạn:

+ Soạn câu hỏi trắc nghiệm thông qua số lần "trắc nghiệm thử", máy cho phép ta chọn lựa câu hỏi "hay" để lập bổ sung vào ngân hàng đề thi

+ Bước dùng máy tính để chọn câu hỏi thi trắc nghiệm ngân hàng câu hỏi dùng máy tính để xử lý điểm cho học sinh sau thi xong

3 Thầy giáo sử dụng máy tính phương tiện hỗ trợ cho việc dạy học lớp:

Sử dụng hình máy tính để mơ tượng tự nhiên, thí nghiệm, hình ảnh cấu trúc, việc làm mang ý nghĩa dạy học rõ rệt Có trường phái ủng hộ khơng ủng hộ ý tưởng

Những người ủng hộ cho việc mô không trung thực với việc vật Nếu mơ thí nghiệm hình ảnh xảy hình tính trước, khơng thuyết phục học sinh

Những người ủng hộ cho trực quan hóa mục đích chính, nhằm giải giai đoạn ban đầu trình nhận thức Nếu ta biểu diễn thí nghiệm máy tính khơng thuyết phục mặt định lượng song học sinh thấy thí nghiệm diễn nào, chất tượng Nếu sử dụng triệt để ta biến hình máy tính thành công cụ trực quan đa giúp cho học sinh nhận thức chất nhiều vấn đề mang tính trừu tượng cao

II Phát triển tư thuật toán cho học sinh TOP Làm để phát triển tư thuật toán cho học sinh:

(4)

Trong dạy học người ta ln ln tìm kiếm nhiều phương pháp để phát triển tư cho học sinh Ở giai đoạn nội dung phát triển tư có khác Nó phụ thuộc vào trình độ khoa học kỹ thuật, quan điểm triết học Chúng ta quen thuộc với khái niệm tư trừu tượng, tư logic, tư biện chứng

Vào thời cổ đại, tư người gần tư cụ thể, toán học thời khái niệm thực nghiệm, giai đoạn chưa có khái niệm tư logic Về sau toán học phát triển cao hơn, người khơng biết thành lập mệnh đề tốn học mà cịn biết chứng minh tính đắn nó, tư logic xuất Vào thời đại ngày bước sang giai đoạn tự động hóa, máy vi tính trở thành cơng cụ đắc lực cho hoạt động Ðể nắm vững tin học nhằm hịa nhập tích cực vào sống người cần có tư thuật toán

2 Sự liên hệ tư thuật toán tư sáng tạo:

Sự liên hệ tư thuật toán tư sáng tạo có nhiều quan điểm trái ngược Có quan điểm cho dạy thuật toán cho học sinh làm cho học sinh hoạt động máy móc, rập khuôn, thiếu linh hoạt cần xem xét vấn đề trên nhiều góc độ khác

Tư thuật toán tiền đề chuẩn bị cho sáng tạo.Trước có sáng tạo người ta cần phải nắm vững tri thức, thành thạo kỹ Tư thuật toán cần thiết giai đoạn Chúng ta dễ dàng nắm khái niệm khoa học nhờ tư thuật toán biết vạch dấu hiệu khái niệm, biết xây dựng thuật giải cho toán Từ dễ dàng hình thành kỷ năng, kỹ xảo

Trên sở thuật tốn cho trước ta xây dựng nhiều toán cụ thể khác Tư thuật tốn giúp khơng dừng lại cách giải tốn mà nghĩ đến nhiều lớp tập lúc rộng hơn, tổng quát

Bản thân việc phát thuật toán để giải tập sáng tạo Tư thuật tốn góp phần phát triển phẩm chất trí tuệ, rèn luyện thao tác, tư

Phân tích: Thơng qua phân tích tốn (xét trường hợp xảy ra) phân tích hoạt động lớn thành nhiều hoạt động thành phần

Tổng hợp: Là trình xếp cách hợp lý hành động thành quy trình cụ thể, miêu tả lời sơ đồ khối

Khái quát: Là xuất phát từ toán cụ thể khái qt thành tốn tổng qt cho dạng tập

CHƯƠNG : GIỚI THIỆU VỀ ĐỒ HỌA PASCAL A NHẮC LẠI CÁC KIẾN THỨC CƠ BẢN VỀ PASCAL

I Lệnh cấu trúc rẽ nhánh II Lệnh cấu trúc lựa chọn III Lệnh vịng lặp

IV Chương trình

B GIỚI THIỆU KHÁI QUÁT VỀ ĐỒ HỌA PASCAL I Những yếu tố đồ họa Pascal II Vẽ hình

(5)

A NHẮC LẠI CÁC KIẾN THỨC CƠ BẢN VỀ PASCAL

I Lệnh cấu trúc rẽ nhánh : TOP

1 Dạng không đầy đủ:

IF < Ðiều kiện > THEN < Công việc >

Ý nghĩa: Nếu điều kiện thực cơng việc.

Ví dụ1: Viết chương trình tìm số lớn số a,b,c nhập từ bàn phím Prorgam Vi_du_1;

Uses crt ;

Var a,b,c,max : Integer ; Begin

Clrscr;

Write (' Ðưa vào số a,b,c :'); Readln (a,b,c); max:=0;

If a > max then max:=a; If b > max then max:=b; If c > max then max:=c; Write (' Giá trị lớn : ',max); Readln;

End

2 Dạng đầy đủ:

IF < Ðiều kiện > THEN < Công việc > ELSE < Công việc >

Ý nghĩa: Nếu điều kiện thực cơng việc 1, ngược lại thực cơng việc 2. Ví dụ 2: Viết chương trình tìm số lớn nhỏ số a,b nhập từ bàn phím

Prorgam Vi_du_2; Uses crt ;

Var a,b,c,max, : Integer ; Begin

Clrscr;

Write (' Ðưa vào số a,b :'); Readln (a,b); If a >= b then

Begin

max:=a; min:=b;

End

Else { a < b } Begin

max:=b; min:=a;

End;

Writeln (' Giá trị lớn : ',max); Writeln (' Giá trị nhỏ : ',min); Readln;

End

II Lệnh cấu trúc lựa chọn : TOP

1 Dạng không đầy đủ:

Case < Biểu thức > of

Hằng : < Công việc >; Hằng : < Công việc >;

(6)

End; Ý nghĩa:

Nếu < biểu thức > = Hằng thực < Cơng việc > Nếu < biểu thức > = Hằng thực < Công việc >

Nếu < biểu thức > = Hằng n thực < Cơng việc n > Ví dụ 3: Viết chương trình tính số ngày tháng

Prorgam Vi_du_3; Uses crt ;

Var So_ngay, thang, nam : Integer ; Begin

Clrscr;

Write (' Nhập tháng :'); Readln (thang); Write (' Nhập năm :'); Readln (nam);

Case thang of

1,3,5,7,8,10,12 : So_ngay:=31;

4,6,9,11 : So_ngay:=30; Case nam mod of

0 : So_ngay:=29; 1,2,3 : So_ngay:=28;

end; { Case nam } end; { Case thang }

Write ('Số ngày tháng', thang,' : ',So_ngay); Readln;

End

2 Dạng đầy đủ:

Case < Biểu thức > of

Hằng : < Công việc >; Hằng : < Công việc >;

Hằng n : < Công việc n >;

Else < Công việc n + >; End;

Ý nghĩa:

Nếu < biểu thức > = Hằng thực < Cơng việc > Nếu < biểu thức > = Hằng thực < Cơng việc >

Nếu < biểu thức > = Hằng n thực < Công việc n >

Ngược lại ( khơng có giá trị hàng từ đến n thỏa biểu thức ) thực < Công việc n + >

III Lệnh vòng lặp: TOP

1 Vòng lặp xác định

 Dạng 1: For < biến >:= < giá trị đầu > to < giá trị cuối > < công việc >  Ý nghĩa: Vòng lặp thực theo bước sau :

(7)

Bước 2: Kiểm tra giá trị biến <> giá trị cuối Nếu tăng biến lên đơn vị thực công việc

Bước 3: Lặp lại bước biến giá trị cuối kết thúc vịng lặp Ví dụ 4: Viết chương trình tính tổng: S = + + + + n, với n nhập từ bàn phím

Prorgam Vi_du_4; Uses crt ;

Var S, n, i : Integer ; Begin

Clrscr; S:= 0;

Write (' Nhập n :'); Readln (n); For i:=1 to n

S:= S + i;

Write (' Giá trị tổng S = ',S); Readln;

End

 Dạng 2: For < biến >:= < giá trị đầu > downto < giá trị cuối > < cơng việc >  Ý nghĩa: Vịng lặp thực theo bước sau :

Bước 1:Kiểm tra giá trị đầu >= giá trị cuối Nếu gán gán giá trị đầu cho biến thực vòng lặp

Bước 2: Kiểm tra giá trị biến <> giá trị cuối Nếu giảm biến đơn vị thực công việc

Bước 3: Lặp lại bước biến giá trị cuối kết thúc vịng lặp Ví dụ 5: Viết chương trình tìm số nguyên dương ước số số n, với n nhập từ bàn phím Prorgam Vi_du_5;

Uses crt ;

Var n, i : Integer ; Begin

Clrscr;

Write (' Nhập n :'); Readln (n); For i:=n downto

If n mod i = then Write (i:8); Readln;

End

2 Vịng lặp khơng xác định

 Dạng 1:While < Ðiều kiện > < cơng việc >

Ý nghĩa: Vịng lặp thực sau : vào lệnh kiểm tra < điều kiện > nếu < điều kiện > thực < cơng việc > sau quay lại kiểm tra < điều kiện >, tiếp tục < điều kiện > sai kết thúc lệnh

Ví dụ 6: Viết chương trình tính tổng: S = + + + + n Sao cho S >= 1000 Prorgam Vi_du_6;

Uses crt ;

Var S, i : Integer ; Begin

Clrscr; S:= 0; i:=1;

(8)

Begin

S:= S + i; i:=i + 1; End;

Write ('Khi giá trị tổng S = ',S); Readln;

End

 Dạng 2: Repeat < công việc > Until < Ðiều kiện >

Ý nghĩa: Vòng lặp thực sau : vào lệnh thực < cơng việc > sau đó sẽ kiểm tra < điều kiện >, < điều kiện > sai tiếp tục thực < công việc >, tiếp tục < điều kiện > kết thúc lệnh

Ví dụ 7: Viết chương trình nhập vào số nguyên dương n xác định xem số có phải số nguyên tố không ?

Prorgam Vi_du_7; Uses crt ;

Var n, i : Integer ; Begin

Clrscr;

Write (' Nhập n :'); Readln (n); i:=1;

Repeat

i:=i + 1;

Until ( n mod i = ) or ( i * i > n ); If i * i > n then

Writeln (n,' Là số nguyên tố ') Else

Writeln (n,' Là hợp số ú ') Readln;

End

IV Chương trình con TOP

Khái niệm chương trình con

Trong chương trình lớn có đoạn chương trình lặp đi, lặp lại nhiều lần,

để tránh rườm rà thời gian viết chương trình người ta thường phân chương trình thành nhiều module Mỗi module giải cơng việc Các module gọi chương trình

Một thuận lợi chương trình ta dễ dàng kiểm tra xác định tính đắn trước ráp nối vào chương trình việc xác định sai xót để tiến hành hiệu chỉnh chương trình thuận lợi

Có hai lọai chương trình hàm (Function) thủ tục (Procedure)

Hàm thủ tục chương trình (ctc) hàm khác thủ tục chỗ hàm trả giá trị cho lệnh gọi thơng qua tên cịn thủ tục khơng

Do ta dùng hàm thỏa yêu cầu :

Ta muốn nhận lại kết (và mà thôi)

Ta cần dùng tên ctc (chứa kết ) để viết biểu thức 2.Hàm (Function)

 Cú pháp: FUNCTION<tên hàm>(<Tham số hìnhthức : kiểu biến>):<kiểu kết quả>; Khai báo nội hàm

(9)

 Tên hàm tên tự đặt phải tuân theo qui tắc đặt tên

 Tham số hình thức thực chất biến, hiểu đối số hàm toán học Nếu nhiều tham số hình thức có kiểu chúng viết cách dấu ' , ' cịn khác kiểu phải cách dấu ' ; '

 Kiểu kết quả: kiểu vơ hướng, phản ánh kiểu giá trị kết mà hàm mang lại sau tính tốn

Ví dụ 8:Viết chương trình tính tổng nghịch đảo giai thừa: S = 1+ 1/2! + 1/3! + +1/n! Progam Vi_du_8;

Uses Crt;

Var n,k: integer ; s:real;

function gt(i:integer):longint; Var j:integer ;

kq:longint; Begin

kq:=1;

For j:=1 to i kq:=kq*j; gt:=kq;

End;

Begin {Chương trình chính} Clrscr;

Write('Cho biết tổng có số hạng ?'); Readln (n); s:=0 ;

For k:=1 to n s:=s+1/ gt(k);

Writeln (' Tổng cần tìm S = ',S:12:5); Readln;

End

3 Thủ tục (Procedure): Có loại thủ tục có tham số thủ tục khơng có tham số. Thủ tục khơng có tham số : Procedure < tên thủ tục >

Khai báo nội thủ tục

Nội dung thủ tục bắt đầu BEGIN kết thúc END Progam Vi_du_9;

Uses Crt; Var i: integer ;

Procedure In; Var i:integer ;

Begin

i:=7; Write (i:6);

End;

Begin {Chương trình chính} Clrscr;

i:=5; Write (i:6); In;

(10)

Thủ tục có tham số : Procedure < tên thủ tục > ( < danh sách tham số >: kiểu ); Khai báo nội thủ tục

Nội dung thủ tục bắt đầu BEGIN kết thúc END Progam Vi_du_10;

Uses Crt;

Var a,b: integer ;

Procedure TT ( x :Integer; Var y : Integer ); Begin

x:= * x; y:= * y;

Writeln (' Ðang thủ tục');

Writeln ('Hai số bạn là:', x ,' ' ,y );

End;

Begin {Chương trình chính} Clrscr;

Write (' Hãy nhập vào số a b'); Readln (a,b); Writeln (' Bạn nhập a = ' , a, ' b = ', b); TT (a,b);

Writeln (' Khi khỏi thủ tục ');

Writeln (' Hai số bạn : ', a , ' ' , b );

Writeln (' Nghĩa a khơng thay đổi cịn b bị thay đổi '); Readln; End

B GIỚI THIỆU KHÁI QUÁT VỀ ÐỒ HỌA PASCAL

I Những yếu tố đồ họa Pascal TOP Các tập tin hệ thống đồ họa:

Khi cần viết chương trình đồ họa Pascal cần có tập tin sau đây: *.BGI, *.CHR, GRAPH.TPU

*.BGI ( Borland Graphics Interface ): Là tập tin giao diện dùng để điều khiển hình đồ họa công ty Borland viết Các tập tin *.BGI dùng làm đồ họa cho kiểu hình khác

 CGA.BGI: Ðiều khiển card hình IBMCGA, MCGA

 HERC.BGI: Ðiều khiển card hình HERCULES MONOCHROME  GAVGA.BGI: Ðiều khiển card hình IBMEGA, VGA

 ATI.BGI: Ðiều khiển card hình AT & T6300 (400 dòng)  IBM8514.BGI: Ðiều khiển card hình IBM8514  PC3270.BGI: Ðiều khiển card hình IBM3270

Chương trình viết cho loại card hình cần phải có tập tin BGI cho kiểu hình Tập tin *.CHR (Character): Bao gồm tập tin viết cho kiểu chữ (font) khác sau :

(11)

 Ngồi cịn có kiểu chữ ( default) mà thường thấy chế độ văn

GRAPH.TPU: Là tập tin chứa kiểu, hàm, biến, thủ tục có liên quan đến việc dùng đồ họa Ðây Unit cho phép ta dùng chế độ đồ họa phải khai báo hàng lệnh sử dụng unit (Uses)

2 Khởi động ngưng chế độ đồ họa:

Khởi động chế độ đồ họa: Chế độ hình máy tính chế độ văn Vì muốn thết kế đồ họa thiết phải chuyển hình sang chế độ đồ họa thủ tục

InitGraph ( Var GraphDriver : Integer; Var GraphMode : Integer; DriverPath : String );

GraphDriver: Là biến kiểu Integer card hình mà khai báo GraphDriver (Gd) định nghĩa Unit Graph

CGA = MCGA = EGA = EGA64 = EGAMONO =

IBM8514 = HERCMONO = ATI400 = VGA = PC3270 = 10

Nhưng thường chương trình đồ họa viết cần tương thích với nhiều loại card hình khác nhau, nên ta khai báo Gd = Detect ( có giá tị ) Với máy tự động tìm loại card tương ứng để chạy chương trình

GraphMode: Là biến kiểu Integer mode hình (Gm) Tương ứng với card hình khai báo, ta khai mode hình biến Gm theo định nghĩa Unit Graph Trong trường hợp khai báo Gd = Detect khơng cần phải khai báo Gm máy tính tự động xác định loại card mode hình tốt ứng với loại card

PathDriver: Biến kiểu String đường dẫn vào nơi chứa tập tin *.BGI cài đặt máy Khi ta khai báo Gd = Detect máy tự động tìm loại card mode hình tương thích để chạy chương trình Nhưng khơng biết giá trị thực tế Gm Ðể nhận lại giá trị Gd Gm ta sử dụng thủ tục sau :

Procedure DetectGraph ( Var Gd: Integer, Gm: Integer);

Thủ tục tự động tìm kiếm loại card mode hình tương thích cho chương trình trả kết loại card mode hình cho biến Gd, Gm

Khởi động đồ họa không thành công, vài yếu tố khai báo khơng loại card hình, không đường dẫn đến tập tin *.BGI dẫn đến treo máy Hàm sau cho xác định việc khởi động chế độ đồ họa có thành công hay không.?

Function GraphResult : Integer;

Nếu việc khởi động bị lỗi hàm trả giá trị khác tương ứng với lỗi Tên lỗi xác định hàm:

Function GraphErrorMgs (ErrorCode : Integer ) : String;

Hàm cho chuỗi ký tự thông báo lỗi đồ họa xác định ErrorCode kết hàm

Nếu việc khởi động thành công hàm cho kết Hằng GrOk = 0, việc khởi tạo đồ họa khơng có lỗi Thủ tục đóng chế độ đồ họa:

Procedure CloseGraph;

Thủ tục dùng trực tiếp lệnh với chức đóng chế độ đồ họa Nó ln đặt cuối chương trình ( trước End.)

Các thủ tục chuyển đổi hình đồ họa hình văn bản: Procedure RestoreCrtMode;

Thủ tục chuyển từ hình đồ họa sang hình văn mà khơng cần đóng chế độ đồ họa. Function GetGraphMode : Integer;

(12)

3 Ví dụ mẫu:

Thủ tục khởi tạo đồ họa:

Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then

Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End;

End;

Cấu trúc tổng quát chương trình đồ họa: Uses Graph;

Var OldMode : Integer; Begin

EnterGraph ( ' C:\ BP \ BGI ' ); OldMode:= GetGraphMode;

{ Thực công việc mode đồ họa } RestoreCrtMode;

{Thực công việc mode văn bản} SetGraphMode (OldMode); { Trở mode đồ họa }

{Thực công việc mode đồ họa } CloseGraph; { Ðóng chế độ đồ họa } End

MỘT SỐ KIỂU MÀN HÌNH VÀ TRẠNG THÁI ÐỒ HỌA THÔNG DỤNG GraphDriver

Giá trị GraphDriver

GraphMode

Giá trị GraphMode

Ðộ phân giải Màn hình

Số màu

CGA CGAC0 320 x 200

CGAC1 320 x 200

CGAC2 320 x 200

CGAC3 320 x 200

CGAC4 640 x 200

MCGA MCGAC0 320 x 200

MCGAC1 320 x 200

MCGAC2 320 x 200

MCGAC3 320 x 200

(13)

MCGAHi 640 x 480

EGA EGALo 640 x 200 16

EGAHi 640 x 350 16

HERC HercMonoHi 720 x 380

VGA VGALo 640 x 200 16

VGAMEd 640 x 350 16

VGAHi 640 x 480 16

DETECT

4 Tọa độ chế độ đồ họa:

(GetMaxX , 0) (0,0)

(0, GetMaxY)

(GetMaxX, GetMaxY)

Hệ tọa độ hình đồ họa sau:

Lưu ý: Trong chương trình thường lấy giá trị lớn tọa độ dòng ( GetMaxX + ) tọa độ cột ( GetMaxY + ) để phân bố vị trí hình đồng thời thiết kế hình ảnh có thơng số tỷ lệ

Uses Graph;

Var MaxX, MaxY, CenterX, CenterY : Integer; Begin

MaxX:= GetMaxX; MaxY:= GetMaxY; CenterX:= (GetMaxX Div + ); CenterY:= (GetMaxY Div + );

CloseGraph;

(14)

Tuy nhiên, kích thước cố định hình, tùy theo loại mode mà mật độ phân bố số điểm hình khác Ðơi làm cho chương trình chạy tốt hình lại bị méo dạng hình khác

Ðể giải vấn đề người ta dùng tung độ biểu kiến ( giả sử khoảng cách điểm theo chiều dọc khoảng cách điểm theo chiều ngang) Tỷ lệ trục tùy theo loại card mode hình khác cho thủ tục:

Procedure GetAspectRatio ( Xasp, Yasp : Word );

Thủ tục cho thành phần Xasp Yasp mà Xasp / Yasp cho tỷ lệ trục Từ đó, ta tính tung độ biểu kiến cách xây dựng hàm sau:

Function Ad ( Value : Integer ) : Integer; Var Xasp, Yasp: Word;

Begin

GetAspectRatio ( Xasp, Yasp ); Ad:= ( Value * Xasp ) div Yasp; End;

II Vẽ hình TOP

1 Các thủ tục đặt màu vẽ

Xóa hình: Khi cần xóa hình để chuyển sang vẽ hình khác có thể dùng lệnh sau:

ClearDevice; ClearViewPort; Ðặt màu nền

Procedure SetBkColor ( Color : Word );

Chức năng: Ðặt màu cho hình ( màu Color ). Ðặt màu vẽ

Procedure SetColor ( Color : Word );

Chức năng: Ðặt màu cho đường thẳng, đường trịn, cung, ellipse, hình rỗng chữ viết ( màu Color )

BẢNG MÀU VÀ CÁC GIÁ TRỊ CỦA NÓ

Tên Black Blue Green Cyan Red Magenta Brown Lightgray

Giá trị

Màu Ðen Da trời Lá Xanh lơ Ðỏ Tím Nâu Xám nhạt

DarkGray Light Blue Light Green Light Cyan Light Red LightMagenta Yellow White

8 10 11 12 13 14 15

Xám đậm Da trời nhạt

Lá nhạt

Xanh lơ nhạt

Ðỏ nhạt Tím nhạt Vàng Trắng Ðặt kiểu đường độ rộng đường

Procedure SetLineStyle ( LineStyle : Word; Pattern : Word; Thickness : Word );

Chức năng: Có tác dụng xác định kiểu đường, độ rộng đường, đường thẳng, đường tròn, ellipse hình rỗng

LineStyle có giá trị từ đến 4:

(15)

4: Nét người dùng định nghĩa

Pattern : Các giá trị thành phần bỏ qua ( ) Thickness : Có giá trị từ đến cho chọn độ dày nét vẽ Các thủ tục vẽ điểm đường

Ø Procedure PutPixel (x , y : Integer ; Color : Word ); Chức năng: Vẽ điểm tọa độ ( x, y ) với màu Color Ø Procedure Line (x1 , y1, x2, y2 : Integer );

Chức năng: Vẽ đoạn thẳng từ tọa độ ( x1, y1 ) đến ( x2 , y2 ) Ø Procedure MoveTo (x , y : Integer );

Chức năng: Di chuyển trỏ đến tọa độ ( x, y ) Ø Procedure MoveRel (dx , dy : Integer );

Chức năng: Di chuyển trỏ đoạn dx theo trục hoành dy theo trục tung so với vị trí hành trỏ ( chiều di chuyển phụ thuộc vào dấu dx, dy )

Ø Procedure LineTo (x , y : Integer );

Chức năng: Vẽ đoạn thẳng từ vị trí hành trỏ đến tọa độ (x, y) Vị trí hành định Moveto Thủ tục thường dùng để vẽ đường gấp khúc

Ø Procedure LineRel (dx , dy : Integer );

Chức năng: Vẽ đoạn thẳng từ vị trí hành trỏ đến vị trí xác định độ dời ngang dx độ dời dọc dy

3 Các thủ tục vẽ hình rỗng

Ø Procedure Rectangle (x1 , y1, x2, y2 : Integer );

Chức năng: Vẽ hình chữ nhật có tọa độ điểm trái (x1, y1) điểm bên phải (x2, y2) với màu vẽ định Setcolor, kiểu đường định SetLineStyle

Ví dụ: Viết chương trình vẽ hệ trục tọa độ vng góc trung tâm hình có màu đỏ xanh nhạt, viền xung quanh hình hình chữ nhật màu vàng nét đậm

Prorgam He_truc; Uses Graph;

Var CenterX, CenterY: Interger; Procedure EnterGraph ( Path : String );

Begin { Chương trình }

EnterGraph (‘C: \ BP \ BGI ’); CenterX:= GetMaxX Div 2; CenterY:= GetMaxY Div 2;

SetBkColor( ); SetColor ( Red );

Line ( CenterX, 5, CenterX, GetMaxY - ); {Trục tung } Line (5, CenterY, GetMaxX - 5, CenterY ); { Trục hoành } SetLineStyle ( 0, 0, 2); SetColor ( Yellow );

Rectangle (0, 0, GetMaX, GetMaxY); Readln;

CloseGraph; End

Ø Procedure Circle (x , y : Integer; Radius : Word );

Chức năng: Vẽ hình trịn có tọa độ tâm (x, y), bán kính radius với màu vẽ định Setcolor, kiểu đường định SetLineStyle

Ø Procedure Arc (x , y : Integer; dau, cuoi : Word; Radius : Word );

Chức năng: Vẽ cung trịn có tọa độ tâm (x, y), bán kính radius, điểm đầu dau, điểm cuối cuoi với màu vẽ định Setcolor, kiểu đường định SetLineStyle

Các điểm đầu cuối xác định sau : Vị trí 0o

(16)

Vị trí 180o

Ø Procedure Ellipse (x , y : Integer; dau, cuoi : Word; ar, br : Word );

Chức năng: Vẽ cung ellipse có tọa độ tâm (x, y), điểm đầu dau, điểm cuối cuoi ar bán kính ngang, br bán kính dọc với màu vẽ định Setcolor, kiểu đường định SetLineStyle

vẽ hình quạt Procedure Sector (x, y : Integer; dau, cuoi : Word; ar, br : Word ); Chức năng: Vẽ cung ellipse có bán kính nối từ tâm đến điểm đầu cuối cung Ví dụ: Viết chương trình vẽ số đường trịn, cung trịn, ellipse cung ellipse

Prorgam Cung; Uses Graph;

Var CenterX, CenterY: Interger; Procedure EnterGraph ( Path : String );

Begin { Chương trình }

EnterGraph ('C: \ BP \ BGI ’); SetColor ( );

Circle ( 100, 70, 50 ); Arc ( 250, 100, 0, 80, 65 );

Sector ( 200, 200, 0, 90, 100, 50 );

SetColor ( ); SetLineStyle ( 1, ,2 ); Ellipse ( 150, 200, 0, 360, 60, 40 );

Ellipse ( 500, 250, 180, 270, 50, 35 ); Readln;

CloseGraph; End

4 Các thủ tục vẽ hình có tơ Ðặt kiểu tơ

Procedure SetFillStyle ( Pattern : Word ; Color : Word );

Chức năng: Xác định nét tơ màu tơ cho tất hình đặc bar, FillEllipse. Pattern có định sẳn từ đến 11

CÁC KIỂU TÔ VÀ GIÁ TRỊ TƯƠNG ỨNG CỦA PATTERN

Hằng số Giá trị Kiểu tô

EmptyFill Màu

SoildFill Màu đặc

LineFill Ðường - - -

LtSlashFill Sọc chéo thưa / / / / SlashFill Sọc chéo dày //// BkSlashFill Sọc chéo ngược dày \\\\ LtBkSlashFill Sọc chéo chéo ngược thưa \ \ \

(17)

XHatchFill Nét chải dày InterLeaveFill Các đường xen liệu

WideDotFill 10 Chấm thưa

CloseDotFill 11 Chấm dày

UserFill 12 SetPatern trước Vẽ hình chữ nhật có tơ:

Procedure Bar (x1, y1, x2, y2 : Integer);

Chức năng:Vẽ hình chữ nhật có kiểu tơ xác định SetFillStyle. Vẽ hình hộp chữ nhật có tơ:

Procedure Bar3D (x1, y1, x2, y2 : Integer ; Depth : Word ; Top : Boolean);

Chức năng:Vẽ hình hộp chữ nhật có kiểu tơ xác định SetFillStyle, nét viền xác định SetLineStyle SetColor, Depth số điểm theo chiều sâu Nếu Top = true hình hộp có nắp cịn Top = False hình hộp khơng có nắp (thường dùng trường hợp khối chồng lên )

Ví dụ: Vẽ hình chữ nhật có tơ, hình hộp chữ nhật rời hình hộp chữ nhật chồng lên Prorgam Hop;

Uses Graph;

Var y0, y1, y2, x1, x2: Interger; Procedure EnterGraph ( Path : String );

Begin { Chương trình }

EnterGraph (‘C: \ BP \ BGI ’);

SetFillStyle ( 7, Green); { Tô carô màu xanh } Bar ( 100, 20, 150, 50 ); { Hình chữ nhật có tơ } Bar3D ( 200, 300, 100, 50, true );

{ Hình hộp chữ nhật có chiều sâu 50, có đỉnh }

SetFillStyle ( 11, 5); { Tơ màu tím với nét chấm dày } y0:=50; y1:= 150; y2:=200; x1:= 350; x2:=500; Bar3D (x1, y0, x2, y1, 40, true );

{ Hình hộp chữ nhật có nắp }

Bar3D (x1, y1, x2, y2, 40, False ); { Hình hộp chữ nhật khơng có nắp } Readln;

CloseGraph; End  Vẽ Ellipse có tơ:

Procedure FillEllipse (x, y : Integer ; ar, br : Word );

Chức năng: Vẽ ellipse có tọa độ tâm (x, y), ar bán kính ngang, br bán kính dọc với màu kiểu tơ định SetFillStyle

 Vẽ hình quạt có tơ:

Procedure PieSlice (x , y : Integer; dau, cuoi : Word; Radius : Word );

Chức năng: Vẽ hình quạt có tọa độ tâm (x, y), điểm đầu dau, điểm cuối là cuoi bán kính Radius, màu kiểu tô định SetFillStyle

(18)

Prorgam Ve; Uses Graph;

Var x, y, x1, y1, dau, cuoi, bk: Interger; Procedure EnterGraph ( Path : String );

Begin { Chương trình }

Write (' x = ' );Readln (x); Write (' y = ' );Readln (y);

Write (' ar = ' ); Readln (ar); Write (' br = ' ); Readln (br); Write (' Nhập tọa độ tâm hình quạt ' ); Write (' x1 = ' ); Readln (x1); Write (' y1 = ' ); Readln (y1);

Write (' Nhập góc đầu ' ); Readln (dau); Write (' Nhập góc cuối ' ); Readln (cuoi); Write (' Nhập bán kính ' ); Readln (bk); EnterGraph (‘C: \ BP \ BGI ’);

SetFillStyle ( 4, 3); FillEllipse (x, y, ar, br );

Spislice ( x1, y1, dau, cuoi, bk ); Readln;

CloseGraph; End

5 Vẽ đa giác tô đa giác:  Vẽ đa giác

Procedure DrawPoly (NumPoints :Word ; Var PolyPoints ); Polypoints : Array [ k +1 ] of PointType;

Chức năng: Vẽ đa giác NumPoints số đỉnh đa giác ( k đỉnh ) Muốn vẽ đa giác ta khai báo tất tọa độ đỉnh đa giác const ( phần khai báo )

 Tô đa giác

Procedure FillPoly (NumPoints :Word ; Var PolyPoints ); Polypoints : Array [ k +1 ] of PointType;

Chức năng: Tô đa giác NumPoints số đỉnh đa giác ( k đỉnh ) Muốn vẽ đa giác ta khai báo tất tọa độ đỉnh đa giác const ( phần khai báo )

Lệnh SetColor cho đặt màu viền

Lệnh SetFillStyle cho phép đặt kiểu tô màu tô đa giác Ví dụ: Viết chương trình tơ đa giác

Prorgam DaGiac; Uses Graph;

Const Polygon : Array [ 6] of PoinTyle = ((x:150,y:200), (x:300,y:70), (x:450,y:250), (x:390,y:310), (x:200,y:280), (x:150,y:200));

Procedure EnterGraph ( Path : String ); Begin { Chương trình }

(19)

SetFillStyle ( 1, 4); FillPoly (6, polygon); Repeat Until KeyPressed; CloseGraph;

End

6 Viết chữ đồ họa:  Ðịnh kiểu viết:

Procedure SetTextStyle ( Font : Word; Direction : Word ; CharSize : Word ); Tham số Font có kiểu định nghĩa trước.

Direction : Ðịnh hướng viết

+ : Viết chữ theo chiều ngang + : Viết chữ theo chiều dọc CharSize : Cỡ chữ có giá trị từ đến 10  Viết chữ hình:

Procedure OutText ( St : String );

Chức năng: Xuất chuỗi ký tự St lên hình vị trí trỏ có kiểu viết định SetTextStyle màu định SetColor

Procedure OutText ( x, y : Integer ; St : String );

Chức năng: Xuất chuỗi ký tự St lên hình vị trí ( x, y) có kiểu viết định SetTextStyle màu định SetColor

Ví dụ: Viết chương trình mơ tả font chữ Prorgam Chu;

Uses Graph;

Var Co, kieu : Integer;

Procedure EnterGraph ( Path : String ); Begin { Chương trình }

EnterGraph (‘C: \ BP \ BGI ’); For Kieu:=0 to

For Co:= to 10 Begin

SetTextStyle ( Kieu, 0, co ); OutText (' Chao ban '); ClearViewport;

End;

CloseGraph; End 7 ViewPort:

Ðịnh nghĩa : ViewPort hình chữ nhật hình mà ta tạo để vẽ hình Các hình vẽ ViewPort vượt biên ViewPort nằm gọn ViewPort để không ảnh hưởng đến phần khác hình Khi ViewPort tạo điểm ảnh có tọa độ tương đối so với ViewPort, nghĩa gốc bên trái ViewPort có tọa độ (0,0)

Tạo ViewPort:

Procedure SetViewPort ( x1, y1, x2, y2 : Integer ; Clip : Boolean );

Chức năng: Ðặt ViewPort hình có góc trái (x1, y1) góc phải (x2, y2)

(20)

Ỉ 0<= y1 <= y2 <= GetMaxY

Nếu Clip = True hình vẽ bị giới hạn ViewPort

Nếu Clip = False hình vẽ vượt ngồi biên củaViewPort

Khi ViewPort tạo hoạt động ViewPort tạo

Ðiểm (x1, y1) có tọa độ tương đối (0,0)

Bằng cách đặt : SetViewPort ( GetMaxX div 2, GetMaxY div 2, GetMaxX, GetMaxY, False ) Ta chuyển góc tọa độ trung tâm hình hệ tọa độ gần giống hệ tọa độ decac ngoại trừ chiều dương trục tung quay phía

Lau ViewPort:

Procedure ClearViewPort;

Chức năng: Lau ViewPort hoạt động đưa trỏ tọa độ (0,0) Lưu ý : Muốn lau hình ta dùng ClearDevice

Ví dụ: Viết chương trình vẽ hệ trục tọa độ Decac Program Truc_toa_do;

Uses Crt,Graph;

Var CenterX,CenterY: Integer; Top,Bottom,Left,Right: Integer; Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Procedure Truc; Begin

Line (0,Top+5,0,Bottom-5); Line (Left+5,0,Right-5,0); OuttextXY(5,5,'O');

OuttextXY(-3,Top+3,'^ y'); OuttextXY(Right-10,-3,'>'); OuttextXY(Right-10,5,'x'); OuttextXY(Left+5,-3,'<'); OuttextXY(Left+5,5,'-x');

OuttextXY(-3,Bottom-10,'V -y'); End;

BEGIN { Chương trình } EnterGraph('C:\BP\BGI');

CenterX:=GetMaxX div 2; CenterY:=GetMaxY div 2; Top:=-GetMaxY div 2; Bottom:=GetMaxY div 2-15; Left:=-GetMaxX div 2+10; Right:=GetMaxX div 2-10; SetBkColor(Blue);

SetviewPort(CenterX,CenterY,GetMaxX,GetMaxY,False); SetColor(Yellow);

(21)

SetColor(White); Truc;

OuttextXY(-150,Bottom+7,'Chuong trinh ve he truc toa De Cac'); Readln;

CloseGraph; END

III Vẽ số hình TOP

1 Chương trình vẽ Ellipse có hình chữ nhật sở ngoại tiếp Uses Crt,Graph;

Var CenterX,CenterY: Integer; Top,Bottom,Left,Right: Integer; x,y,ar,br: Integer;

Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Procedure Truc; Begin

Line (0,Top+5,0,Bottom-5); Line (Left+5,0,Right-5,0); OuttextXY(5,5,'O');

OuttextXY(-3,Top+3,'^ y'); OuttextXY(Right-10,-3,'>'); OuttextXY(Right-10,5,'x'); OuttextXY(Left+5,-3,'<'); OuttextXY(Left+5,5,'-x');

OuttextXY(-3,Bottom-10,'V -y'); End;

BEGIN { Chương trình }

Write('Nhap hoanh tam Ellipse x ='); Readln(x); Write('Nhap tung tam Ellipse y ='); Readln(y);

Write('Nhap ban kinh truc thuc cua Ellipse ar ='); Readln(ar); Write('Nhap ban kinh truc ao cua Ellipse br ='); Readln(br); EnterGraph('C:\BP\BGI');

CenterX:=GetMaxX div 2; CenterY:=GetMaxY div 2; Top:=-GetMaxY div 2; Bottom:=GetMaxY div 2-15; Left:=-GetMaxX div 2+10; Right:=GetMaxX div 2-10; SetBkColor(Blue);

SetviewPort(CenterX,CenterY,GetMaxX,GetMaxY,False); SetColor(Yellow);

(22)

Ellipse(x,y,0,360,ar,br); SetColor(Red);

Rectangle(-ar,-br,ar,br); SetColor(White); Truc;

OuttextXY(-ar,0,'-ar'); OuttextXY(ar,0,'ar'); OuttextXY(0,-br,'br'); OuttextXY(0,br,'-br');

OuttextXY(-150,Bottom+7,'Ellipse co hinh chu nhat co so ngoai tiep'); SetColor(Yellow);

Line(-ar,-br,ar,br); Line(-ar,br,ar,-br); Readln;

CloseGraph; END

2 Chương trình vẽ hình chữ nhật có đường tròn sở ngoại tiếp Uses Crt,Graph;

Var CenterX,CenterY: Integer; Top,Bottom,Left,Right: Integer; a,b,x0,y0,r,x1,y1,x2,y2: Integer; Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Procedure Truc; Begin

Line (0,Top+5,0,Bottom-5); Line (Left+5,0,Right-5,0); OuttextXY(5,5,'O');

OuttextXY(-3,Top+3,'^ y'); OuttextXY(Right-10,-3,'>'); OuttextXY(Right-10,5,'x'); OuttextXY(Left+5,-3,'<'); OuttextXY(Left+5,5,'-x');

OuttextXY(-3,Bottom-10,'V -y'); End;

BEGIN { Chương trình }

(23)

x1:=round(x0-a/2); x2:=round(x0+a/2); y1:=round(y0-b/2); y2:=round(y0+b/2); EnterGraph('C:\BP\BGI');

CenterX:=GetMaxX div 2; CenterY:=GetMaxY div 2; Top:=-GetMaxY div 2; Bottom:=GetMaxY div 2-15; Left:=-GetMaxX div 2+10; Right:=GetMaxX div 2-10; SetBkColor(Blue);

SetviewPort(CenterX,CenterY,GetMaxX,GetMaxY,False); SetColor(Yellow);

Rectangle(Left,Top,Right,Bottom); SetColor(Red);

Rectangle(x1,y1,x2,y2); SetColor(Magenta); Circle(x0,y0,r);

SetColor(White); Truc;

OuttextXY(-150,Bottom+7,'Rectangle co hinh tron co so ngoai tiep'); OuttextXY(x0+5,round(y1-10),'a');

OuttextXY(round(x2+10),y0+3,'b');

OuttextXY(round(x0+a/4),round(y0-b/4),'r'); OuttextXY(x1,(y1-10),'A');

OuttextXY(x2,(y1-10),'B'); OuttextXY(x2,(y2+10),'C'); OuttextXY(x1,(y2+10),'D'); SetColor(Yellow);

Line(x1,y1,x2,y2); Line(x1,y2,x2,y1); Readln;

CloseGraph; END

3 Chương trình vẽ đường trịn sở ngoại tiếp hình chữ nhật & hình chữ nhật sở ngoại tiếp ellipse Uses Crt,Graph;

Var CenterX,CenterY: Integer; Top,Bottom,Left,Right: Integer; ar,br,x,y,r,x1,y1,x2,y2: Integer; Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; if Gr<>GrOk then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Procedure Truc; Begin

Line (0,Top+5,0,Bottom-5); Line (Left+5,0,Right-5,0); OuttextXY(5,5,'O');

(24)

OuttextXY(Right-10,-3,'>'); OuttextXY(Right-10,5,'x'); OuttextXY(Left+5,-3,'<'); OuttextXY(Left+5,5,'-x');

OuttextXY(-3,Bottom-10,'V -y'); End;

BEGIN { Chương trình }

Write('Nhap hoanh tam Ellipse x ='); Readln(x); Write('Nhap tung tam Ellipse y ='); Readln(y);

Write('Nhap ban kinh truc thuc cua Ellipse ar ='); Readln(ar); Write('Nhap ban kinh truc ao cua Ellipse br ='); Readln(br); r:=Round(Sqrt(sqr(ar)+sqr(br)));

x1:=round(x-ar); x2:=round(x+ar); y1:=round(y-br); y2:=round(y+br); EnterGraph('C:\BP\BGI');

CenterX:=GetMaxX div 2; CenterY:=GetMaxY div 2; Top:=-GetMaxY div 2; Bottom:=GetMaxY div 2-15; Left:=-GetMaxX div 2+10; Right:=GetMaxX div 2-10; SetBkColor(Blue);

SetviewPort(CenterX,CenterY,GetMaxX,GetMaxY,False); SetColor(Yellow);

Rectangle(Left,Top,Right,Bottom); SetColor(Red);

Rectangle(x1,y1,x2,y2); SetColor(Magenta); Circle(x,y,r); SetColor(Green); Ellipse(x,y,0,360,ar,br); SetColor(White); Truc;

OuttextXY(-230,Bottom+7,'Rectangle ngoai tiep Ellipse va co hinh tron co so ngoai tiep');

OuttextXY(x+5,round(y1-10),'a'); OuttextXY(round(x2+10),y+3,'b');

OuttextXY(round(x+ar/2),round(y-br/2),'r'); OuttextXY(x1,(y1-10),'A');

OuttextXY(x2,(y1-10),'B'); OuttextXY(x2,(y2+10),'C'); OuttextXY(x1,(y2+10),'D'); OuttextXY(-ar,0,'-ar'); OuttextXY(ar,-10,' ar'); OuttextXY(0,-br+5,' br'); OuttextXY(0,br+5,'-br'); SetColor(Yellow);

Line(Round(x-ar),Round(y-br),Round(x+ar),Round(y+br)); Line(Round(x-ar),Round(y+br),Round(x+ar),Round(y-br)); Readln;

CloseGraph; END

(25)

Uses Crt,Graph;

Var CenterX,CenterY: Integer; Top,Bottom,Left,Right: Integer; ar,br,x,y,r,x1,y1,x2,y2: Longint; Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Procedure Truc; Begin

Line (0,Top+5,0,Bottom-5); Line (Left+5,0,Right-5,0); OuttextXY(5,5,'O');

OuttextXY(-3,Top+3,'^ y'); OuttextXY(Right-10,-3,'>'); OuttextXY(Right-10,5,'x'); OuttextXY(Left+5,-3,'<'); OuttextXY(Left+5,5,'-x');

OuttextXY(-3,Bottom-10,'V -y'); End;

Procedure Hyperbol (xc,yc,ar,br:Longint;Color:Word); Var x,y:longint;

p:real; z1,z2:real;

Procedure Doi_Xung; Begin

PutPixel(Round(xc+x),Round(yc+y),Color); PutPixel(Round(xc+x),Round(yc-y),Color); PutPixel(Round(xc-x),Round(yc+y),Color); PutPixel(Round(xc-x),Round(yc-y),Color); End; { Doi_Xung }

Begin

x:=ar; y:=0;

z1:=(ar*ar)/(br*br); z2:=(br*br)/(ar*ar); p:=1-2*z1+(2*ar); While (x<=right-5) Do Begin

Doi_Xung; if p<=0 then Begin

(26)

End Else

p:=p-2*z1*(2*y+3); y:=y+1;

End;

End; { Hyperbol }

BEGIN { Chương trình } Clrscr;

Write('Nhap hoanh tam Ellipse x ='); Readln(x); Write('Nhap tung tam Ellipse y ='); Readln(y);

Write('Nhap ban kinh truc thuc cua Ellipse ar ='); Readln(ar); Write('Nhap ban kinh truc ao cua Ellipse br ='); Readln(br); r:=Round(Sqrt(sqr(ar)+sqr(br)));

x1:=Round(x-ar); x2:=Round(x+ar); y1:=Round(y-br); y2:=Round(y+br); EnterGraph('C:\BP\BGI');

CenterX:=GetMaxX div 2; CenterY:=GetMaxY div 2; Top:=-GetMaxY div 2; Bottom:=GetMaxY div 2-15; Left:=-GetMaxX div 2+10; Right:=GetMaxX div 2-10; SetBkColor(Blue);

SetviewPort(CenterX,CenterY,GetMaxX,GetMaxY,False); SetColor(Yellow);

Rectangle(Left,Top,Right,Bottom); SetColor(Red);

Rectangle(x1,y1,x2,y2); SetColor(Magenta); Circle(x,y,r); SetColor(Green); Ellipse(x,y,0,360,ar,br); SetColor(White); Truc;

OuttextXY(-310,Bottom+7,'Rectangle ngoai tiep Ellipse + hinh tron ngoai tiep Rectangle + hyperbol co so'); OuttextXY(x+5,round(y1-10),'a');

OuttextXY(round(x2+10),y+3,'b');

OuttextXY(round(x+ar/2),round(y-br/2),'r'); OuttextXY(x1,(y1-10),'A');

OuttextXY(x2,(y1-10),'B'); OuttextXY(x2,(y2+10),'C'); OuttextXY(x1,(y2+10),'D'); OuttextXY(-ar,0,'-ar'); OuttextXY(ar,-10,' ar'); OuttextXY(0,-br+5,' br'); OuttextXY(0,br+5,'-br'); SetColor(Yellow);

Line(Round(x-ar),Round(y-br),Round(x+ar),Round(y+br)); Line(Round(x-ar),Round(y+br),Round(x+ar),Round(y-br)); Hyperbol (x,y,ar,br,11);

(27)

IV Vẽ đồ thị hàm số TOP 1 Vẽ đồ thị hàm số bậc 2Ġ

Program DO_THI_HAM_BAC_HAI; Uses Crt,Graph;

Var mx,my:Longint; x,y,i,a,b,c:real;

CenterX,CenterY,XAsp,YAsp:word; Top,Bottom,Left,Right:integer; Chon:Char;

Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Function Ad(value:Integer):Integer; Begin

Ad:= (Value * XAsp) Div YAsp; End;

Procedure WriteXY (x,y:integer;S:String); Begin

Gotoxy (x,y); Write(S); End;

Procedure Nhap; Begin

Clrscr;

Writexy(19,5,'CHUONG TRINH VE DO THI HAM SO BAC HAI'); Writexy(28,10,'Y = Ax^2 + BX + C');

Writexy(20,15,'NHAP CAC HE SO CUA PHUONG TRINH :'); Writexy(8,20,'HE SO A:');

Writexy(30,20,'HE SO B:'); Writexy(52,20,'HE SO C:'); Gotoxy(18,20); Readln(a); Gotoxy(40,20); Readln(b); Gotoxy(62,20); Readln(c); End;

Procedure Truc; Begin

Line (0,Top+5,0,Bottom-5); Line (Left+5,0,Right-5,0); OuttextXY(5,5,'O');

(28)

OuttextXY(Right-10,5,'x'); OuttextXY(Left+5,-3,'<'); OuttextXY(Left+5,5,'-x');

OuttextXY(-3,Bottom-10,'V -y'); End;

BEGIN { Chương trình } EnterGraph ('C:\BP\BGI');

If GraphResult <> GrOk Then Halt(1); CenterX:=GetMaxX div 2;

CenterY:=GetMaxY div 2; Top:=-GetMaxY div 2+10; Bottom:=GetMaxY div 2-10; Left:=-GetMaxX div 2+10; Right:=GetMaxX div 2-10; Repeat

RestoreCrtMode; Nhap;

SetGraphMode(GetGraphMode); GetAspectRatio(XAsp,Yasp);

SetViewPort(CenterX,CenterY,GetMaxX,GetMaxY,False); SetColor(Yellow);

Rectangle(Left,Top,Right,Bottom); SetColor(LightMagenta);

Truc;

SetColor(White); i:=Left+10;

While i<Right-10 Do Begin

x:=i/30; mx:=round(i); y:=a*x*x +b*x+c; my:=-ad(round(y*20));

If abs(my)<Bottom-10 Then PutPixel(mx,my,Lightred); i:=i+1/15;

End;

OutTextxy(-150,Top-9,'DO THI HAM SO BAC HAI Y = Ax ^ + Bx + C'); OutTextxy(-100,Bottom+4,'ENTER tiep tuc,ESC ngung');

Chon:=Readkey;

Until Upcase(chon)=#27; CloseGraph;

END

PROGRAM DO_THI_HAM_PHAN_THUC_BAC_NHAT; Uses Crt,Graph;

Var mx,my:Longint; x,y,i,a,b,c,d:real;

(29)

Top,Bottom,Left,Right:integer; Chon:Char;

Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Function Ad(value:Integer):Integer; Begin

Ad:= (Value * XAsp) Div YAsp; End;

Procedure WriteXY (x,y:integer;S:String); Begin

Gotoxy (x,y); Write(S); End;

Procedure Nhap; Begin

Clrscr;

Writexy(7,4,'CHUONG TRINH VE DO THI HAM PHAN THUC BAC NHAT TREN BAC NHAT');

Writexy(35,9,'Ax + B '); Writexy(29,10,'Y = '); Writexy(33,10,' -'); Writexy(35,11,'Cx + D ');

Writexy(20,16,'NHAP CAC HE SO CUA PHUONG TRINH :'); Writexy(7,21,'HE SO A:');

Writexy(22,21,'HE SO B:'); Writexy(37,21,'HE SO C:'); Writexy(53,21,'HE SO D:'); Gotoxy(17,21); Readln(a); Gotoxy(32,21); Readln(b); Gotoxy(47,21); Readln(c); Gotoxy(63,21); Readln(d); End;

Procedure Truc; Begin

Line (0,Top+5,0,Bottom-5); Line (Left+5,0,Right-5,0); OuttextXY(5,5,'O');

(30)

OuttextXY(Left+5,5,'-x');

OuttextXY(-3,Bottom-10,'V -y'); End;

Procedure Tcdung; Var mx:integer; Begin

mx:=round(-d/c*30);

Line(mx,Top+10,mx,Bottom-10); End;

Procedure Tcngang; Var my:integer; y: real; Begin y:= a/c;

my:=-ad(round(y*20));

Line(Left+10,my,Right-10,my); End;

BEGIN { Chương trình } EnterGraph('C:\BP\BGI');

If GraphResult <> GrOk then Halt(1); CenterX:=GetMaxX div 2;

CenterY:=GetMaxY div 2; Top:=-GetMaxY div 2+10; Bottom:=GetMaxY div 2-10; Left:=-GetMaxX div 2+10; Right:=GetMaxX div 2-10; Repeat

RestoreCrtMode; Nhap;

SetGraphMode(GetGraphMode); SetBkColor(Blue);

GetAspectRatio(XAsp,Yasp);

SetViewPort(CenterX,CenterY,GetMaxX,GetMaxY,False); SetColor(Yellow);

Rectangle(Left,Top,Right,Bottom); SetColor(LightMagenta);

Truc;

SetColor(White); Tcdung;

Tcngang; i:=Left+10;

While i<Right-10 Do Begin

x:=i/30; mx:=round(i);

If abs(c*x+d)>0.0001 Then y:=(a*x + b)/(c*x +d); my:=-ad(round(y*20));

If abs(my) <Bottom-10 Then PutPixel(mx,my,Lightred); i:=i+1/15;

(31)

OutTextxy(-220,Top-9,'DO THI HAM PHAN SO BAC NHAT Y = ( Ax + B )/( Cx + D )');

OutTextxy(-100,Bottom+4,'ENTER tiep tuc,ESC ngung'); Chon:=Readkey;

Until Upcase(chon)=#27; CloseGraph;

END

PROGRAM DO_THI_HAM_PHAN_THUC_BAC_HAI_TREN_BAC_NHAT; Uses Crt,Graph;

Var mx,my:Longint; x,y,i,a,b,c,d,e:real;

CenterX,CenterY,XAsp,YAsp:word; Top,Bottom,Left,Right:integer; Chon:Char;

Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Function Ad(value:Integer):Integer; Begin

Ad:= (Value * XAsp) div YAsp; End;

Procedure WriteXY (x,y:integer;S:String); Begin

Gotoxy (x,y); Write(S); End;

Procedure Nhap; Begin

Clrscr;

Writexy(7,3,'CHUONG TRINH VE DO THI HAM PHAN THUC BAC HAI TREN BAC NHAT');

Writexy(28,6,'Ax^2 + Bx + C '); Writexy(23,7,'Y = ');

Writexy(27,7,' -'); Writexy(31,8,'Dx + E ');

(32)

Writexy(30,15,'HE SO B:'); Writexy(52,15,'HE SO C:'); Writexy(20,19,'HE SO D:'); Writexy(40,19,'HE SO E:'); Gotoxy(18,15); Readln(a); Gotoxy(40,15); Readln(b); Gotoxy(62,15); Readln(c); Gotoxy(30,19); Readln(d); Gotoxy(50,19); Readln(e); End;

Procedure Truc; Begin

Line (0,Top+5,0,Bottom-5); Line (Left+5,0,Right-5,0); OuttextXY(5,5,'O');

OuttextXY(-3,Top+3,'^ y'); OuttextXY(Right-10,-3,'>'); OuttextXY(Right-10,5,'x'); OuttextXY(Left+5,-3,'<'); OuttextXY(Left+5,5,'-x');

OuttextXY(-3,Bottom-10,'V -y'); End;

Procedure Tcdung; Var mx:integer; Begin

mx:=round(-e/d*30);

Line(mx,Top+10,mx,Bottom-10); End;

Procedure Tcxien; Var mx,my:integer; i,x,y: real;

Begin

i:=Left+10; x:=i/30;

mx:=Round(i);

y:=(a/d*x)+(b*d-a*e)/(d*d); my:=-ad(round(y*20)); MoveTo(mx,my); While i<Right-10 Do Begin

x:=i/30; mx:=round(i);

y:=(a/d*x)+(b*d-a*e)/(d*d); my:=-ad(round(y*20)); If abs(my) <Bottom-10 Then

PutPixel(mx,my,White); i:=i+1/15;

End; End;

(33)

If GraphResult <> GrOk then Halt(1); CenterX:=GetMaxX div 2;

CenterY:=GetMaxY div 2; Top:=-GetMaxY div 2+10; Bottom:=GetMaxY div 2-10; Left:=-GetMaxX div 2+10; Right:=GetMaxX div 2-10; Repeat

RestoreCrtMode; Nhap;

SetGraphMode(GetGraphMode); SetBkColor(Blue);

GetAspectRatio(XAsp,Yasp);

SetViewPort(CenterX,CenterY,GetMaxX,GetMaxY,False); SetColor(Yellow);

Rectangle(Left,Top,Right,Bottom); SetColor(LightMagenta);

Truc;

SetColor(White); Tcdung;

Tcxien; i:=Left+10;

While i<Right-10 Do Begin

x:=i/30; mx:=round(i);

If abs(d*x+e)>0.0001 Then y:=(a*x*x+b*x+c)/(d*x+e); my:=-ad(round(y*20));

If abs(my)<Bottom-10 Then PutPixel(mx,my,Lightred); i:=i+1/15;

End;

OutTextxy(-300,Top-9,'DO THI HAM PHAN SO BAC HAI TREN BAC NHAT Y = ( Ax ^ + Bx + C )/( Dx + E )');

OutTextxy(-100,Bottom+4,'ENTER tiep tuc,ESC ngung'); Chon:=Readkey;

Until Upcase(chon)=#27; CloseGraph;

END.

CHƯƠNG : TÌM NGHIỆM HỮU TỶ CỦA ĐA THỨC A NHẮC LẠI MỘT SỐ KẾT QUẢ VỀ TÍNH ĐA THỨC

I Đặc vấn đề

II Nghiệm đa thức

III Nghiệm hữu tỷ đa thức

(34)

I Ý tưởng giải thuật chương trình II Xây dựng chương trình

III Chương trình cụ thể

A NHẮC LẠI MỘT SỐ KẾT QUẢ VỀ TÍNH ÐA THỨC

I Ðặt vấn đề TOP

II Nghiệm đa thức TOP

(35)

B XÂY DỰNG CHƯƠNG TRÌNH TÌM NGHIỆM CỦA ÐA THỨC BẬC N

(36)

II Xây dựng chương trình TOP Khai báo kiểu: Dựa vào bước giải thuật ta thấy cần khai báo sau:

Ðịnh nghĩa kiểu số hữu tỷ:

(37)

Type HuuTy = Record

Ts : Integer; Ms : Integer; End;

Ta định nghĩa số hữu tỷ Record gồm có trường có kiểu số nguyên ( Integer ) Ts (Tử số) Ms (Mẫu số)

Ðịnh nghĩa kiểu Mang array gồm phần tử có kiểu số nguyên để sử dụng chương trình

Type Mang : Array [ 50 ] of Integer; 2 Khai báo biến:

Tóm lại, ta có phần khai báo đầu chương trình sau: Uses Crt; { Sử dụng Unit hình }

Type HuuTy = Record

Ts : Integer; Ms : Integer; End;

Mang : Array [ 50 ] of Integer; Var r: HuuTy;

n,i,j,k,Number1,Number2 : Integer; a,t,m : Mang;

Bien1, Bien2 : Boolean; Kq : array [ 30 ] of HuuTy; Các thủ tục hàm sử dụng chương trình:  Procedure Nhap ( Var r : HuuTy );

Chức năng: Thủ tục cho phép nhập vào số dạng hữu tỷ  Procedure Viet ( r : HuuTy );

Chức năng: Thủ tục cho phép trình bày ( viết ) hình số dạng hữu tỷ  Procedure Us ( n: integer; Var b : mang; Var so: integer );

Chức năng: Thủ tục tìm ước số số nguyên n, lưu giá trị vào mảng b, số ước số vào biến so

 Function Usln ( n, m: integer) : integer;

(38)

 Procedure ToiGian (r1 : HuuTy; Var r : HuuTy );

Chức năng: Thủ tục cho phép tối giản hóa số hửu tỷ cách chia tử mẫu số cho ước số chung lớn chúng

 Function Bang ( r1, r2 : HuuTy ): Boolean;

Chức năng: Hàm so sánh số hữu tỷ r1 r2 Trả giá trị true r1 = r2 false ngược lại  Procedure Cong (r1,r2 : HuuTy; Var r : HuuTy );

Chức năng: Thủ tục thực phép cộng số hữu tỷ r1, r2 lưu kết vào số hữu tỷ r  Procedure Tru (r1,r2 : HuuTy; Var r : HuuTy );

Chức năng: Thủ tục thực phép trừ số hữu tỷ r1, r2 lưu kết vào số hữu tỷ r  Procedure Nhan (r1,r2 : HuuTy; Var r : HuuTy );

Chức năng: Thủ tục thực phép nhân số hữu tỷ r1, r2 lưu kết vào số hữu tỷ r  Procedure Chia (r1,r2 : HuuTy; Var r : HuuTy );

Chức năng: Thủ tục thực phép chia số hữu tỷ r1, r2 lưu kết vào số hữu tỷ r  Procedure LuyThua ( n : integer,r1 : HuuTy; Var r : HuuTy );

Chức năng: Thủ tục thực phép lũy thừa bậc n số hữu tỷ r1 lưu kết vào số hữu tỷ r

 Procedure Doi (r1 : HuuTy; Var r : HuuTy );

Chức năng: Thủ tục cho phép lấy số hữu tỷ số hữu tỷ cho  Procedure Doi_So_Nguyen ( n:integer; Var r : HuuTy );

Chức năng: Thủ tục cho phép đổi số nguyên n thành số hửu tỷ r  Function Thu ( r : HuuTy; n:integer; a:Mang ): Boolean;

Chức năng: Hàm có chức kiểm tra xem số hữu tỷ r có phải nghiệm hữu tỷ đa thức không ? Nếu trả true cho kết hàm false ngược lại

III Chương trình cụ thể TOP

Uses Crt;

Type HuuTy=Record ts:Integer; ms:Integer; End;

(39)

Var r:HuuTy;

n,i,j,k,number1,number2:Integer; a,t,m:mang;

bien1,bien2:boolean; Kq:Array[1 30] of HuuTy; Ch:Char;

Procedure Nhap(var r:HuuTy); Begin

Write('Nhap tu so :');readln(r.ts); Write('Nhap mau so :');readln(r.ms); Writeln;

End;

Procedure Viet(r:HuuTy); Begin

If (r.ms<0) Then Begin

r.ts:=-r.ts; r.ms:=-r.ms; End;

If (r.ms=1) Then Write(r.ts) Else

Write('(',r.ts,'/',r.ms,')'); End;

Procedure Usc(n:Integer;Var b:Mang;Var so:Integer); Var i,j:Integer;

Begin n:=abs(n); j:=0;

For i:=1 to n Do If (n mod i)=0 Then Begin

j:=j+1; b[j]:=i; j:=j+1; b[j]:=-i; End; so:=j; End;

Function Usln(n,m:Integer):Integer; Begin

n:=abs(n); m:=abs(m);

If (n=0) or (m=0) Then Exit;

Repeat

If n>m Then Begin

n:=n Mod m; Usln:=m; End

(40)

Begin

m:=m Mod n; Usln:=n; End;

Until (n=0) or (m=0); End;

Procedure ToiGian(r1:HuuTy;Var r:HuuTy); Var Tam:Integer;

Begin

Tam:=Usln(r1.ts,r1.ms); r.ts:=Round(r1.ts/Tam); r.ms:=Round(r1.ms/Tam); End;

Function Bang(r1,r2:HuuTy):boolean; Var Tam1,Tam2:HuuTy;

Begin

ToiGian(r1,Tam1); ToiGian(r2,Tam2);

If ((Tam1.ms=Tam2.ms) And (Tam1.ts=Tam2.ts)) Or ((Tam1.ms=-Tam2.ms) And (Tam1.ts=-Tam2.ts)) Then Bang:=True

Else

Bang:=False; End;

Procedure Cong(r1,r2:HuuTy;Var r:HuuTy); Begin

r.ts:=r1.ms*r2.ts+r2.ms*r1.ts; r.ms:=r1.ms*r2.ms;

End;

Procedure Tru(r1,r2:HuuTy;Var r:HuuTy); Begin

r.ts:=r1.ts*r2.ms-r2.ts*r1.ms; r.ms:=r1.ms*r2.ms;

End;

Procedure Nhan(r1,r2:HuuTy;Var r:HuuTy); Begin

r.ts:=r1.ts*r2.ts; r.ms:=r1.ms*r2.ms; End;

Procedure Doi(r1:HuuTy;Var r:HuuTy); Begin

r.ts:=-r1.ts; r.ms:=r1.ms; End;

Procedure Doi_So_Nguyen(n:Integer;Var r:HuuTy); Begin

r.ts:=n; r.ms:=1; End;

(41)

r.ts:=r1.ts*r2.ms; r.ms:=r1.ms*r2.ts; End;

Procedure LuyThua(n:Integer;r1:HuuTy;Var r:HuuTy); Var i:Integer;

Begin r.ts:=1; r.ms:=1; If n>0 Then For i:=1 to n Do Begin

r.ts:=r.ts*r1.ts; r.ms:=r.ms*r1.ms; End;

End;

Function Thu(r:HuuTy;n:Integer;a:Mang):Boolean; Var r1,r2,r3,Tam1,Tam2:HuuTy;

i,j:Integer; Begin

Tam1.ts:=0; Tam1.ms:=1; For i:=n Downto Do Begin

LuyThua(i,r,r1);

Doi_So_Nguyen(a[i],r2); Nhan(r1,r2,r3);

Cong(r3,Tam1,Tam2); Tam1:=Tam2;

End;

If Tam2.ts=0 Then Thu:=True Else

Thu:=False; End;

BEGIN {Chương trình chính} Repeat

Clrscr;

Writeln('CHUONG TRINH TIM NGHIEM HUU TY CUA DA THUC BAC n'); Writeln(' *************** ');

Writeln;

Write('Nhap bac cua da thuc n=');Readln(n); Writeln('Nhap cac he so da thuc:');

For i:=n DownTo Do Begin

Write(' Nhap he so a[',i,']='); Readln(a[i]);

end;

Writeln('Ta co da thuc :');write('P(x)='); For i:=n DownTo Do

Write(a[i],'*x^',i,' + '); Writeln(a[0]);

(42)

Usc(a[0],t,Number1); Usc(a[n],m,Number2); k:=0;

For i:=1 to Number1 Do For j:=1 to Number2 Do Begin

r.ts:=t[i]; r.ms:=m[j]; If Thu(r,n,a) Then Begin

k:=k+1; Kq[k]:=r; End; End; Bien2:=False; For i:=1 to k Do Begin

Bien1:=True; For j:=1 to i-1 Do

If Bang(Kq[i],Kq[j]) Then Bien1:=False;

If Bien1 Then Begin

ToiGian(Kq[i],Kq[i]); Viet(Kq[i]);

Writeln(' La nghiem cua da thuc da cho'); End;

Bien2:=True; End;

If Not(Bien2) Then

Writeln('Phuong trinh khong tim duoc nghiem huu ty !'); Write(' Tiep tuc hay khong (C/K)');Readln(ch);

Until Upcase(ch)='K'; END

CHƯƠNG : MỘT SỐ THỦ THUÂT CƠ BẢN

DÙNG TRONG LẬP TRÌNH DẠY HỌC I CÁCH LÀM MENU ĐƠN GIẢN

1 Phương pháp

2 Ví dụ chương trình tạo menu

II CÁC THỦ THUẬT LÀM HÌNH CHUYỂN ĐỘNG III UNIT TỰ THIẾT LẬP

(43)

2 Các bước thiết kế Unit Biên dịch Unit

I CÁCH LÀM MENU ĐƠN GIẢN

1.Phương pháp: TOP

Trong chương trình có độ phức tạp cao, cần thực nhiều công việc độc lập nhau, người sử dụng lựa chọn công việc để thực Trước địi hỏi người lập trình phải tạo bảng menu để lựa chọn công việc

Việc tạo bảng menu quy mô, đẹp, khoa học vấn đề phức tạp Nếu mô phỏng giảng dạy, nghĩa ta cần đến hình ảnh minh họa cho giảng dùng hệ thống menu theo số tiện cho người sử dụng Cụ thể hình lên chữ nhật, có đánh số tên đoạn chương trình Người sử dụng cần bấm số bàn phím đoạn chương trình mong muốn Nội dung chương trình có dạng tổng quát sau:

{ Các thủ tục chương trình } BEGIN { Chương trình } EnterGraph(C:\BP\BGI');

Menu; Repeat

a:= Readkey; Case a of

'1' : Begin

{ Gọi thủ tục cần thiết } Menu;

End; '2' : Begin

ClearDevice;

{ Gọi thủ tục cần thiết } Menu;

End;

Until a = 'n';

CloseGraph; END

Các số '1', '2', hộp thoại chứa nội dung đoạn chương trình, người sử dụng tự chọn bấm số để thực đoạn chương trình

Chỉ số n hộp thoại cuối dùng để chương trình nguồn Menu thủ tục tạo menu hình

Ví dụ chương trình tạo menu: TOP Program Menu;

Uses Crt,Graph;

Var x1,y1,dem: Integer; a,a1: Char;

Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

(44)

Initgraph(Gd,Gm,Path); Gr:=GraphResult; If Gr<>GrOk Then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

Procedure Khung (xd,yd,d,m:integer); Begin

Dem:=1;

x1:= GetMaxX div -Round(xd/2); y1:= GetMaxY div 2-yd;

Repeat

SetFillStyle(1,4);

Bar(x1,y1,x1+xd,y1+yd); SetColor(14);

Rectangle(x1,y1,x1+xd,y1+yd); y1:=y1-(yd+d); dem:=dem+1; Until Dem > m;

End;

Procedure mem (yd:Integer); Begin

Khung(250,25,5,4); y1:=GetMaxY div 2-yd;

SetColor(15); SetTextStyle(0,0,1); OuttextXY(x1+70,y1+8,'4:Thoat_Exit'); OuttextXY(x1+90,y1-yd+4,'3:Bai3'); OuttextXY(x1+90,y1-2*yd+2,'2:Bai2'); OuttextXY(x1+90,y1-3*yd-2,'1:Bai1'); End;

Procedure Khung1 (xd,yd,d,m:integer); Var x0,y2:Integer;

Begin

Dem:=1; x0:=50; x1:=x0; y1:=0; y2:=yd;

SetFillStyle(1,4); SetColor(14); Repeat

Bar(x1,y1,x1+xd,y2);

Rectangle(x1,y1,x1+xd,y1+yd); x1:=x1+(xd+d); dem:=dem+1; Until Dem > m;

End;

Procedure mem1 (d:Integer); Var x0,xd:Integer;

Begin

Khung1(120,25,4,4); xd:=120; x0:=10;

(45)

OuttextXY(x0+2*xd+3*d+3,y1+10,'3:Bai3'); OuttextXY(x0+3*xd+3*d-5,y1+10,'4:Thoat_Exit'); End;

BEGIN { Chương trình } EnterGraph('C:\BP\BGI');

mem(25); Repeat

a:=Readkey; Case a of '1': Begin

Outtext('bai1'); mem(25); End; '2': Begin

Outtext('bai2'); mem(25); End; '3': Begin

Outtext('bai3'); mem(25); End; End;

Until a= '4'; ClearDevice; mem1(25); Repeat

a1:=Readkey; Case a1 of '1': Begin

Outtext('bai1'); mem1(25); End;

'2': Begin

Outtext('bai2'); mem1(25); End;

'3': Begin

Outtext('bai3'); mem1(25); End;

End;

Until a1='4'; CloseGraph; END

II CÁC THỦ TỤC LÀM HÌNH CHUYỂN ĐỘNG TOP

1 Giới thiệu:

Ða số chương trình mơ dùng để biểu diễn hình ảnh, tượng, mơ hình hay chuyển đổi cần phải làm cho hình ảnh chuyển động biến đổi Ta tìm hiểu cách làm hình ảnh chuyển động thủ thuật vẽ - xóa, thủ thuật lật trang thủ thuật cắt dán.

(46)

Bước 1: Dùng lệnh Pascal để vẽ hình vị trí cố định. Bước 2: Lưu hình lệnh Delay

Bước 3: Xóa hình vẽ cách vẽ lại hình bước với màu vẽ màu tô màu

Bước 4: Di chuyển tọa độ hình vẽ Ðặt bước từ đến vòng lặp

Thủ thuật tương đối đơn giản hình chuyển động khơng mịn, bị nháy hình phức tạp có chữ viết

Ví dụ: Chương trình vẽ bng bật đất Program Qua_Bong;

Uses Crt,Graph; Var x,y,t,d,r: Integer;

Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; if Gr<>GrOk then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1);

End; End;

BEGIN { Chương trình } x:=350; r:=40;d:=10;

EnterGraph('C:\BP\BGI');

SetColor(Brown); SetFillStyle(5,Brown); Bar(200,100,500,125);

Repeat t:=0; Repeat y:=t*t+30;

SetFillStyle(1,13); FillEllipse(x,y,r,r); Delay(d);

SetColor(0); SetFillStyle(1,0); FillEllipse(x,y,r,r); t:=t+1; Until t>=25;

t:=25; y:= t*t+30; Repeat

SetFillStyle(1,13); FillEllipse(x,y,r,r); Delay(d);

SetColor(0); SetFillStyle(1,0); FillEllipse(x,y,r,r); t:=t-1; y:=t*t+30;

Until t<=0; Until KeyPressed; CloseGraph; END

3 Thủ thuật lật trang

(47)

Với card hình nhân đồ họa cho phép ta chọn trang để vẽ ( ActivePage ) trang để xem ( VisualPage ) Nghĩa xem trang trang vẽ Vì thế, người xem không thấy ảnh lúc vẽ mà thấy ảnh kết Sau trang hốn chuyển liên tục Phương pháp bao gồm bước sau:

Bước 1: Khởi tạo biến có kiểu Word Active Visual Thiết lập Active = 0, Visual = Bước 2: Thực lệnh vẽ trang làm việc xem trang xem

SetActivePage ( Active ) SetVisualPage ( Visual )

Bước 3:Xóa hình cũ vẽ hình trang vẽ

Bước 4: Hốn chuyển vai trị Active Visual cho quay trở lại bước Ví dụ: Viết chương trình vẽ thay đổi mặt người lúc cười, lúc khóc

Program Mat_Nguoi; Uses Crt,Graph; Var

Gd,Gm,CenterX,CenterY:Integer; Active,Visual:Word;

Cuoi:Boolean; Procedure SetGraph; Begin

Gd:=Detect;

InitGraph(Gd,Gm,'C:\BP\BGI');

If not (gd IN [EGA,HercMono,VGA]) then Begin

RestoreCrtMode;

Writeln('Loi:Can man hinh nhieu trang'); Readln;

Halt(1); End;

CenterX:=GetMaxX div 2; CenterY:=GetMaxY div 2; Active:=0;

Visual:=1; Cuoi:=True; End;

Procedure Paint; Begin

SetFillStyle(SolidFill,LightMagenta); SetBkColor(Blue);

SetColor(Red);

FillEllipse(CenterX,CenterY,70,85); { Ve Khuon mat } SetColor(Black);

SetFillStyle(SolidFill,Black);

FillEllipse(CenterX-25,CenterY-30,10,3); { Ve hai mat } FillEllipse(CenterX+25,CenterY-30,10,3);

Ellipse(CenterX,CenterY-5,180,360,8,3); { Ve mui } If Cuoi Then

Begin

Arc(CenterX,CenterY,220,320,50); { Mieng cuoi } Cuoi:=False;

(48)

Begin

Arc(CenterX,CenterY+40,40,140,30); { Mieng Khoc } Cuoi:=True;

End; End;

Procedure Swap(Var a:Word;Var b:Word); Var Temp:Word;

Begin Temp:=a; a:=b; b:=Temp; End;

BEGIN { Chương trình } SetGraph;

While Not KeyPressed Begin

SetActivePage(Active); { Dat trang ve } SetVisualPage(Visual); { Dat trang xem } Paint; { Thuc hien viec ve hinh } Delay(1000); { Dung de xem }

Swap(Active,Visual); { Doi vai tro bien Active End; va Visual cho }

CloseGraph; END

4 Thủ thuật cắt - dán III UNIT TỰ THIẾT LẬP

Khái niệm: TOP

Trong trình lập trình người ta nhận thấy có nhiều hàm thủ tục giống nhau dùng cho nhiều chương trình khác nhau, chương trình lập cho lĩnh vực chun mơn ( hình học, giải tích, đại số, ) Có thể gộp thủ tục hàm giúp cho người lập trình sử dụng giống hàm thủ tục thư viện lĩnh vực chuyên môn Các thư viện chương trình tự thiết lập gọi Unit tự thiết lập

Các bước thiết kế Unit TOP

Phần khai báo: Unit không tự chạy chương trình khác Pascal nên phải khai báo Unit tên Unit để sau lấy tên khai báo chương trình Máy phân biệt Unit chương trình

Phần giao tiếp ( Interface ): Phần chứa khai báo chương trình tất hàm, thủ tục ( tên biến ) cần cho chương trình mẹ Unit khác

Phần cài đặt ( Implementation ) : Chứa khai báo phần giao tiếp bao gồm nội dung hàm thủ tục khai báo

Phần khởi tạo : Phần chứa câu lệnh chương trình Ta bỏ qua phần Lưu ý :

Tên thủ tục, hàm khai báo phần 2, biến nằm chúng phải giống hệt nhau.

Kết thúc phần phải END

Dạng chương trình tổng quát Unit sau: Unit TenUnit;

Interface

(49)

Khai báo Const, Type, Var ( cần ) Khai báo hàm, thủ tục biến bên mà chúng cài đặt

Implementation

Viết đầy đủ nội dung hàm thủ tục khai báo End

BEGIN { Có thể khơng cần } Các lệnh khởi tạo

END

Biên dịch Unit

TOP Các Unit vừa viết dạng *.PAS chưa sử dụng Muốn dùng cho tất chương trình cần phải biên dịch Unit vào đĩa Nghĩa đưa Unit dạng *.TPU

Ta thực sau:

Ðưa Unit dạng *.Pas vào đĩa

Gọi Pascal cho Unit lên hình

Ðưa trỏ đến hộp thoại Compile, chuyển Destination từ Memory thành Disk Bấm Alt - F9 máy tự động chuyển Unit sang dạng *.TPU

Sau hồn thành cơng việc ta sử dụng Unit cách khai báo tên vào mục Uses Ví dụ: Thiết lập Unit chuyển đổi hệ trục tọa độ

UNIT TOA_DO;

{ -} INTERFACE

USES Graph;

{1} PROCEDURE Doi_truc;

{2} PROCEDURE Putpixel_1(x,y:Integer;Color:Word); {3} PROCEDURE Moveto_1(x,y:Integer);

{4} PROCEDURE Line_1(x1,y1,x2,y2:Integer); {5} PROCEDURE LineTo_1(x,y:Integer);

{6} PROCEDURE OutTextXY_1(x,y:Integer;TextString:String); {7} FUNCTION GetPixel_1(x,y:Integer):Word;

{8} PROCEDURE Circle_1(x,y:Integer;Radius:Word);

{9} PROCEDURE Arc_1(x,y:Integer;StAngle,EndAngle,Radius:Word); {10} PROCEDURE PieSlice_1(x,y:Integer;StAngle,EndAngle,Radius:Word); {11} PROCEDURE Ellipse_1(x,y:Integer;StAngle,

EndAngle:Word;XRadius,YRadius:Word);

{12} PROCEDURE FillEllipse_1(x,y:Integer;XRadius,YRadius:Word); {13} PROCEDURE Rectangle_1(x1,y1,x2,y2:Integer);

{14} PROCEDURE Bar_1(x1,y1,x2,y2:Integer);

{15} PROCEDURE Bar3D_1(x1,y1,x2,y2:Integer;Depth:Word;Top:Boolean); { -}

IMPLEMENTATION

{1} PROCEDURE Doi_truc; Begin

SetViewPort(GetMaxX Div 2,GetMaxY Div 2,GetMaxX,GetMaxY,ClipOff); End;

{2} PROCEDURE Putpixel_1(x,y:Integer;Color:Word); Begin

PutPixel(x,-y,Color); End;

(50)

Begin

MoveTo(x,-y); End;

{4} PROCEDURE Line_1(x1,y1,x2,y2:Integer); Begin

Line(x1,-y1,x2,-y2); End;

{5} PROCEDURE LineTo_1(x,y:Integer); Begin

LineTo(x,-y); End;

{6} PROCEDURE OutTextXY_1(x,y:Integer;TextString:String); Begin

OutTextXY(x,-y,TextString); End; {7} FUNCTION GetPixel_1(x,y:Integer):Word; Begin

GetPixel_1:=GetPixel(x,-y); End;

{8} PROCEDURE Circle_1(x,y:Integer;Radius:Word); Begin

Circle(x,-y,Radius); End;

{9} PROCEDURE Arc_1(x,y:Integer;StAngle,EndAngle,Radius:Word); Begin

Arc(x,-y,StAngle,EndAngle,Radius); End;

{10} PROCEDURE PieSlice_1(x,y:Integer;StAngle, EndAngle,Radius:Word); Begin

PieSlice(x,-y,StAngle,EndAngle,Radius); End;

{11} PROCEDURE Ellipse_1(x,y:Integer;StAngle,

EndAngle:Word;XRadius,YRadius:Word); Begin

Ellipse(x,-y,StAngle,EndAngle,XRadius,YRadius); End;

{12} PROCEDURE FillEllipse_1(x,y:Integer;XRadius,YRadius:Word); Begin

FillEllipse(x,-y,XRadius,YRadius); End;

{13} PROCEDURE Rectangle_1(x1,y1,x2,y2:Integer); Begin

Rectangle(x1,-y1,x2,-y2); End;

{14} PROCEDURE Bar_1(x1,y1,x2,y2:Integer); Begin

Bar(x1,-y1,x2,-y2); End;

{15} PROCEDURE Bar3D_1(x1,y1,x2,y2:Integer; Depth:Word;Top:Boolean); Begin

(51)

END

CHƯƠNG TRÌNH MINH HỌA VIỆC DÙNG UNIT TOA_DO Program Vidu;

Uses Toa_do,Graph;

Var MaxX,MaxY,MaxColor:Word; St:String;

Procedure EnterGraph (Path:String); Var Gd,Gm,Gr: Integer;

Begin

DetectGraph(Gd,Gm); Initgraph(Gd,Gm,Path); Gr:=GraphResult; if Gr<>GrOk then Begin

Writeln('Loi khoi tao hoa:',GraphErrorMsg(Gr)); Halt(1); End;

End;

BEGIN {Chương trình chính} EnterGraph('C:\BP\BGI');

MaxX:=GetMaxX; MaxY:=GetMaxY; Doi_Truc; { Doi truc toa }

Line_1(-MaxX Div 2,0,MaxX Div 2,0); { Ve Truc hoanh } OutTextXY_1(MaxX Div 2-10,-5,'x');

Line_1(0,-MaxY Div 2,0,MaxY Div 2); { Ve Truc tung } OutTextXY_1(5,MaxY Div 2-5,'y');

OutTextXY_1(3,-3,'O'); { Ghi goc toa } { Ghi ro cac phan tu truc toa }

OutTextXY_1(20,30,'Goc I'); OutTextXY_1(-60,30,'Goc II'); OutTextXY_1(-60,-30,'Goc III'); OutTextXY_1(20,-30,'Goc IV');

PutPixel_1(10,50,Red); { Ve diem tai toa (10,50) mau } Str(GetPixel_1(10,50),St); { Lay mau tai diem (10,50) } OutTextXY_1(20,50,'Mau cua diem la '+St);

Circle_1(-100,100,50); { Ve duong tron } SetColor(13);

Ellipse_1(-250,100,0,360,60,35); { Ve duong Ellipse } SetFillStyle(XHatchFill,Green);

FillEllipse_1(-250,-100,60,35); { Ve hinh Ellipse } Rectangle_1(-300,-150,-200,-200);{ Ve hinh chu nhat } SetFillStyle(SolidFill,Blue);

Bar_1(-120,-100,-50,-200); { Ve hinh chu nhat dac } Bar3D_1(10,-100,80,-200,20,True);{ Ve Khoi chu nhat } MoveTo_1(120,-200); { Doi tro den (120,-200) } LineTo_1(200,-50); { Tu vi tri tro ve dt den (200,-50) } Arc_1(200,-150,60,120,50); { Ve cung tron }

PieSlice_1(200,-150,0,60,50); { Ve hinh quat } Readln;

ĐƯA TIN HỌC VÀO TRƯỜNG PHỔ THÔNG SỬ DỤNG MÁY TÍNH ĐIỆN TỬ NHƯ CÔNG CỤ DẠY HỌC Sử dụng máy tính điện tử cơng cụ dạy học Phát triển tư thuật toán cho học sinh TOP Lệnh cấu trúc rẽ nhánh Lệnh cấu trúc lựa chọn Lệnh vòng lặp Chương trình Vẽ số hình Vẽ đồ thị hàm số TOP Đặc vấn đề Nghiệm đa thức Nghiệm hữu tỷ đa thức Ý tưởng giải thuật chương trình Xây dựng chương trình Chương trình cụ thể TOP Ví dụ chương trình tạo menu Khái niệm TOP

Ngày đăng: 05/03/2021, 23:31

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

  • Đang cập nhật ...

Tài liệu liên quan