Hướng dẫn lập trình pascal

32 17 0
  • Loading ...
1/32 trang

Thông tin tài liệu

Ngày đăng: 26/11/2018, 21:06

Hướng dẫn lập trình Pascal - Từ tới nâng cao Pascal ngôn ngữ lập trình cấp cao sớm xuất phần thể ưu điểm việc ứng dụng để giải tốn máy tính Thêm Pascal đưa vào nhiều trường học để giảng dạy lập trình tính gần gũi khoa học cú pháp Ở đầu làm quen với công cụ để lập trình Pascal làm lập trình nhỏ Cơng cụ sử dụng Turbo Pascal 7.0 bạn tải theo link dưới, cài đặt sau vào thư mục TurboPascal-7.0\BIN chạy file (click đúp) TPX có hình chữ MS DOS viết cách điệu (thực có file TPX file xài có file icon nhấn vào ảnh nhỏ thơi ) Màn hình sau Sử dụng sau: - Kiểm tra lỗi: F9 - Chạy chương trình Ctrl+F9 - Lưu lại chương trình F2 - Mở chương trình có F3 - Thốt khỏi Turbo Pascal Alt + X Hoặc sử dụng Menu cần bạn biết chút tiếng Anh Chương trình đầu tiên: Code: PROGRAM Hello; VAR x,y:integer; BEGIN WRITE('Chao mung cac ban den voi chuong trinh cua tui'); READLN END Phân tích chương trình: Một chương trình bao gồm phần: Phần 1: Khai báo Program Hello; Với Program từ khóa Hello tên chương trình var bien: kieu_bien Khai báo tất biến dùng chương trình // Phần sau nói rõ Phần 2: Thân chương trình Nằm cụm “begin … end.” Chú ý sau end phải có dấu “.” Sau lệnh phải có dấu “;” // Phần sau nói rõ Với ví dụ nhấn F9 báo khơng có lỗi nhấn Ctrl+F9 hình đen ngòm với dòng chữ Chao mung cac ban den voi chuong trinh cua tui Thế bạn nghĩ công nghệ cần tiếp cận sao, tắt đón đầu, copy chép chế lại Khơng có bạn chẳng thể làm được, Pascal tạo tảng cho bạn, người lập trình liệu có hiểu chất lệnh i=i+1; hay nhìn i:=1+1; người ta dễ nhớ phép gán Tiếp theo tìm hiểu thêm ví dụ nhỏ nữa: Nhập vào số in bình phương nó: Code: Program square; var x:real; {x la bien thuc} begin write(‘Nhap vao so thuc x= ‘);{Yeu cau nhap so} read(x); write(‘Binh phuong cua so la: ‘);{in binh phuong cua so do} write(‘x*x:5:0′) end Ở lưu ý {} comment tức giải thích cho lệnh viết để người khác hiểu sau xem lại dễ Các lời giải thích khơng có giá trị ta chạy chương trình tức khơng ảnh hưởng tới nội dung chương trình muốn thực thi Sau bạn code lại nhấn F9 báo khơng có lỗi nhấn Ctrl+F9 có yêu cầu nhập gõ số thực vào nhấn Enter để xem kết Vào liệu: Dữ liệu vào tức mà ta đưa vào với mục đích để thu kết mong muốn, nói cho dễ hiểu thóc ta đưa vào máy để thu gạo Dữ liệu vào nhập từ bàn phím, từ file máy tính … Dữ liệu ta mong muốn thu gạo Vào liệu Pascal Đưa liệu: write(‘x1, x2…’);{hiện xâu x1, x2…} writeln(‘x1, x2…’);{đi ln thể ghi xong xuống dòng} write(x1,x2 );{ghi giá trị biến x1, x2} write(x1:m);{viết giá trị số nguyên x1 vào m chỗ tính từ bên phải} write(x1:m:n);{viết giá trị số thực x1 vào m chỗ tính từ bên phải có n chữ số phần thập phân} Vào liệu (từ bàn phím): read(x1,x2, ); {nhập giá trị cho biến x1, x2…} readln(x1,x2, );{nhập giá trị cho biến x1, x2… sau bạn phải nhấn Enter để chương trình tiếp tục, thực chất cách để tạm dừng chương trình sau người dùng nhập đầu vào cho chương trình để họ có thời gian đưa xem xét đưa thao tác tiếp theo} Tiếp theo làm quen với phép toán hàm Pascal: Ở ta giới thiệu cách ký hiệu phép toán Pascal ngơn ngữ lập trình cần phải tn thủ theo quy định chung máy đọc hiểu muốn làm Các phép toán + Cộng - Trừ * Nhân / Chia cho kết số thực DIV Chia lấy phần nguyên Ví dụ (2 div 3) =1 MOD Chia lấy phần dư Ví dụ (4 mod 3) =3 < > khác = > lớn < nhỏ > = lớn < = nhỏ Các hàm toán học ABS (x) |x| : lấy giá trị tuyệt đối số x SQR (x) x2 : lấy bình phương trị số x SQRT(x) : láúy càn báûc cuía trë säú x SIN(x) sin (x) : lấy sin x COS (x) cos (x) : lấy cos x ARCTAN (x) arctang (x) LN (x) ln x : lấy logarit nepe trị x (e ( 2.71828) EXP (x) e^x TRUNC (x) lấy phần nguyên lớn không vượt trị số x ROUND (x) làm tròn giá trị x, lấy số ngun gần x Ví dụ lập trình tính tốn Tính chu vi, diện tích hình chữ nhật Code: PROGRAM Hinh_chu_nhat; Var a, b, S, P : Real ; Begin Write( ‘Nhap chieu dai : ‘); Readln(a); Write( ‘Nhap chieu rong : ‘); Readln(b); S:=a*b; P:=2* (a+b); Writeln (‘ Dien tich = ‘, S:8:2); Writeln (‘ Chu vi = ‘, P:8:2); Readln; End Lệnh rẽ nhánh lệnh ghép: if…then, if…then…else if A then B : A thực B A sai khơng thực B if A then B else C: A thực B A sai thực C Áp dụng vào ví dụ sau: Code: Program Phuong_trinh_bac_2; var a, b, c, x1, x2, delta : real; begin Write(‘Chuong trinh giai phuong trinh bac hai’); Write(‘a = ‘); Readln(a); Write(‘b = ‘); Readln(b); Write(‘c = ‘); Readln(c); delta := b * b – * a * c; if delta < then begin Write(‘Phuong trinh vo nghiem’); end; if delta = then begin Write(‘Phuong trinh co nghiem kep: x1 = x2 = ‘, -b/(2 * a)); end; if delta > then begin x1 := (-b – SQRT(delta))/(2 * a); x2 := (-b + SQRT(delta))/(2 * a); Writeln(‘Phuong trinh co nghiem kep:’) Writeln(‘x1 = ‘, x1); Writeln(‘x2 = ‘, x2); end; end Lệnh Case … of: Liệt kê nhiều câu lệnh kiểu rời rạc, tương đương với nhiều lệnh if (nếu lệnh if xài if cho xong) Cơng thức (cấu trúc lệnh): case (biểu thức biến chọn) of giá_tri1: lênh1; giá_tri2: lênh2; giá_tri3: lênh3; …………… giá_trin: lênhn; else lênh0; end; - biểu thức biến chọn: phải kiểu integer ký tự (không real) - biểu thức biến chọn có nhiều giá trị mà thực lệnh thì: case (biểu thức biến chọn) of giatri1,giatri2,giatri3…,giatrin: lệnh; end; Ví dụ: Xếp loại theo điểm: 0,1,2,3,4: Yếu 5,6: Trung bình 7,8: Khá 9,10: Giỏi Code: Program Hoc_Luc; var d:integer; begin; write(‘Nhap diem cua hoc sinh d=’); readln(d); case d of 0,1,2,3,4: write(‘Hoc luc yeu’); 5,6:write(‘Hoc luc trung binh’); 7,8:write(‘Hoc luc kha’); 9,10:write(‘Hoc luc gioi’); end; readln; end Tiếp tục làm quen với vòng lặp trước hết vòng lặp for Tại lại cần vòng lặp: có thao tác thực giống với loạt phần tử số, ký tự ta sử dụng vòng lặpLặp for: for…to…do: lặp từ … tới … làm nhiệm vụ… Sử dụng biết số vòng lặp tức số lượng phần tử lặp Cấu trúc: FOR := TO DO ; (sử dụng biến đếm tăng dần, biến đếm giảm dần dùng downto thay cho do) Ví dụ: Tính tổng n số nguyên đầu tiên: Code: Program Tong; var s,i,n:integer; begin; write(‘Nhap vao so luong so nguyen n:=’); readln(n); s=0; for i:=1 to n s=s+i; writeln(‘Tong can tinh la ‘,s:100); readln; end Ví dụ: Bài tốn 100 trâu, 100 bó cỏ: trâu đứng ăn bó, trâu nằm ăn bó, trâu già ăn bó, hỏi có trâu đứng, trâu nằm, trâu già??? Code: Program Trau_co; var td,tn:integer; begin for td:=1 to 20 for tn:=1 to 33 if (5*tn + 3*tn + (100-5*td-3*tn)/3=100) then begin; writeln(‘So trau dung’,td:2); writeln(‘So trau nam’,tn:2); write(‘So trau gia’,100-td-tn); end; readln; end Lênh lặp While…do Lệnh sử dụng ta biết trước điều kiện để dừng vòng lặp chưa biết rõ số lượng phần tử lặpCông thức WHILE DO ; Khi dieu_kien vòng lặp thực tiếp Nếu dieu_kien sai vòng lặp dừng lại Ví dụ 1: Tính S=1+1/2=1/3+1/4+… Dừng 2-Sn; Để kết thúc cho viết vòng lặp xin có lời gọi phụ họa thêm để người dễ nhớ vòng lặp Nếu coi chương trình máy tính đời với vòng for người xuất phát đồng hàng, người ta biết phía trước có gì, vào vòng for tiến, không đạt đủ điều kiện – lệnh if (nếu có) bị loại dần người qua vòng for tơi luyện nhiều trở nên đứng đắn Với for bạn biết chắn có người đua tranh khơng rõ đối thủ mạnh yếu đua tranh bắt đầu việc dần ngã ngũ Còn với while sao, có tiêu chí đặt để bạn vào vòng lặp này, coi mức sàn, mức tối thiểu để bạn tiếp đường Cũng nhờ mà bạn thấy chút người bạn đồng hành mình, họ đạt điều kiện tối thiểu Với while số lượng khơng định trước được, người ta xếp hàng để kiểm tra xem có đạt điều kiện tối thiểu khơng đạt tức họ tiếp người sau họ phải dừng lại theo họ Repeat until sao, tương tự for bạn xuất phát mà khơng có tiêu chí ngăn cản cả, đi mãi, số lượng bạn đồng hành khó đốn trước Nhưng hàng dài vơ tận bị chặn đứng gặp điều kiện until mà người ta khơng rõ ta bị loại có hết tới cuối đường biết thiếu để tiếp Máy tính khơ khan lồng hoạt động máy tính vào đời mang nhiều ý nghĩa… Chúng ta tiếp tục chuyển sang tìm hiểu mảng Đầu tiên mảng chiều: Mảng hiểu đơn giản tập phần tử giống kiểu (loại) để hiểu rõ vào nội dung liên quan tới thao tác mảng Khai báo: ten_mang:array[chi_so] of kieu_phan_tu Ví dụ: Mảng n phần tử thực a:array[1 n] of real; chi_so biểu diễn cách + Dạng liệu miền chi_so_dau chi_so_cuoi Như ví dụ chi_so_dau chi_so_cuoi n + Dạng số liệt kê Ví dụ: Code: type: thu=(Hai,Ba,Bon,Nam,Sau,Bay,Chunhat); Tuan:array[thu] of boolean; Sau nắm sơ qua khái niệm mảng vào ví dụ Tìm phần tử lớn dãy phần tử Thuật toán (tức ý tưởng để giải toán) Nhập vào phần tử mảng a1,a2,…,an max:=a1 So sánh max với phần tử lại, a[i]>max gán max:=a[i] Code: program tim_max; const n=10;{gán cố định số phần tử mảng 10, cho biến để nhập vào} var a:array[1 n] of real; max:real; i:integer; begin writeln(‘Nhap cac phan tu cua mang’); for i:=1 to n begin; write(‘Nhap a[',i,']:=’ ); readln(a[i]); end; max:=a[1]; for i:=2 to n {do da gan max:=a[1] nen khong can xet phan tu thu nua} if (maxa[j] then {so sánh với phần tử khác dãy có vị trí dãy lớn đổi chỗ} begin t:=a[i]; a[i]=a[j]; a[j]:=t; end; end; writeln(‘Day so da sap xep’); for i:=1 to n writeln(a[i]); VD2: Tìm số dương dãy tính trung bình cộng chúng Code: s:=0; j:=0; for i:=1 to n if a[i]>0 then begin s:=s+a; j:=j+1; end; writeln(‘Day co ‘,j,’ so duong’); writeln(‘Trung binh cong cua cac phan tu duong la ‘,s/j:2:4); Tiếp tục mảng ta chuyển sang mảng chiều hay gọi ma trận: Mảng chiều mảng số (có trật tự) gồm m hàng n cột Khai báo: var ten_mang: array [1 max_m,1 max_n]; VD: Code: var a:array [1 m,1 n] of real; a[i,j]: phần tử mảng hàng i cột j Các xử lý với mảng chiều không khác so với mảng chiều lưu ý việc số phần tử gồm hàng cột VD: Nhập mảng chiều kích thước mxn In giá trị mảng hình Code: program vd_mang_2chieu; var a:array[1 100,1 100] of integer; i,j: integer; begin write(‘Nhap cac kich thuoc cho mang m,n:=’); readln(m,n); write(‘Nhap cac phan tu cua mang’); for i:=1 to m for j:=1 to n begin write(‘a[',i,j,']:=’); readln(a[i,j]); end; writeln(‘Mảng nhập vào’); for i:=1 to m begin for j:=1 to n write(a[i,j]); writeln; end; readln; end Thuật toán đệ quy Pascal Định nghĩa: đối tượng gọi đệ quy bao gồm nó định nghĩa Thủ tục đệ quy: thủ tục gọi đệ quy trình thực phải gọi đến với kích thước nhỏ tham số VD: Procedure Giaithua(n:word):integer; begin if n=0 then giaithua:=1 else giaithua:=n*giaithua(n-1); end; Cấu trúc thủ tục đệ quy: gồm phần -Phần neo: chứa tác động hàm thủ tục với giá trị cụ thể ban đầu tham số -Phần hạ bậc: tác động cần thực cho giá trị thời tham số định nghĩa tác động định nghĩa trước Ưu điểm đệ quy: 10 fi='PROBLEM.TXT'; fo='SOLVE.TXT'; Var n :Integer; f ,g: text; A:array[0 20,0 20] of Boolean; D:array[0 max] of longInt; {Mảng D có ý nghĩa } T:array[0 20]ofInteger; { T lưu lại vị trí bít để dễ dàng QHĐ } Procedure Tinh( TX : LongInt ); Vargt , j , i , sl : LongInt;{sl số lượng bít 1} Begin gt := TX; i:= -1; sl := -1; While gt> {vong while de tim cac bit phan tich nhi phan so TX} Begin Inc( i ); If gt and = then {neu bít i } Begin Inc(sl); T[pt]:=i; {luu lai vi tri cac bit 1} End; gt:= gt shr 1; End; D[TX]:=0; For j :=0 to sl If A[ sl , T[j] ] then {Sinh viên sl thích vấn đề T[j]} Inc( D[TX] , D[ TX xor (1 shl T[j])] ); {TX xor (1 shl T[j] tắt bit thứ T[j]} End; Procedure Xuli; VarTX:LongInt; Begin D[0]:=1; For TX:=1 to (1 shl n)-1 Tinh(TX); {QHD voi so TX } Writeln(g, D[1 shl n-1] ); End; Procedure Nhap; Var i,j,t:Integer; Begin Read(f,n); For i:=0 to n-1 For j:=0 to n-1 Begin Read(f,t); A[i,j]:= t =1; 18 End; End; Begin assign(f,fi); reset(f); assign(g,fo); rewrite(g); fillchar(d,sizeof(d),0); Nhap; Xuli; close(f); close(g); End Thuật tốn có độ phức tạp khoảng , hiệu nhiều so với cách duyệt bình thường Bài toán giải xong Bây giờ, ta thay đổi toán chút: Vị giáo sư đáng kính muốn biết có cách ghép cặp mà có chứa cặp sinh viên x vấn đề y Khi ta giải tốn tốn mở rộng trở nên dễ Trên đây, xin bàn thêm tốn cặp ghép Để nói hết thật khó Hi vọng bạn tơi khám phá điều mẻ lý thú từ thuật tốn hay Các thuật tốn tìm kiếm đồ thị Thuật tốn tìm kiếm theo chiều sâu Tư tưởng thuật toán là: Giả sử xét đồ thị G(V,E) Từ đỉnh u V thời ta thăm tới đỉnh kề v u trình lặp lại đỉnh v bước tổng quát, giả sử xét đỉnh u0, có hai khả xảy ra: -Nếu tồn đỉnh v0 kề với u0 mà chưa thăm đỉnh v0 trở thành đỉnh thăm trình tìm kiếm lại đỉnh v0 -Ngược lại, đỉnh kề với u0 thăm ta quay trở lại đỉnh mà trước ta đến đỉnh u0 để tiếp tục q trình tìm kiếm Như vậy, trình thăm đỉnh thuật tốn tìm kiếm theo chiều sâu, đỉnh thăm muộn sớm duyệt xong (Cơ chế Last In First Out – Vào sau trước) Do đó, ta tổ chức q trình thủ tục đệ quy sau: Code: Procedure DFS(u); Begin Visit(u); Daxet[u]:=True; For v Kề(u if not Daxet[v] then DFS(v); End; Và thủ tục duyệt hệ thống toàn đỉnh đồ thị là: Procedure Find; Begin Fillchar(Daxet,SizeOf(Daxet),False); 19 For u V If not Daxet[u] then DFS(u); End; Dễ nhận thấy rằng, lần gọi DFS(u) tồn đỉnh thành phần liên thơng với u viếng thăm Thủ tục Visit(u) thao tác đỉnh u toán đặt cụ thể Thuật tốn tìm kiếm theo chiều rộng Thuật toán thực cải biến thứ tự duyệt đỉnh đồ thị tìm kiếm theo chiều sâu cách thay dùng STACK ta lại dùng hàng đợi QUEUE để kết nạp đỉnh thăm Như vậy, đỉnh thăm sớm sớm trở thành duyệt xong (cơ chế First In First Out – Vào trước trước) Thủ tục mô tả đây: Code: Procedure BFS(u); Begin Queue:=Empty Kết nạp u vào Queue; Daxet[u]:=True; While QueueEmpty Begin Lấy v từ Queue; Visit(v); For w Kề(v) If not Daxet[w] then Begin Kết nạp w vào Queue; Daxet[w]:=True; End; End; End; Ta có thủ tục tìm kiếm theo chiều rộng là: Procedure Find; Begin Fillchar(Daxet,SizeOf(Daxet),False); For u V If not Daxet[u] then BFS(u); End; Tương tự thuật tốn tìm kiếm theo chiều sâu, thuật tốn lần gọi thủ tục BFS(u) đỉnh thành phần liên thông với u thăm Thủ tục Visit(u) nói Để hiểu rõ thuật tốn, bạn xem thêm viết “Thuật toán Loang” Từ hai thuật toán trên, nhiều toán đồ thị giải dễ dàng Xin trình bầy số tốn kinh điển 1.Bài tốn tìm thành phần liên thông đồ thị Cho đồ thị G=(V.E) Hãy cho biết số thành phần liên thông đồ thị thành phần liên thông gồm đỉnh Như ta biết, thủ tục DFS(u) BFS(u) cho phép viếng thăm tất đỉnh có thành phần liên thông với u nên số thành phần liên thơng đồ thị số lần gọi thủ tục Ta dùng thêm biến đếm Connect để đếm số thành phần liên thơng Và vòng lặp thủ tục tìm kiếm theo chiều sâu hay chiều rộng cần sửa lại sau: Code: 20 Procedure Find; Begin Fillchar(Daxet,SizeOf(Daxet),False); Connect:=0; For u V If not Daxet[u] then Begin Inc(Connect); DFS(u); (*BFS(u)*) End; End; Thủ tục Visit(u) làm công việc đánh số thành phần liên thơng đỉnh u: LienThong[u]:=Connect; 2.Bài tốn tìm đường hai đỉnh đồ thị Cho đồ thị G=(V,E) Với hai đỉnh s t hai đỉnh đồ thị Hãy tìm đường từ s đến t Do thủ tục DFS(s) BFS(s) thăm đỉnh liên thông với u nên sau thực xong thủ tục có hai khả năng: -Nếu Daxet[t]=True có nghĩa: tồn đường từ đỉnh s tới đỉnh t -Ngược lại, khơng có đường nối s t Vấn đề lại tốn là: Nếu tồn đường nối đỉnh s đỉnh t làm cách để viết hành trình (gồm thứ tự đỉnh) từ s đến t Về kỹ thuật lấy đường trình bầy viết “Thuật toán Loang”! Xin nhắc lại cụ thể là: Dùng mảng Truoc với: Truoc[v] đỉnh trước v đường Khi đó, câu lệnh If thủ tục DFS(u) sửa lại sau: Code: If not Daxet[v] then Begin DFS(v); Truoc[v]:=u; End; Còn với thủ tục BFS ta sửa lại lệnh If sau: If not Daxet[w] then Begin Kết nạp w vào Queue; Daxet[w]:=True; Truoc[w]:=v; End; Việc viết đường lên hình (hoặc file) có cách: -Viết trực tiếp dựa mảng Truoc: Hiển nhiên đường hiển thị ngược từ đỉnh t trờ s sau: -Dùng thêm mảng phụ P: cách dùng để đảo đường từ mảng Truoc để có đường thuận từ đỉnh s đến đỉnh t -Cách thứ 3: dùng chương trình đệ quy để viết đường Code: Procedure Print_Way(i: Byte); If is then Begin Print_Way(Truoc[i]); 21 Write(‘đ’,i); End; Lời gọi thủ tục đệ quy sau: Write(s); Print_Way(s); Các bạn tuỳ chọn cách mà thích thiết nghĩ chưa phải vấn đề quan trọng Nếu tinh ý dựa vào thứ tự thăm đỉnh thuật tốn tìm kiếm theo chiều rộng BFS ta có nhận xét quan trọng, là: Nếu có đường từ s đến t, đường tìm thuật tốn tìm kiếm theo chiều rộng cho hành trình cực tiểu số cạnh Nhận xét quan trọng sở cho thuật tốn tìm kiếm lời giải tối ưu dựa lý thuyết đồ thị *** 22 CÁC CÁCH CHUYỂN ĐỔI GIỮA CÁC HỆ CƠ SỐ Bảng Bảng chuyển đổi hệ số thập phân – nhị phân – bác phân – thập lục phân Thập phân (DEC) Nhị phân (BIN) Bác phân (OCT) Thập lục phân (HEX) 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 1001 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F Bảng giúp bạn chuyển đổi nhanh qua lại hệ số Chuyển đổi từ hệ số thập phân sang nhị phân ngược lại (DEC BIN) a Từ thập phân sang nhị phân Đầu tiên chia số cần chuyển cho lấy phần dư, rối tiếp tục chia phần nguyên lấy phần dư, sau xếp thứ tự phần dư theo thứ tự ngược từ lên VD: Chuyển 2371 (hệ thập phân) sang hệ nhị phân? 2371 chia = 1185.5 (1185 -> dư 1) 1185 chia = 592 -> dư (phần nguyên) 592 chia = 296 -> dư 296 chia = 148 -> dư 148 chia = 74 -> dư 74 chia = 37 -> dư 37 chia = 18 -> dư 18 chia = -> dư chia = -> dư chia = -> dư chia = -> dư chia = -> dư Sắp xếp thứ tự số dư từ lên trên: 2371DEC = 100101000011BIN b Từ nhị phân sang thập phân Muốn chuyển đổi số từ hệ nhị phân sang thập phân, ta lấy chữ số phần nguyên số cần chuyển nhân với mũ 0,1,2,3,…tăng dần từ phải qua trái Còn phần nguyên số cần chuyển ta nhân với mũ -1, -2, -3, … giảm dần từ phải qua trái Phần nguyên phần thập phân ngăn cách dấu chấm “.” VD: Chuyển 10101100.01101BIN sang số thập phân? 23 1 1 0 1 -1 -2 -3 -4 Áp dụng ta được: 10101100.01101BIN= 1.27 + 26 + 1.25 + 0.24 + 1.23 + 1.22 + 0.21 +0.20 + 0.2-1 +1.2-2 + 1.2-3 +0.2-4 + 1.25 = 128 + + 32 + + + 4+ + + + 0.25 + 0.125 + + 0.0315 = 174.40625 Vậy 10101100.01101BIN = 174.40625DEC Chuyển đổi từ hệ số thập phân sang bác phân ngược lại (DEC OCT) a Từ thập phân sang bác phân Cũng giống cách chuyển đổi số từ thập phân sang nhị phân, để chuyển từ thập phân sang bác phân ta chia số cần chuyển cho phần dư (giá trị dư từ 1->7), sau lấy phần nguyên chia tiếp lấp phần dư, kết phần dư xếp theo thứ tự từ lên VD: Chuyển số 2764 (hệ thập phân) sang hệ bác phân? 2764 chia = 345.5 (345 -> dư 4(lấy phần lẻ nhân với 8)) 345 chia = 43.125 (43 -> dư 1) 43 chia = 5.375 ( -> dư 3) chia = -> dư Sắp xếp thứ tự từ lên trên: 2764DEC = 5314OCT b.Từ bác phân sang thập phân Tương tự hệ nhị phân, để chuyển đổi số từ hệ bác phân sang thập phân, ta lấy chữ số phần nguyên số cần chuyển nhân với mũ 0,1,2,3,…tăng dần từ phải qua trái Còn phần nguyên số cần chuyển ta nhân với mũ -1, -2, -3, … giảm dần từ phải qua trái VD: Chuyển 5314.17OCT thành hệ thập phân? -1 -2 5314.17OCT = 5.83 + 82 + 81 +4 80 + 8-1 +7 8-2 = 2560 + 192 + + + 0.125 + 0.109375 = 2764.234375DEC Chuyển đổi từ hệ số thập phân sang thập lục phân ngược lại (DEC HEX) a Từ thập phân sang thập lục phân phân Việc chuyển đổi tương tự nhị phân bác phân Cụ thể ta xét ví dụ sau đây: (sử dụng bảng 1) 3295 chia 16 = 205.9375 (205 -> dư 15) tức chữ F 205 chia 16 = 12.8125 (12 -> dư 13) tức D 12 chia 16 = (dư 12) tức C Vậy 3295DEC = CDFHEX b Từ thập lục phân sang thập phân Tương tự ta nhân số với 16 mũ …… VD: CDF.91HEX = C.162 + D.161 +F.160 + 9.16-1 + 1.16-2 = 12.162 + 13.161 +15.160 + 9.16-1 + 1.16-2 = 3072 + 208+ 15 +0.5625 + 0.00390625 = 3295.56640625 Vậy CDF.91HEX = 3295.56640625DEC Các chuyển đổi khác a Từ nhị phân sang bác phân Để chuyển đổi số từ hệ nhị phân sang bác phân ta gom chữ số số cần chuyển theo thứ tự từ phải sang trái, sau sử dụng bảng để chuyển đổi thành kết mong muốn VD: 100110001011010BIN = 100 110 001 011 010 = Vậy 100110001011010BIN = 46132OCT b Từ nhị phân sang thập lục phân 24 Tương tự trên,muốn chuyển đồi từ hệ nhị phân sang thập lục phân, ta gom chữ số số cần chuyển theo thứ tự từ phải sang trái, sau sử dụng bảng VD: 100110001011010BIN = 0100 1100 0101 1010 (nếu số cuối bên trái không đủ chữ số mặc định ta thêm vào trước chữ số 0) = C A Vậy 100110001011010BIN = 4C5AHEX c Từ bác phân sang thập lục phân ngược lại Muốn chuyển từ hệ bác phân sang hệ thập lục phân từ thập lục phân sang bác phân, trước tiên ta phải chuyển số cần chuyển sang hệ số (hệ nhị phân), sau chuyển sang hệ thập lục phân hay bác phân theo bước phía VD: 46132OCT = 100 110 001 011 010BIN = 0100 1100 0101 1010BIN = 4C5AHEX Một số lệnh thường dùng Pascal - ORD(kytu): Trả số thứ tự kytu bảng mã ASCII - CHR(so): Trả kí tự vị trí so (có thể viết tắt #so) - PRED(kytu): Trả kí tự nằm trước kí tự kytu bảng mã ASCII - SUCC(kytu): Trả kí tự nằm sau kí tự kytu bảng mã ASCII - ASB(x): Giá trị tuyệt đối x - SQR(x): x bình phương - SQRT(x): bậc x - ROUND(x): làm tròn phần lẻ thập phân x, số nguyên gần với x - TRUNC(x): Lấy phần nguyên x - INC(x): Tăng biến nguyên X lên đơn vị - Delay(Tine): Tạo thời gian trễ time (miligiay) Time số nguyên Delay thường dùng để làm chậm chương trình lại cho ta xem khảo sát - Sound(F): Tạo dao động âm với tần số F: số nguyên, ta gọi Nosound - InsLine: chèn dòng trống vào hình vị trí trỏ - DelLine: Xóa tồn dòng hình chứa trỏ sau dồn dòng lên - Exit: Thốt vơ điều kiện khỏi chương trình - Halt: Dừng hẳn chương trình - Break: Thốt khỏi vòng lặp chứa lệnh Break - KeyPressed: cho giá trị True ta nhấn phím bàn phím, kí tự chờ nhớ đệm bàn phím, chưa đưa xử lí 25 - Int(X): Lấy phần nguyên số thực X - Frac(x): Cho giá trị phần thập phân số thực X - Randomize: Khởi động chế độ phát sinh số ngẫu nhiên - Random: Cho giá trị số thực Random Random số ngẫu nhiên nằm khoảng 1:
- Xem thêm -

Xem thêm: Hướng dẫn lập trình pascal, Hướng dẫn lập trình pascal

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay