BÀI TẬP 25: ĐỌC SỐ LA MÃ

Lập trình để tính giá trị của một số viết dưới dạng la mã.

Biết: M = 1000; D = 500; C= 100; L = 50; X = 10; V = 5; I = 1 VD: MDCLXVI = 1666

CODE THAM KHẢO:

PROGRAM ROMAN_DECIMA_CONVERT; uses crt; VAR RomanNumber :String; {Dùng để test} {--------------------------------------------------------------------------} {Đổi toàn bộ chữ thường ra chữ hoa} function Upper (Text :String) :String; var i :Integer; begin for i := 1 to Length (Text) do Text [i] := UpCase (Text [i]); Upper := Text; end; {Upper} {--------------------------------------------------------------------------} {Mô tả: function Roman2Dec (Roman :String) :Integer; - Hàm đổi chữ số La mã sang hệ thập phân. - Vào: Roman : Chữ số La mã (String); - Ra : Chữ số ở hệ thập phân (Integer). - Chữ số La mã: I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 - Xác định giá trị: + Xác định từ chữ số nào lớn nhất, sau đến chữ số nhỏ hơn: ( M ->D ->C ->L ->X ->V ->I ) + Giống nhau thì nhân đôi, nhân ba ... + Khác nhau thì: Chữ số nhỏ hơn: ~Đứng ở bên trái làm giảm giá trị của chữ số lớn hơn ở bên phải ~Đứng ở bên phải làm tăng giá trị của chữ số lớn hơn ở bên trái + VD: MMXIV = 2014 .Lớn nhất MM = 1000*2=2000 .Lớn tiếp theo: X=10 .Lớn tiếp theo: V=5 .Lớn tiếp theo: I=1 .I bên trái V: 5-1=4; .IV bên phải X: 10+4=14 .XIV bên phải MM: 2000+14=2014 } function Roman2Dec (Roman :String) :Integer; const RomanChar = 'IVXLCDM'; {Bảng ký tự chữ số La mã: 7 ký tự} {Và giá trị tương ứng trong chữ số thập phân:} RomanValue :Array [1..7] of Integer = (1, 5, 10, 50, 100, 500, 1000); var i :Byte; {Xử lý trên từng ký tự số La mã} sum :Integer; {Biến tạm, chứa giá trị thập phân} begin sum := 0; {Chú ý: Phải khởi tạo giá trị trước cho biến=0, nếu không kết quả sai} Roman := Upper (Roman); {Ra chữ Hoa} i := Length (Roman); while (i >= 1) do begin if (i > 1) then begin if (Pos (Roman [i], RomanChar) <= (Pos (Roman [i-1], RomanChar))) then begin sum := sum + RomanValue [Pos (Roman [i+0], RomanChar)]; Dec (i); end else begin sum := sum + RomanValue [Pos (Roman [i+0], RomanChar)]; sum := sum - RomanValue [Pos (Roman [i-1], RomanChar)]; Dec (i, 2); end; end else begin sum := sum + RomanValue [Pos (Roman [1], RomanChar)]; Dec (i); end; end; {while} Roman2Dec := sum; {Kết quả} end; {Roman2Dec} {----------------------------Chương trình chính----------------------------} BEGIN clrscr; Write ('Nhap vao so La ma: '); ReadLn (RomanNumber); {cần kiểm tra có phải là số La mã} WriteLn ('So La ma ', RomanNumber,' la: ', Roman2Dec (RomanNumber)); ReadLn; END.


Nhãn:

Đăng nhận xét

[blogger]

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget