Computer programming for engineers
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

Computer Programming for Engineers PowerPoint PPT Presentation


  • 61 Views
  • Uploaded on
  • Presentation posted in: General

Computer Programming for Engineers. อาเรย์ (Arrays). Arrays of Numbers. ความหมายของอาเรย์ (Definition of Arrays). อาเรย์คือกลุ่มของตำแหน่งในหน่วยความจำที่เกี่ยวข้องกันโดย มีชื่อร่วมกันและมีชนิดเหมือนกัน

Download Presentation

Computer Programming for Engineers

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Computer programming for engineers

Computer Programming for Engineers

อาเรย์ (Arrays)


Arrays of numbers

Arrays of Numbers


Definition of arrays

ความหมายของอาเรย์ (Definition of Arrays)

  • อาเรย์คือกลุ่มของตำแหน่งในหน่วยความจำที่เกี่ยวข้องกันโดยมีชื่อร่วมกันและมีชนิดเหมือนกัน

  • ตัวอย่างเช่น ประกาศให้ตัวแปรชื่อว่า billy มีสมาชิกประเภท int 5 ตัวสามารถทำให้เราสามารถเก็บข้อมูลทั้ง 5 ตัวได้โดยใช้ชื่อเพียงชื่อเดียว

  • แต่ละช่องว่างในรูปแสดงถึงสมาชิกในอาเรย์ โดยลำดับของสมาชิกมีตั้งแต่ 0 ถึง 4

  • ลำดับแรกของสมาชิกอาเรย์นั้น คือ 0 เสมอ

  • การที่จะอ้างถึงตำแหน่งของสมาชิก (index) ตัวใดในอาเรย์ ใช้ชื่ออาเรย์และหมายเลขระบุตำแหน่งหรือลำดับของสมาชิกในอาเรย์ อาทิเช่น

billy [2]


Declaration of arrays

การประกาศอาเรย์ (Declaration of Arrays)

  • การจะใช้อาเรย์นั้นต้องมีการประกาศก่อนใช้ดังเช่น ตัวแปรธรรมดา โดยปรกติอยู่ในรูปแบบ

    type name [elements];

  • ซึ่ง name คือ ชื่ออาเรย์

  • type หมายถึงชนิด อาทิเช่น int, float, ฯลฯ และ elements ระบุจำนวนสมาชิกในอาเรย์

  • โดยในบทเรียนนี้ elements จะเป็นค่าคงที่เท่านั้น

    ตัวอย่าง

    int billy [5];

    float c [12], x[27];


Array initialization

การกำหนดค่าเริ่มต้นในอาเรย์ (Array Initialization)

  • ค่าของแต่ละสมาชิกในอาเรย์หลังจากการประกาศใช้ นั้นมักจะไม่ใช่ค่าที่เราต้องการ ดังนั้นเราควรจะมีการใส่ค่าเริ่มต้นไปในอาเรย์ โดยมีอยู่สองวิธีหลักๆคือ

  • วิธีแรก การกำหนดค่าเริ่มต้นพร้อมกับการประกาศ อาทิเช่น การกำหนดให้ อาเรย์ billy มีค่าเป็นดัง

  • นอกจากนั้นผลที่เกิดขึ้นสำหรับชุดคำสั่งในแต่ละชุดด้านล่างเป็นดังนี้

intbilly [5] = {16, 2, 77, 40, 12071 };

int n[10] = { 1 };

int n[] = {1, 2, 3, 4, 5};

int n[5] = { 32, 27, 64, 18, 95, 14 };

{1,0,0,….,0}

n มีสมาชิก 5 ตัว

Error!


Array initialization1

