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