ทบทวน แถวลำดับ และสายอักขระ

33
ททททท ททททททททท ทททททททททททท ททท ท.ททททททททท ททททท ททท ทททททท 1 ททททททททททททททททททท ทททททททททททททททททท

Upload: barnabas-sean

Post on 02-Jan-2016

35 views

Category:

Documents


5 download

DESCRIPTION

ทบทวน แถวลำดับ และสายอักขระ. ที่ อ.บุญทรัพย์ ไวคำ สอนในค่าย 1 วิทยาการคอมพิวเตอร์ มหาวิทยาลัยขอนแก่น. แถวลำดับหรืออาร์เรย์ ( array). - PowerPoint PPT Presentation

TRANSCRIPT

ทบทวนแถวลำ�ดั�บ แลำะสยอั�กขระ

ท�� อั.บ�ญทร�พย� ไวคำ� สอันในคำ�ย 1ว�ทยกรคำอัมพ�วเตอัร�มหว�ทยลำ�ยขอันแก�น

แถวลำ�ดั�บหร#อัอัร�เรย� (array)

• กรเก$บข%อัม&ลำหลำยจำ�นวนท��เป็)นระเบ�ยบบนหน�วยคำวมจำ�ขอังคำอัมพ�วเตอัร�สมรถท�ไดั%โดัยกรก�หนดัต�วแป็รชน�ดัพ�เศษท��เร�ยกว� อัร�เรย� ท��คำรอับคำลำ�มหน�วยคำวมจำ�หลำยต�แหน�ง โดัยแต�ลำะต�แหน�งจำะถ&กก�ก�บดั%วยหมยเลำยขอังต�แหน�งต�/งแต�ต�แหน�งท�� 0 1 2 3 ...ไป็เร#�อัยๆจำนคำรบจำ�นวนต�แหน�งท�/งหมดั

• ต�วอัย�ง ถ%ม�ข%อัม&ลำต�วเลำขใดัๆ 10 20 30 40 50 60 70 80 90 00 เรจำ�เป็)นต%อังสร%งต�วแป็รท��เป็)นชน�ดั int เพ#�อัเก$บข%อัม&ลำเหลำ� โดัยป็กต� ต�วแป็รหน1�งสมรถเก$บไดั%หน1�งจำ�นวนเท�น�/น แต�ดั%วยต�วแป็รแบบอัร�เรย�หน1�งต�วแป็รสมรถเก$บข%อัม&ลำไดั%หลำยจำ�นวนดั�งน�/

0 1 2 3 4 5 6 7 8 9

10

20

30

40

50

60

70

80

90

00

ต�แหน�ง

ต�ข%อัม&ลำการประกาศตั�วแปรแถวลำ าดั�บร�ปแบบ ชน�ดัข%อัม&ลำ ช#�อัต�วแป็ร[n];

โดัยท�� ชน�ดัข%อัม&ลำ คำ#อัชน�ดัขอังข%อัม&ลำท��จำะท�กรเก$บไว%ในต�วแป็รแถวลำ�ดั�บ

n คำ#อั จำ�นวนสมช�กขอังต�วแป็รแถวลำ�ดั�บ หร#อัจำ�นวนข%อัม&ลำท��ต�วแป็รสมรถเก$บไดั%ส�งส�ดัน�/นเอัง

ตั�วอย่�างint n[10]; char a[20]; float g[5];

กรอั%งถ1งสมช�ก• ร�ปแบบ ช#�อัต�วแป็ร[ต�แหน�งขอังข%อัม&ลำหร#อัดัร

รชณี�]โดัย ช#�อัต�วแป็รเป็)นต�วแป็รท��ป็ระกศเป็)นแถวลำ�ดั�บ

ต�แหน�งขอังข%อัม&ลำ โดัยเร��มท��ต�แหน�งท�� 0 1 2 ...แต�ต%อังไม�เก�นหร#อัเท�ก�บจำ�นวนท��ป็ระกศไว%

ตั�วอย่�างint n[5];

n[0] = 0; n[4] = 4; // จำะไม�สมรถอั%งถ1ง n[5] ไดั%

กรใช%งนอัร�เรย�1. กรป็ระกศต�วแป็ร โดัยระบ�ช#�อัต�วแป็รพร%อัมจำ�นวนข%อัม&ลำท��

สมรถเก$บไดั%ส&งส�ดัint number[10]; // number คำ#อัซื่#�อัต�วแป็ร 10 คำ#อัจำ�นวน

