Archive

Posts Tagged ‘เขียนโปรแกรม’

เขียน C/C++ ใน Wolfram Workbench

April 4th, 2013 No comments

Wolfram Workbench (2.0) นี่ถูกพัฒนามาจาก Eclipse ซึ่งโปรแกรมเสริมหรือ plugin อะไรต่างๆที่ถูกพัฒนามาสำหรับ Eclipse สามารถใช้ได้กับ Wolfram Workbench ครับ ซึ่งเจ้า Wolfram Workbench 2.0 นี้สามารถใช้ได้กับโปรแกรมเสริมของ Eclipse ตั้งแต่ 3.4 จนถึง 3.8 เลยครับ (http://www.wolfram.com/products/workbench/qa/)

ถ้าจะอยากจะใช้ Wolfram Workbench  เป็น IDE สำหรับเขียน C/C++ ก็สามารถทำได้โดยเพิ่ม C/C++ development tools (CDT) ของ Eclipse เข้าไปใน Workbench ตามนี้ครับ

cdt1

1. ไปที่ Help->Install New Software

cdt2

2. คลิ๊ก Add แล้วพิมพ์ข้อความตามภาพด้านบนครับ

cdt3

3. จากนั้นก็เลือก CDT Main Features แล้วก็ Next ไปเรื่อยๆ  เป็นอันเสร็จพิธี 🙂

เจ้า CDT นี้ไม่ได้ติดตั้ง C/C++ compiler มาด้วยนะครับ เราต้องลงเอง ซึ่งผมแนะนำ MinGW  ครับ สามารถโหลดตัวติดตั้งได้ที่ https://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/

การติดตั้ง MinGW นี้ก็เพียง double clicks ที่ตัวติดตั้งแล้วก็ตอบคำถามไปเรื่อยๆ ซึ่งค่า default มันจะทำการติดตั้งตัว compiler ไว้ที่ C:\MingGW ครับ  เมื่อลงเสร็จเราก็เพิ่ม C:\MinGW\bin เข้าไปใน Path ครับ ดูรายละเอียดเพิ่มเติมได้ที่ http://mingw.org/wiki/Getting_Started

cdt4

เป็นอันเสร็จครับ 🙂

 

สร้างโปรแกรมด้วย ManipulateMaker

September 18th, 2012 Comments off

ManipulateMaker เป็นหนึ่งในหลายคำสั่งของ Mathematica (8.0.4) ที่ไม่มีคำอธิบายการใช้งานใน help หรือ document center ?? ครับ ไม่รู้ว่าทำไม อาจเป็นไปได้ว่ายังไม่สมบูรณ์

การเรียกใช้งาน ManipulateMaker ก็เพียงพิมพ์

Explore`ManipulateMaker[]

มันจะมีหน้าตาตามนี้ครับ



อีกตัวอย่างครับ

ตัวอย่างการใช้ Mathematica แก้ปัญหาแบบง่ายๆ

November 22nd, 2011 Comments off

พอดีมีคนถามว่า
จะหาจำนวนนับที่เล็กที่สุด ที่มีคุณสมบัติครบทั้ง 2 ข้อต่อไปนี้ได้ยังไงครับ???
I
(1) ขึ้นต้นด้วยเลข 1
(2) เมื่อสลับตัวเลขหลักแรก (ซึ่งก็คือ 1) กับตัวเลขหลักสุดท้าย แล้วจำนวนใหม่มีค่าเป็น 3 เท่าของจำนวนเดิม
II
(1) ขึ้นต้นด้วยเลข 1
(2) เมื่อย้ายตัวเลขหลักแรก (ซึ่งก็คือ 1) ไปต่อหลังตัวเลขหลักสุดท้าย แล้วจำนวนใหม่มีค่าเป็น 3 เท่าของจำนวนเดิม

(http://www.pantip.com/cafe/wahkor/topic/X11362457/X11362457.html)

อันนี้เป็นคำสั่ง Mathematica แบบง่ายๆ ที่ลองเขียนเพื่อแก้ปัญหานี้
I
swapInt1[tmp_Integer] := FromDigits@ ReplacePart[IntegerDigits[tmp], {1 -> Last@IntegerDigits[tmp], Length@IntegerDigits[tmp] -> First@IntegerDigits[tmp]}]
Catch[If[swapInt1@# == 3*#, Throw[#]] & /@ Range[1, 1000000, 1]]
คำตอบที่ได้จะเป็น Null ทั้งหมด นั่นหมายความว่ามันไม่มีคำตอบ
II
swapInt2[tmp__Integer] := FromDigits@RotateLeft@IntegerDigits@tmp

Catch[If[swapInt2@# == 3*#, Throw[#]] & /@ Range[1, 1000000, 1]]

คำตอบที่ได้คือ 142857
————————————————

จาก http://www.pantip.com/cafe/wahkor/topic/X11435196/X11435196.html

เราเรียก 6 28 496 8128….
ว่าเป็นจำนวนสมบูรณ์
เพราะมันมีคุณสมบัติที่น่าสนใจคือ
6     มีตัวประกอบแท้คือ 1,2,3
6  = 1+2+3
28   มีตัวประกอบแท้คือ 1,2,4,7,14
28  = 1+2+4+7+14 28 = 1+2+3+4+5+6+7
496 มีตัวประกอบแท้คือ 1,2,4,8,16,31,62,124,248
496 = 1+2+4+8+16+31+62+124+248
496 = 1+2+3+…+31

โดยตัวเลขพวกนี้ มันมีนิยามว่า มันอยู่ในรูป 2n-1(2n-1) เมื่อ n เป็นจำนวนนับที่ทำให้  2n-1 เป็นจำนวนเฉพาะ ซึ่งจากนิยามนี้เองเราสามารถเขียนคำสั่ง Mathematica ง่ายๆเพื่อหาตัวเลขพวกนี้ได้ว่า

(# (# + 1))/2 & /@ Select[2^Range[100] – 1, PrimeQ]

(#(#+1))/2 นี้ได้มาจากการให้ (2n-1) = x –> 2n =x+1  ดังนั้น  2n-1= (x+1)/2

——————————————
จาก
http://www.pantip.com/cafe/wahkor/topic/X11494743/X11494743.html
http://www.pantip.com/cafe/wahkor/topic/X11495190/X11495190.html

มีเลขอยู่หกหลักที่ไม่เหมือนกันซักตัว
เลขชุดนี้สามารถถอดรากที่สองได้เป็นจำนวนเต็ม
เมื่อกลับเลขชุดนี้ ก็จะยังถอดรากที่สองได้เป็นจำนวนเต็มเหมือนเดิม
เช่น MINTLA —> ถอดรากได้เป็นจำนวนเต็ม       ALTNIM —> ถอดรากได้เป็นจำนวนเต็ม
ถามว่า มีจำนวนใดบ้างที่เข้ากฏนี้และมีกี่จำนวน
ตัวอย่าง Mathematica code สำหรับปัญหานี้
(* ตั้งแต่ 3 – 10 หลัก แบบไม่ซ้ำ *)
For[i = 3, i <= 10, i++,
Print[“==”, i “==”];
num = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
test = Select[Permutations[num, {i}], #[[1]] != 0 &];
For[j = 1, j <= Length@test, j++,
If[FractionalPart@N@Sqrt@FromDigits@test[[j]] == 0 &&
FractionalPart@N@Sqrt@FromDigits@Reverse@test[[j]] == 0,
Print[FromDigits@test[[j]]]]
] ]

==3 ==
169
961
==4 ==
1089
9801
==5 ==
12769
96721
==6 ==
==7 ==
1238769
9678321
==8 ==
==9 ==
==10==

—————————–
http://www.pantip.com/cafe/wahkor/topic/X11514071/X11514071.html

ABCDEF แทนจำนวนใดได้บ้าง?
กำหนดให้
(1) ABCDEF แทนจำนวนซึ่งมี 6 หลัก
(2) ตัวอักษรแต่ละตัว แทนเลขโดด 1 – 9 ซึ่งอาจซ้ำกันได้
(3) AB ถอดรากที่สองแล้วได้จำนวนเต็ม
(4) CD ถอดรากที่สองแล้วได้จำนวนเต็ม
(5) EF ถอดรากที่สองแล้วได้จำนวนเต็ม
(6) ABCDEF ถอดรากที่สองแล้วได้จำนวนเต็ม

ตัวอย่างคำสั่ง Mathematica สำหรับปัญหานี้ครับ
num = {1, 2, 3, 4, 5, 6, 7, 8, 9};
test = Tuples[num, 6];

For[j = 1, j <= Length@test, j++,
If[FractionalPart@N@Sqrt@FromDigits@test[[j, # ;; # + 1]] & /@ {1, 3, 5} == {0, 0, 0} &&
FractionalPart@N@Sqrt@FromDigits@test[[j]] == 0,
Print[FromDigits@test[[j]]]]
]

166464
646416

——–

จาก http://www.pantip.com/cafe/wahkor/topic/X12638167/X12638167.html

 

ทำด้วย Mathematica

NestList[Total[IntegerDigits[#]^3] &, ตัวเลขที่หารด้วย 3 ลงตัว, จำนวนรอบจากข้อ (2-4) ]

เช่น เริ่มที่เลข 3 จำนวน 10 รอบ NestList[Total[IntegerDigits[#]^3]&, 3, 10]

{3, 27, 351, 153, 153, 153, 153, 153, 153, 153, 153}

หรือ เริ่มที่เลข 123345 (ตามตัวอย่าง) 10 รอบ NestList[Total[IntegerDigits[#]^3]&, 123345, 10]

{123345, 252, 141, 66, 432, 99, 1458, 702, 351, 153, 153}

มันมาหยุดอยู่ที่ 153

 

MathLink แบบง่ายๆ

April 21st, 2011 No comments

เดี๋ยวมาเล่าให้ฟังครับ เขียนหัวข้อไว้ก่อน 😛

MathLink

เขียน Mathematica package แบบง่ายๆ

March 12th, 2011 No comments

มาลองเขียน Mathematica package แบบง่ายๆกันครับ

Mathematica package คืออะไร Mathematica package ก็คือชุดคำสั่งหรือโปรแกรมที่ถูกเขียนขึ้นเพื่อใช้ในการคำนวณเฉพาะด้าน ซึ่งจะมีสกุล .m

โดยถ้าเปิดไฟล์ .m ด้วย text editor อย่างเช่น notepad หรือ Mathematica เองเราจะเห็น code ข้างในมีคำสั่งหลักๆดังนี้ เช่น

BeginPackage[ “ชื่อpackage`”]
คำสั่ง1::usage = “คำสั่ง1[ x] คำอธิบายการใช้คำสั่ง1”
Begin[ “Private`”]
คำสั่ง1[ x_] :=  ….
End[]
EndPackage[]

การเรียกใช้งาน package ใน Mathematica เพียงใช้คำสั่ง Get หรือเครื่องหมาย << เช่น ถ้าpackage เราชื่อ MyPackage ก็เพียงพิมพ์
Get[MyPackage`]
หรือ
<<MyPackage`

ตัวอย่าง Package ชื่อ MyPackage ซึ่งมีคำสั่งอยู่ สองคำสั่งคือ fun1[x ] สำหรับหาค่า x^3 กับ fun2[x,y] สำหรับหาค่า sin(x)*cos(y)

BeginPackage[ “MyPackage`”]

