Visual C++

เขียนโปรแกรมด้วย Visual C++ 6.0

ขั้นที่ 1 ก่อนที่จะเขียนโปรแกรม Visual C++ 6.0 ผู้อ่านต้องทำการติดตั้งโปรแกรม Visual Studio 6.0

เอาไว้ภายในระบบคอมพิวเตอร์ของท่านเป็นลำดับแรก รายละเอียดการติดตั้ง Visual C++ ผู้เขียนจะไม่กล่าวถึง เพราะผู้เขียนอนุมานไว้ว่าระบบคอมพิวเตอร์ของท่านได้ติดตั้ง Visual C++ เรียบร้อยแล้ว โปรแกรม Visual C++ มาพร้อมกับชุดเต็มของ Visual Studio ซึ่งประกอบด้วย Visual C++ , Visual Basic และ InterDev

ขั้นที่ 2
เรียกโปรแกรม Visual C++ โดยการเลือก Start -> Programs -> Microsoft Visual Studio 6.0 ตามด้วย Microsoft Visual C++ 6.0 ดังภาพที่ปรากฎด้านล่างนี้
 

ขั้นที่ 3 เมื่อเข้าสู่โปรแกรมหลักของ Visual C++ จะแจ้ง Tip of the Day ให้ท่านทราบเกี่ยวกับเทคนิคต่าง ๆ เล็ก ๆ น้อย ๆ เกี่ยวกับการใช้งาน Visual C++

ถ้าท่านไม่ต้องการให้ไดอะล็อกดังกล่าวปรากฎในทุกครั้งที่เปิดโปรแกรม Visual C++ ให้คลิ๊กเอาเครื่องถูกออกจากช่อง Show tips at startup

ขั้นที่ 4 ภาพด้านล่างนี้คือหน้าจอหลักของโปรแกรม Visual C++
ซึ่งประกอบด้วยเมนูต่าง ๆ และเครื่องมือต่าง ๆ มากมาย รายละเอียดดังกล่าวเกี่ยวกับเครื่องมือและเมนูต่าง ๆ จะพูดถึงในบทต่อ ๆ ไป


ขั้นที่ 5 เริ่มต้นสร้างโปรแกรมด้วยการคลิ๊กเลือก File -> New หรือสามารถใช้ Ctrl + N ให้ผลลัพธ์เช่นเดียวกัน

การทำเช่นนี้หมายถึงการกำลังจะเริ่มต้นสร้างโค๊ดภาษาซีขึ้นมาใหม่ คล้ายกับการพิมพ์เอกสารใหม่ด้วยโปรแกรมประยุกต์ทั่ว ๆ ไป


ขั้นที่ 6
เราสามารถสร้างแอพลิเคชั่นในแบบต่าง ๆ ได้มากมาย
ซึ่ง Visual C++ สนับสนุนการพัฒนาซอฟต์แวร์หลากหลาย ในขั้นตอนเบื้องต้นเราจะเลือกการเขียนโปรแกรมเพื่อทำงานที่ Dos Prompt ดังนั้นให้ผู้อ่านเลือก Win32 Console Application
จากนั้นที่ช่อง Location: ให้ป้อนโฟล์เดอร์ที่ต้องการเก็บไฟล์โปรเจ็คของเรา ผู้เขียนเก็บไว้ที่ C:\VC
ถัดมาในช่อง Project Name: ให้ป้อนชื่อโปรเจ็ค ตอนนี้ผู้เขียนให้โปรเจ็คนี้ชื่อว่า helloworld ดังนั้นป้อนคำว่า helloworld ลงไป เมื่อพร้อมแล้วคลิ๊กที่ปุ่ม OK


ขั้นที่ 7
ในลำดับถัดมาโปรแกรม Visual C++ จะให้เราเลือกชนิดของ Console ที่เราต้องการสร้าง ซึ่งมี 4 ชนิด คือ
– เป็นโปรแกรมว่างเปล่าที่ไม่มีซอร์สโค๊ดให้เราเลย
– โปรแกรมจะสร้างซอร์สโค๊ดง่าย ๆ ให้เรา
– โปรแกรมจะสร้างซอร์สโค๊ด Hello World แสดงข้อความง่าย ๆ ให้เรา
– โปรแกรมจะสนับสนุนการเขียนโปรแกรมด้วยชุดคำสั่ง MFC รายละเอียดส่วนนี้จะกล่าวถึงในส่วนต่อ ๆ ไป
ขอให้ผู้อ่านเลือก An empty project เพื่อสร้างโปรเจ็คเปล่า เมื่อพร้อมแล้วกดปุ่ม Finish