ต�แหน�งเก$บข%อัม&ลำ2. กรก�หนดัคำ�เร��มต%นให%ก�บต�วแป็รอัร�เรย�for (i = 0; i < 10; i++) number[i]=0; // 0.0 ถ%เป็)น float หร#อั

double3. กรใส�คำ�ข%อัม&ลำลำงในอัร�เรย� (สมรถร�บคำ�มจำก file หร#อั

จำกฟั5งก�ช�นส��มคำ�)for (i = 0; i < 10; i++) scanf(“%d”,&number[i]); // ร�บคำ�

ผ่�นแป็7นพ�มพ�

ต�วอัย�ง• ต�วอัย�ง 5.4 โป็รแกรมอั�นข%อัม&ลำเป็)นจำ�นวนเต$ม 10

จำ�นวน แลำ%วหผ่ลำรวมขอังเลำขเหลำ�น�/นint num[10];• ต�วอัย�ง 5.5 โป็รแกรมอั�นข%อัม&ลำจำ�นวนจำร�ง 50 จำ�นวน

หคำ�เฉลำ��ย แลำะจำ�นวนข%อัม&ลำท��ม�คำ�ส&งกว�คำ�เฉลำ��ย• ต�วอัย�ง 5.7 โป็รแกรมอั�นข%อัม&ลำเข%เป็)นคำะแนนสอับ ซื่1�ง

เป็)นจำ�นวนจำร�งแลำ%วเก$บไว%ในต�วแป็รแถวลำ�ดั�บ score[] อั�นจำนกว�ข%อัม&ลำเข%จำะม�คำ�น%อัยกว�ศ&นย� แลำ%วพ�มพ�จำ�นวนน�กเร�ยนท��เข%สอับท�/งหมดั ซื่1�งม�ไดั%ไม�เก�น 500 คำน

ต�วอัย�งท�� 5.4

int num[10];for(i=0;i<10;i++)

scanf(“%d”, &num[i]);sum=0;for(i=0;i<10;i++)

sum = sum + num[i];printf(“sum is %d\n”,

sum);

int suma(int a[], int n)

{

int sum = a[n];for(;n>=0;--n) sum = sum + a[n];

return sum;

}

ต�วอัย�งท�� 5.5

avg = sum/n;

k=0;

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

if(list[i] > avg)

k = k + 1;

printf(“number above average is %d”,k);

ต�วแป็รแถวลำ�ดั�บแบบ String

• กรเก$บข%อัม&ลำแบบสยอั�กขระ (String) สมรถเก$บเป็)นต�วแป็รชน�ดัอัร�เรย�ขอังชน�ดัข%อัม&ลำแบบต�วอั�กษร (char) ท��ม�ขนดั 1 ไบต� หร#อั 1 ต�วอั�กษร แลำะป็9ดัท%ยช�ดัข%อัม&ลำดั%วยต�วอั�กษรพ�เศษ ‘\0’ เพ#�อับอักจำ�ดัส�/นส�ดัขอังสยอั�กขระ

• ต�วอัย�ง สยอั�กขระคำ�ว� ‘string’ ท��เก$บในหน�วยคำวมจำ�

ต�แหน�ง ข%อัม&ลำ

0 1 2 3 4 5 6

s t r i n g \0

กรป็ระกศต�วแป็รสยอั�กขระ• ร&ป็แบบ char ช#�อัต�วแป็รลำ�ดั�บ[n];

• n คำ#อัจำ�นวนต�วอั�กษรท��ต�วแป็รสมรถเก$บไดั%ส&งส�ดั ส�วนกรร�บคำ�ผ่�น scanf() แลำะ แสดังผ่ลำผ่�น printf() ให%ใช% %s

ต�วอัย�งchar msg[6];

scanf(“%s”,msg); printf(“%s”, msg);

ต�วแป็รแถวลำ�ดั�บสอังม�ต�• เป็)นต�วแป็รท��สมรถเก$บข%อัม&ลำไดั%มกข1/น โดัยเหมะ

ส�หร�บข%อัม&ลำท��สมรถจำ�ดัร&ป็แบบในลำ�กษณีะตรงข%อัม&ลำ ดั�งน�/นจำ1งม�ต�วบอักต�แหน�งแถว แลำะต�แหน�งสดัมภ์�ก�ก�บ

กรป็ระกศ ชน�ดัข%อัม&ลำ ช#�อัต�วแป็ร[nrow][ncol];

โดัย nrow เป็)นจำ�นวนแถวท�/งหมดัncol เป็)นจำ�นวนสดัมภ์�ท�/งหมดั

