(Array, Pointer, Structure)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Array ธนวัฒน์ แซ่ เอียบ. The concept of array อาเรย์ : กลุ่มของข้อมูลที่มีชนิดเดียวกันและถูก จัดเก็บเรียงลำดับต่อเนื่องกัน ตัวแปร x สามารถจัดเก็บค่ามากกว่า.
Advertisements

การเขียนคำสั่งควบคุม การทำงานขั้นพื้นฐาน
BC322 : Computer Programing (ครั้งที่ 1)
การใช้งานโปรแกรม SPSS
LAB ตัวแปร : Variables ในการเขียนโปรแกรมเราต้องการให้โปรแกรม จดจำค่าต่างๆ ไว้ เช่นเมื่อรับค่าข้อมูลจาก ผู้ใช้ หรือค่าที่ได้จากการคำนวณใดๆ ค่า.
Chapter 10 Arrays Dept of Computer Engineering Khon Kaen University.
การเขียนโปรแกรมภาษาปาสคาล โดยใช้โครงสร้างหลักทั้ง 3 โครงสร้าง
หน่วยที่ 6 แถวลำดับ (Array)
ตัวแปร และชนิด ข้อมูล. ตัวแปร การกำหนดตัวแปรเป็นการใช้ ชื่อตัวแปรแทน ตำแหน่งบนหน่วยความจำ สำหรับเก็บ ข้อมูลระหว่างการ ประมวลผล ซึ่งอาจเป็นข้อมูลนำเข้า.
MEE 231 Computer Programming สัปดาห์ที่ 6 ภาษา C หลักการของโปรแกรม ชนิดของตัวแปร การดำเนินการ คำสั่งการรับค่าตัวแปร และการแสดงผล.
ARRAY & PRINTF สาขางานคอมพิวเตอร์ธุรกิจอาจารย์จิรา ภรณ์ เขตกุฎี
LOGO ภาษาซี 1.1 อ. กฤติเดช จินดาภัทร์. LOGO ตัวอย่างโค้ดภาษาซี
คำสั่งควบคุมการทำงาน
เกม คณิตคิดเร็ว.
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
โครงสร้างโปรแกรมภาษา C
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 5 อินพุตและเอาต์พุต
โปรแกรมย่อย อาจารย์สมเกียรติ ช่อเหมือน
แนวข้อสอบ Final (จดด่วน)
Chapter 4 ข้อความสั่ง เลือกทำ.
ครูวีรธรรม เทศประสิทธิ์ แผนกวิชาคอมพิวเตอร์ธุรกิจ
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
Chapter 9 ตัวชี้ pointer.
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 3 ชนิดข้อมูลและการแทนชนิดข้อมูลการประกาศตัวแปร.
การประยุกต์ Logic Gates ภาค 2
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 4 เครื่องหมาย ตรรกะศาสตร์ และการดำเนินการทางตรรกะศาสตร์
บทที่ 1 สถาปัตยกรรมของระบบฐานข้อมูล (Database Architecture)
การจัดการระบบฐานข้อมูล ภาษาที่ใช้ในระบบจัดการฐานข้อมูล
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 6 ผังงานและการออกแบบผังงานเพื่อแก้ปัญหาการเขียนโปรแกรมเบื้องต้น.
บทที่ 10 อาร์เรย์ (Array)
แล้วทำการเรียงลำดับข้อมูลใหม่โดยเรียงจากน้อยไปหามาก
ตัวแปรและชนิดของข้อมูล
BC320 Introduction to Computer Programming
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
โครงสร้างภาษา C Arduino
หน่วยการเรียนที่ 4 เรื่อง การควบคุมทิศทางการทำงาน
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 13 การออกแบบผังงานแบบมีเงื่อนไขร่วมกับการทำงานแบบวนซ้ำ.
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 13 การเขียนรหัสเทียม (Pseudo Code)
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop)
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 8 เงื่อนไขตัดสินใจ
เซต (SET) ประวัติย่อของวิชาเซต ความหมายของเซต การเขียนแทนเซต
ตัวแปรกับชนิดของข้อมูล
ขั้นตอนการออกแบบ ผังงาน (Flow Chart)
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
Data storage II Introduction to Computer Science ( )
บริษัท พัฒนาวิชาการ (2535) จำกัด
BC320 Introduction to Computer Programming
การทำงานแบบมีเงื่อนไข (if, if-else, if-else-if, Nested-if)
บทที่ 9 การทำซ้ำ (Loop).
การเขียนภาษาจาวาเบื้องต้น
Week 5 C Programming.
ผู้ช่วยศาสตราจารย์จุฑาวุฒิ จันทรมาลี
Variable Constant.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Data storage II Introduction to Computer Science ( )
หน่วยที่ 6 อะเรย์ของอักขระ
บทที่ 7 การประมวลผลอาร์เรย์
2 โครงสร้างข้อมูลแบบสแตก (STACK).
บทที่ 2 โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)
Chapter 3 : Array.
Array Sanchai Yeewiyom
Array: One Dimension Programming I 9.
การวิเคราะห์โจทย์ปัญหา (Problem Analysis)
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบทางเลือก
Decision: Single and Double Selection (if and if-else statement)
พอยเตอร์ #include <stdio.h> void main() { int age; int *pointer;
Computer Game Programming
ใบสำเนางานนำเสนอ:

