!
บทที่ 2 การแสดงผลและการรับขอมูล ♦!ความหมายของการแสดงผล การแสดงผล หมายถึง การสัง่ ใหคอมพิวเตอรนําขอมูลและผลลัพธที่มีอยูในหนวยความ จําไป แสดงผลออกที่อุปกรณแสดงผล (output device) ของคอมพิวเตอร การแสดงผลที่อุปกรณแสดงผลอาจมี เพียงอุปกรณเดียว หรือหลาย ๆ อุปกรณพรอมกันก็ได เชน แสดงผลที่จอภาพ เครือ่ งพิมพ(Printer) ลําโพง แผนดิสก เปนตน
♦!การแสดงผลทางจอภาพดวย cout จากรูปแบบโครงสรางของโปรแกรม C++ ในบทที่ 1 จะเห็นตัวอยางการใชประโยคคําสั่ง cout (อานวา c - out ซีเอาต ยอมาจาก character out) หมายถึง การแสดงผลในลักษณะอักษรหรือขอความ ทีอ่ ยูใ นเครือ่ งหมาย "…… " หรือคาของตัวแปร(variable)ออกทางจอภาพ cout เปนออบเจ็กต(object) อยูในไฟล iostream.h ซึ่ง cout จะเปน object ที่ทาหน ํ าทีด่ าเนิ ํ น การเกี่ยวกับกระแสขอมูล(Stream) ของภาษา C++ ออกไปแสดงผลสูอุปกรณตาง ๆ << เปน operator หรือตัวดําเนินการ มีชอ่ื วา put to หรือสงไปที่ หรือเรียกวา insertion หมายถึง การแสดงขอความ เครือ่ งหมาย << จะทําหนาทีน่ าค ํ าทีอ่ ยูท างขวาของเครือ่ งหมายซึง่ อาจจะ เปนคาคงที่ ขอความหรือ string ทีอ่ ยูใ นเครือ่ งหมาย "……" หรือคาตัวแปร(variable) ก็ได สงใหแก Object ที่อยูทางซายของเครื่องหมาย รูปแบบการแสดงผลขอความทางจอภาพ โดยใช cout << มีดงั นี้
! cout << " ขอความ " << "ขอความ " << ตัวแปร; ! cout << ตัวแปร<<"ขอความ"<<ตัวแปร<<…;
•! ตัวอยางโปรแกรม cout_exp.cpp แสดงการใช cout << แสดงขอความออกทาง จอภาพ
ศิริชัย นามบุรี
!
การแสดงและการรับขอมูล
!23 /* Program : cout_exp.cpp Process : display cout object in iostream.h */ #include <iostream.h> void main() { cout << "This is Turbo C++ Program "; cout<< "C++ is high language"; } จากตัวอยางโปรแกรมนี้ cout จะทําหนาที่สงกระแสขอมูลขอความ This is Turbo C++ Program C++ is high language ไปแสดงที่จอภาพ ณ ตําแหนงปจจุบนั ที่ cursor ชี้อยู •! โปรแกรม cout_ex2.cpp แสดงขอความตอกันโดยใช << ออกทางจอภาพ /* Program : cout_ex2.cpp Process : display cout object in iostream.h */ #include <iostream.h> void main() { cout<< "This is Turbo C++ Program."<<" "<<" It is very easy."; cout<< "I love C++."<<" "<<"It's high level language."; } จากโปรแกรม cout_ex2.cpp จะแสดงขอความตอไปนี้บนจอภาพ This is Turbo C++ Program. It is very easy. I love C++. It's high level language.
♦!ตําแหนงแสดงผลทีจ่ อภาพดวย endl 1. การใช endl เปนโอเปอเรเตอรประเภทตัวผสม (manipulator) ทําหนาทีเ่ ลือ่ นเคอรเซอร เพื่อขึ้นบรรทัดใหมและการแสดงผลขอความที่ตามมาจะขึ้นบรรทัดใหมดวย •! ตัวอยางโปรแกรม endl_exp.cpp แสดงขอความ และกําหนดใหแสดงขอความขึ้น บรรทัดใหมดวย manipulator คือ endl /* Program : endl_exp.cpp Process : display cout object in iostream.h */ #include <iostream.h> #include <conio.h> void main() { clrscr(); //clear screen standard function from conio.h ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!24
}
cout << "This is Turbo C++ Program"<<endl; cout << "It is very easy."<<endl; cout <<endl<<endl; // space 2 line cout << "I like C++ Program"<<endl<<endl; cout << "Press any key to continue..."<<endl; getch(); //get character standard function from conio.h
2. การใช setw(n) ทําหนาที่กําหนดความกวางของตัวเลขหรือขอความกอนที่จะแสดงผลใหมีคา เทากับ n อักษร เรียกคา n วาเปน อารกิวเมนต (argument) เพื่อใชในการแสดงผลที่จอภาพในลักษณะชิด ขวา โดยตองเรียกใช Header file ที่ชื่อ iomanip.h ในขณะ compile ดวย ดังตัวอยางตอไปนี้ cout << setw(10) << "World"; หมายถึง กําหนดใหคาว ํ า World มีความกวางในการแสดงผล 10 ตําแหนง โดยนับจากดานซาย ของจอภาพ อักษร d จะเริม่ พิมพตําแหนงคอลัมนที่ 10 และเริ่มพิมพอักษร lrow มาทางซายคอลัมนที่ 9,8,7 และ 6 •! ตัวอยางโปรแกรม setw.cpp เปนการใช setw กําหนดความกวางในการแสดงผล เพือ่ ให แสดงผล ณ ตําแหนงกลางจอภาพ /* Program : setw.cpp Process : display set width of display to screen */ #include <iostream.h> #include <conio.h> #include <iomanip.h> //header file of setw() void main() { clrscr(); //clear screen standard function from conio.h cout << setw(50)<<"This is Turbo C++ Program"<<endl; cout << setw(45)<< "It is very easy."<<endl; cout <<endl<<endl; // space 2 line cout << setw(45)<< "I like C++ Program"<<endl<<endl; cout << setw(50)<<"Press any key to continue..."<<endl; getch(); //get character standard function from conio.h }
ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!25
♦!การแสดงผลการคํานวณทางคณิตศาสตร •! ตัวอยางโปรแกรม cout_mat.cpp แสดงการใช cout เพื่อแสดงผลของการคํานวณทาง คณิตศาสตร /* Program : cout_mat.cpp Process : Display mathmetic calculate result*/ #include <iostream.h> #include <conio.h> void main() { int number1,number2; float x,y,z; // set value of variable number1=20; number2=30; x=25.25; y=30.05; z=10.75; // display calculation result clrscr(); cout<< "Program Display Mathmetic calculation"<<endl; cout<< "number1 = " << number1 <<endl; cout<< "number2 = " << number2 <<endl; cout<< "number1 + number2 = "<<number1+number2 <<endl; cout<< "number1 - number2 = "<<number1-number2 <<endl; cout<< "x+y+z = "<< x+y+z << endl; cout<< "x*y*z = " << x*y*z <<endl; cout<< "50*25*12.5 = " << 50*25*12.5 << endl; getch(); } •! ตัวอยางโปรแกรม set_dec.cpp การใช manipulator ทีช่ อ่ื setprecision(n) รวมกับ cout<< เพื่อกําหนดความละเอียดของตําแหนงทศนิยมของจํานวนจริง โดยที่ n คือจํานวน ตําแหนงทศนิยม /*Program : set_dec.cpp process : set decimal precision of float number */ #include <iostream.h> #include <iomanip.h> #include <conio.h> ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!26 void main() { float A=125.25125; float B=10.7525; float C=212.15; clrscr(); //function in conio.h for clear screen cout<<"Display set precision of float number ...."<<endl; cout<<"A+B = "<<setprecision(10)<<A+B<<endl; cout<<"A*B*C = "<<setprecision(15)<<A*B*C<<endl; cout<<"A*B = "<<setprecision(5)<<A*B<<endl; cout<<"A+B+C = "<<setprecision(3)<<A+B+C<<endl; cout<<"A+B+C = "<<setprecision(2)<<A+B+C<<endl; cout<<"A/B = "<<setprecision(1)<<A/B<<endl; getch();
♦!การคํานวณโดยใชฟง กชนั ทางคณิตศาสตร การคํานวณคาฟงกชันทางคณิตศาสตร เชน คายกกําลัง คารากที่สอง คาสัมบูรณ จะตองใช ฟงกชันมาตรฐาน (standard function) ทางดานคณิตศาสตร ที่ C++ จัดเตรียมไวใหใน โดยจัดเก็บคลังคําสั่งไวในไฟล Math.h ดังนัน้ ในโปรแกรมทีต่ อ งการใชฟง กชนั ทางคณิตศาสตรจะตอง มีการ include ไฟล Math.h เปน preprocessor directive ดวย (วิธีการตรวจสอบวามีฟงกชันใดบางใน ไฟล Math.h ใหใชคาสั ํ ่ง Help , Index แลวพิมพ คําวา Math.h เมื่อพบคําวา Math.h แลวใหกดแปน Enter จะแสดงใหเห็นชื่อฟงกชันตาง ๆ ทางดานคณิตศาสตร) !
!
•! ตัวอยางโปรแกรม Func_Mat.cpp แสดงการหาคาทางคณิตศาสตรโดยใชฟงกชัน pow() และฟงกชัน sqrt() เพื่อหาคาเลขยกกําลังและรากที่สอง /*Program : Func_Mat.Cpp Process : Display using mathmetic function */ #include <iostream.h> #include <math.h> #include <conio.h> #include <iomanip.h> void main() { double x = 9.0, y = 2.0; clrscr(); cout<<"Display using mathmetic functions ...\a"<<endl<<endl; cout<<x<<" power by "<<y<<" = "<< pow(x, y)<<endl; cout<<" SquareRoot "<<x<<" = "<< sqrt(x)<<endl; ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!27
}
cout<<"(x power y)*(sqrt(y)) = "<<setprecision(3)<<pow(x,y)*(sqrt(y)); cout<<endl<<endl<<"Press any key to exit..."; getch();
! !
♦!การแสดงผลดวยการใช escape sequence escape sequence เปนรหัสอักขระแบบคอนสแตนต(constant) ชนิดอักษร(character) ซึ่ง ประกอบดวยเครือ่ งหมาย \ (backslash) และตัวอักษร อยูภ ายในเครือ่ งหมาย ' ' เชน '\n' '\t' ทําหนาที่ จัดรูปแบบการแสดงผลรวมกับ cout เหมือนกับ endl รายละเอียดดังตารางตอไปนี้ ตาราง แสดง escape sequence และความหมาย
escape sequence \a \b \f \n \r \t \\ \' \" \?
ชื่อ alarm bell backspace formfeed newline return tab backslash single quote double quote Question mark
ความหมาย สงเสียงบิ๊ป (beep) เหมือนการกดคีย backspace ขึ้นหนาใหม ขึน้ บรรทัดใหม เหมือนการกดคีย enter เหมือนการกดคีย tab แสดงเครือ่ งหมาย \ แสดงเครือ่ งหมาย ' แสดงเครือ่ งหมาย " แสดงเครือ่ งหมาย ?
•! ตัวอยางโปรแกรม escape.cpp แสดงการใชเครื่องหมาย escape sequence รวมกับ cout สําหรับการแสดงผล /*Program : escape.cpp Process : display with escape sequence */ #include <iostream.h> #include <conio.h> void main() { clrscr(); //clear screen cout<< "Hello Program C++" << '\n'; //new line ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!28
}
cout<< "C++ is very easy \a" <<'\n'<<'\a'; //new line and bell cout<< "\t\tC++ is very interest language \n"; // 2 tab and newline cout<< "\tC++ is OOP Language\b \n"; //tab, backspace and new line getch(); //wait for press any key
♦!การรับขอมูลจากคีบอรดดวย cin ในการเขียนโปรแกรมเพือ่ การประมวล มีความจําเปนอยางยิ่งที่โปรแกรมดวยทั่วไป จะตองมีการรับขอมูลจากผูใช (user) ผานทางคียบ อรดหรือแปนพิมพ เพื่อความยืดหยุนในการใชงาน โปรแกรม ใน C++ สามารถใชออปเจ็กต cin ที่อยูในไฟล iostream.h เพื่อรับขอมูลจากคียบอรดและ อุปกรณอน่ื ๆ ได มีรปู แบบดังนี้
! cin >> ชือ่ ตัวแปร; ! cin>>ชือ่ ตัวแปร>>ชือ่ ตัวแปร>>ชือ่ ตัวแปร>>…; โดยที่ cin อานวา ซีอิน ยอมาจาก character in ซึ่งหมายถึงการรับขอมูลในลักษณะ ของอักษร cin เปนออปเจ็กตที่สรางอยูในไฟล iostream.h >> เปนโอเปเรเตอร ซึ่งมีชื่อวา เอกซแทร็กชัน (extraction - รับเขามา) หรือ get from จะทํา หนาที่รับคาที่อยูทางซายของเครื่องหมายสงใหแกตัวแปรที่อยูทางขวาของเครื่องหมาย(ถาไมระบุอุปกรณ หมายถึงรับขอมูลเขาทางคียบอรด) •! ตัวอยางโปรแกรม cin_exp.cpp แสดงการรับคาจํานวนตัวเลขและตัวอักษรทางแปนพิมพ เพื่อเก็บไวในตัวแปร โดยใช cin>> /* Program : cin_exp.cpp Process : input number and character to variable, and display value*/ #include <iostream.h> #include <conio.h> void main() { int number1,number2; //declared integer variable char ch; //declared character variable //start statement clrscr(); cout<< " Please Enter number and character : \n"; cout<< " Enter number1 : "; cin>>number1; //enter integer from keyboard cout<< "\nEnter number 2 : "; ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!29
}
cin>>number2; //enter integer from keyboard cout<< "\nEnter 1 character : "; cin>>ch; //enter 1 character from keyboard cout<< "\n\nPress any key to display..."; getch(); //wait press any key clrscr(); // process display value from variable cout<< "You enter number and character : \n\a"; cout<< "Value of number1 : " <<number1; cout<< "\nValue of number 2 : " <<number2; cout<< "\nValue of character : " <<ch; cout<< "\n\nPress any key to exit..."; getch(); //wait press any key •! ตัวอยางโปรแกรม area_cir.cpp แสดงการคํานวณพื้นที่วงกลมและแสดงผลลัพธ ออกมาทางจอภาพ โดยรับคารัศมีของวงกลมจากคียบอรดกําหนดใหมตี วั แปรประเภท float และมี constant ในโปรแกรมดวย
/*Program : area_cir.cpp Process : calculate circle area by input radius */ #include <iostream.h> #include <conio.h> void main() { float rad; //declared real variable const float PI = 3.14159; // defined constant PI //start statement clrscr(); cout<< "Please enter radius of circle : "; cin>>rad; float area = PI*rad*rad; //declared variable at position that want to use cout<< "\n\nRadius of circle = "<<rad; cout<< "\n\nArea of circles = \a\n"<<area; getch(); } วิธีการกําหนดใหโปรแกรมรับขอมูลหลาย ๆ ตัวแปร ตอเนือ่ งกันมีวธิ กี ารเขียนประโยค ดังนี้
! cin >> number1 >> number2 >> number3; ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!30 วิธีปอนขอมูลเมื่อ run โปรแกรม มี 2 วิธี คือ - กรอกเลข 3 จํานวน แตละจํานวนเวนวรรค แลว Enter ทีจ่ านวนสุ ํ ดทาย เชน 50 30 40 <Enter> หรือ - กรอกเลขแตละจํานวน แลวกดแปน Enter ตาม เชน 50 <Enter> 30 <Enter> 40 <Enter> •! ตัวอยางโปรแกรม cin_cout.cpp แสดงการกรอกขอมูลตัวเลข 3 จํานวน ทางแปนพิมพ /* Program : cin_cont.cpp Process : input 3 number and display value*/ #include <iostream.h> #include <conio.h> void main() { int number1,number2,number3; //declared 3 integer variable //start statement clrscr(); cout<< "Please enter 3 integer number : \n"; cin>>number1>>number2>>number3; //enter 3 amount integer from keyboard cout<< "\nPress any key to display..."; getch(); //wait press any key clrscr(); // process display value from variable cout<< "You enter 3 number : \n\a"; cout<< "Value of number1 : " <<number1; cout<< "\nValue of number 2 : " <<number2; cout<< "\nValue of number 3 : " <<number3; cout<< "\n\nPress any key to exit..."; getch(); //wait press any key }
♦!การใช manipulator เพือ่ เปลีย่ นเลขฐาน ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!31 ในการเปลี่ยนการแสดงผลเลขฐานตาง ๆ ใน C++ ไดแก ฐานสิบ(Decimal) ฐานแปด (Octal) ฐานสิบหก(Hexadecimal) เราสามารถใช แมนิพวเลเตอร (manipulator) รวมกับ cout เพือ่ แสดงจํานวน เลขฐานตาง ๆ ได โดยใช manipulator ตอไปนี้ dec ทําหนาทีเ่ ปลีย่ นเลขฐานแปดหรือฐานสิบหกเปนเลขฐานสิบ oct ทําหนาทีเ่ ปลีย่ นเลขฐานสิบหรือฐานสิบหกเปนเลขฐานแปด hex ทําหนาทีเ่ ปลีย่ นเลขฐานแปดหรือฐานสิบเปนเลขฐานสิบหก ใน C++ กําหนดจํานวนเลขในฐานตาง ๆ ดังนี้ ถามี 0 (ศูนย) นําหนาจํานวนเลข แสดงวาเปนจํานวนฐานแปด เชน 065,0125 ถามี ox (ศูนยเอกซ) นําหนาจํานวนเลข แสดงวาเปนจํานวนฐานสิบหก เชน 0x125 ถาไมมี 0 หรือ 0x นําหนาจํานวนเลข แสดงวาเปนฐานสิบ เชน 50, 95 •! ตัวอยางโปรแกรม base_num.cpp แสดงการใช manipulator เปลีย่ นเลขฐาน dec, oct, hex ตาง ๆ
/*Program : base_num.cpp Process : display change base number of decimal,octal,hexadecimal*/ #include <iostream.h> #include <conio.h> void main() { clrscr(); cout<< "Display change base number..."<<endl<<endl; cout<< "10 decimal to hexadecimal = "<<hex<<10<<endl; cout<< "5865 decimal to hexadecimal = "<<hex<<5865<<endl; cout<< "1250 decimal to octal = "<<oct<<1250<<endl; cout<< "02342 octal to decimal = "<<dec<<02342<<endl; cout<< "0xabc125 hexadecimal to decimal = "<<dec<<0xabc125<<endl; cout<< "0xf hexadecimal to decimal = "<<dec<<0xf<<endl; getch(); }
♦!แบบฝกหัดทายบท ศิริชัย นามบุรี
การแสดงและการรับขอมูล
!32 1. จงเขียนโปรแกรมแสดงขอความรายละเอียดเกีย่ วกับตัวทานเอง ดังตอไปนี้ โดยใหแสดงขอ ความ บริเวณกลางจอภาพ This is C++ program. I love to study C++ language. My name is Mr…….. Code ……….. Major …………. 2. จากสูตรการคํานวณหาดอกเบีย้ ดังนี้ I = Pin S = P+I โดยที่ I คือ ดอกเบีย้ P คือ เงินตน i คือ อัตราดอกเบีย้ ตอป n คือ จํานวนป S คือ เงินรวม ใหเขียนโปรแกรมเพือ่ คํานวณหาคาดอกเบีย้ ( I ) และเงินรวม (S) โดยใหผูใชกรอกขอมูลทาง แปนพิมพ ทีจ่ าเป ํ นตองใชในการคํานวณ 3. จงเขียนโปรแกรมเพือ่ คํานวณหาผลลัพธและแสดงผลลัพธนิพจนทางคณิตศาสตรตอไปนี้ โดยกําหนดให A , B เปนจํานวนจริง (float) โดย A = 2.25 B = 3.0 X,Y,Z เปนจํานวนเต็ม (integer) โดย X = 4 Y=5 Z=8 คํานวณหานิพจนตอ ไปนีใ้ นโปรแกรม โดยกําหนดการแสดงผลทศนิยม 2 ตําแหนง A+B+X+Y+Z Z*Y/A (A+B)*X pow(A,2) pow(A,2)*pow(X,2) sqrt(X+Y+Z) sqrt(X*Y*Z)/B
ศิริชัย นามบุรี
การแสดงและการรับขอมูล