ขั้นที่ 8
ลำดับถัดมา Visual C++ จะแจ้งให้เราทราบรายละเอียดเกี่ยวกับโปรเจ็คของเรา ซึ่งโปรเจ็คของเราตั้งเก็บไว้ที่ ไดเร็คทอรี่ C:\vc\helloworld และสร้างโปรเจ็คชนิด Win32 Console กล่าวคือรันที่ Dos Prompt และมีชนิดเป็น Empty Console Application หรือโปรแกรมที่ไม่มีโค๊ดอะไรให้เรา เป็นโปรเจ็คเปล่า ๆ เอาไว้รันใน Dos เท่านั้น เมื่อรับทราบแล้วกดแป้น OK เพื่อเข้าสู่หน้าจอการเขียนโปรแกรมต่อไป


ขั้นที่ 9
คลิ๊กที่รูปกระดาษซ้ายมือด้านบน จะปรากฎวินโดวส์ชื่อ Text1
สังเกตภาพด้านล่างนี้ประกอบด้วยวินโดวส์ย่อย ๆ หลายอัน หนึ่งในนั้นคือ Text1 ซึ่งเป็นพื้นที่ว่างเปล่า ท่านมองเห็นมั้ยว่า Text1 อยู่ไหน ถ้าไม่รู้ว่ามันคือตรงไหน กวาดสายตาไปทั่วทั้งรูปภาพ ถ้าท่านเห็น Text1 แล้วใช่แล้วครับมันคือกรอบสี่เหลี่ยมที่มีสีน้ำเงินเข้มด้านบนเป็นแถบสถานะว่ากำลังถูก Active ในขณะนั้น บริเวณนี้เองที่เราจะใช้ในการเขียนโค๊ดภาษาซี

ขั้นที่ 10 เขียนโค๊ดแกรมภาษาซีที่นี่
ในขั้นตอนนี้ผู้อ่านเขียนโปรแกรมภาษาซีลงในวินโดวส์ชื่อ Text1 โดยพิมพ์ตามดังภาพด้านล่างนี้



ขั้นที่ 11 :
ในขั้นตอนถัดมาให้กดที่ปุ่ม Save (รูปแผ่น Disket)
จากนั้นระบุชื่อไฟล์ว่า helloworld.c ดังภาพด้านล่างนี้ ขบวนการนี้เราเพียงกำลังบันทึกไฟล์เท่านั้น โดยเรากำหนดให้ซอร์สโค๊ดมีชื่อว่า helloworld.c


ขั้นที่ 12
เมื่อบันทึกเสร็จแล้วต่อไปเป็นการแทรกโค๊ดภาษาซีเพื่อให้เข้ามาเป็นส่วนหนึ่งของโปรเจ็ค โดยการคลิ๊กขวา แล้วเลือก Insert File into Project และเลือกชื่อไฟล์ ซึ่งตอนนี้คือคำว่า helloworld ขอให้ผู้อ่านพิจารณาจากภาพด้านล่างนี้


ขั้นที่ 13 : ขั้นตอนการคอมไพล์
ขอให้ผู้อ่านใช้เมาส์คลิ๊กที่เมนู Build และเลือก Execute helloworld.exe หรือจะคอมไพล์โดยการใช้คีย์ลัด กล่าวคือกดแป้น Ctrl + F5 ซึ่งจะหมายถึงการคอมไพล์โค๊ดเช่นเดียวกัน (อย่าลืมว่ากด Ctrl ค้างไว้แล้วตามด้วยแป้น F5 ในขณะที่แป้น Ctrl ยังคงกดอยู่ จากนั้นปล่อยมือทั้งสองข้างออกมาจากคีย์บอร์ด)


ขั้นที่ 14
ในการคอมไพล์ทุกครั้ง Visual C++ จะสร้างไฟล์ .EXE ทุกครั้ง ในกรณีนี้ไฟล์ดังกล่าวยังไม่ได้สร้างขึ้นมา ดังนั้น Visual C++ จะถามเพื่อแสดงการยืนยันที่จะคอมไพล์ด้วยข้อความดังภาพด้านล่างนี้