(Array, Pointer, Structure) 226111 Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 14 ตัวแปรชั้นสูง (Array, Pointer, Structure)

Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments

Objectives เพื่อให้นิสิตรู้และเข้าใจตัวแปรชั้นสูงและการทำงานของตัวแปรชั้นสูง Array Pointer Structure เพื่อเตรียมความพร้อมให้นิสิตสามารถวิเคราะห์และแก้ปัญหาโจทย์การทำงานแบบวนซ้ำร่วมกับตัวแปรชั้นสูงสำหรับแก้ปัญหาด้วยภาษาคอมพิวเตอร์ได้

Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments

Why an array is essential? ถ้าต้องการเก็บค่าคะแนนสอบ (score) ของนักเรียน จำนวน 20,000 คน เราต้องใช้ตัวแปร 20,000 ตัว เพื่อใช้เก็บค่าคะแนนของนักเรียนทั้งหมด float score1, score2, score3, ..., score20000; จากข้อจำกัดของชนิดข้อมูลพื้นฐานที่มีอยู่ (char, int, float, double) เราต้องใช้ตัวแปรจำนวนมาก เพื่อเก็บข้อมูลหลายค่า ภาษาซีจึงได้กำหนดชนิดข้อมูลแบบโครงสร้างที่รวมข้อมูลพื้นฐานดังกล่าวไว้เป็นลำดับหรือเป็นกลุ่ม

The Advantage of Array อาเรย์ (array) เป็นโครงสร้างข้อมูลประกอบด้วยกลุ่มของข้อมูลชนิดเดียวกันที่เรียงกันเป็นลำดับ โดยใช้ตัวแปรเพียงตัวเดียวอ้างถึงเช่น ตัวแปร score เป็นชนิดข้อมูลแบบอาเรย์ ใช้เก็บคะแนนจำนวน 20,000 ค่าพร้อมกันได้ เช่น ดัชนีที่ใช้จะเป็นเลขจำนวนเต็ม เริ่มจาก 0 ตามลำดับ (0, 1, 2, ...) คะแนนสอบ 75.5 82.0 96.5 93.0 ... 85.0 79.5 ดัชนี 1 2 3 19,998 19,999

Example # 1 in Regular Format Example 1 : จงเขียนโปรแกรมเพื่อรับรหัสนักศึกษา และคะแนนสอบกลางภาควิชา Computers and Programming ของนักศึกษาห้อง 1 – 10 #include <stdio.h> #include<conio.h> int main () { char id0001[9],id0002[9],id0003[9],...,id1158[9],id1159[9]; float point0001,point0002,point0003,...,pint158,point1159; scanf ("%s",id0001); scanf ("%f",&point0001); ... scanf ("%s",id1159); scanf ("%f",&point1159); return 0; }

Example # 1 in Array Format #include<stdio.h> #include<conio.h> int main() { char id [1159] [9]; float point [1159]; int i; for (i=0;i<1159;i++) scanf ("%s", id [ i ]); scanf ("%f", &point [ i ]); } return 0;

Type of Array One-dimensional Array Multi-dimensional Array 1 num[9] [0] 9 [1] -1 [2] -23 [3] 44 [4] 2 [5] 6 [6] -9 [7] -22 [8] One-dimensional Array Column Column [0] [1] [2] [0] [1] [2] [3] Row [0] Row [1] [0] Row [2] Row [1] [3] [2] Row [3] [1] [2] Depth [0] Multi-dimensional Array

One-dimensional Array Variable Declaration type array_name[size]; ตัวแปรแถวลำดับ อะเรย์ หรือ อาเรย์ : “An array is a series of elements of the same type placed in contiguous memory locations that can be individually referenced by adding an index to a unique identifier.” type ชนิดของตัวแปร array_name ชื่อของตัวแปรแถวลำดับที่ประกาศหรือตั้งโดยผู้เขียนโปรแกรม size ขนาดของตัวแปรแถวลำดับที่จะใช้ (จะใช้เท่าไรให้จองเผื่อไว้ 1 ช่องสำหรับ \0 (null string))

Declaration & Assignment Examples (Memory) char student_name [5]; student_name [0] = ‘A’; student_name [2] = ‘B’; int bill [5]; int billy [5] = { 16, 2, 77, 40, 12071 }; float Point [20]; Point [19] = 3.57; double x_data [100]; x_data [99] = 9.86975; 8 bits, 2 complement 32 bits, 2 complement

Declaration & Assignment Examples (Value) char student_name [5]; student_name [0] = ‘A’; student_name [2] = ‘B’; int bill [5]; int billy [5] = { 16, 2, 77, 40, 12071 }; float Point [20]; Point [19] = 3.57; double x_data [100]; x_data [99] = 9.86975; Column [0] [1] [2] [3] [4] Row [0] A B student_name Column [0] [1] [2] [3] [4] Row [0] 16 2 77 40 127 billy Column [16] [17] [18] [19] [20] Row [0] 3.57 Point Column [96] [97] [98] [99] [100] Row [0] 9.86975 x_data