fun1::usage = “fun1[ x] calculates x^3 ”
fun2::usage = “fun2[ x,y] calculates sin(x)*cos(y)”

Begin[ “Private`”]

fun1[ x_] := x^3

fun2[x_,y_]:=Sin[x ] * Cos[y]

End[]
EndPackage[]

ในการทดลองเขียน package ก็เพียงเปิด Mathematica แล้วพิมพ์ Code ของ package
ลงไปใน notebook แล้ว save เป็นแบบ Mathematica package ดูขั้นตอนตามรูปครับ

ในการเรียกใช้งาน package ก่อนอื่นเราต้องทำการบอก Mathematica ก่อนว่า package (MyPackage.m) ของเราอยู่ที่ไหน
ในตัวอย่างนี้สมมุติว่า MyPackage.m อยู่ที่ C:/TEMP ซึ่งเราสามารถบอก Mathematica
โดยใช้คำสั่ง AppendTo เพื่อเพิ่ม “C:/TEMP” เข้าไปในตัวแปร $Path
ซึ่งเป็นตัวแปรที่เก็บ Path หลักๆที่ Mathematica จะใช้ในการค้นหา Package ต่างๆ
หรือจะใช้ Needs[“MyPackage`”,”C:/TEMP/MyPacjage.m”] ในการเรียกใช้งานก็ได้ครับ

%d bloggers like this:
Locations of visitors to this page