การกำหนดค่าเริ่มต้นในอาเรย์(Array Initialization)

  • วิธีการที่สอง คือทำการเริ่มต้นค่าในโปรแกรมอาทิเช่น

    การกำหนดให้ค่าเริ่มต้นของสมาชิกทั้ง 10 ใน อาเรย์n มีค่าเป็น 0

  • /* initialize elements of array n to 0 */

    • for ( i = 0; i < 10; i++ ) {

  • n[ i ] = 0; /* set element at location i to 0 */

  • /* end for */


Symbolic constant

การกำหนดขนาดของอาเรย์ได้ด้วยค่าคงที่สัญลักษณ์ (Symbolic Constant) เพื่อประหยัดเวลา

โปรแกรมนี้ ซึ่งมีผลลัพธ์ด้านขวา

มีการใช้ SIZE ทั้งหมด 3 ที่

ผลลัพธ์

  • 1 /* Example */

  • 2 Initialize the elements of array s to the even integers from 2 to 20 */

  • 3 #include <stdio.h>

  • 4 #define SIZE 10

  • 5

  • 6 /* function main begins program execution */

  • 7 int main()

  • 8 {

  • 9 /* symbolic constant SIZE can be used to specify array size */

  • 10 int s[ SIZE ]; /* array s has 10 elements */

  • 11 int j; /* counter */

  • 12

  • 13 for ( j = 0; j < SIZE; j++ ) { /* set the values */

  • 14 s[ j ] = 2 + 2 * j;

  • 15 } /* end for */

  • 16

  • 17 printf( "%s%13s\n", "Element", "Value" );

  • 18

  • 19 /* output contents of array s in tabular format */

  • 20 for ( j = 0; j < SIZE; j++ ) {

  • 21 printf( "%7d%13d\n", j, s[ j ] );

  • 22 } /* end for */

  • 23

  • 24 return 0; /* indicates successful termination */

  • 25

  • 26 } /* end main */

  • Element Value

  • 0 2

  • 14

  • 26

  • 3 8

  • 4 10

  • 5 12

  • 6 14

  • 7 16

  • 8 18

  • 9 20

เมื่อเรากำหนดให้ค่าคงที่ SIZE เป็น 10 เมื่อมีความจำเป็นต้องเปลี่ยนขนาด เราจะเปลี่ยนเพียง 1 ที่ ด้านบน


Computer programming for engineers

การใช้ค่าต่างๆในอาเรย์

  • รูปแบบการใช้ค่าต่างๆในอาเรย์คือ name [index]ตัวอย่างเช่น billy[2] = 75;

  • กำหนดให้ สมาชิกที่ 3 ใน billy มีค่าเป็น 75

    และ

    เป็นการผ่านค่าดังกล่าวไปยังตัวแปร a

a= billy[2];

ข้อควรระวังเมื่อใช้อาเรย์

เนื่องจากอาเรย์ในภาษา C นั้นไม่มีการตรวจสอบขอบเขตของอาเรย์ ดังนั้นเราสามารถทำข้อผิดพลาดโดยการอ้างเกินขอบเขตที่กำหนดไว้ได้อาทิ เช่น billy[6] เป็นต้น


Computer programming for engineers

ตัวอย่างการใช้อาเรย์เพื่อหาผลรวม

Output

# include <stdio.h>

intbilly [] = {16, 2, 77, 40, 12071};

int n, result=0;

int main ()

{

for ( n=0 ; n<5 ; n++ )

{

result += billy[n];

}

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

return 0;

}


Input of array values

การรับค่าของอาร์เรย์(InputofArrayValues)

ในกรณีที่กำหนดค่าตัวแปรอาเรย์จากผู้ใช้ผ่านคีย์บอร์ดสามารถทำได้โดยใช้ร่วมกับคำสั่ง scanf() เช่นกัน

price[5] = 10.69;

scanf(“%d %lf”, &grades[0], &price[2])

scanf(“%d”, &code[0]);

scanf(“%d %d %d”, &grades[0], &grades[1], &grades[2]);

หรือการวนรอบเพื่อรับค่าจากผู้ใช้ก็เป็นได้ดังตัวอย่าง

for(i = 0; i <5; ++i)

{

printf(“Enter a grade: ” );

scanf(“%d”, &grades[i]);

}

จะเป็นการวนรอบรับค่า grade จากผู้ใช้จำนวน 5 ค่าและเก็บไว้ในอาเรย์ grades


Computer programming for engineers

แบบฝึกหัดในชั้นเรียน

จงสร้างตัวเลขสุ่มระหว่าง 0 ถึง 1 ขึ้นมาทั้งหมด 10,000 ตัว และแบ่งช่วง [0,1] ออกเป็น 20 ช่วงความกว้างช่วงละ 0.05. ดังนั้นช่วงแรกคือ [0,0.05] และช่วงสุดท้ายคือ [0.95,1.00]. จงนับจำนวนตัวเลขสุ่มที่อยู่ในแต่ละช่วงและแสดงผลดังด้านล่าง

0.000000-0.050000: 501

0.050000-0.100000: 463

0.100000-0.150000: 476

...

0.900000-0.950000: 466

0.950000-1.000000: 493


Computer programming for engineers

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

float r;

srand(time(NULL));

int a[20]; /* number of visits for each interval */

/* initialize the array */

/* do a loop from 1 to 10000 here */

{

r=1.0*rand()/RAND_MAX;

/* find out which interval r belongs to,

then increment the corresponding element in the array */

}

/* print out the array */

return 0;

}

บางส่วนของโปรแกรมการนับจำนวนตัวเลขสุ่มในช่วง [0,1]


Arrays of characters

Arrays of Characters


Strings

การใช้งานอาเรย์ของตัวอักษร (Strings)

char string1[] = “first”;

หรือ

char string1[] = { ‘f’, ‘i’, ‘r’, ‘s’, ‘t’,‘/0’};

  • การใช้อาเรย์นั้นไม่ได้ถูกจำกัดอยู่เพียงข้อมูลที่เป็นตัวเลขเท่านั้น ยังสามารถนำมาใช้ได้กับตัวอักษร หรือ string อาทิเช่น

