int x - Choopan Rattanapoka

Report
FUNCTION
030523300- Computer Programming
Asst. Prof. Dr. Choopan Rattanapoka
Function


ในการทางานบางอย่างจาเป็ นต้องใช้คาสัง่ มากว่าหนึ่ งคาสัง่ เพื่อทางานนั้นให้
สาเร็จ ซึ่งคาสัง่ ที่เขียนรวมกันไว้เพื่อใช้งานจะเรียกว่า ฟั งก์ชนั (function)
ที่ผ่านมาเราได้เรียกใช้งานฟั งก์ชนั ในภาษาซีมาบ้างแล้ว เช่น
 printf(
)
 scanf( )
 ฟั งก์ชน
ั เหล่านี้ เป็ นฟั งก์ชนั มาตรฐานใน ภาษาซีหรือไลบรารีฟังก์ชนั
รูปแบบของฟั งก์ชนั


โครงสร้างของโปรแกรมที่เขียนด้วยภาษาซี ภายในโปรแกรมจะประกอบด้วยฟั งก์ชนั ต่างๆ
โดยจะไม่มีคาสัง่ ที่เขียนเดี่ยวๆ อยูน่ อกฟั งก์ชนั
อย่างน้อยที่สุดในโปรแกรมจะต้องมีหนึ่ งฟั งก์ชนั เสมอนัน่ คือ ฟั งก์ชนั main( ) ซึ่งเป็ น
ฟั งก์ชนั หลักที่โปรแกรมภาษาซีจะเริ่มต้นทางานจากจุดนี้ จากนั้นภายในฟั งก์ชนั main( )
อาจจะมีการเรียกใช้ฟังก์ชนั อื่นๆ
โครงสร้างการเรียกใช้งานฟั งก์ชนั
การทางานของฟั งก์ชนั
Input
Output
ฟั งก์ชนั ในภาษาซี

ฟั งก์ชนั ในภาษาซีสามารถแบ่งออกเป็ น 2 ประเภท คือ
 ไลบรารีฟังก์ชน
ั
(Library Function) หรือ ฟั งก์ชนั มาตรฐาน
 ฟั งก์ชน
ั มาตรฐานในภาษาซีเป็ นฟั งก์ชนั ที่มีมาให้พร้อมกับตัวแปลภาษาซีตามข้อกาหนด
ANSI C เพื่อใช้งานในด้านต่างๆ โดยเน้นที่งานพื้ นฐาน อย่างเช่นฟั งก์ชนั คานวณทาง
คณิตศาสตร์, ฟั งก์ชนั สาหรับจัดการกับข้อความ หรือฟั งก์ชนั จัดการเกี่ยวกับเวลา
 การใช้งานฟั งก์ชน
ั มาตรฐานปกติแล้วจาเป็ นต้องใช้คาสัง่ #include แฟ้ มข้อมูล .h
หรือที่เรียกว่า header file เข้าไปในโปรแกรมก่อนการเรียกใช้งาน เนื่ องจาก
header file จะเป็ นตัวที่นิยามฟั งก์ชนั และค่าต่างๆ ที่ฟังก์ชนั จาเป็ นต้องใช้ เช่นถ้า
ต้องการใช้งานฟั งก์ชนั ทางคณิตศาสตร์ ในโปรแกรมจะเป็ นต้อง #include
<math.h> เข้าไปก่อน
 ฟั งก์ชน
ั ที่ผใู้ ช้สร้างขึ้ นเอง
(User defined function)
ฟั งก์ชนั ที่ผใู ้ ช้สร้างขึ้นเอง
type function-name (type arg-1, type arg-2, … )
{
local variable declaration;
statement-1;
statement-2;
….
statement-n;
return(value);
}
ประเภทของฟั งก์ชนั

ฟั งก์ชนั ในภาษาซี ถ้าใช้การรับ/ส่งค่าของฟั งก์ชนั เป็ นเกณฑ์ สามารถแบ่ง
ออกได้เป็ น 3 ประเภท
 ฟั งก์ชน
ั ที่ไม่มีการรับ/ส่งค่า
 ฟั งก์ชน
ั ที่มีการรับค่าเข้าไปในฟั งก์ชนั
 ฟั งก์ชน
ั ที่มีการส่งค่ากลับออกจากฟั งก์ชนั
ฟั งก์ชนั ที่ไม่มีการรับ/ส่งค่า

ฟั งก์ชนั ที่ไม่มีการรับ/ส่งค่าใดๆ ซึ่งหมายความว่า
 การเรียกใช้ฟังก์ชน
ั ประเภทนี้ ไม่ตอ้ งส่งอาร์กิวเมนต์ใดๆ
เข้ามาให้กบั ฟั งก์ชนั
 และฟั งก์ชน
ั จะทางานโดยไม่มีการส่งผลลัพธ์ใดๆ กลับมาให้กบั ผูเ้ รียกใช้
 ดังนั้ นถือได้วา่ ฟั งก์ชน
ั ประเภทนี้ เป็ นประเภทที่เขียนง่ายที่สุด ส่วนใหญ่จะใช้ใน
การแสดงผลข้อความ
void showProgram( ) {
printf(“= Today Program =\n”);
printf(“1. Mummy\n”);
printf(“2. Star war\n”);
printf(“3. Spiderman\n\n”);
}
ตัวอย่างการใช้งาน
#include <stdio.h>
void showProgram( ) {
printf(“=== Today Program ===\n”);
printf(“1. Mummy\n”);
printf(“2. Star war\n”);
printf(“3. Spiderman\n\n”);
}
int main(int argc, char **argv) {
char ch;
printf("Do you want to check showing program (y/n) : ");
ch = getchar( );
if((ch == ‘Y’) || (ch == ‘y’)) {
showProgram( );
} else {
printf(“Thank you\n”);
}
}
ฟั งก์ชนั ที่มีการรับค่า


ฟั งก์ชนั ประเภทที่มีการรับค่าหมายถึง ฟั งก์ชนั ที่เวลาจะเรียกใช้งานต้องมี
การส่งค่าอาร์กิวเมนต์ไปให้กบั ฟั งก์ชนั นั้นด้วย
โดยอาร์กิวเมนต์ที่ส่งไปต้องตรงตามข้อกาหนดของฟั งก์ชนั อย่างเช่น
ฟั งก์ชนั กาหนดให้ส่งอาร์กิวเมนต์เข้าไป 3 ตัวคือ int, float, long เวลา
เรียกใช้งานฟั งก์ชนั ก็ตอ้ งส่งข้อมูลซึ่งอาจจะอยูใ่ นรูปของนิ พจน์ ตัวแปร หรือ
ค่าคงที่ก็ได้ แต่ตอ้ งเป็ นข้อมูลชนิ ด int, float, และ long ตามลาดับ
เท่านั้น
void average(int x, int y) {
printf(“Average of %d and %d = %f\n”, x, y, (x + y)/2.0);
}
ตัวอย่างการใช้งาน(1)
#include <stdio.h>
average
x
void average(int x, int y)
{
printf(“Average of %d and %d = %f\n”, x,
y,
(x + y)/2.0);
}
int main(int argc, char **argv)
{
int a = 5, b = 10;
average(a, b);
}
y
Main
a
5
b
10
ตัวอย่างการใช้งาน(2)
#include <stdio.h>
average
b
void average(int b, int a)
{
printf(“Average of %d and %d = %f\n”, b,
a,
(b + a)/2.0);
}
int main(int argc, char **argv)
{
int a = 5, b = 10;
average(a, b);
}
a
Main
a
5
b
10
ตัวอย่างการใช้งาน(3)
#include <stdio.h>
average
x
void average(int x, int y)
{
printf(“Average of %d and %d = %f\n”, x,
y,
(x + y)/2.0);
}
int main(int argc, char **argv)
{
average((3+2), (100/10));
}
y
Main
5
3+2
100/10
10
ตัวอย่างการใช้งาน(4)
#include <stdio.h>
average
a
void average(int a, int b)
{
a = 10;
b = 20;
}
int main(int argc, char **argv)
{
int a = 5, b = 10;
average(a, b);
}
10
b
20
a
5
b
10
Main
แบบฝึ กหัด 1 : จงหาผลการรัน
#include <stdio.h>
void disp(int a)
{
int i;
for(i = 1; i <= 12; i++)
printf(“%d x %d = %d\n”, a, i, (a*i));
}
int main(int argc, char **argv)
{
disp(5);
}
แบบฝึ กหัด 2 : จงหาผลการรัน
#include <stdio.h>
void plus5(int x)
{
x = x + 5;
printf(“X in plus5 = %d\n”, x);
}
int main(int argc, char **argv)
{
int x = 10;
printf(“X in main before calling function = %d\n”, x);
plus5( x );
printf(“X in main after calling function = %d\n”, x);
}
แบบฝึ กหัด 3 : จงหาผลการรัน
#include <stdio.h>
void swap(int a, int b) {
int tmp;
tmp = a;
a = b;
b = tmp;
printf(“In swap : A = %d, B = %d\n”, a, b);
}
int main(int argc, char **argv) {
int a = 5, b = 10;
printf(“Before swap A = %d, B = %d\n”, a, b);
swap(a, b);
printf(“After swap A = %d, B = %d\n”, a, b);
}
ฟั งก์ชนั ที่มีการส่งค่ากลับออกจากฟั งก์ชนั