ขั้นที่ 15 เมื่อคอมไพล์เสร็จแล้วโปรแกรม Visual C++ จะทำการ Execute กล่าวคือสั่งให้ไฟล์ helloworld.exe ทำงานโดยอัตโนมัติและแสดงผลลัพธ์ดังปรากฎดังภาพด้านล่าง ในตัวอย่างนี้ข้อความที่ต่อจากคำว่า Hello World จะเป็นคำว่า Press any key to continue หมายความว่าโปรแกรม Visual C++ จะอนุญาติให้โปรแกรมเมอร์ตรวจสอบผลลัพธ์ ก่อนทุกครั้ง เมื่อโปรแกรมเมอร์ตรวจสอบผลลัพธ์เสร็จเรียบร้อยแล้วสามารถกดแป้นใด ๆ หนึ่งครั้งเพื่อปิดหน้าจอการ Execute ไปได้ เพื่อเข้าสู่การเขียนโปรแกรมต่อไป

ขั้นที่ 16 เมื่อเขียนโปรแกรมเสร็จเรียบร้อยแล้วและต้องการจบการทำงาน
ผู้อ่านสามารถคลิ๊กที่เมนู File -> Exit ซึ่งคล้ายกับการจบโปรแกรมทั่ว ๆ ไป

รายละเอียดการคอมไพล์ด้วย Visual C++ ค่อนข้างซับซ้อนสำหรับโปรแกรมเมอร์มือใหม่ แต่เมื่อท่านสามารถคอมไพล์ผ่านแล้วหนึ่งครั้ง นั่นหมายความว่าท่านได้ก้าวสู่อีกขั้นสำหรับการเขียนโปรแกรมด้วย Visual C++
แหล่งอ้างอิง
http://www.gnu.org/prep/standards_toc.html
http://www.google.com/

 

Algorithm Design lab 1: Polynomial division June 23, 2007 at 11:32 pm · Filed under Labs

เมื่อวันจันทร์ที่ผ่านมา ในแลปวิชา Algorithm Design and Analysis (จริงๆ มันไม่ใช่ Fundamental Algorithm นะ รู้สึกว่าจะเข้าใจผิดกันอยู่นาน) อาจารย์ให้การบ้านมาทำ 3 ข้อ คือให้เขียนฟังก์ชั่นการคำนวณค่า Polynomial เมื่อให้ Array สัมประสิทธิ์กับค่า x มา โดย 3 วิธีนี้จะใช้จำนวนการคูณต่างกัน ซึ่งก็ไม่ยากเท่าไหร่ เพราะอาจารย์เขียนเป็น Pseudo-code มาให้แล้ว แต่ว่ามันติดอยู่หนึ่งข้อที่ต้องทำการหาร Polynomial ก่อนจะเอาไปคำนวณ ซึ่งเพื่อนๆ ก็นั่งงงกันแล้วเดินมาถามเต็มเลย

นี่ก็เลยลองเขียนดู ว่าจริงๆ มันยากหรือเปล่า ก็เขียนด้วย Visual C++ อ่านะ แต่ว่าคิดว่าคงจะอ่านกันได้ ไม่ได้เขียนใช้อะไรพิศดารมากมาย เพราะปกติเขียนแต่ VB.NET ก็ลองอ่านดูก่อนแล้วกัน รอบนี้เขียน Comment เป็นภาษาไทยให้ด้วย

Algorithm ที่ใช้ก็คือวิธีหารยาวธรรมดาน่ะนะ จริงๆ ลองคิดๆ ดูแล้ว เวลาที่ใช้ในการหารที่มันเสียเวลาในระดับ O(n2) เลยนะ เลยไม่แน่ใจว่าจริงๆ มันมีวิธีหารที่เร็วกว่านี้รึเปล่า เพราะว่าถ้าเสีย Overhead ขนาดนี้แล้ว จะคำนวณแบบ Preprocessing of coefficients ได้เร็วเืท่าเดิมรึเปล่า

ถ้ามีตรงไหนสงสัยก็เอามาถามได้นะ

Output

Dividend : 1.00 5.00 4.00 3.00 2.00 1.00
Divisor  : 1.00 1.00
Result   : 1.00 4.00 0.00 3.00 -1.00

polyDiv.cpp

#include "stdafx.h"
 
typedef struct {
    double* coeffs;
    int count;
} pn;
 
//ฟังก์ชั่นสร้าง PN
//อำนวยความสะดวก เอา array สปส กับตัวนับดีกรี
//มาแปะเป็นก้อนเดียวกันอยู่ใน PN
pn* createPN(double* coeffs, int count)
{
    pn* r = new pn;
    r->coeffs = coeffs;
    r->count = count;
    return r;
}
 
//ฟังก์ชั่นคืน memory ของ PN
//เพราะว่าต้องคืน memory ข้างใน PN ที่เป็น array สปส ด้วย
//ก่อนคืน memory ตัว PN เอง
void freePN(pn* p)
{
    free(p->coeffs);
    free(p);
}
 
//ฟังก์ชั่นหาร - หารเอา a ด้วย b แล้วคืนผลลัพธ์เฉยๆ
//เศษของการหารอยู่ในตัวแปร tmp
pn* polyDiv(pn* a, pn* b)
{
    //ดีกรีมากสุดของผลลัพธ์ = ดีกรีตัวตั้ง - ดีกรีตัวหาร + 1
    int rcount = a->count - b->count + 1;
 
    //สร้าง polynomial เอาไว้เก็บผลลัพธ์ (ดีกรี rcount)
    pn* res = new pn;
    res->coeffs = (double*)malloc(sizeof(double) * rcount);
    res->count = rcount;
 
    //สร้าง polynomial ตัวทด
    //แล้ว copy ตัวตั้งใส่ตัวทด
    pn* tmp = new pn;
    tmp->coeffs = (double*)malloc(sizeof(double) * a->count);
    tmp->count = a->count;
 
    for (int i=0;i<a->count;i++)
        tmp->coeffs[i] = a->coeffs[i];
 
    //ทำการหาร จากดีกรีมากสุด (ซ้ายสุด) ไปดีกรีน้อยสุด (ขวาสุด)
    for (int i=0;i<res->count;i++) {
 
        //เอาดีกรีสูงสุดของตัวหาร มาหารกับดีกรีสูงสุดของตัวทดหลักปัจจุบัน
        //แล้วเก็บไว้ใน pn ผลลัพธ์
        res->coeffs[i] = tmp->coeffs[i] / b->coeffs[0];
 
        //เอาตัวหารคูณกับผลลัพธ์ประจำหลัก แล้วหักออกจากตัวทด
        for (int j=0;j<b->count;j++) {
            tmp->coeffs[i+j] -= b->coeffs[j] * res->coeffs[i];
        }
    }
 
    //คืน memory
    freePN(tmp);
 
    //ส่งผลลัพธ์กลับ
    return res;
}
 
//ฟังก์ชั่นหลัก
int _tmain(int argc, _TCHAR* argv[])
{
    //ประกาศ array เก็บ coefficient
    double ax[] = {1.0, 5.0, 4.0, 3.0, 2.0, 1.0};
    double bx[] = {1.0, 1.0};
 
    //สร้าง polynomial (array กะตัวนับธรรมดา)
    pn* a = createPN(ax, 6);
    pn* b = createPN(bx, 2);
 
    //polynomial ไว้เก็บผลลัพธ์
    pn* result;
 
    //ส่ง a กะ b ไปคำนวณ
    result = polyDiv(a, b);
 
    //พิมพ์ผลลัพธ์ออกหน้าจอ
    printf("Dividend : ");
    for (int i=0;i<(a->count);i++)
        printf("%2.2f ", a->coeffs[i]);
 
    printf("n");
    printf("Divisor  : ");
    for (int i=0;i<(b->count);i++)
        printf("%2.2f ", b->coeffs[i]);
 
    printf("n");
    printf("Result   : ");
    for (int i=0;i<(result->count);i++)
        printf("%2.2lf ", result->coeffs[i]);
 
    printf("n");
 
    //หยุดให้อ่านผลลัพธ์
    getch();
 
    //คืน memory
    freePN(a);
    freePN(b);
    freePN(result);
}
แหล่งอ้างอิง
http://chakrit.com/labs/polynomial-division/
thank you http://logos.cs.uic.edu/Examples%20And%20Notes/misc/Visual%20C++%20Guide/visualcplusplus.html

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s