Results 1 to 10 of 10

Thread: ช่วยอธิบายโค๊ดภาษา C หน่อยคับ

  1. #1
    Junior Member
    Join Date
    Dec 2007
    Posts
    6


    คือมันเป็นโจทย์ที่อาจารย์ให้เป็นตัวอย่างนะคับ

    ที่ไม่เข้าใจมีเค่บรรทัดเดียวเอง คือ

    Code:
    ืืndigit[c-'0']++;
    ืื

    นี่คือโค๊ดโปรแกรมทั้งหมดนะคับ

    [code]#include<stdio.h>
    #include<conio.h>

    main(){

  2. #2


    Code:
    ndigit[c-&#39;0&#39;]++;
    เอาแบบง่ายๆ นะ

    สมมติให้ c = &#39;5&#39;

    ndigit[c-&#39;0&#39;]++; >>> ndigit[&#39;5&#39;-&#39;0&#39;]++ >>> ndigit[0x35-0x30]++ >>> ndigit[5]++

    สมมติให้ ndigit[5] = 1

    ndigit[5]++ >>> ndigit[5] + 1 >>> 2

  3. #3
    Jedi Global Moderator Gen0TypE's Avatar
    Join Date
    Jan 2008
    Location
    Khonkaen
    Posts
    312


    ภาษา c จะประมวลผลเกี่ยวกับ character ในรูปแบบของ รหัส ascii ครับ

    เพราะเฉพาะคำสั่ง c=getchar() ก็จะเก็บ รหัส ascii ไว้ในตัวแปร c ยกตัวอย่างเช่น

    - ถ้าเราพิมพ์เลข 1 ไป ตัวแปร c ก็จะเก็บค่า 49 (เป็น รหัส ascii ของตัวอักษร 1)
    ดังนี้นประโยค
    Code:
    ndigit[c-&#39;0&#39;]++;
    ก็คือ การเอา 49 (ค่าของตัวแปร c) ลบกับ รหัส ascii ของ 0 ซึ่่งก็คือ 48
    เมื่อแทนค่า character ด้วย รหัส ascii จะได้
    Code:
    ndigit[49-48]++;
    ซึ่งก็คือ
    Code:
    ndigit[1]++;
    นั่นเอง



    - แต่ถ้าเราพิมพ์ิเลข 2 ลงไป ในตัวแปร c ก็จะเก็บค่า 50 (รหัส ascii ของตัวอักษร 2)
    ดังนั้นจะได้
    Code:
    ndigit[50-48]++;
    ซึ่งก็คือ
    Code:
    ndigit[2]++;
    นั่นเอง

    จาก 2 ตัวอย่างที่ใ้ห้คาดว่าน่าจะพอเข้าใจจุดมุ่งหมายของคำสั่ง
    Code:
    ndigit[c-&#39;0&#39;]++;
    แล้วนะครับ



    ส่วนอื่นๆ ของโปรแกรมก็ไม่ยาก ให้ลองอ่านๆ ดูละกันครับ จะได้เป็นการฝึกทักษะ

  4. #4
    Junior Member
    Join Date
    Dec 2007
    Posts
    6


    ขอบคุณท่านอย่างมากทั้งสองที่มาช่วยตอบคับ

    คือผมมีข้อสงสัยอีกอย่างหนึ่งว่า เราจะสามารถทราบค่ารหัส ascii ของแต่ละตัวอักษรได้อย่างไร และมีกี่วิธีบ้างคับ

    อ๋อ แล้วอีกอย่างนะครับ มันมีระบบการนับยังไงครับ

    ขอขอบคุณล่วงหน้าอย่างสูง

  5. #5

  6. #6
    Junior Member
    Join Date
    Feb 2009
    Posts
    11


    ถ้า
    Code:
    ndigit[c-&#39;0&#39;]++;
    เท่ากับ
    Code:
    ndigit[&#39;c&#39;-48]++;
    แล้วทำไมเขาไม่ใช้
    Code:
    ndigit[&#39;c&#39;-48]++;
    ซะเลยอะครับ หรืออีกในความหมายหนึ่งคือ
    Code:
    ndigit[c-&#39;0&#39;]++;
    และ
    Code:
    ndigit[&#39;c&#39;-48]++;
    ต่างกันไงครับ

  7. #7
    Jedi Global Moderator Gen0TypE's Avatar
    Join Date
    Jan 2008
    Location
    Khonkaen
    Posts
    312


    Code:
    ndigit[c-&#39;0&#39;]++;
    กับ
    Code:
    ndigit[c-48]++;
    ความหมายเหมือนกันครับ

    แต่ที่ใช้
    Code:
    ndigit[c-&#39;0&#39;]++;
    เพราะเข้าใจง่ายกว่า

    เรื่องนี้ถ้าเขียนโปรแกรมไปสักพักจะเข้าใจมากขึ้นครับ
    แต่ก็ต้องศึกษาเกี่ยวกับรหัส ascii ด้วยนะ

  8. #8
    Junior Member
    Join Date
    Dec 2007
    Posts
    6


    ถ้า
    Code:
    ndigit[c-&#39;0&#39;]++;
    เท่ากับ
    Code:
    ndigit[&#39;c&#39;-48]++;
    แล้วทำไมเขาไม่ใช้
    Code:
    ndigit[&#39;c&#39;-48]++;
    ซะเลยอะครับ หรืออีกในความหมายหนึ่งคือ
    Code:
    ndigit[c-&#39;0&#39;]++;
    และ
    Code:
    ndigit[&#39;c&#39;-48]++;
    ต่างกันไงครับ
    [/b]
    จากที่ผมเข้าใจนะคับ
    Code:
    ndigit[c-&#39;0&#39;]++;
    จะเท่ากับ
    Code:
    ndigit[c-48]++;
    แต่
    Code:
    ndigit[c-&#39;0&#39;]++;
    มันจะไม่เหมือนกับ
    Code:
    ndigit[&#39;c&#39;-48]++;
    เพราะ ตัวอักษร &#39;c&#39; ตามรหัส ascii มันจะเท่ากับ 99 ไปซะ
    แล้วมันก็จะได้เท่ากับ
    Code:
    ndigit[99-48]++;
    ผมเข้าใจตามนี้ถูกหรือป่าวคับ ผู้รู้ช่วยยืนยันที

  9. #9
    Junior Member
    Join Date
    Nov 2008
    Posts
    3


    หาได้ในเว็บGoogle ครับ หรือไม่ก็เว็บ http://www.asciitable.com/ นี่ก็ดีครับผมใช้อยู่เลยครับ

  10. #10
    Senior Member retool2's Avatar
    Join Date
    Aug 2008
    Location
    Under Relocation
    Posts
    178


    Code:
    ndigit[c-&#39;0&#39;]++;
    มันจะไม่เหมือนกับ
    Code:
    ndigit[&#39;c&#39;-48]++;
    เพราะ ตัวอักษร &#39;c&#39; ตามรหัส ascii มันจะเท่ากับ 99 ไปซะ
    แล้วมันก็จะได้เท่ากับ
    Code:
    ndigit[99-48]++;
    ผมเข้าใจตามนี้ถูกหรือป่าวคับ ผู้รู้ช่วยยืนยันที
    [/b]
    เข้าใจถูกต้องครับ เนื่องจาก &#39;c&#39; คือ c ที่เป็น ตัวอักษร ไม่ใช่ตัวแปรครับ

Similar Threads

  1. Replies: 1
    Last Post: 11-08-2008, 08:44 PM
  2. Replies: 0
    Last Post: 21-09-2007, 01:19 AM
  3. ขอโปรแกรม IE 7.0 หน่อยคับ
    By 531121 in forum Window Application
    Replies: 1
    Last Post: 01-09-2006, 11:45 AM
  4. สอน asp กับ apache หน่อยคับ
    By vengrum in forum PHP,ASP,Javascript, Html
    Replies: 0
    Last Post: 20-10-2004, 04:13 PM

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •