OLD FoxBoard
foxboard Home FoxBoard



ยินดีต้อนรับ Guest ลงทะเบียน Login ค้นหากระทู้ แสดงรายชื่อสมาชิก
 หัวข้อสนทนาทั้งหมด
  New Foxboard
 
ชื่อเรื่อง #01491 หัวข้อ: ขอความช่วยเหลือร้าบ เชิญถาม-ตอบปัญหาได้ที่นี่ครับ ตั้งชื่อกระทู้ใหม่
ส่งข้อความโดย tottenhamster วันที่ 13 ก.ค. 2551 เวลา 01:23 น. - IP Logged
มุมมอง tottenhamster's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ tottenhamster ค้นหา   Quote tottenhamster Quote   Send Private Message ส่งข้อความ  
tottenhamster
Gold Member
Gold Member
Thailand
12 ก.ค. 2551
2 Posts

ขอความช่วยเหลือคือผมอยากทำโปรแกรมคำนวณด้วยเลขโรมัน โดย ต้องการ ใส่เลขโรมันเข้าไปเช่น II+VI

มันก็จะให้ผลออกมา เป็น VIII แล้วก็เกบค่าแปดไว้ต่อ โดยการแสดงผลต้องเป็นเลขโรมันนะครับ

จากนั้นก็นำ มาคูณด้วย XX มันก็จะได้  XXC  คือว่า สามารถที่จะทำการบวก ลบ คูณ หรือหารได้เท่านั้น

และมีช่วงระหว่าง 1 ถึง 1000 เท่านั้นถ้าเกินมันก็จะขึ้น out of range โดยทำเป็น ภาษาจาวา นะครับ

โดยการหารผมลืมบอกไปจะต้องใช้การหารแบบไม่เอาตัวเศษ อย่างเช่น VIII/V = I คือเศษที่เหลือจะตัดทิ้งนะครับ และก็ทำเป็น dialog box โดยการimport javax.swing.JOptionPane; 

และถ้าเราเกิด ประมาณว่า เราได้ค่าอยู่ที่ XIII  แล้วเรานำค่า C มาบวกเพิ่ม

ค่า ซี ก็จะมาโชว์รวมเป็น CXIII ผมขอแนะนำให้ดูหลักการคิดก่อนนะครับ

ส่วนการคิดเลขโรมันผมมีหลักการให้ดูครับ    โดย จะมีอักษรรวมกันได้มากสุดถึง 12 ตัว แต่ที่สำคัญ จะมีค่าไม่เกิน 1000นะครับ  ช่วยหน่อยนะครับผู้เปนกูรู

ตัวเลขโรมัน มีสัญลักษณ์ 7 ตัว ได้แก่

เลขโรมัน

I

V

X

L

C

D

M

แทน

1

5

10

50

100

500

1000

การเขียนตัวโรมัน แทนจำนวนต่างๆมีข้อจำกัดดังนี้

เขียนสัญลักษณ์แต่ละตัวเรียงกันได้ไม่เกิน 3ตัว

เขียนโดยใช้หลักการเพิ่ม คือ เขียนสัญลักษณ์เรียงกันไป หรือเรียงลำดับจากค่ามากไปหาน้อย เช่น

III=1+1+1=3

XXX=10+10+10=30

เขียนโดยใช้หลักการลดเป็นการแทนจำนวนบางจำนวนที่ใช้หลักการเพิ่มไม่ได้การเขียนทำได้โดยเขียนตัวเลขที่น้อยไว้หน้าตัวเลขที่มีค่ามาก

IV=5-1=4

หลักการลดมีเงื่อนไขดังนี้

ตัวเลขที่เป็นลบมีเพียง3ตัว คือI,X,C

ตัวเลข I อยู่หน้า V หรือ Xเท่านั้น

ตัวเลขX อยู่หน้าL หรือ C เท่านั้น

ตัวเลขC อยู่หน้า D หรือ M เท่านั้น

 

ตัวอย่าง การเขียนตัวเลขโรมันเป็นตัวเลขฮินดูอารบิก

MDCXLII = M+DC+XL+II = 1000+600+40+2=1,642


ส่งข้อความโดย jarungkit วันที่ 14 ก.ค. 2551 เวลา 16:33 น. - IP Logged
มุมมอง jarungkit's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ jarungkit ค้นหา   Quote jarungkit Quote   Send Private Message ส่งข้อความ  
jarungkit
Avatar
Gold Member
Gold Member
Thailand
29 มิ.ย. 2550
131 Posts
เขียนด้วยภาษา Java เหรอครับ ผมพึ่งเริ่มหัดเองครับ :)

