หน้าเว็บ

วันพุธที่ 18 พฤษภาคม พ.ศ. 2554

ตัวอย่างโปรแกรม C - สร้างรูปสามเหลี่ยม

ตัวอย่าง 1:

*
* *
* * *
* * * *
* * * * *

เราพิจารณาจากรูป จะเห็นว่า เป็นรูปสามเหลี่ยมที่มีจุดเริ่มต้นอยู่ทางด้านซ้ายเป็นหลัก มีแถวทั้งหมด 5 แถว (rows) โดยแต่ละแถวจะแสดงเครื่องหมาย "*" ตามจำนวนของบรรทัดหรือแถวนั้นๆ เช่น แถวแรก จะแสดงเครื่องหมาย "*" ตัวเดียวเท่านั้น และถ้าเป็นแถวที่ 4 ก็จะแสดงเครื่องหมาย "*" 4 ตัวด้วยกัน เพราะฉะนั้นเราจะใช้ loop ในการทำงานทั้งหมด 2 loop ด้วยกัน โดยกำหนดให้ loop แรก ทำหน้าที่เป็นแถว และ loop ที่ 2 ทำหน้าที่แสดงเครื่องหมาย "*" เท่ากับจำนวนของแถวนั้นๆ (อธิบายก่อนหน้า)

Source Code:

int main ( ) {
     int r, c; // r - row, c - column

     for (r = 0; r < 5; r++) {
          for (c = 0; c <= r; c++) {
               printf("*");
          }
          printf("\n");
     }
     return 0;
}

จาก Source Code ที่เขียนมาได้ใช้ for loop ซึ่งง่ายและสะดวก แต่ถ้าต้องการใช้ loop อื่นก็สามารถทำได้นะครับ ลองนำไปประยุกต์ดูครับ

ตัวอย่าง 2:

* * * * *
* * * *
* * *
* *
*

เราพิจารณาจากรูป จะเห็นว่าเป็นรูปสามเหลี่ยมที่มีจุดเริ่มต้นอยู่ทางด้านซ้ายเป็นหลัก มีแถวทั้งหมด 5 แถว (rows) โดยแต่ละแถวจะแสดงเครื่องหมาย "*" เช่นกัน (คล้ายตัวอย่างที่ 1) ในการแสดงเครื่องหมาย "*" ของแถวแรกจะแสดงทั้งหมด 5 ตัวด้วยกัน และลดลงตามลำดับ เพราะฉะนั้นเราจะ loop ในการทำงานทั้งหมด 2 loop ด้วยกัน โดยกำหนดให้ loop แรก ทำหน้าที่เป็นแถว และ loop ที่ 2 ทำหน้าที่แสดงเครื่องหมาย "*"

Source Code:

int main( ) {
     int r, c; // r - row, c - column

     for (r = 0; r < 5; r++) {
          for (c = 0; c < 5-r; c++) {
               printf("*");
          }
          printf("\n");
     }
     return 0;
}

ถ้าพิจารณาจาก Source Code ที่เขียนจะเห็นว่ามีลักษณะคล้ายกัน ใช่ไหมครับ แต่สิ่งที่เปลี่ยน (แก้ไข) คือ c < 5-r ซึ่งเป็นเงื่อนไขในการตรวจสอบที่อยู่ใน loop ของ c และยังใช้ for loop ซึ่งง่ายและสะดวก แต่ถ้าต้องการใช้ loop อื่นก็สามารถทำได้นะครับ ลองนำไปประยุกต์ดูครับ แต่ถ้าเขียนอีกรูปแบบหนึ่งก็จะได้ผลลัพธ์เช่นเดียวกััน (เหมือนกัน)

Source Code:

int main ( ) {
     int r, c; // r - row, c - column

     for (r = 5; r > 0; r--) {
          for (c = 0; c < r; c++) {
               printf("*");
          }
          printf("\n");
     }
     return 0;
}