โดยที่ string1 ประกอบไปด้วยตัวอักษร 5 ตัวและ ตัวอักษร

พิเศษที่ใช้ในการสิ้นสุดสตริงเรียกว่า ตัวอักษรนัล (Null Character)

ดังนั้นอาเรย์ string1 จึงประกอบด้วยสมาชิกจำนวนหกตัว โดยใช้ ‘\0’ สำหรับตัวอักษรนัล สตริงทุกตัวในภาษาซีจะต้องปิดท้ายด้วยตัวอักษรนัลเสมอ ดังนั้น

string1[0] = ‘f’ และ string1[2] = ‘r’

ในกรณีที่เราลืม อาทิเช่นใน char string1[] = { ‘f’, ‘i’, ‘r’, ‘s’, ‘t’};

ตัวอักษรนัลจะถูกนำไปต่อท้ายใน string1 อัตโนมัติ


String

การใช้ String สำหรับ อินพุต

  • เราสามารถที่จะรับค่าอินพุตสตริงจากคีย์บอร์ดแล้วเก็บในอาเรย์ของตัวอักษรได้โดยใช้ scanf และการใช้การกำหนดรูปแบบ %s ตัวอย่างเช่น

  • ประกาศอาเรย์ตัวอักษร

  • char string2[10]

  • และรับข้อมูล scanf( “%s”, string2 );

  • จะใช้เพื่อเก็บตัวอักษร ไม่เกิน 9 ตัวจากคีย์บอร์ด และเก็บไว้ในตัวแปร string2

  • ในกรณีที่อินพุตมีขนาดเกินกว่าที่กำหนดไว้ ข้อมูลที่อยู่ในตำแหน่งต่อไป string2[10], string2[11],… ที่เกินมาจะถูกลบไปอย่างไม่ตั้งใจได้


String1

การใช้ String สำหรับ อินพุต

char string2[10]

scanf( “%s”, string2 );

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


Computer programming for engineers

แบบฝึกหัด

  • จงเขียนโปรแกรมที่อ่านข้อมูลจากคีย์บอร์ด และพิมพ์ข้อมูลนั้นกลับออกไปแบบย้อนกลับ อาทิเช่น เมื่ออินพุตคือ

    Test data

    เอาท์พุตควรเป็น

    atad tseT

    สมมุติฐานคือ ข้อมูลมีความยาวไม่เกิน 19 ตัวอักษร


Multi dimensional arrays

Multi-Dimensional Arrays


Computer programming for engineers

อาเรย์หลายมิติ

  • อาเรย์ในภาษาซีสามารถมีได้หลายมิติ โดยในที่นี้เราจะศึกษาอาเรย์แบบ 2 มิติ ซึ่ง

    การประกาศ

    หมายถึง อาเรย์ ประเภท int ที่มีขนาด 3แถว x 5ตอน ดังรูป

    ดังนั้นข้อมูล jimmy [1][3] หมายถึงข้อมูลแถวที่สองจากด้านบนและแถวที่สี่จากซ้ายมือดังรูป

int jimmy [3][5]


Computer programming for engineers

การกำหนดค่าในอาเรย์สองมิติ

การกำหนดค่าเริ่มต้นในตัวแปรอาร์เรย์ 2 มิติสามารถกระทำได้โดยจะเพิ่มส่วนการแบ่งแยกในแต่ละแถวด้วยเครื่องหมาย “{ }” และ “,” เช่น

  • int jimmy[3][5] = {{1,2,3,4,5},

    {2,4,6,8,10},

    {3,6,9,12,15}};

    การให้ค่าเริ่มต้นแก่ตัวแปรอาร์เรย์ 2 มิติยังสามารถที่จะละเครื่องหมายปีกกาในแต่ละแถวได้โดยให้ใช้เครื่องหมายจุลภาคแทนเช่น

  • int jimmy[3][5] = {1,2,3,4,5,

    2,4,6,8,10,

    3,6,9,12,15};

    หรือสามารถเขียนได้เป็น

  • int jimmy[3][5] = {1,2,3,4,5,2,4,6,8,10,3,6,9,12,15};


Computer programming for engineers

ตัวอย่างการใช้ อาเรย์สองมิติ

#define WIDTH 5

#define HEIGHT 3

int jimmy [HEIGHT][WIDTH];

int n,m;

int main ()

{

for (n=0;n<HEIGHT;n++)

for (m=0;m<WIDTH;m++)

{

jimmy[n][m]=(n+1)*(m+1);

}

return 0;

}

ตารางแสดงค่าที่เก็บไว้ในแต่ละตำแหน่งในอาเรย์jimmy


Computer programming for engineers

โปรแกรมหาผลรวมของสมาชิกในอาเรย์

total = 0;

for ( row = 0; row <= HEIGHT; row++ )

for ( column = 0; column <= WIDTH; column++ )

{

total += jimmy[ row ][ column ];

}


Computer programming for engineers

End


  • Login