Declaration & Assignment to Array type array-name[n]={value-1,value-2,…,value-n}; type ชนิดของตัวแปร เช่น int, float, char array_name ชื่อของตัวแปรแถวลำดับที่ประกาศหรือตั้งโดยผู้เขียนโปรแกรม value-1,value-2,…,value-n เป็นข้อมูลที่จะทำการกำหนดให้กับตัวแปรแถวลำดับ โดยจะต้องเป็นข้อมูลชนิดเดียวกับ type ที่กำหนด

Declaration & Assignment Examples (cont.) #include<stdio.h> #include<conio.h> int main() { int number[3] = {23, -186, 43}; float value_2[5]={0.98,43.213,-3.47,52.08,-0.987}; char vowel[5] = {'a','e','i','o','u'}; char name[9] = {'E','n','g','i','n','e','e','r','\0'}; return 0; }

References Data in Array #include<stdio.h> int main() { int year[5] = {2552,2553,2554,2555,2556}; printf ("%d\n",year[0]); printf ("%d\n",year[1]); printf ("%d\n",year[2]); printf ("%d\n",year[3]); printf ("%d\n",year[4]); return 0; }

Example 2 : จงเขียนผังงานและโปรแกรมเพื่อเก็บอายุของผู้ใช้งานจำนวน 20 คนโดยเก็บข้อมูลอายุในตัวแปรชนิดอาร์เรย์ Output Analysis ไม่มี Input Analysis อายุของผู้ใช้งานทั้ง 20 คนที่ป้อนเข้ามา Process Analysis สร้างตัวแปรแถวลำดับขนาด 20 เพื่อเก็บค่าอายุ โปรแกรมวนรอบเพื่อรอรับค่าจากผู้ใช้งาน Variable Define age[20] เป็นตัวแปรแถวลำดับชนิดจำนวนเต็มขนาด 20 เพื่อใช้เก็บค่าอายุ count เป็นตัวแปรชนิดจำนวนเต็มเพื่อใช้นับจำนวนรอบของ for-loop

Process & Pseudo-code Process เริ่มต้นทำงาน ทำการวนรอบเพื่อรับอายุของผู้ใช้งานทั้ง 20 คนที่ป้อนเข้ามาแล้วเก็บไว้ในตัวแปรแถวลำดับ จบการทำงาน Pseudo-code Begin For ( i = 1 && i < = 20 ) { Keep the age of users } End

True START END age[20],count count = 0 age[count] count++ count<20 False

#include<stdio.h> #include<conio.h> int main() { int age[20],count; for (count=0; count<20; count++) printf ("Enter age[%d] : ",count); scanf ("%d",&age[count]); } printf ("Finish\n"); return 0;

แล้วคำนวณส่วนสูงเฉลี่ย แล้วแสดงผลส่วนสูงของนักศึกษาทั้งหมด Example # 2 Example 2 : จงเขียนผังงานและโปรแกรม เพื่อรับจำนวนนักศึกษาในห้อง หลังจากนั้น ให้โปรแกรมรอรับส่วนสูงของคน n คน แล้ววิเคราะห์ว่ามีนักศึกษาในห้องมีส่วนสูงช่วงต่างๆ จำนวนกี่คน แล้วคำนวณส่วนสูงเฉลี่ย แล้วแสดงผลส่วนสูงของนักศึกษาทั้งหมด 0 – 160 161 – 170 171 – 180 181 - 200

Problem Analysis Output Analysis จำนวนนักศึกษาที่สูงแต่ละช่วง ส่วนสูงของนักศึกษาเฉลี่ยในห้อง ส่วนสูงของนักศึกษาทั้งหมด Input Analysis จำนวนนักศึกษาทั้งหมด และส่วนสูงของแต่ละคน Process Analysis โปรแกรมรับจำนวนนักศึกษา วนรอบเพื่อรับส่วนสูงเท่ากับจำนวนนักศึกษา วนรอบเพื่อตรวจสอบช่วงส่วนสูงของนักศึกษาและหาผลรวมส่วนสูงของนักศึกษาทุกคน คำนวณหาค่าเฉลี่ย

Problem Analysis (cont.) Variable Define num เป็นจำนวนเต็มเพื่อเก็บจำนวนนักศึกษา a เป็นจำนวนเต็มเพื่อตรวจตำแหน่งตัวแปร และนับรอบ range1=0, range2=0, range3=0, range4=0 เป็นจำนวนเต็มสำหรับเก็บค่าจำนวนนักศึกษาแต่ละช่วง high[300] เป็นตัวแปรแถวลำดับชนิดทศนิยมเพื่อเก็บส่วนสูง avg = 0 เป็นจำนวนทศนิยมเพื่อเก็บค่าผลรวมและค่าเฉลี่ย

Process Description เริ่มต้นทำงาน ทำการรับจำนวนนักศึกษา วนรอบเท่ากับจำนวนนักศึกษาที่ป้อนเข้ามาเพื่อรับส่วนสูงของนักศึกษาแต่ละคน วนรอบเพื่อตรวจสอบจำนวนของนักศึกษาที่มีความสูงตรงกับแต่ละช่วงความสูงและหาค่าผลรวมความสูงของนักศึกษาทั้งหมด หาค่าเฉลี่ยความสูง จบการทำงาน