ฟั งก์ชนั ที่มีการส่งค่ากลับออกจากฟั งก์ชนั ด้วย โดยส่วนใหญ่แล้วฟั งก์ชนั
ประเภทนี้ มักจะใช้กบั งานประเภทที่ตอ้ งการคานวณค่า
ในการเรียกใช้งานฟั งก์ชนั ประเภทที่มีการส่งค่ากลับ เราจาเป็ นจะต้องสร้าง
ตัวแปรที่มีประเภทข้อมูลเดียวกันกับประเภทที่ฟังก์ชนั
ค่าที่ส่งกลับจากฟั งก์ชนั จะใช้คาสัง่ return ซึ่งสามารถคืนได้ค่าเดียว
เท่านั้น
int power3(int x) {
return( x * x * x);
}
ตัวอย่างการใช้งาน(1)
#include <stdio.h>
power3
x
int power3(int x) {
return( x * x * x);
}
int main(int argc, char **argv) {
int num;
num = power3(2);
printf(“2^3 = %d\n”, num);
}
8
Main
num
?
2
ตัวอย่างการใช้งาน(2)
#include <stdio.h>
float average(int x, int y)
{
return( (x + y)/2.0 );
}
int main(int argc, char **argv)
{
int a = 5, b = 10; float f;
f = average(a, b);
printf(“Average of %d and %d = %f\n”,
a, b, f);
}
average
x
7.5
y
Main
a
5
b
10
f
?
แบบฝึ กหัด 4 : จงหาผลการรัน
#include <stdio.h>
int multiply(int a, int b)
{
return (a * b);
}
int main(int argc, char **argv)
{
int a = 5, b = 10;
printf(“%d\n”, multiply(3,2));
printf(“%d\n”, multiply(a, 5));
printf(“%d\n”, multiply((3+2), (b – 6));
printf(“%d\n”, multiply( multiply(2,3), multiply(2, multiply(3, 2 -1))));
}
การเขียนโปรโตไทป์ สาหรับฟั งก์ชนั




โปรโตไทป์ (Prototype) คือ คาสัง่ อธิบายรายละเอียดของฟั งก์ชนั
เป็ นคาสัง่ ที่บอกให้ตวั แปรภาษาซีรจู ้ กั กับฟั งก์ชนั ก่อนที่ฟังก์ชนั จะถูกเรียกใช้
งาน
ตามปกติถา้ ต้องการให้ตวั แปรภาษาซีแปลความหมายของโปรแกรมให้
ถูกต้อง เราจะต้องเขียนฟั งก์ชนั ที่สร้างขึ้ นเอง ไว้ก่อนฟั งก์ชนั main( )
เนื่ องจากถ้ามีการเรียกใช้ฟังก์ชนั ก่อนที่จะเจอตัวฟั งก์ชนั ตัวแปรภาษาซีจะ
เตือนว่าไม่รจู ้ กั ฟั งก์ชนั แต่การเขียนโปรโตไทป์ จะทาให้เราสามารถย้าย
ตาแหน่ งของฟั งก์ชนั ไปไว้ส่วนใดของโปรแกรมก็ได้
การประกาศโปรโตไทป์

ซึ่งรูปแบบการเขียนโปรโตไทป์ จะเหมือนกับการเขียนบรรทัดแรกสุดของ
ฟั งก์ชนั คือ
type function-name (type arg-1, type arg-2, … );

ตัวอย่าง
;
int power3(int
power3(int x)
x) {{
int
return( x * x * x);
}
Function
Prototype
ตัวอย่างการใช้งาน(1)
#include <stdio.h>
int power3(int x) {
return( x * x * x);
}
int main(int argc, char **argv) {
printf(“2^3 = %d\n”,
power3(2));
}
ถูกต้อง
#include <stdio.h>
int power3(int x);
int main(int argc, char **argv) {
printf(“2^3 = %d\n”,
power3(2));
}
int power3(int x) {
return( x * x * x);
}
ไม่ถูถกูกต้ต้ออง ง
ตัวแปรและขอบเขตการใช้งานสาหรับฟั งก์ชนั


เมื่อมีการสร้างฟั งก์ชนั ขึ้ นมาใช้งานเพิ่มในโปรแกรม การประกาศตัวแปรใน
แต่ละฟั งก์ชนั นั้นจึงต้องมีขอ้ กาหนดและขอบเขตของตัวแปรเพื่อป้องกันความ
สับสนในการใช้งาน
โดยประเภทของตัวแปรในภาษาซีจะแบ่งตามขอบเขตของการสร้างและการ
ใช้งานตัวแปรของเป็ น 4 ประเภทใหญ่ๆคือ
 Local
 Global
 Extern
 Static
ตัวแปร local



ตัวแปร local จะเรียกอีกอย่างหนึ่ งว่า ตัวแปร automatic
เป็ นตัวแปรประเภทที่สร้างขึ้ นมาภายในฟั งก์ชนั ขอบเขตการใช้งานตัวแปร
local ก็จะอยูภ่ ายในฟั งก์ชนั ที่สร้างตัวแปรขึ้ นมาเท่านั้น จะไม่สามารถถูก
เรียกใช้งานจากฟั งก์ชนั อื่นได้
ถ้ามีการสร้างตัวแปร local แล้วมีการตั้งชือ่ ซ้ากันระหว่างฟั งก์ชนั ก็ถือว่า
เป็ นคนละตัวแปรกัน การสัง่ ให้เปลี่ยนค่าที่ฟังก์ชนั ใดฟั งก์ชนั หนึ่ งจะไม่สง่ ผล
กระทบต่ออีกฟั งก์ชนั หนึ่ งที่ใช้ชื่อตัวแปร local เดียวกัน
ตัวอย่างการใช้งาน
#include <stdio.h>
void testLocal( ) {
int i = 10;
i += 5;
}
int main(int argc, char **argv) {
int i = 10;
printf(“i = %d\n”, i);
testLocal( );
printf(“i = %d\n”, i);
}
testLocal
i
10
15
Main
i
10
ผลการรัน :
i = 10
i = 10
ตัวแปร global



ตัวแปร global หรือเรียกอีกอย่างหนึ่ งว่า ตัวแปร external เป็ นตัว
แปรประเภทที่สามารถเรียกใช้งานจากฟั งก์ชนั ใดก็ได้ในโปรแกรม
โดยการสร้างตัวแปร global จะต้องเขียนคาสัง่ ประกาศสร้างไว้ ที่ส่วน
กาหนดค่าเริ่มต้นของโปรแกรมต่อจากส่วนของ Preprocessor โดย
ไม่ได้สร้างไว้ภายในฟั งก์ชนั ใดฟั งก์ชนั หนึ่ งโดยเฉพาะ
ขอบเขตการใช้งานตัวแปร global ก็คือตลอดทั้งโปรแกรมสามารถ
เรียกใช้หรือเขียนคาสัง่ เพือ่ เปลี่ยนแปลงค่าของตัวแปรประเภท global
จากฟั งก์ชนั ใดก็ได้ในโปรแกรม
การสร้างตัวแปรชนิด Global
#include <stdio.h>
int i;
//  ประกาศตัวแปร global
void testGlobal( ) {
i += 5;
}
int main(int argc, char **argv) {
i = 10;
printf(“i = %d\n”, i);
testGlobal( );
printf(“i = %d\n”, i);
}
ตัวอย่างการใช้งาน
#include <stdio.h>
int i;
//  ประกาศตัวแปร global
void testGlobal( ) {
i += 5;
}
int main(int argc, char **argv) {
i = 10;
printf(“i = %d\n”, i);
testGlobal( );
printf(“i = %d\n”, i);
}
Global
i
15
10
?
testGlobal
Main
ผลการรัน :
i = 10
i = 15
ลาดับในการเรียกใช้ตวั แปรของฟั งก์ชนั

ถ้าชื่อตัวแปรซ้ากัน ระหว่างตัวแปรประเภท Local และ Global
Local ก่อน
 จากนั้ นถ้าไม่พบตัวแปรนั้ นใน Local จึงจะค้นหาและเรียกใช้ในส่วน Global
 ฟั งก์ชน
ั จะเรียกใช้งานตัวแปรที่เป็ น

ตัวแปรที่ผ่านเข้ามาให้ฟังก์ชนั (parameter หรือ argument) จะเป็ น
ตัวแปรประเภท Local
 ดังนั้ นจึงห้ามตั้งชื่อซ้ากันเนื่ องจากจะคอมไพล์ไม่ผ่าน
void testFunc(int x) {
int x;
....
....
}
ชื่อซ้า
แบบฝึ กหัด 5 : จงหาผลการรัน
#include<stdio.h>
int i=0;
void disp(int i);
void show();
void main(void)
{
int i =9;
printf(“i in main function = %d\n",i);
disp(3); show( );
}
void disp(int i){
i=5;
printf(“i in function disp = %d\n",i);
}
void show() { printf("i in function show = %d\n",i); }
ฟั งก์ชนั มาตรฐาน (1)

ฟั งก์ชนั มาตรฐานทางคณิตศาสตร์ (ตรีโกณมิติ) #include <math.h>
ฟั งก์ ชันมาตราฐาน
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
คาอธิบาย
ฟั งก์ชนั สำหรับหำค่ำ sine ของมุม x ที่มีหน่วยเป็ นเรเดียน
ฟั งก์ชนั สำหรับหำค่ำ cos ของมุม x ที่มีหน่วยเป็ นเรเดียน
ฟั งก์ชนั สำหรับหำค่ำ tan ของมุม x ที่มีหน่วยเป็ นเรเดียน
ฟั งก์ชนั สำหรับหำค่ำ arcsin ของค่า x จะคืนค่ามุมที่มีหน่วยเป็ นเรเดียน
ฟั งก์ชนั สำหรับหำค่ำ arccos ของค่า x จะคืนค่ามุมที่มีหน่วยเป็ นเรเดียน
ฟั งก์ชนั สำหรับหำค่ำ arctan ของค่า x จะคืนค่ามุมที่มีหน่วยเป็ นเรเดียน
คณิตศาสตร์ตรีโกณมิติ
180 องศาดีกรี คือ π องศาเรเดียน (โดย π คือ 3.14…)
การแปลงมุมองศาดีกรีให้เป็ นมุมองศาเรเดียน สามารถทาได้โดยคานวณ
องศาเรเดียน =
การแปลงมุมองศาเรเดียนให้เป็ นมุมองศาดีกรี สามารถทาได้โดยคานวณ
องศาดีกรี
=
ฟั งก์ชนั มาตรฐาน (2)

ฟั งก์ชนั มาตรฐานทางคณิตศาสตร์ (ลอการิธึม, ยกกาลัง และค่าสัมบูรณ์)
#include <math.h>
ฟั งก์ ชันมาตราฐาน
exp(x)
log(x)
log10(x)
ฟั งก์ชนั สำหรับหำค่ำ ex
ฟั งก์ชนั สำหรับหำค่ำ log ฐาน e ของ x
ฟั งก์ชนั สำหรับหำค่ำ log ฐาน 10 ของ x
ฟั งก์ ชันมาตราฐาน
pow(x, y)
sqrt (x)
fabs(x)
คาอธิบาย
ฟั งก์ชนั สำหรับหำค่ำเลขยกกำลัง xy
ฟั งก์ชนั สำหรับหำค่ำรำกที่สองของ x
ฟั งก์ชนั สำหรับหำค่ำสัมบูรณ์ของ x
ฟั งก์ ชันมาตรฐาน
floor(x)
ceil(x)
round(x)
คาอธิบาย
คาอธิบาย
ฟั งก์ชนั สำหรับปั ดเศษทศนิยมของ x ออกให้เป็ นจานวนเต็ม
ฟั งก์ชนั สำหรับปั ดเศษทศนิยมของ x ขึ้นให้เป็ นจานวนเต็ม
ฟั งก์ชนั สำหรับปั ดเศษทศนิยมของ x ให้เป็ นจานวนเต็ม
ถ้าจุดทศนิยมมากกว่าหรื อเท่ากับ .5 จะปั ดขึ้นนอกนั้นปัด ง
ฟั งก์ชนั มาตรฐานเกี่ยวกับตัวอักษร <ctype.h>
ฟั งก์ ชันมาตรฐาน
tolower(ch)
toupper(ch)
islower(ch)
isupper(ch)
isalnum(ch)
isalpha(ch)
isdigit(ch)
ispunct(ch)
คาอธิบาย
ฟั งก์ชนั ที่ใช้ แปลงตัวอักษร ch ให้เป็ นตัวพิมพ์เ ก็
ฟังก์ชนั ที่ใช้แป งตัวอักษร ch ให้เป็ นตัวพิมพ์ใหญ่
ฟั งก์ชนั ที่ใช้ ตรวจสอบตัวอักษร ch ว่ำเป็ นตัวพิมพ์เล็กหรื อไม่ จะคืนค่ำจริ ง(ค่ำไม่
เท่ำกับศูนย์) ถ้ ำ ch เป็ นตัวพิมพ์เล็ก นอกนันคื
้ นค่ำเท็จหรื อศูนย์
ฟั งก์ชนั ที่ใช้ ตรวจสอบตัวอักษร ch ว่ำเป็ นตัวพิมพ์ใหญ่หรื อไม่ จะคืนค่ำจริ ง(ค่ำ
ไม่เท่ำกับศูนย์) ถ้ ำ ch เป็ นตัวพิมพ์ใหญ่ นอกนันคื
้ นค่ำเท็จหรื อศูนย์
ฟั งก์ชนั จะให้ คำ่ กลับคืนออกมำเป็ นจริ ง(ค่าไม่เท่ากับศูนย์) ถ้าตัวแปร ch มีค่า
เป็ น 'A' - 'Z' , 'a' - 'z' , แ ะ '0' – '9' นอกนั้นจะให้ค่าเป็ นเท็จหรื อศูนย์
ฟั งก์ชนั จะให้ คำ่ กลับคืนออกมำเป็ นจริ ง(ค่าไม่เท่ากับศูนย์) ถ้าตัวแปร ch มีค่า
เป็ น 'A' - 'Z' , แ ะ 'a' - 'z' นอกนั้นจะให้ค่าเป็ นเท็จหรื อศูนย์
ฟั งก์ชนั จะให้ คำ่ กลับคืนออกมำเป็ นจริ ง(ค่าไม่เท่ากับศูนย์) ถ้าตัวแปร ch มีค่า
เป็ น '0' - '9' นอกนั้นจะให้ค่าเป็ นเท็จหรื อศูนย์
ฟั งก์ชนั จะให้ คำ่ กลับคืนออกมำเป็ นจริ ง(ค่าไม่เท่ากับศูนย์) ถ้าตัวแปร ch มีค่า
เป็ นตัวเชื่อมต่างๆ เช่น #, <, @, > แ ะอื่นๆ นอกนันจะให้
้
คำ่ เป็ นเท็จหรื อศูนย์
ฟั งก์ชนั มาตรฐานเกี่ยวกับข้อความ <string.h>
ฟั งก์ ชันมาตรฐาน
strcpy(str1, str2)
strcat(str1, str2)
strcmp(str1, str2)
strlen(str)
คาอธิบาย
ฟั งก์ชนั สำหรับคัดลอก (copy) ข้ อควำมจำกตัวแปร str2 ไป
เก็บยังตัวแปร str1
ฟังก์ชนั สาหรับเชื่อมต่อข้อความโดยการนาข้อความในตัวแปร
str2 ไปต่อท้ ำยข้ อควำมในตัวแปร str1 โดยผลลัพธ์จะเก็บไว้
ในตัวแปร str1
ฟั งก์ชนั สำหรับเปรี ยบเทียบข้ อควำมในตัวแปร str1 และ str2
ถ้ ำข้ อควำมเหมือนกันจะคืนค่ำศูนย์
ฟั งก์ชนั สำหรับหำควำมยำวของข้ อควำมใน str

similar documents