แลำะ nrow*ncol เป็)นจำ�นวนข%อัม&ลำท��เป็)นไป็ไดั%ท�/งหมดั

ต�วอัย�ง อัร�เรย�สอังม�ต�• float a[3][5];

• เป็)นกรป็ระกศต�วแป็ร a แบบ float ท��ม�ขนดัข%อัม&ลำเป็)นตรง 3*5 ซื่1�งสมรถเก$บข%อัม&ลำส�งส�ดัไดั% 15 ต�ว

column

row

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]

a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]

a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]

แบบฝึ<กห�ดั อัร�เรย�สอังม�ต�• ต�วอัย�ง 5.14 ให%อั�นข%อัม&ลำจำ�นวนเต$มเก$บไว%ใน

ต�วแป็ร b[][] ท��ม�กรจำอังเน#/อัท�� 5 แถว 4 สดัมภ์�แลำ%วหผ่ลำรวมขอังข%อัม&ลำท�/งหมดั

• ต�วอัย�ง 5.15 ให%อั�นคำะแนนสอับ 5 คำร�/ง ขอังน�กเร�ยน 10 คำน หลำ�งจำกน�/นให%หคำะแนนรวมขอังกรสอับท�กคำร�/งขอังแต�ลำะคำน แลำ%วแสดังผ่ลำ

แบบฝึ<กห�ดั อัร�เรย�สอังม�ต�• ต�วอัย�ง 5.16 ให%เข�ยนโป็รแกรมกรส�รวจำจำ�นวน

คำนในแต�ลำะช�วงอัย�ขอังบ%น 6 หลำ�ง ซื่1�งให%แสดังผ่ลำดั�งน�/

ช�วงอัย�0-5 6-12 13-19 20 ข1/นไป็

หลำ�งท��1 - - - -

หลำ�งท��2 - - - -

.

หลำ�งท��6 - - - -

รวม - - - -

การบ�าน ข้�อ 1- จำงเข�ยนโป็รแกรมท��สมรถร�บข%อัม&ลำน�เข%ท��

เป็)นต�วเลำขไดั%ไม�เก�น 5 จำ�นวน เพ#�อัคำ�นวณีหคำ�เฉลำ��ย คำ�ส&งส�ดั คำ�ต��ส�ดั ขอังข%อัม&ลำน�เข%น�/น โดัยเก$บข%อัม&ลำไว%ในแถวลำ�ดั�บ

กรบ%น ข%อัสอัง

• ก�หนดัให%ผ่ลำจำกกรรวมอั�กขระสอังต�วเป็)นไป็ตมตรง ให%เข�ยนโป็รแกรมเพ#�อัหผ่ลำรวมขอังสอังข%อัคำวมดั�งต�อัไป็น�/

ข%อั 1

ข%อัคำวมท��1: ABCABCABCABCAB

ข%อัคำวมท��2: ATTACK_AT_DAWN

ผลำ BVWBENACWAFDXP

ข%อั 2ข%อัคำวมท��1: SHINESHINES

ข%อัคำวมท��2: HOW_ARE_YOU

ผลำ AWFNFKMIMTN

ต�วแป็รแถวลำ�ดั�บสมม�ต�• เป็)นต�วแป็รท��สมรถเก$บข%อัม&ลำเป็)นช�ดั โดัยเหมะ

ส�หร�บข%อัม&ลำท��สมรถจำ�ดัร&ป็แบบในลำ�กษณีะหลำยตรงข%อัม&ลำ ดั�งน�/นจำ1งม�ต�วบอัก ต�หแหน�งตรง ต�แหน�งแถว แลำะต�แหน�งสดัมภ์�ก�ก�บ

กรป็ระกศ ชน�ดัข%อัม&ลำ ช#�อัต�วแป็ร[ntab][nrow][ncol];

โดัย ntab เป็)นจำ�นวนตรงท�/งหมดัnrow เป็)นจำ�นวนแถวท�/งหมดัncol เป็)นจำ�นวนสดัมภ์�ท�/งหมดั

แลำะ ntab*nrow*ncol เป็)นจำ�นวนข%อัม&ลำท��เป็)นไป็ไดั%ท�/งหมดั

int t[2][3][4];

เป็)นกรป็ระกศต�วแป็รแถวลำ�ดั�บ t ท��ม�จำ�นวน 2 ตรง แลำะแต�ลำะตรงม�ขนดั 3 แถว 4 สดัมภ์� โดัยม�ต�แหน�งอั%งอั�งข%อัม&ลำดั�งน�/

T[0][0][0] T[0][0][1] T[0][0][2] T[0][0][3]

