CT 2101 Procedural Programming - Ramkhamhaeng...
Transcript of CT 2101 Procedural Programming - Ramkhamhaeng...
CT 2101 Procedural Programming
โดย ผศ.ดร.อไร ทองหวไผ
เนอหารายวชา
น าความรเกยวกบการสรางอลกอรทมและการเขยนโปรแกรมมาใชงานโดยเนนการออกแบบและการสรางโปรแกรมขนาดใหญ การออกแบบโปรแกรมแบบบนลงลาง แบบลางขนบน ศกษาโครงสรางขอมลเบองตน เชนรายการโยง สแตค คว ทร และแฟม การท าขอมลเปนนามธรรม เพอสรางสวนประกอบโปรแกรมในรปสวนจ าเพาะ การเขยนโปรแกรมเรยกตวเอง การเรยงล าดบและการคนหาขอมลแบบทวไป ปญหาทางทฤษฏของวทยาการคอมพวเตอรทเกยวของกบการเขยนโปรแกรม ความเขาใจเบองตนเกยวกบวศวกรรมซอฟตแวร เชนคณสมบตของโปรแกรมทด วธการทดสอบความถกตองของโปรแกรม วธแกไขความผดพลาดในโปรแกรม วธการท างานแบบเปนทมและวธการบรหารทมงานเขยนโปรแกรมเบองตน
PR.
เนอหารายวชานเชอมโยงมาจากรายวชา COS1101 การออกแบบโปรแกรม โดยผเรยนตองมพนฐานความรในการออกแบบโปรแกรมเปนอยางด สามารถออกแบบแนวคดในการแกปญหาโปรแกรมเบองตนได
วตถประสงค
มงเนนใหนกศกษามความร ความเขาใจ และมความสามารถในการจดการดานขอมลเบองตนได
มความสามารถในการวเคราะหระบบงานและเขยนโปรแกรมไดอยางถกตองตามหลกไวยากรณภาษา
ผเรยนสามารถทดสอบและแกไขความผดพลาดของโปรแกรมกอนน าไปใชงานได
นอกจากนผเรยนสามารถท างานเปนทม และมวธการบรหารทมงานเขยนโปรแกรมเบองตนได
เนอหา
Structure Programming
Sequence
Condition
Repetition
Array
Record
Recursive
File
เนอหา(ตอ)
String
Pointer
Data structure
Stack
Queue
Linked-list
Tree
คอมพวเตอรคออะไร?
อปกรณทใชส าหรบประมวลผล องคประกอบหลกทส าคญของคอมพวเตอรประกอบดวย 2 สวนคอ
ฮารตแวร และซอฟตแวร ฮารตแวรคออปกรณอเลคโทรนกสตางๆทใชในการปฏบตการ ซอฟตแวรเปนโปรแกรมหรอชดค าสงทใชในการตดตอกบฮารตแวรนนเอง โดยการตดตอระหวางกนใชภาษาโปรแกรมทเครองคอมพวเตอรเขาใจ
เรยกวาภาษาเครอง (machine language) ซงประกอบดวยเลขฐานสอง
การประมวลผลโปรแกรมภาษาระดบสง
การประมวลผลโปรแกรมคดคาน า
ขนตอนท1 โปรแกรมภาษาเครองในการคดคาน า และขอมลทใชในการประมวลผลคอจ านวนของยนคน าทใช จะถกเกบในหนวยความจ า
ขนตอนท2 โปรแกรมจะท าการประมวลผลโดยน าจ านวนของยนคของน ามาค านวณหาคาน าทตองจาย และเกบผลลพธไวในหนวยความจ า
ขนตอนท3 น าผลลพธทค านวณเกบไวในหนวยความจ า แสดงผลออกมาเปนบลคาน า
การประมวลผลโปรแกรมคดคาน า
software development method
ระบถงความตองการ (problem) วเคราะหปญหา (analysis) ออกแบบอลกอรทมเพอแกปญหา (design) สรางโปรแกรม (implementation) ทดสอบและตรวจสอบความสมบรณของโปรแกรม (testing) บ ารงรกษาและแกไขโปรแกรม (maintenance)
ระบถงความตองการ (problem)
ผพฒนาสามารถสอบถามไดจากบคคลตางๆทเกยวของ ความตองการทดตองชดเจน ไมคลมเครอ มความจ าเปน สามารถทวนสอบ
หรอตรวจสอบได ตดตามได
วเคราะหปญหา (analysis) ตอจากนนจะน าความตองการตางๆเหลานมาวเคราะหถงหนทางในการ
แกปญหา
โดยน าปญหาตางๆเหลานมาก าหนดเปนนยาม(abstraction)ของ ขอมลเขา ขอมลน าออก การค านวณ เงอนไขในการปฏบตการตางๆ
ออกแบบอลกอรทมเพอแกปญหา (design) โดยมการแบงปญหาออกเปนปญหายอยๆเพอใหงายตอการพฒนาซงเรยกวา
top-down design หรอ divide and conquer ในแตละปญหายอยจะก าหนดเปนล าดบขนตอนในการแกปญหาโดยละเอยด
เรยกวา algorithm refinement
Tools
Flowchart
Structure Chart
Stepwise refinements (Pseudo code)
สรางโปรแกรม (implementation)
เขยนเปนภาษาโปรแกรมใหถกตามไวยากรณของภาษานนๆ ภาษา C++
Syntax
Semantic
Algorithm
Goal
Context
ทดสอบและตรวจสอบความสมบรณของโปรแกรม (testing) ทดสอบโดยก าหนดขอมลทดสอบหลายๆชด เพอใหแนใจวาการท างาน
ถกตอง และสามารถน าไปปฏบตการในการแกปญหาได
Test Case
Path
Statements
Valid data
Invalid data
บ ารงรกษาและแกไขโปรแกรม (maintenance)
ปองกนและแกไขขอผดพลาดทอาจเกดขนในขณะท างาน
Corrective maintenance
Adaptive maintenance
Perfective manintenance
Preventive maintenance
กรณศกษา : การแปลงไมลเปนกโลเมตร
ปญหา ตองการแปลงระยะทางทเปนไมลใหเปนกโลเมตร
วเคราะห ตองหาขอมลวาอะไรคอขอมลเขา อะไรคอผลลพธทตองการ และตองมการประมวลผลอยางไร ในทนขอมลเขาคอระยะทางทเปนไมล ผลลพธทตองการคอระยะทางทเปนกโลเมตร ส าหรบการประมวลผลเปนการค านวณทตองทราบวา 1 ไมลมคาเทากบ 1.609 กโลเมตร ตอจากนนนยามขอมลตางๆเหลานเพอใหสามารถเกบในหนวยความจ าของเครองคอมพวเตอรได
วเคราะห
DATA REQUIREMENTS
Problem Input
miles ระยะทางเปนไมล
Problem Output
kms ระยะทางเปนกโลเมตร
Formular
1 ไมล = 1.609 กโลเมตร
ออกแบบ
ALGORITHM WITH REFINEMENTS
1. รบระยะทางเปนไมล 2. แปลงระยะทางจากไมลเปนกโลเมตร 2.1 ระยะทาง 1 ไมลมคาเทากบ 1.609 กโลเมตร 3. แสดงระยะทางเปนกโลเมตร
เขยนโปรแกรม
//miles.cpp
//Coverts distance in miles to kilometers.
#include <iostream>
using namespace std;
int main() //start of main function
{
const float KM_PER_MILE=1.609 //1.609 km in a mile
float miles, //input : distance in miles
kms; //output: distance in kilometers
//Get the distance in miles.
cout << “Enter the distance to miles: ”;
cin >> miles;
// Convert the distance to kilometers.
kms = KM_PER_MILE * miles;
// Display the distance to kilometers.
cout << “ The distance in kilometers is ” << kms <<endl;
return 0; }
ทดสอบ
คณภาพของซอฟตแวร
คณภาพของซอฟตแวร
How to Build Quality Programs
รปแบบทวไปของโปรแกรม C++
compiler directives
using namespace std;
void main()
{
declaration statements;
executable statements;
}
//miles.cpp
//Coverts distance in miles to kilometers.
-----------------------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
-----------------------------------------------------------------------------------------------------
int main() //start of main function
{
const float KM_PER_MILE=1.609 //1.609 km in a mile
float miles, //input : distance in miles
kms; //output: distance in kilometers
------------------------------------------------------------------------------------------------------
//Get the distance in miles.
cout << “Enter the distance to miles: ”;
cin >> miles;
// Convert the distance to kilometers.
kms = KM_PER_MILE * miles;
// Display the distance to kilometers.
cout << “ The distance in kilometers is ” << kms <<endl;
return 0; } -------------------------------------------------------------------------------------------------------
ค าเฉพาะ (Reserved Words)
ชอ(Identifiers)
ขนตนดวยตวอกษรภาษาองกฤษ หรอเครองหมาย underscore (ขดลาง) ภาษา C++ ถอวาอกษรภาษาองกฤษตวเลกกบตวใหญเปนคนละตวกน เชน Rate , rate , RATE เปนตน
ตวตอไปอาจเปนตวเลข ตวอกษร หรอ ขดลางกได เชน Letter1 ,
letter1 , Letter_1 หามใชค าเฉพาะ เปนชอทแทนความหมายอนใด
ชนดของขอมล(Data Types)
Integers : เลขจ านวนเตม เปนเลขทไมมเศษ เชน 5 , -52 , 343222
โดยชนดขอมลทแทนเลขจ านวนเตมไดแก short , int , long
Real numbers: เลขทศนยม เชน 2.5 , –0.00034 ,
3.66666666 , 5.0 เปนตน ชนดขอมลทแทนเลขทศนยมไดแก float ,
double , long double
Boolean : เปนขอมลทมคา true หรอ false ซงเปนคาทไดจากการเปรยบเทยบดวยค าสงเงอนไข ชนดขอมลทแทนคาบลน คอ ขอมลชนด bool
Character : เปนขอมลทเกบอกขระ 1 ตวอกษรซงอาจเปนอกขระทเปนตวเลข ตวอกษรภาษาองกฤษ หรออกขระพเศษ กได ขอมลชนดนไดแก char
String Class
เปนคลาสทภาษา C++ เตรยมไวใหกบโปรแกรมเมอรส าหรบการใชขอมลทเปนขอความ โดย ขอความคอการน าอกขระมาเรยงตอๆกนเปนกลมค า อทเชน “A” “1234” “Enter the distance in miles “ เปนตน
ผใชสามารถอาน บนทก เปรยบเทยบ รวม หรอคนหา ขอความตางๆในการปฏบตงานได
โดยตองมค าสง #include <string> ในโปรแกรมกอนใชงาน
ค าสงก าหนดคา(Assignment Statement)
ใชสญลกษณเทากบ = เปนการใหแกตวแปร kms = KM_PER_MILE * miles ;
การท างานของค าสง cin>>miles
ค าสง cin >> letter1 >> letter2 >>lastName ;
ก าหนดให ตวแปร letter1 และ letter2 เปนขอมลชนด char
และ lastName เปนขอมลชนด string
ตวอยางการพมพขอความทกทาย
//File.hello.cpp
//Display a user’s name
#include <iostream>
#include <string>
using namespace std;
int main()
{
char letter1,letter2 ; //input and output :first two initials
string lastName; //input and output :last name
//Enter letters and print message.
cout << “ Enter 2 initials and a last name : ” ;
cin >>letter1 >>letter2 >> lastName;
cout << “Hello” << letter1 << “ . ” << letter2 << “ . ”
<< lastName << “ ! ” ;
cout << “ We hope you enjoy studying C++.” << endl ;
return 0; }
นพจนคณตศาสตร(Arithmetic Expression)
กฎการค านวณของนพจนคณตศาสตร
เมอพบวงเลบ () จะกระท าวงเลบในสดกอน และกระท าเปนล าดบจนถงวงเลบนอกสด
กรณทมตวกระท าหลายตวมล าดบของการกระท าดงน
unary + , - กระท ากอน
* , / , % กระท าตอมา + , - สดทาย กรณทมล าดบของการกระท าอยในระดบเดยวกนเชน + , - จะกระท าตว
ทพบกอน หรอกระท าจากซายไปขวา
ตองการการหาคา V = (p2 – p1) / ( t2 - t1) ;
ตองการการหาคาของ m = x + k / 2
ขอผดพลาดในการเขยนโปรแกรม
Syntax Errors
Run-Time-Errors
Logic Errors
Syntax Errors
เปนความผดพลาดทสามารถตรวจพบในขณะแปลโปรแกรม เปนความผดทางไวยากรณภาษา ซงการเขยนค าสงโปรแกรมไมสมบรณ มการพมพตกหลน หรอผดพลาด ซงตวแปลภาษาตรวจพบและแสดงขาวสารใหผเขยนโปรแกรมทราบ
[C++ Error] miles.cpp (12) : E2141 Declaration syntax error.
[C++ Error] miles.cpp (15) : E2380 Unterminated string or character constant.
[C++ Error] miles.cpp (16) : E2379 Statement missing ; .
[C++ Error] miles.cpp (19) : E2451 Undefined symbol ‘kms’.
[C++ Warning] miles.cpp (25) : W8080 ‘miles’ declared but never used.
[C++ Warning] miles.cpp (12) : W8004 ‘KM_PER_MILE’ is assigned a value that is never used.
Run-Time-Errors เปนความผดพลาดทเกดขนในขณะปฏบตการ (run) โดยไมสามารถ
ปฏบตงานตามค าสงโปรแกรมได อทเชน มการหารคาดวย 0 เปนตน เมอมความผดพลาดลกษณะนเกดขน โปรแกรมจะหยดการประมวลผลทนท พรอมแสดงบรรทดทผดพลาดรวมทงขอความทอธบายถงความ ผดพลาดทเกดขนใหกบโปรแกรมเมอรไดทราบ เพอใหโปรแกรมเมอรแกไขตอไป
ความผดพลาดทเกดขนโดยปรากฎดงนคอ
“Floating point division by zero”
Logic Errors
เปนความผดพลาดของผลลพธ ซงมผลมาจากอลกอรทมในการแกปญหาโปรแกรม ซงยากทจะคนพบ ตองใชวจารณญาณ ความเชยวชาญของโปรแกรมเมอรในการคนหาและแกไข
ความผดพลาดนอาจเกดจาก การเขยนนพจนทางคณตศาสตรไมถกตอง มการใชเงอนไขในการท างานผดพลาด หรอการลมก าหนดคาเรมตน ส าหรบปฏบตงานเปนตน
แบบฝกหด 1
จงเขยนโปรแกรมหาพนทของสามเหลยมหนาจว สตร
พนท = ½ * ความยาวฐาน * สวนสง
แบบฝกหด 2
จงเขยนโปรแกรมหาคาเฉลยของเลขจ านวนเตมใดๆ 5 จ านวน
แบบฝกหด 3
จงเขยนโปรแกรมในการแปลง จ านวนหลา จ านวนฟต และจ านวนนว ใดๆ ใหเปนนวทงหมด เชน ปอน 2 หลา 2 ฟต 4 นว ผลคอ 100 นว
แบบฝกหด 4
จงแปลง นว ใหเปน จ านวนหลา จ านวนฟต และจ านวนนว
การบาน
1. จงแปลง ชวโมง นาท วนาท ใหเปนวนาททงหมด 2. ปอนจ านวนเงนทเปนเศษเหรยญทางแปนพมพ โปรแกรมสามารถน าไปหา
จ านวนแบงคทนอยทสดสามารถแลกไดจากธนาคาร โดยแลกจากแบงคใหญจนกระทงถงแบงคทนอยทสด
3. จงหาคายกก าลง 2 , ยกก าลง 3 และคายกก าลง 4 ของเลขใดๆ