ส่งข้อความโดย ENJOY วันที่ 16 ก.ค. 2551 เวลา 15:00 น. - IP Logged
มุมมอง ENJOY's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ ENJOY ค้นหา   Quote ENJOY Quote   Send Private Message ส่งข้อความ  
ENJOY
Avatar
Gold Member
Gold Member
Thailand
20 พ.ย. 2549
101 Posts

Java อ่านพอผ่านๆ ยังไม่ได้คิดจริงจัง ถ้าเป็น Foxpro ก็สบาย เลยเอาโคดที่เขียนด้วย Foxpro เกี่ยวกับการแปลง ตัวเลขฐานสิบ ไปเป็นเลขโรมัน มาลองเอาไปเป็นแนวทาง ที่เหลือก็น่าจะทำได้ไม่ยาก ^_^

lcNumber = INPUTBOX('ใส่ตัวเลขที่ต้องการแปลง')
MESSAGEBOX(SpellMoneyRoman(VAL(lcNumber)))

FUNCTION SpellMoneyRoman
* แปลงค่าตัวเลขฐานสิบ เป็น เลขโรมัน
* ตัวเลขสูงสุดที่แปลงได้ 1 - 3999 (เลขโรมันที่มีค่าตั้งแต่ 4000 ขึ้นไป มันจะเป็นตัวอักษรที่ เราไม่สามารถพิมพ์ได้ผ่านคีบอร์ด คิดว่านะ เพราะใน Excel มันก็แปลงได้ถึงแค่ 3999 เหมือนกัน)
* ตัวเลขต้องมีค่ามากกว่าศูนย์
PARAMETER nValue
* ทดสอบค่าก่อนทำการแปลง
IF BETWEEN(nValue,1,3999) THEN
 cFormat = TRANSFORM(nValue,'@R C9D9E9F9')
 cFormat = STRTRAN(cFormat,'F0','') 
 cFormat = STRTRAN(cFormat,'F ','') 
 cFormat = STRTRAN(cFormat,'F1','I')
 cFormat = STRTRAN(cFormat,'F2','II')
 cFormat = STRTRAN(cFormat,'F3','III')
 cFormat = STRTRAN(cFormat,'F4','IV')
 cFormat = STRTRAN(cFormat,'F5','V')
 cFormat = STRTRAN(cFormat,'F6','VI')
 cFormat = STRTRAN(cFormat,'F7','VII')
 cFormat = STRTRAN(cFormat,'F8','VIII')
 cFormat = STRTRAN(cFormat,'F9','IX')
 
 cFormat = STRTRAN(cFormat,'E0','') 
 cFormat = STRTRAN(cFormat,'E ','') 
 cFormat = STRTRAN(cFormat,'E1','X')
 cFormat = STRTRAN(cFormat,'E2','XX')
 cFormat = STRTRAN(cFormat,'E3','XXX')
 cFormat = STRTRAN(cFormat,'E4','XL')
 cFormat = STRTRAN(cFormat,'E5','L')
 cFormat = STRTRAN(cFormat,'E6','XL')
 cFormat = STRTRAN(cFormat,'E7','LXX')
 cFormat = STRTRAN(cFormat,'E8','LXXX')
 cFormat = STRTRAN(cFormat,'E9','XC')
 
 cFormat = STRTRAN(cFormat,'D0','') 
 cFormat = STRTRAN(cFormat,'D ','') 
 cFormat = STRTRAN(cFormat,'D1','C')
 cFormat = STRTRAN(cFormat,'D2','CC')
 cFormat = STRTRAN(cFormat,'D3','CCC')
 cFormat = STRTRAN(cFormat,'D4','CD')
 cFormat = STRTRAN(cFormat,'D5','D')
 cFormat = STRTRAN(cFormat,'D6','DC')
 cFormat = STRTRAN(cFormat,'D7','DCC')
 cFormat = STRTRAN(cFormat,'D8','DCCC')
 cFormat = STRTRAN(cFormat,'D9','CM')
  
 cFormat = STRTRAN(cFormat,'C0','') 
 cFormat = STRTRAN(cFormat,'C ','')
 cFormat = STRTRAN(cFormat,'C1','M')
 cFormat = STRTRAN(cFormat,'C2','MM')
 cFormat = STRTRAN(cFormat,'C3','MMM')
   
 cWord  = cFormat
 
ELSE
 cWord = ""
ENDIF
RETURN cWord
ENDFUNC

* ฟังค์ชันนี้ผมดัดแปลงมาจาก ใน board เรานี้แหละ หลายคนอาจคุ้นๆ ผมเขียนให้มันยาวๆ จะได้ดูเข้าใจง่าย จริง ๆ แล้วเราสามารถย่อให้เหลือเพียงบรรทัดเดียวก็ได้