T[0][1][0] T[0][1][1] T[0][1][2] T[0][1][3]

T[0][2][0] T[0][2][1] T[0][2][2] T[0][2][3]

T[1][0][0] T[1][0][1] T[1][0][2] T[1][0][3]

T[1][1][0] T[1][1][1] T[1][1][2] T[1][1][3]

T[1][2][0] T[1][2][1] T[1][2][2] T[1][2][3]

แบบฝึ<กห�ดั อัร�เรย�สมม�ต�• ต�วอัย�ง 5.18 เข�ยนโป็รแกรมเพ#�อัอั�นข%อัม&ลำ

ชน�ดัจำ�นวนเต$ม แลำ%วเก$บไว%ในต�วแป็ร tab[][][] แลำ%วหผ่ลำรวมขอังข%อัม&ลำในแถวลำ�ดั�บท�/งหมดั

กรก�หนดัคำ�เร��มต%นแก�แถวลำ�ดั�บ• กรก�หนดัคำ�เร��มต%นให%ก�บแถวลำ�ดั�บ สมรถท�ไดั%

หลำยว�ธี� ซื่1�งข1/นอัย&�ก�บว�ตถ�ป็ระสงคำ� ไดั%แก� กรก�หนดัคำ�เร��มต%นเม#�อัป็ระกศต�วแป็ร กรก�หนดัคำ�เร��มต%นโดัยอั�นข%อัม&ลำจำกแฟั7ม หร#อักรก�หนดัคำ�เร��มดั%วยผ่�นแป็7นพ�มพ�

ร&ป็แบบกรก�หนดัคำ�ผ่�นกรป็ระกศต�วแป็รชน�ดัข%อัม&ลำ ช#�อัต�วแป็ร[][].. = {{คำ�เร��มต%น},{คำ�เร��ม

ต%น},..};หมยเหต� คำ�เร��มต%นแต�ลำะต�วข�/นดั%วย , แลำะคำ�เร��มอัจำจำะ

ม�น%อัยกว�จำ�นวนขอังข%อัม&ลำในต�วแป็รแถวลำ�ดั�บก$ไดั%

ต�วอัย�ง• int num[10] = {0,1,2,3,4,5,6,7,8,9};

ดั�งน�/น num[0] ม�คำ� 0 num[1] ม�คำ� 1 num[2] ม�คำ� 2 num[3] ม�คำ� 3 num[4] ม�คำ� 4 num[5] ม�คำ� 5 ...

• int num[10] = {0,1,2,3};

ดั�งน�/น num[0] ม�คำ� 0 num[1] ม�คำ� 1 num[2] ม�คำ� 2 num[3] ม�คำ� 3 num[4] ม�คำ� 0 num[5] ม�คำ� 0 ...

ต�วอัย�งให%เข�ยนโป็รแกรมเพ#�อัก�หนดัคำ�เร��มต%นให%ก�บต�วแป็รแถว

ลำ�ดั�บ แลำ%วให%แสดังผ่ลำอัอักทงหน%จำอั1. char fname[10] = {‘s’,’w’,’e’,’e’,’t’,’\0’};char last[10] = “Honey”;char paint[2][5] = {“red”, “pink”};

2. int guess[] = {1,2,5,7,9}; //ต�แหน�ง 0-9int emp[3][5] = {{10,20,30,40,50}, // แถว 0

{11,21,31,41,51}, // แถว 1{12,22,32,42,52}}; // แถว 2

ฟั5งก�ช�นเพ#�อัท�งนก�บสยอั�กขระ

• ฟั5งก�ช�นขอังภ์ษซื่�ท��ใช%ก�บต�วแป็รแบบสยอั�กขระจำะอัย&�ใน string.h ดั�งน�/นเม#�อัต%อังถ&กเร�ยกใช%งนเรต%อังป็ระกศกรเร�ยกใช%ฟั5งก�ช�นเหลำ�น�/ โดัย #include <string.h>

ตั�วอย่�างstrcat(), strcmp(), strcpy(), strlen()

strcat()

• strcat() – ใช%ส�หร�บน�สยอั�กขระ 2 สยม�ต�อัก�นร�ปแบบ strcat(สยอั�กขระ1, สยอั�กขระ2);โดัยท�� สยอั�กขระ1 ต�วแป็รแถวลำ�ดั�บแรก แลำะเป็)นท��เก$บ

ผ่ลำลำ�พธี�สยอั�กขระ2 ต�วแป็รท��สอังท��น�มต�อั