Pseudo Code Begin Read amount of students Repeat { Read each height of student Check and increase amount of each range Calculate the summation of height } Calculate the average height End

True num,a range1=0,range2=0 range3=0,range4=0 high[300],avg=0 high[a] a=0 START num a<num a++ False (2)

(2) a=0 False a<num True <=160 T range1++ F <=170 T range2++ avg=avg/num F <=180 T range3++ (3) F range4++ avg=avg+high[a] a++

END (3) True a<num a++ a=0 high[a] range1 range2 range3 range4 avg False

String & Array variable char subject[11] = {"C language"}; or char subject[11] = {'C', ' ', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'}; C subject [0] [1] l [2] [3] [4] [5] a n g [6] [7] [8] [9] [10] u e \0 char name[9] = {"Engineer"}; [0] [1] [2] [3] [4] [5] [6] [7] [8] E n g i n e e r \0 name

Example #3 #include<stdio.h> #include<conio.h> int main () { char sentence[22]="Welcome to my country"; char word[9]={'T','h','a','i','l','a','n','d','\0'}; char not_word[4]={'l','o','v','e'}; printf ("Message1 = %s\n",sentence); printf ("Message2 = %s\n",word); printf ("Message3 = %s\n",not_word); return 0; }

Multi-dimensional Array Variable Declaration type array_name[size_1][size_2]; type array_name[m][n]; type ชนิดของตัวแปร เช่น int, float, char array_name ชื่อของตัวแปรแถวลำดับที่ประกาศหรือตั้งโดยผู้เขียนโปรแกรม size_1 or m ขนาดของตัวแปรแถวลำดับที่จะใช้มิติที่ 1 (ปกติจะจองไว้สำหรับดัชนีของแถว (row)) size_2 or n ขนาดของตัวแปรแถวลำดับที่จะใช้มิติที่ 2 (ปกติจะจองไว้สำหรับดัชนีของสดมภ์ (column))

Assignment Value to Multi-dimensional Array type array-name[m][n]={value-1-1,value-1-2,…,value-1-m, value-2-1,value-2-2,…,value-2-m, …, value-n-1,value-n-2,…,value-n-m}; type ชนิดของตัวแปร เช่น int, float, char array_name ชื่อของตัวแปรแถวลำดับที่ประกาศหรือตั้งโดยผู้เขียนโปรแกรม m ขนาดของตัวแปรแถวลำดับที่จะใช้มิติที่ 1 (ปกติจะจองไว้สำหรับดัชนีของแถว (row)) n ขนาดของตัวแปรแถวลำดับที่จะใช้มิติที่ 2 (ปกติจะจองไว้สำหรับดัชนีของสดมภ์ (column)) value-1-1, value-1-2, …, value-1-n, …, …, value-n-m เป็นข้อมูลที่จะทำการกำหนดให้กับตัวแปรแถวลำดับ โดยจะต้องเป็นข้อมูลชนิดเดียวกับ type ที่กำหนด

Declaration & Assignment Examples int matrix [2][2]; matrix [0][0] = ‘2’; matrix [0][1] = ‘7’; matrix [1][0] = ‘9’; matrix [1][1] = ‘5’ double data_array [2][2]; data_array[2][2] = {1.0,2.0,3.0,4.0}; or data_array[2][2] = {{1.0,2.0},{3.0,4.0}}; or data_array[ ][2] = {{1.0,2.0},{3.0,4.0}}; Column [0] [1] Row [0] 2 7 9 5 Row [1] Column [0] [1] 1.0 2.0 3.0 4.0 [0] [1]

Declaration & Assignment Examples (cont.) double data_array [2][2]; data_array[0][0] = 1.0; data_array[0][1] = 2.0; data_array[1][0] = 3.0; data_array[1][1] = 4.0; Column [0] [1] Row [0] 1.0 2.0 3.0 4.0 Row [1]

Declaration & Assignment Examples (cont.) int num[3][4] = { 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34 }; int num[3][4] = { 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34 }; 31 32 33 34 21 22 23 24 11 12 13 14 31 32 21 22 11 12 num[0][0] num[1][0] num[2][0] num[0][1] num[1][1] num[2][1] 34 24 14 num[0][3] num[1][3] num[2][3] 33 23 13 num[0][2] num[1][2] num[2][2]

Declaration & Assignment Examples (cont.) float matrix[2][4] = { 0.19, -0.01, -0.23, 4.44, -4.44, 0.26, -0.09, -0.22 }; float matrix[2][4] = { 0.19, -0.01, -0.23, 4.44, -4.44, 0.26, -0.09, -0.22 }; matrix[0][0] matrix[0][1] matrix[0][2] matrix[0][3] 0.19 -0.01 -0.23 4.44 matrix[1][0] matrix[1][1] matrix[1][2] matrix[1][3] -4.44 0.26 -0.09 -0.22

Declaration & Assignment Examples (cont.) char letter[2][4] = { 'G', 'o', 'o', 'D', 'T', 'i', 'm', 'E'}; char letter[2][4] = {'G', 'o', 'o', 'D', 'T', 'i', 'm', 'E'}; letter[0][0] letter[0][1] letter[0][2] letter[0][3] G o o D T i m E letter[1][0] letter[1][1] letter[1][2] letter[1][3]

Declaration & Assignment Examples (cont.) char str[2][10] = {"Computer", "Engineer" }; char str[2][10] = {"Computer", "Engineer" }; [0][8] C o m p u t e r \0 str[0] E n g i n e e r \0 str[1] [1][8]

Multi-dimensional Example #include <stdio.h> #define WIDTH 5 #define HEIGHT 3 int square [HEIGHT][WIDTH]; int n,m; int main () { for (n=0;n<HEIGHT;n++) for (m=0;m<WIDTH;m++) square[n][m]=(n+1)*(m+1); printf("square [%d][%d] = %d\n", n, m,square[n][m] ); } return 0;

Example #4 Example 4 : จงเขียนผังงานและโปรแกรม เพื่อรับข้อความเข้ามาแล้วตรวจสอบว่ามีทั้งหมดกี่ประโยค วิเคราะห์โจทย์ เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนแผนภาพการไหลของข้อมูล เขียนโค้ด

message[c]==POINT || message[c]==QU START count count=0, c=0, message[100] message END message[c]!=\0 False True message[c]==POINT || message[c]==QU True count++ False c++

Example #5 Example 5 : จงเขียนโปรแกรมเพื่อรับจำนวน 10 จำนวน เพื่อหาค่ามากที่สุดในจำนวนที่รับ โดยการย้ายค่ามากที่สุดไปไว้ Array ที่ตำแหน่งสุดท้าย วิเคราะห์โจทย์ เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนแผนภาพการไหลของข้อมูล เขียนโค้ด

19 1 23 99 15 10 -26 -9 num[10] num[0] num[1] num[2] num[3] num[4] num[5] num[6] num[7] num[8] num[9] 19 1 23 99 15 10 -26 -9 num[10] temp = num[1]; num[1]=num[2]; num[2] = temp; 1 19 23 99 15 10 -26 -9 num[10] temp = num[4]; num[4]=num[5]; num[5] = temp; 1 19 23 15 99 10 -26 -9 num[10] 1 19 23 15 10 -26 -9 99 num[10]

#include<stdio.h> #include<conio.h> #define SIZE 10 int main() { int num[SIZE],temp,n; for (n=0; n<SIZE; n++) printf ("Enter num[%d] : ",n+1); scanf ("%d",&num[n]); } for (n=0; n<SIZE-1; n++) if (num[n]>num[n+1]) temp = num[n+1]; num[n+1] = num[n]; num[n] = temp; printf ("The maximum number = %d",num[SIZE-1]); return 0;

Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments

เมื่อมีการประกาศตัวแปรใดๆ เช่น int number; Variable Declaration เมื่อมีการประกาศตัวแปรใดๆ เช่น int number; char letter; คอมไพเลอร์จะทำการจองพื้นที่ในหน่วยความจำสำหรับเก็บค่าตัวแปร number และค่าตัวแปร letter สมมุติว่าเป็นตำแหน่งหน่วยความจำที่ 10000 และ 10002 เมื่อมีการกำหนดจะทำการจองหน่วยความจำดังนี้ number = 5; letter = ‘A’; ที่อยู่ ข้อมูล 10000 10001 10002 10003 10004 10005 10006 10007 5 ‘A’ number letter

Variable Declaration (cont.) ที่อยู่ของข้อมูล (Address) ข้อมูล ประเภท ชื่อตัวแปร ขนาด 0000 15 int count 2 bytes 0001 0002 3.1415 0003 float pi 4 bytes 0004 0005 0006 'A' char ch 1 bytes … … XXXX … …

Size of Variable ชนิดของตัวแปร ขนาด ค่าต่ำสุด ค่าสูงสุด unsigned char 8 bit 255 char -128 127 unsigned int 16 bit 32 bit 65,535 4,294,967,295 short int -32,768 32,767 int -2,147,483,648 2,147,483,647 unsigned long long float 3.410-38 3.4 1038 double 64 bit 1.7 10-308 1.710308 long double 80 bit 3.4 10-4932 3.4104932

Size of Variable (cont.) 10 80 long double 8 64 double 4 32 float 1 unsigned char char unsigned long long 2 16 unsigned int int Bytes Bits Type

Basic Knowledge of Pointer พอยน์เตอร์ หมายถึง ตัวแปรใดๆ ที่ใช้เก็บค่าของตำแหน่งที่อยู่ (Address) ของตัวแปรหรือข้อมูล เมื่อเข้าถึงที่อยู่โดยพอยน์เตอร์ได้ก็จะสามารถกระทำกับข้อมูลได้ไม่ว่าจะเป็นการนำออกมาแสดงผลหรือกระทำกับตัวแปรอื่นๆ ตัวแปรชนิดพอยน์เตอร์มีความเร็วในการทำงานสูง ตัวแปรชนิดพอยน์เตอร์จะเก็บค่าที่อยู่ของหน่วยความจำหลัก ซึ่งต่างกับตัวแปรปกติที่เก็บค่าที่แท้จริงของข้อมูล นั่นคือการใช้ตัวแปรชนิดพอยน์เตอร์จะเป็นการเข้าถึงข้อมูลหรือเป็นการอ้างถึงตำแหน่งที่เก็บข้อมูล

* คือ เครื่องหมายแสดงว่าเป็นตัวแปรประเภทตัวชี้ Pointer Declaration type *pointer_name type คือ ชนิดของตัวแปรประเภทตัวชี้ (pointer) * คือ เครื่องหมายแสดงว่าเป็นตัวแปรประเภทตัวชี้ pointer_name คือ ชื่อของตัวแปรประเภทตัวชี้ ตัวอย่างการใช้ตัวชี้ int * ptr_int; /* pointer to integer */ float * ptr_float;// pointer to float char * ptr_char; /* pointer to char */

Pointer Declaration (cont.) ตัวแปรพอยน์เตอร์ทำหน้าที่เก็บตำแหน่งที่อยู่ของตัวแปรที่ชี้ นั่นคือทำหน้าที่ชี้ไปยังตัวแปรตัวอื่น ดังนั้นการประกาศตัวแปรพอยน์เตอร์ ต้องสอดคล้องกับชนิดของตัวแปรตัวอื่น ที่ต้องการให้ตัวแปรพอยน์เตอร์นั้นจะชี้ไป เช่น char *prt; int *ip , *temp; double *dp; ประกาศตัวแปร prt ให้เป็นตัวแปรพอยน์เตอร์ที่ชี้ไปยัง ตัวแปรชนิด char ประกาศตัวแปร ip และ ตัวแปร temp เป็นตัวแปรพอยน์- เตอร์ที่ชี้ไปยังตัวแปรชนิด int ประกาศตัวแปร dp เป็นตัวแปรพอยน์เตอร์ที่ชี้ไป ยังตัวแปรชนิด double

Referencing Operator “&” ตัวดำเนินการ & ส่งกลับเลขที่อยู่ (Address) ของวัตถุ XXXX int count; 15 int *ptr; XXXX ptr = &count; /* ptr มีค่าเป็น XXXX */

How the pointer work? ตัวดำเนินการอ้างถึงที่อยู่ (Reference/Address operator) จะใช้เครื่องหมาย & นำหน้าตัวแปร ซึ่งหมายถึงตำแหน่งที่อยู่ของตัวแปรนั้นในหน่วยความจำ #include <stdio.h> void main(void){ int z = 10; int *ZPtr; ZPtr = &z;/*ตัวแปรชนิดตัวชี้เก็บเลขที่อยู่ของตัวแปร z*/ }

Referencing Operator “&” (cont.) ที่อยู่ของข้อมูล (Address) ข้อมูล ประเภท ชื่อตัวแปร ขนาด 0000 15 int count 2 bytes 0001 0002 3.1415 0003 float pi 4 bytes 0004 0005 0006 'A' char ch 1 bytes … ptr = &count ตัวชี้ ptr ชี้ไปที่อยู่ของ ตัวแปรชื่อ count XXXX 0000 …

Referencing Operator “&” (cont.) ที่อยู่ของข้อมูล (Address) ข้อมูล ประเภท ชื่อตัวแปร ขนาด 15 int count 2 bytes 0000 3.1415 float pi 4 bytes 0002 'A' 0006 char ch 1 bytes 0006 char *ptr_char = &ch; 0002 float *ptr_float = π 0000 int *ptr_int = &count;

Dereference Operator “*” เป็น ตัวดำเนินการเชิงอ้อม (Indirection) หรือ กลับการอ้างอิง (Dereferencing) ตำแหน่งที่ XXXX 15 int count; XXXX int * ptr; int count = 15, y, z[10]; int *ptr; /* ptr เป็นตัวชี้ int */ ptr = &count; /* ptr ชี้ไปที่ count */ y = *ptr; /* y มีค่า 15 */ *ptr = 0; /* count มีค่า 0 */ ptr = &z[0]; /* ptr ชี้ไปที่ z[0] */

Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments

Why structure variable is essential? การเก็บข้อมูลเราอาจจำเป็นต้องใช้ข้อมูลที่หลากหลายรูปแบบแต่เป็นกลุ่มข้อมูลที่มีส่วนร่วมกัน รายละเอียดของนักศึกษาอาจจะมีข้อมูลรหัส ชื่อ สกุล อายุ เกรดเฉลี่ย ของนักศึกษา ซึ่งเราจะต้องสร้างตัวแปรขึ้นมาใช้ในการเก็บข้อมูลของนักศึกษา 5 ตัวแปรด้วยกัน ทั้งที่จริงแล้ว ข้อมูลทั้งหมดมีส่วนเกี่ยวข้อง คือเป็นของนักศึกษาคนเดียวกัน หากมีจำนวนนักศึกษามากๆ การสร้างตัวแปรและใช้งานตัวแปร อาจจะเกิดความสับสนขึ้นได้ ดังนั้นเราจึงควรนำโครงสร้างข้อมูลมาช่วยในการจัดการกับข้อมูลเหล่านี้

Structure Variable โครงสร้างข้อมูล (Structure) เป็นการกำหนดชนิดข้อมูลใหม่ขึ้นมาใช้งาน โดยชนิดข้อมูลนี้เกิดจากการรวมกันของชนิดข้อมูลพื้นฐานที่อาจจะเป็นชนิดเดียวกันหรือต่างชนิดกันก็ได้ ตัวอย่าง : โครงสร้างข้อมูลนักศึกษาให้ชื่อว่า “Student” ประกอบด้วย ชื่อเป็นชนิด char นามสกุลเป็นชนิด char อายุเป็นชนิด int เพศเป็น char เกรดเฉลี่ยเป็น float

Structure Variable Declaration struct structure_name { type variable_1; type variable_2; type variable_3; ……… } struct คือ บ่งบอกว่าเป็นตัวแปรชนิดโครงสร้าง(Structure) struct_name คือ ชื่อของตัวแปรชนิดโครงสร้าง type variable_1-n คือ ตัวแปรที่เกี่ยวข้องกับตัวแปรโครงสร้างที่ ต้องการเก็บ

Structure VS. Array เก็บข้อมูลจำนวนมากๆ ได้ เข้าถึงข้อมูลแต่ละตัวได้โดยง่าย ข้อจำกัด : ข้อมูลเหล่านั้นต้องเป็นชนิดเดียวกันเท่านั้น โครงสร้างข้อมูล (Structure) ข้อมูลแต่ละตัวในกลุ่มสามารถมีชนิดต่างกันก็ได้ เช่น ข้อมูลผลการเรียนของนักศึกษาแต่ละคน เทียบเท่ากับ Record ในภาษาอื่น int point[5] struct student { char stdName[20]; char stdLastName[20]; int age; float grade; }

Example of Information student นายวีกิจ นางสาวนิน วีกิจ มุนินทร์ char name[20]; รักเป็นไทย จงสวัสดิ์ char surname[30]; 16 17 int age; ชาย หญิง char sex[7]; 2.95 3.25 float grade;

Example of Variable Declaration struct student { char name[20]; char surname[30]; int age; char sex[7]; float grade; }; struct date { int day, month, year; }; struct sdate { char day[3], month[3]; char year[5]; };

สมาชิกข้อมูลภายในมี 4 ฟิลด์ (4 fields) struct address { char name[30]; char detail[50]; int age; char telephone[10]; }; struct student { char name[30]; char surname[50]; int Id; }; ชื่อของ Structure สมาชิกข้อมูลภายในมี 4 ฟิลด์ (4 fields)

Memory Usage struct book { char code[6]; float price; int year; } code 7 bytes 4 bytes 2 bytes

structure_name.member; Member Declaration การอ้างถึงสมาชิกในตัวแปรชนิดโครงสร้าง ทำได้โดยบอกชื่อตัวแปรโครงสร้างตามด้วยจุด และต่อด้วยชื่อสมาชิกของโครงสร้างนั้นๆ มีรูปแบบดังนี้ structure_name.member; student1.name อ้างถึงข้อมูลชื่อของตัวแปร student1 student1.surname อ้างถึงข้อมูลสกุลของตัวแปร student1 birthday.day อ้างถึงข้อมูลวันของตัวแปร birthday birthday.month อ้างถึงข้อมูลเดือนของตัวแปร birthday

Declaration & Assignment Value #include <stdio.h> struct income { float salary, bonus; int age; }; void main(void) { struct income somsri; somsri.salary = 18000.00; somsri.bonus = 30000.00; somsri.age = 23; }

Declaration & Assignment Value (cont.) สามารถกำหนดค่าทั้งหมดในตัวแปรได้ โดยใช้เครื่องหมาย { } คร่อมค่าเริ่มต้นทั้งหมด และใช้เครื่องหมาย , คั่นระหว่างค่าของสมาชิกแต่ละตัว ตัวอย่างเช่น struct date { int day; int month; int year; } ; struct date d1 = {10,5,1992}; day 10 month 5 d1 year 1992

Initial Value to Member การกำหนดค่าเริ่มต้นให้ตัวแปรข้อความ struct subject { char name[20]; int credit; char grade; } s1 = {"Physics I”, 3, 'A'}; หรือ }; struct subject s1 = {"Physics I”, 3, 'A'}; name Physics I credit 3 s1 grade A

Copy Value in Same Structure struct date { int day,month,year; } d1, d2; แทนที่จะกำหนดค่าสมาชิกทีละตัว d2.day = d1.day; d2.month = d1.month; d2.year = d1.year; สามารถกำหนดค่าเป็นตัวแปรโครงสร้างได้เลยเช่น d2 = d1;

Comparison of Structure ในการเปรียบเทียบค่าของตัวแปรโครงสร้างนั้น ให้เปรียบเทียบค่าของสมาชิกแต่ละตัว นำตัวแปรโครงสร้างมาเปรียบเทียบกันโดยตรงไม่ได้ เช่น หากมีการตัวแปรชนิด struct date ชื่อว่า d1 และ d2 struct date { int day,month,year } d1,d2; จะนำ d1 และ d2 มาเปรียบเทียบกันโดยตรงไม่ได้ if(d1 == d2) printf(“d1 is the same date as d2”);

Array of Structure ปกติเราจะใช้ข้อมูลชนิดโครงสร้างมากกว่าหนึ่งข้อมูล เช่นโครงสร้างนักเรียนประกอบด้วย รหัส, ชื่อ, เพศ, และอายุ โดยส่วนมากเราจะมีข้อมูลของนักเรียนหลายคน ดังนั้นเราสามารถสร้างตัวแปรของนักเรียนให้เป็นอาเรย์ของตัวแปรโครงสร้าง เพื่อทำการเก็บข้อมูลแบบโครงสร้างไว้เป็นกลุ่มข้อมูลที่เกี่ยวข้องกัน เช่น โครงสร้างนักเรียน ซึ่งโรงเรียนหนึ่งจะต้องมีนักเรียนหลายคน จะต้องเก็บข้อมูลของนักเรียนเหล่านี้เพื่อนำมาประมวลผลต่อไป

Array of Structure (cont.) ข้อมูลโครงสร้าง 1 ตัว ก็คือข้อมูล 1 รายการ (1 record) เช่น ประกาศข้อมูลโครงสร้างชนิด student struct student { char code[9]; char name[41]; float mid, lab, fin; char grade; } stu1; stu1 เป็นตัวแปรโครงสร้าง สามารถเก็บข้อมูลนักศึกษาได้ 1 คน ต้องการเก็บข้อมูลนักศึกษาหลายๆ คนนั้น ไม่ต้องประกาศตัวแปรโครงสร้างหลายๆ ตัว โดยสามารถสร้างอาเรย์ของโครงสร้าง (Arrays of structures) ได้

Array of Structure (cont.) การประกาศอาเรย์ของข้อมูลชนิดโครงสร้างมีรูปแบบดังนี้ เช่น ได้ตัวแปรอาเรย์ที่มีสมาชิก 3 ตัว (เพื่อเก็บข้อมูล น.ศ 3 คน) สมาชิกแต่ละตัวในอาเรย์ คือตัวแปรโครงสร้าง (structure) ชนิด student struct structure_name member [size]; struct student { char code[9]; char name[41]; float mid, lab, fin; char grade; }; struct student stu[3];

Memory Usage age name 20 bytes 2 1 grade student[0] student[1] #include <stdio.h> main() { struct profile { char name[19]; int age; char grade; }; struct profile student[3]; } age name 20 bytes 2 1 grade student[0] student[1] student[2]

Assignment Value to Array of Structure ตัวอย่างเช่น struct structure_name member [size] = { { value_list 1}, { value_list 2}, ... { value_list n} }; struct student stu[100] ={ {“61007332”, “Somchai”, 20, 15, 30, ‘C’} , {“61017332”, “Decha”, 25, 18, 40, ‘A’} , {“61027332”, “Tanee”, 12, 15, 25, ‘D’} };

Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments

Assignments # 1 จงเขียนโปรแกรมเก็บข้อมูลนักศึกษาจำนวน 10 คน โดยมีรายละเอียดดังนี้ ข้อมูลประกอบด้วย ชื่อกับ อายุ รับข้อมูลนักศึกษาจากคีย์บอร์ด โปรแกรมจะต้องใช้ตัวชี้ที่ชี้ไปยังข้อมูลประเภทโครงสร้าง เมื่อป้อนข้อมูลเสร็จ โปรแกรมจะค้นหานักเรียนที่อายุมากกว่า 20 ปี แสดงชื่อ ออกจอภาพ

Output Student[6] Student[0] name:tu name:joy age:25 age:12 Student[7] name:tee age:34 Student[8] name:bat age:44 Student[9] name:phon age:33 jo,23 pat,21 tu,25 tee,34 bat,44 phon,33 Student[0] name:joy age:12 Student[1] name:boy age:20 Student[2] name:jo age:23 Student[3] name:pat age:21 Student[4] name:ple age:13 Student[5] name:tom age:11

Assignments # 2 จงสร้างอาร์เรย์ A เป็นอาร์เรย์ขนาด 3x3 เก็บข้อมูลตัวเลข 1-9 แล้วแสดงผลลัพธ์ตัวเลขในอาร์เรย์โดยใช้การอ้างอิงค่าตัวเลขโดยใช้ Pointer เท่านั้น กำหนดให้ x และ y เป็นตัวแปรแบบทศนิยม จงเขียนโปรแกรม ทำการสลับค่า x และ y โดยใช้ pointer เท่านั้น

Example #4 Example 4 : จงเขียนผังงานและโปรแกรม เพื่อรับข้อความเข้ามาแล้วตรวจสอบว่ามีทั้งหมดกี่ประโยค วิเคราะห์โจทย์ เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนแผนภาพการไหลของข้อมูล เขียนโค้ด

Example #5 Example 5 : จงเขียนโปรแกรมเพื่อรับจำนวน 10 จำนวน เพื่อหาค่ามากที่สุดในจำนวนที่รับ โดยการย้ายค่ามากที่สุดไปไว้ Array ที่ตำแหน่งสุดท้าย วิเคราะห์โจทย์ เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนแผนภาพการไหลของข้อมูล เขียนโค้ด