Home
Gallery
รวมเว็บเจ๋ง
บล็อคทั้งหมด
ติดต่อ
สมัครสมาชิก
ล็อคอิน
ประเภทเนื้อหา
Blog - Diary
Blog - Program
Blog - Triads
Blog - Tips&Give
ล่าสุด
ฝากข้อความ
ชื่อ:

ข้อความ:

หาเรื่องอัพ lab prog 8.1
เสาร์, 23 สิงหาคม 2008



     ไม่มีอะไร แค่หาเรื่องอัพ ครับ 555 ได้เรื่องอัพแล้ว คือจะทยอยเอางานแลปคอมต่างๆ มาแปะในเว็บ พร้อมอธิบายนิโหน่ย (แปรผันตามความขยัน ณ เวลานั้น) เผื่อเพื่อนๆใกล้สอบแล้วจะได้ เข้ามาหาอ่านง่ายๆ เพราะตูขี้เกียจทำสรุปให้แล้ว


ป.ล. ไม่ได้แปลว่าที่เอามาลงที่ถูกต้องนะครับ โปรดใช้วิจารณยานอวกาศในการอ่าน....


Lab 8.1 Array

1.Write a C program to collect the temperature of 12 months using array and loop. Write 3 functions for calculate the average of temperature in 1 year and show the highest and lowest temperature.

Code :

#include <stdio.h>   // เรียกเจ้านี่เพราะเราใช้คำสั่ง Input out
#include <conio.h> // เรียกเจ้านี่เพราะเราใช้ getch();
void tem_avg(float[12],float *);   // 1. หลังตัวแปรแรกเป็น [12] เพราะเราเรียกอะเรย์ขนาด[12]
void min_max(float[12],float *,float *); // เหมียนข้อแรก
main(){
       float t[12],avg,min,max;  // 2.ประกาศตัวแปรธรรมดา 3 ตัว อะเรย์ขนาด 12 อีก 1 ตัว เป็น float
       int i ;                                   // 3. ประกาศ i เป็น int
       printf ("\t\t\t\tLab 8.1\n\nPlease enter temperature of\n");
       for(i=0;i<12;i++){            // 4.ใช้ for เพื่อรันรับค่าอุณหภูมิรายเดือน (12 เดือน) ไปเก็บในตัวแปรอะเรย์ทั้ง 12 (t[0]-t[11])
                         printf ("month %d :",i+1);
                         scanf ("%f",&t[i]);
                         }                     // จบข้อ 4.
       tem_avg(t,&avg); // 5. เรียกใช้ฟังก์ชั่น tem_avg โดยให้คืนค่ากลับมาที่ avg (ตัวแปรอะเรย์ใส่แค่ชื่อไม่ต้องใส่ขนาด)
       min_max(t,&min,&max); // 6. เรียกใช้ฟังก์ชั่น min_max แล้วคืนค่ากลับมาที่ min,max ด้วย
       printf("\nThe highest temperature is %.2f\nThe lowest temperature is %.2f\nAn average temperature in 12 months is %.2f",max,min,avg);  // 7.พิมพ์ผลออกทางจอ
       getch();  
       return 0;
       }  // 8.จบฟังก์ชั่นmain
      
void tem_avg(float t[12],float *avg){       // 9. เริ่มฟังก์ชั่น tem_avg
     int i;
     float sum=0;
     for (i=0;i<12;i++){                    // 10. ใช้ for เพื่อเอาค่าในแต่ละอะเรย์มาบวกกัน
         sum+=t[i];}
     *avg = sum/12;                       // 11. หารผลรวมด้วย 12 (หาค่าเฉลี่ย)
     }                                                 // 12. จบฟังก์ชั่น tem_avg
void min_max(float t[12],float *min,float *max)  // 13. เริ่มฟังก์ชั่น min_max
{
     int i;
     *min = t[0];
     *max = 0;
     for (i=0;i<12;i++){        // 14. ใช้ for เพื่อวนตรวจสอบค่าในอะเรย์ทีละตัว
                      if (t[i]>*max){             // 15. ถ้าค่าไหนมันมากกว่า *max ก็ให้มันเป็น *max ตัวใหม่แทน
                                      *max = t[i];}
                      if (t[i]<*min){             // 16. ถ้าค่าไหนน้อยกว่า min ก็ให้เป็น min ตัวใหม่แทน
                                     *min = t[i];}}
     }                                    // จบฟังก์ชั่น min_max

Homework

1.Write a C function named det() that accepts a matrix size 4 by 4 and calculate the determinant value.
-Receive input from keyboard
-Using nest loop in receive statement
- Show the matrix and result

6

-8

14

5

-3

1

11

20

4

-7

9

2

15

8

16

2