ต�วอัย�งchar str1[21]=“What school do ”;char str2[] = “you go to?”;strcat(str1, str2); // str1 “What school do you go to?”

strcmp()

• strcmp() – ใช%เป็ร�ยบเท�ยบสยอั�กขระ 2 สย ว�เท�ก�น หร#อัไม�เท�ก�น โดัยถ%สยอั�กขระ 2 สยเท�ก�น จำะให%ผ่ลำเป็)น 0 ถ%สยอั�กขระแรกมกกว� จำะให%ผ่ลำมกกว� 0 แลำะถ%สยอั�กขระแรกน%อัยกว� จำะให%ผ่ลำเป็)นลำบ

ร�ปแบบ strcmp(str1, str2);

ตั�วอย่�างchar str1 = “name1”;

strcmp(str1, “name2”); // -1

strcmp(str1, “name1); // 0

strcpy()

• strcpy() – ใช%คำ�ดัลำอักสยอั�กขระไป็ส&�ต�วแป็รร�ปแบบ strcpy(สยอั�กขระป็ลำยทง, สยอั�กขระต%นทง);

โดัย สยอั�กขระป็ลำยทง คำ#อั ต�วแป็รแถวลำ�ดั�บเพ#�อัเก$บผ่ลำลำ�พธี�สยอั�กขระต%นทง เป็)นข%อัม&ลำท��ต%อังกรคำ�ดัลำอัก

ต�วอัย�งchar str[20];

strcpy(str, “What’s your name?”); // str What’s your name?

strlen()

• strlen() – ใช%น�บจำ�นวนอั�กขระท�/งหมดัในสยอั�กขระ• ร�ปแบบ strlen(str);

ตั�วอย่�างchar str[10] = “01234”;

strlen(str); // 5

strlen(“”); // 0

แบบฝึ<กห�ดั

ให%เข�ยนโป็รแกรมเพ#�อั 1. หคำวมยวขอังสยอั�กขระ แลำ%วต�อัสยอั�กขระ

2 สยแลำ%วหคำวมยวขอังสยอั�กขระใหม�2. เป็ร�ยบเท�ยบสยอั�กขระ 2 สย แลำ%วท�ส�เน

สยอั�กขระ แลำะเป็ร�ยบเท�ยบอั�กคำร�/งข%อัม&ลำน�เข%คำ#อั สยอั�กขระ 2 สย ให%แสดังผ่ลำ

คำวมยวขอังสยอั�กขระ แลำะผ่ลำขอังกรเป็ร�ยบเท�ยบ

กรบ%น1. ให%เข�ยนโป็รแกรมเพ#�อัแป็ลำงสยอั�กขระโรม�นเป็)นเลำขฐน

10 โดัยส�ญลำ�กษณี�ท��ใช%แทนเลำขโรม�น ม�ดั�งน�/เลำขโรม�น เลำขฐน 10 เลำขโรม�น เลำขฐน

10I 1 II 2V 5 III 3X 10 XXX 30L 50 XL 40C 100 CL 150D 500 DX 510M 1000 CMXC 990

กรบ%น2. ในกรหคำวมเหม#อันขอัง 2 สยอั�กขระใดัๆ ม�เกณีฑ์�กรให%

คำะแนนดั�งน�/ ถ%ต�วอั�กขระเหม#อันก�น 5 คำะแนน, ไม�เหม#อันก�น -4 คำะแนน,

ถ%คำวมยวขอังสยอั�กขระไม�เท�ก�น แลำ%วต%อังเลำ#�อันต�แหน�งท�ให%เก�ดัช�อังว�ง -7 คำะแนน

ต�วอัย�ง m=“GAAGGCA” n=“GCAGAGCA”

ดั�งน�/น คำะแนนคำวมเหม#อันก�น 5(4)55(7) 555=19

Sequence m: G A A G G C A

Sequence n: G C A G A G C A

ข%อัม&ลำน�เข%คำ#อั 1 query string ต�อั หลำย data string

>queryACGGG>seq1ACGGT>seq2ACGGGG>seq3TCCGGTT

ข%อัม&ลำท��แสดังThe query string:ACGGGThe most similar strings are:ACGGGGThe similarity score is: 18

สร�ป็• ต%อังฝึ<กฝึนกรใช%เข�ยนโป็รแกรมโดัยใช%• 1. แถวลำ�ดั�บ 1, 2, แลำะ 3 ม�ต�• 2. กรใช% loop for, while, etc.

• 3. กรใช%ต�วแป็รสยอั�กขระ แลำะ function ท��ใช%ก�บ string

[email protected]

[email protected]