ส่งข้อความโดย tottenhamster วันที่ 16 ก.ค. 2551 เวลา 18:40 น. - IP Logged
มุมมอง tottenhamster's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ tottenhamster ค้นหา   Quote tottenhamster Quote   Send Private Message ส่งข้อความ  
tottenhamster
Gold Member
Gold Member
Thailand
12 ก.ค. 2551
2 Posts

ขอบคุณนะครับแต่ว่าผมอ่านไม่ค่อยเข้าใจอ่า

ผมจะพยายามทำต่อไป


ส่งข้อความโดย jarungkit วันที่ 17 ก.ค. 2551 เวลา 05:22 น. - IP Logged
มุมมอง jarungkit's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ jarungkit ค้นหา   Quote jarungkit Quote   Send Private Message ส่งข้อความ  
jarungkit
Avatar
Gold Member
Gold Member
Thailand
29 มิ.ย. 2550
131 Posts

ลองใช้

 Set Step on  วางไว้ต้นโปรแกรมดูครับ ทำให้เราไล่ Step โปรแกรมได้ง่ายขึ้นและเข้าใจในการเปลี่ยนแปรงไปของตัวแปรต่างๆ .... ภายในนั้นยังมีคือมืออีกหลายอย่าง ทำให้เราเก่งขึ้น ผมก็มักใช่บ่อยเวลาไล่ที่ละบรรทัดเพื่อความเข้าใจอ่ะครับ


ส่งข้อความโดย vet12 วันที่ 21 ก.ค. 2551 เวลา 10:40 น. - IP Logged
มุมมอง vet12's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ vet12 ค้นหา   Quote vet12 Quote   Send Private Message ส่งข้อความ  
vet12
Avatar
Gold Member
Gold Member
Thailand
18 ธ.ค. 2549
184 Posts

ลองดู

**ROMAN.PRG

para _str

set talk off

_seek=upper(iif(type('_str')#'C','',_str))

_len=len(_seek)

_ret=0

do while !empty(_seek)

_chr=left(_seek,1)

_num=0

for i=1 to len(_seek)

if subs(_seek,i,1)#_chr

exit

else

_num=_num+calnum(subs(_seek,i))

endif

next

_seek=subs(_seek,i)

_check=calnum(_seek)

if _check>_num and _num#0

_num=_check-_num

_seek=subs(_seek,i+1)

endif

_ret=_ret+_num

enddo

retu _ret

Proc CalNum

Para _is

priv _ret

_is=upper(iif(type('_is')#'C','',_is))

_ret=0

do case

case _is='I'

_ret=1

case _is='V'

_ret=5

case _is='X'

_ret=10

case _is='L'

_ret=50

case _is='C'

_ret=100

case _is='D'

_ret=500

case _is='M'

_ret=1000

endcase

retu _ret


ส่งข้อความโดย vop วันที่ 21 ก.ค. 2551 เวลา 14:14 น. - IP Logged
มุมมอง vop's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ vop ค้นหา   Quote vop Quote   Send Private Message ส่งข้อความ  
vop
Avatar
Gold Member
Gold Member
Thailand
03 เม.ย. 2550
176 Posts
ช่วงนี้เด็ก ม 1 กำลังเรียนเรื่องเลข โรมัน สงสัยเป็นคุณครูมาถามหรือไม่ก็คุณพ่อ

คนโรมันนับเลขได้แค่หลักพัน คนจีนแค่หลักหมื่น คนอินเดียหลักล้านล้าน

คนอินเดียคิดเลข 0 ได้

คนโรมันไม่มีเลข 0 ใช้ ใครใช้ติดคุก

คนโรมันไม่เขียนเลขเกิน 3,999 เพราะไม่มีอักษรตัวต่อไปจาก M คือ I,V,X,L,C,D,M แล้วไม่มีต่อไป ตามกฏจะไม่เขียนซ้ำกัน 4 ตัวอักษร จึงใช้ MMMM แทน 4,000 ไม่ได้

ถ้าท่านต้องการตอบคำถามที่นี่ ท่านควรจะ  Login
ถ้าท่านยังไม่ได้ลงทะเบียน ท่านควรจะ  ลงทะเบียน

กระโดดไป เชิญถาม-ตอบปัญหาได้ที่นี่ครับ ตั้งชื่อกระทู้ใหม่
พิมพ์รายงาน พิมพ์รายงาน

Powered by Vfoxware Forums ver. 1.0
Copyright ©2006-2010 Vfoxware Guide