ถ้าพิจารณาจาก Source Code ที่เขียนจะเห็นว่ายังมีลักษณะคล้ายกัน แต่ปรับเปลี่ยนหลักการทำงานใหม่ คือ ให้ค่าเริ่มต้นของแถว จากเดิมเป็น 0 เปลี่ยนเป็น 5 ที่ loop ของ r และเป็นเงื่อนไขที่ loop ของ c ด้วย (สังเกตที่สีนะครับ)

สุดท้ายเป็นข้อคิดนะครับ:
จากตัวอย่างที่แสดงให้เห็นนั้นจะสังเกตได้ว่าแนวคิดจะเหมือนกัน (คล้ายกัน) เพียงแต่กระบวนการประมวลผลหรือการเปรียบเทียบเงื่อนไขอาจแตกต่างกัน แต่ผลลัพธ์ที่ได้จะเหมือนกัน เพราะฉะนั้น แนวคิดอาจจะเหมือนกัน แต่กระบวนการอาจจะไม่เหมือนกันก็ได้ครับ (ฝากให้คิด)

81 ความคิดเห็น:

  1. ไม่ระบุชื่อ9 ธันวาคม 2554 เวลา 14:16

    ยา กกกโค ดด อ่ะ !!!!!!!!!!!

    ตอบลบ
    คำตอบ
    1. มันก็ต้องยากสิคุณต้องหมั่นฝึกฝนครับ

      ลบ
  2. ไม่ระบุชื่อ27 มกราคม 2555 เวลา 18:44

    ถ้าทำเป็นรูปต้นสนละ

    ตอบลบ
    คำตอบ
    1. ไม่ระบุชื่อ28 กันยายน 2555 เวลา 10:56

      ไปทำบ้านป้าคุนดูสิค่ะ รูปต้นสนอ้ะ ^^

      ลบ
    2. เก่งจังเลยปาก

      ลบ
    3. มันก็ทำได้หนิ อิเจ๊ ทำไม่ได้แล้วทำเป็นปากดี

      ลบ
    4. ไม่ระบุชื่อ28 พฤษภาคม 2560 เวลา 23:44

      การเป็นโปรเเกรมเมอ ต้องคิดนอกกรอบสิคับ ยิ่งไม่มีทางยิ่งท้าทาย

      ลบ
  3. ไม่ระบุชื่อ12 สิงหาคม 2555 เวลา 22:50

    อยากได้โค้ดที่รับค่าแล้วเก็บค่าไว้ แล้วประมวลผลออกมาทีเดียวอ่ะค่ะ ทำยากไหมค่ะ

    ตอบลบ
  4. ไม่ระบุชื่อ21 สิงหาคม 2555 เวลา 15:40

    อยากได้เป็นรูปสามเหลี่ยมทำไงคะ

    ตอบลบ
  5. แล้วแบบนี้ล่ะครับ? รูปสามเหลี่ยม

    _____*
    ____***
    ___*****
    __*******

    ตอบลบ
    คำตอบ
    1. ไม่ระบุชื่อ28 กันยายน 2555 เวลา 10:55

      ถามพี่ดูซ่อ

      ลบ
    2. ไม่ระบุชื่อ29 กันยายน 2555 เวลา 23:10

      int n;
      scanf("%d",&n);
      for(int i=1;i<=n;i++)
      {
      for(int j=0;j=n)
      printf("*");
      else
      printf(" ");
      }
      printf("\n");
      }
      scanf(" ");
      }

      ลบ
    3. ไม่ระบุชื่อ14 มกราคม 2558 เวลา 22:08

      ถูกปะครับ

      ลบ
    4. ไม่ระบุชื่อ19 มกราคม 2560 เวลา 01:16

      #include
      main(){
      int num=10;
      int i,j,x;

      for(i=1; i<=num; i++){
      for(j=num-i; j>0; j--)
      printf(" ");
      for(x=i; x>=1; x--)
      printf("#");

      printf("\n");}

      }

      ลบ
    5. ไม่ระบุชื่อ20 มกราคม 2560 เวลา 13:40

      ทำรูปผีเสื้อทำไงคะ แบบสามเหลี่ยมหันหลังชนกันอะค่ะ

      ลบ
  6. ไม่ระบุชื่อ28 กันยายน 2555 เวลา 10:51

    ง่ายอ้ะ อั้ยย้ะ !! ^^

    ตอบลบ
  7. ไม่ระบุชื่อ22 มกราคม 2556 เวลา 01:35

    ง่ายมาก

    ตอบลบ
  8. สร้างสี่สามเหลี่ยม ละทำ ไง (for)

    ตอบลบ
  9. ไม่ระบุชื่อ9 กรกฎาคม 2556 เวลา 15:35

    อยากได้
    1
    12
    123
    1234
    12345
    123456
    1234567
    12345678
    123456789
    12345678910
    123456789
    12345678
    1234567
    123456
    12345
    1234
    123
    12
    1

    ตอบลบ
    คำตอบ
    1. ไม่ระบุชื่อ23 กรกฎาคม 2556 เวลา 21:32

      ตอบช้าไปป่าวค่ะ #include
      main()
      {
      int a,b,c;
      for(a=1;a<=10;a++)
      {
      for(b=1;b<=10-a;b++)
      printf("");
      for(c=1;c<=a;c++)

      printf("%d",c);
      printf("\n");

      }
      for(a=9;a>=1;a--)
      {
      for (b=1;b<=10-a;b++)
      printf("");
      for (c=1;c<=a;c++)
      printf("%d",c);
      printf("\n");

      }
      }

      ลบ
    2. ไม่ระบุชื่อ4 กันยายน 2557 เวลา 14:33

      protected void Page_Load(object sender, EventArgs e)
      {
      int i,j;


      for (i = 1; i <= 10; i++)
      {
      for (j = 1; j <= i; j++)
      {
      Response.Write(j + " ");
      }
      Response.Write("
      ");
      }
      for (i = 9; i >= 1; i--)
      {
      for (j = 1; j <= i; j++)
      {
      Response.Write(j + " ");
      }
      Response.Write("
      ");
      }
      }
      }

      ลบ
  10. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
    คำตอบ
    1. ความคิดเห็นนี้ถูกผู้เขียนลบ

      ลบ
  11. -----4
    ----34
    ---234
    --1234
    วนยังไงคับ
    และก็

    -----4
    ----343
    ---23432
    --1234321
    ใช้ c# คับ งงมากเลย วอนผู้รู้ช่วยด้วยครับ

    ตอบลบ
    คำตอบ
    1. อยากได้โปรเเรมรับค่าเลขจำนวนเต็ม เเล้วสร้างพีระมิดกลางจอครับจำนวนชั้นคือเลขที่เราป้อน

      ลบ
  12. ผมอยากได้ 1 โปรแกรมที่มี 3 ฟังชั่น อ่คับ ช่วยหน่อยได้ใหม เป่นโปรเจ็คงาน

    ตอบลบ
  13. อยากได้ที่มันเป็นรูปวงกลม 1.01 อ่ะค่ะ ทำได้ไมค่ะ

    ตอบลบ
  14. พิม 9 (enter)

    999999999
    9999999
    999999
    99999
    9999
    999
    99
    9

    ขอแบบคำสั่ง if ครับ :)

    ตอบลบ
  15. อยากได้
    *
    ***
    *****
    ********
    ***
    ***
    Merry X'mas

    ตอบลบ
  16. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  17. พี่คับ แล้ว ผมอยากได้ ให้มันสามารถป้อนค่าบรรทัดได้ด้วยอะคับ เช่น ผมใส่เลข 5
    ผล *
    ***
    *****
    *******
    *********
    ช่วยทีคับ ขอร้องๆๆ

    ตอบลบ
    คำตอบ
    1. ผลนะคับ มันติดไป ตัว (-) ไม่นัดนะคับ
      ----------------------*
      ---------------------***
      --------------------*****
      -------------------*******
      ------------------*********

      ลบ
  18. C....C
    CC..CC
    CCCCCC
    CC..CC
    C....C

    มีใครทำรูปผีเสื้อได้บ้างคะ?

    ตอบลบ
  19. *
    **
    ***
    **
    *
    แบบเนี้ยค่ะ ใครเขียนได้บ้างค่ะ

    ตอบลบ
    คำตอบ
    1. ไม่ระบุชื่อ4 กันยายน 2557 เวลา 14:35

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Web.UI;
      using System.Web.UI.WebControls;

      public partial class Default3 : System.Web.UI.Page
      {
      protected void Page_Load(object sender, EventArgs e)
      {
      int i,j;


      for (i = 1; i <= 10; i++)
      {
      for (j = 1; j <= i; j++)
      {
      Response.Write("*" + " ");
      }
      Response.Write("
      ");
      }
      for (i = 9; i >= 1; i--)
      {
      for (j = 1; j <= i; j++)
      {
      Response.Write("*" + " ");
      }
      Response.Write("
      ");
      }
      }
      }

      ลบ
  20. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
    คำตอบ
    1. ความคิดเห็นนี้ถูกผู้เขียนลบ

      ลบ
  21. *
    -**
    ---**
    -----**
    -------**
    ---------**
    แบบนี้เขียนไงครับ รับค่าแถวกับคอร์ลั่น แล้วให้รันออกมาดอกจันเป็นขั้นบันได ช่วยทำให้ดูน่อยครับ ภาษาซี

    ตอบลบ
  22. ________1
    _______121
    ______12321
    _____1234321
    ____123454321
    ___12345654321
    __1234567654321
    _123456787654321
    12345678987654321
    แบบนี้ต้องทำยังไงหรอครับ

    ตอบลบ
    คำตอบ
    1. ไม่ระบุชื่อ16 กันยายน 2557 เวลา 13:38

      #include
      main(){
      int num=0;
      int r,a,c;
      printf("Input Num : ");
      scanf("%d",&num);

      for(r=1; r<=num; r++){
      for(a=num-r; a>0; a--)
      printf(" ");
      for(c=r; c>=1; c--)
      printf("%d",c);
      for(c=2; c<=r; c++)
      printf("%d",c);
      printf("\n");}
      getch();
      }

      ลบ
    2. //Kitsada Ch. 59130040172
      //pattern (*)

      #include
      main(){
      int a,b;
      for(a=1;a<6;a++){
      for(b=9-a;b!=0;b--){
      printf(" ");
      }
      for(b=1;b!=a;b++){
      printf("*");
      }
      for(b=a;b>0;b--){
      printf("*");
      }
      printf("\n");
      }
      return 0;
      }

      ลบ
  23. #include
    #include
    main(){
    int i,j;
    for(i=8;i>=0;i--){
    for(j=9-i;j!=0;j--){
    printf(" ");
    }
    for(j=0;j!=i;j++){
    printf("*");
    }
    for(j=i;j>0;j--){
    printf("*");
    }
    printf("\n");
    }
    for(i=0;i<10;i++)
    {
    for(j=9-i;j!=0;j--)
    {
    printf(" ");
    }
    for(j=0;j!=i;j++)
    {
    printf("*");
    }
    for(j=i;j>0;j--)
    {
    printf("*");
    }

    printf("\n");
    }
    getch();
    }

    ตอบลบ
    คำตอบ
    1. 1
      123
      12345
      1234567
      123456789
      เขียนยังไงอ่ะครับผมงงง การวนรloopยังไงบอกผมทีเขียนนยังไง

      ลบ
    2. ____________1
      _________ 123
      __________12345
      _________1234567
      ________123456789
      ให้เป็นรูปพีระมิดแบบนี้อ่ะครับ

      ลบ
  24. อาจารย์สั่งให้เขียน
    Name=......
    Row= 2
    Column=5

    ค่าที่แสดงออกมา
    Name=......
    Row= 2
    Column=5

    1 2
    3 4
    5 6
    7 8
    9 10

    ใครทำได้ช่วยหน่อยครับ

    ตอบลบ
  25. ไม่ระบุชื่อ24 กันยายน 2557 เวลา 16:06

    12345654321
    12345_54321
    1234___4321
    123_____321
    12_______21
    1_________1
    1_________1
    12_______21
    123_____321
    1234___4321
    12345_54321
    12345654321

    ทำยังไงค่ะ

    ตอบลบ
  26. ไม่ระบุชื่อ25 กันยายน 2557 เวลา 13:19

    1 2 3 4 5 6 7 8 9
    2___________8
    3___________7
    4___________6
    5___________5
    6___________4
    7___________3
    8___________2
    9 8 7 6 5 4 3 2 1
    ขอรูปนี้ครับ ขอบคุณครับ ^^

    ตอบลบ
  27. ไม่ระบุชื่อ25 กันยายน 2557 เวลา 13:36

    1___2___3___4___5___6___7___8___9
    ________________________________
    2_______1_2_3_4_5_6_7_8_9_______8
    3_______2_______________8_______7
    4_______3_______________7_______6
    5_______4_______________6_______5
    6_______5_______________5_______4
    7_______6_______________4_______3
    8_______7_______________3_______2
    ________8_______________2_______
    ________9_8_7_6_5_4_3_2_1_______
    ________________________________
    9___8___7___6___5___4___3___2___1

    เป็นรูปสี่เหลี่ยมซ้อนกัน 2 รูปครับ อยากได้โค้ด
    ขอบคุณครับ

    ตอบลบ
  28. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  29. พิมพ์ 5

    X O X O X
    X O X O
    X O X
    X O
    X
    X O
    X O X
    X O X O
    X O X O X

    ตอบลบ
  30. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  31. ขอโทษครับ พี่พอจะรู้วิธีทำสามเหลี่ยมออกมาประมาณนี้มั้ยครับ ให้เป็นเลข 1-10 เรียงกันแบบนี้เลยอะครับ
    ----------------------------1
    _______________2__3
    _____________4___5___6
    ___________7__8____9__10
    ปล.
    คือผมเพิ่งหัดเรียนภาษา C อะครับ ยัง งงๆ อยู่เลย 555

    ตอบลบ
  32. ไม่ระบุชื่อ9 กรกฎาคม 2558 เวลา 23:22

    แล้ว อันนี้ล่ะค่ะ
    I
    * (1)
    I
    ** (2)
    I
    *** (3)
    I
    **** (4)
    I
    ***** (5)
    I
    ****** (6)
    I
    ******* (7)

    ตอบลบ
  33. อาจารย์สั่งให้หาloop for 20บรรทัดนะ แต่ 2 โค้ด

    ตอบลบ
  34. ไม่ระบุชื่อ24 ตุลาคม 2558 เวลา 00:42

    *
    **
    ***
    ****
    *****
    *****
    ****
    ***
    **
    *
    โดยใช้ loop while

    ตอบลบ
  35. 123456789
    2345678
    34567
    456
    5
    แบบนี้ทำยังไงหรอคะ รบกวนช่วยหน่อยค่ะ ต้องรีบส่งงานภายฝย16.40แล้วค่ะ

    ตอบลบ
    คำตอบ
    1. แบบที่เป็นรูปแบบสามเหลี่ยมคว่ำอ่ะค่ะ

      ลบ
  36. #รูปผีเสื้อค้ะทำไง

    ตอบลบ
  37. #รูปผีเสื้อค้ะทำไง

    ตอบลบ
  38. ไม่ระบุชื่อ21 กรกฎาคม 2559 เวลา 12:46

    พี่น้อง อยากได้รูปสามเหลี่ยมค่ะ
    ช่วยหน่อนนะคะ

    ตอบลบ
  39. พี่ค่ะ ทำดอกจันเป็นรูปเพชรล่ะค่ะ ช่วยหน่อยค่ะ

    ตอบลบ
  40. ไม่ระบุชื่อ19 กันยายน 2559 เวลา 16:16

    อยากได้ตัวหนังสือรูปเพชรค่ะ ใครทำได้บาง
    ANT
    N
    ANT
    N
    ประมาณนี้คะ

    ตอบลบ
  41. ขอบคุณมากครับ สำหรับเรื่องราวความรู้ดีๆครับ ^^

    ตอบลบ
  42. ไม่ระบุชื่อ20 มกราคม 2560 เวลา 14:06

    อยากให้ช่วยร฿ปผีเสื้อค่ะ
    A A
    AB BA
    ABC CBA
    ABCD DCBA
    ABCDEEDCBA
    ABCD DCBA
    ABC CBA
    AB BA
    A A

    ตอบลบ
  43. ผมพิมไปแล้วมันบอกว่าตรงprintf("*");มันผิดอะครับแก้ยังไงดี

    ตอบลบ
    คำตอบ
    1. บางทีมันก็บอกไม่ตรงลองเลื่อนดูบรรทัดอื่นๆดู

      ลบ
    2. ใช้คนละภาษาหรือป่าวครับ อาจจะใช้C# เพราะมันใช้ก้วยกันไม่ได้

      ลบ
  44. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  45. อาจารย์สั่งมาทำทำยังไงครับบอกที
    1
    123
    12345
    1234567
    123456789

    ตอบลบ
  46. อาจารย์สั่งมา ช่วยผมหน่อยครับ

    1
    123
    12345
    1234567
    123456789

    ตอบลบ
    คำตอบ
    1. ให้เป็นรูปพีรมิดอ่ะครับ
      _______________1
      ________-_____ 123
      _____________ 12345
      ____________ 1234567
      ___________ 123456789

      ลบ
  47. 11111*
    2222**
    333***
    44****
    5*****
    อยากได้อันนี้ค่ะ🙏👆👆

    ตอบลบ
  48. ไม่ระบุชื่อ3 ตุลาคม 2561 เวลา 19:52

    *
    *+*
    *+++*
    *+++++*
    *+++++++*
    *+++++++++*
    *+++++++++++*
    *+++++++++++++*
    *+++++++++++++++*
    *******************

    แบบนี้ค่ะ ช่วยหน่อยนะคะ

    ตอบลบ
  49. ผมอยากได้ flowchart อันข้างบนสุดครับ

    ตอบลบ
  50. อยากได้โปรเเรมรับค่าเลขจำนวนเต็ม เเล้วสร้างพีระมิดกลางจอครับจำนวนชั้นคือเลขที่เราป้อน

    ตอบลบ
  51. 111111111
    2222222
    33333
    444
    5
    ช่วยทำแบบนี้ให้หน่อยได้ไหมครับ ปวดหัวมากเลย

    ตอบลบ
  52. 111111111
    -2222222
    --33333
    ---444
    ----5
    ตรง - เป็นพื้นที่ว่างนะครับ
    ช่วยทำแบบนี้ให้หน่อยได้ไหมครับ ปวดหัวมากเลย

    ตอบลบ
  53. อยาก ได้
    001
    011 012
    021 022 023
    031 032 033 034
    041 043 044 045 046
    วนแบบนี้ จนถึง 100

    ตอบลบ
  54. อยากได้รูป*เป็นพีระมิดกลับด้านค่ะ ที่หันปลายเเหลมลง

    ตอบลบ