อ.กำหนดมาว่า ให้ใช้วิธีต่อแถวออกมาอีสามแถวแล้ว คูณลงลบคูณขึ้นเอา เพราะจริงๆต้องใช้ cofacter ซึ่งคำตอบไม่ตรงกัน ในที่นี้ต้องการแค่คอนเซ็ปต์เฉยๆ ไม่ได้มองถึงความถูกต้องทางคณิตศาสตร์ว่า det 4x4 หายังไง

ป.ล. ถ้าใส่ค่าตามด้านบน det = 4363

ก่อนอื่นเรามาเขียนก่อน ว่าอะไรคูณลง อะไรคูณขึ้น หลักไหนคูณหลักไหนมั่ง จะได้ว่า

คูณลง     (11x22x33x44) + (21x32x43x14) + (31x42x13x24) + (41x12x23x34)
คูณขึ้น     (14x23x32x41) + (24x33x42x11) + (34x43x12x21) + (44x13x22x31)

แต่อย่าลืมว่าเราเก็บอะเรย์โดยเริ่มที่ 0 ถึง (n-1) จึงลบทุกหลักทุกแถวลงไป 1 เพื่อให้ตัวแปรตรงกัน

คูณลง     (00x11x22x33) + (10x21x32x03) + (20x31x02x13) + (30x01x12x23)
คูณขึ้น     (03x12x21x30) + (13x22x31x00) + (23x32x01x10) + (33x02x11x20)

ทีนี้เราก็เอาไปเขียนโปรแกรมได้แล้ว

ป.ล. เวลาป้อน ป้อนทีละตัวครับไล่หลัก 1 แถว 1 หลัก 1 แถว 2 ไปเรื่อยๆเลย

Code :

#include <stdio.h>  // เรียกเจ้านี่เพราะเราใช้คำสั่ง Input out
#include <conio.h> // เรียกเจ้านี่เพราะเราใช้ getch();
void det(int[4][4],int *);   // 1.สร้างฟังก์ชั่น det
int main(){
       int met[4][4],i,j,ans ;
       for (i=0;i<4;i++){      // 2. ใช้ for นอกรันค่า i (หลัก)
           for (j=0;j<4;j++){  // 3. ใช้ for ในรันค่า j (แถว)
               printf ("input value [%d],[%d] : ",i+1,j+1); // 4. เนื่องจากเมตริกส์เริ่มที่ 1 แต่อะเรย์เริ่มที่ 0 เลยต้อง + 1 ให้ตรงกัน
               scanf ("%d",&met[i][j]);}}
       det (met,&ans); // 5.เรียกใช้ฟังก์ชั่น det แล้วคืนค่ามาที่ ans
       printf ("\n\nthis metrix is\n\n");  // 6. เริ่มส่วนแสดงผลเมตริกส์
       for (i=0;i<4;i++){ // 7. ใช้ for นอกรันหลัก
           for (j=0;j<4;j++){  // 8. ใช้ for ในรันแถว
               printf ("\t%d",met[j][i]);}  // 9. เนื่องจากแสดงผลเป็นแนวนอน ต้องให้หลักขยับไปเรื่อย จึงใช้ j ก่อน i
               printf("\n");}  // 10. แสดงผลครบ 1 บรรทัดก็เว้นวรรค (จบfor นอกตรงนี้ด้วย)
       printf ("\n\nThe determinant of this matrix is %d",ans);
      
       getch();
       return 0;
       }
      
void det (int met[4][4],int *ans){  // เริ่มฟังก็ชั่น det
     int up[5],down[5];
     down[0] = met[0][0]*met[1][1]*met[2][2]*met[3][3];   //คำนวณคูณลง
     down[1] = met[1][0]*met[2][1]*met[3][2]*met[0][3];   //คำนวณคูณลง 
     down[2] = met[2][0]*met[3][1]*met[0][2]*met[1][3];   //คำนวณคูณลง
     down[3] = met[3][0]*met[0][1]*met[1][2]*met[2][3];   //คำนวณคูณลง
     down[4]= down[0]+down[1]+down[2]+down[3];   //คำนวณผลรวมคูณลง
     up[0] = met[0][3]*met[1][2]*met[2][1]*met[3][0];   //คำนวณคูณขึ้น
     up[1] = met[1][3]*met[2][2]*met[3][1]*met[0][0];   //คำนวณคูณขึ้น
     up[2] = met[2][3]*met[3][2]*met[0][1]*met[1][0];   //คำนวณคูณขึ้น
     up[3] = met[3][3]*met[0][2]*met[1][1]*met[2][0];   //คำนวณคูณขึ้น
     up[4] = up[0]+up[1]+up[2]+up[3];   //คำนวณผลรวมคูณขึ้น
     *ans = down[4] - up[4];     //คูณลงลบคูณขึ้น
      }

งงก่อ


เพิ่มคอมเมนต์อ้างอิงบทความนี้พิมพ์ส่งให้เพื่้อนบันทึกไปที่ del.icio.us
<< หน้าแรก < ย้อนกลับ 1 2 3 4 5 6 7 8 9 10 หน้าถัดไป > หน้าสุดท้าย >>