Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554
ข้อ 1 สร้างฟังก์ชันจำนวน 3 ฟังก์ชัน โดยให้แต่ละ ฟังก์ชันมีการประกาศตัวแปร array ขนาดใหญ่ แต่ต่างกันที่พื้นที่เก็บข้อมูลดังนี้ – ฟังก์ชัน first ใช้ตัวแปรแบบ static – ฟังก์ชัน second ใช้ตัวแปรแบบ stack-dynamic – ฟังก์ชัน third ใช้ตัวแปรแบบ heap-dynamic ในฟังก์ชั่น main ให้มีการเรียกใช้ฟังก์ชันทั้ง 3 เป็นจำนวนหลายครั้ง (>100,000) แสดงเวลา สำหรับการเรียกใช้แต่ละฟังก์ชัน เปรียบเทียบ เวลาและอธิบายผลที่ได้ พร้อมเหตุผล
ข้อ 2 กำหนดให้สร้าง array 2 มิติที่มีขนาดใหญ่ (>100x100) ทำการบวกค่าของสมาชิกทุกตัวใน array แล้วแต่ผล โดยเปรียบเทียบเวลาของ 2 วิธีต่อไปนี้ – เข้าถึงโดยใช้ subscript – เข้าถึงโดยใช้ pointer และใช้การคำนวณหา ตำแหน่งใน array โดยใช้ การคำนวณ mapping function วิธีใดมีประสิทธิภาพในแง่เวลาดีกว่า นศ. คิดว่าวิธีใดมี reliability ดีกว่า เพราะเหตุใด
ข้อ 3 ทดสอบโปรแกรมในภาษา C ต่อไปนี้ โดย กำหนดให้ – a และ b เป็น non-local variable – ฟังก์ชัน fun ทำการเพิ่มค่า a อีก 10 และ return ค่า a a = 10; b = a + fun(); printf(“function call on the right, b=%d\n",b); a = 10; b = fun()+a; printf(" function call on the right, b= %d\n",b); อภิปรายผลที่ได้
ข้อ 4 สร้าง overloaded operator ในภาษา C++ โดย กำหนดชนิดข้อมูลขึ้นใหม่สำหรับ string นำ string 2 สายมาเชื่อมต่อกันด้วยการใช้ เครื่องหมาย “+” ทดสอบโดยการสร้าง string และเรียกใช้ operator นี้
ข้อ 5 จาก pseudocode ต่อไปนี้ จงเขียนโปรแกรม โดยคำสั่งทำซ้ำ k = (j+13)/27 loop: if k>10 then goto out k = k+1 i = 3*k-1 goto loop out: …..
ข้อ 6 จาก pseudocode ที่เขียนด้วย syntax ภาษา C ต่อไปนี้ จงเขียนฟังก์ชันที่ทำการส่งผ่าน parameter โดยใช้วิธี – Passed by value – Passed by reference ระบุค่าที่ได้ของตัวแปร list หลังจากการทำงาน void fun(int first, in second) { first += first; second += second; } void main() { int list[2] = {1,3}; fun(list[0], list[1]); }
ข้อ 7 สร้าง generic function สำหรับการหาค่า max ของตัว แปร 2 ตัว โดยสร้างเป็น template เพื่อทำการเปรียบเทียบและคืน ค่าที่มากที่สุด
1. int list[5] = { 1, 2, 3, 4, 5 } ; ถ้าสั่งพิมพ์ list[3] จะแสดงค่าอะไร 4 2. int list[5] = { 1 } ; ถ้าสั่งพิมพ์ list[0] และ list[4] จะแสดง ค่าอะไร 1 และ 0 3. ถ้า interger ใช้เนื้อที่ 2 ไบต์ในการเก็บ ข้อมูล ตัวแปร list จะใช้ เนื้อที่เก็บข้อมูลกี่ไบต์ 10 ไบต์ 4. ถ้าอยากทราบจำนวนสมาชิกของตัวแปร list จะใช้คำสั่งอะไร คำแนะนำ ใช้คำสั่ง sizeof sizeof(list)/sizeof(int)
5. char s[ ] = “517321”; 7 ไบต์ ตัวอักษรใช้เนื้อที่ 1 ไบต์ ตัวแปร s ใช้ เนื้อที่กี่ไบต์ในการเก็บข้อมูล 6. enum Day {Sun,Mon,Tue,Wed,Thu,Fri,Sat} ; Day d = Sun; ถ้าใช้คำสั่ง printf(“%d”, d); ในภาษา C จะแสดงค่าอะไร 0 7. ถ้าใช้คำสั่ง d++; ในภาษา C จะ คอมไพล์ผ่านหรือไม่ ถ้าคอมไพล์ผ่านตัวแปร d มีค่าอะไร ผ่าน d มีค่า 1 หรือ Mon 8. ถ้าใช้คำสั่ง d++; ในภาษา C++ จะ คอมไพล์ผ่านหรือไม่ ถ้าคอมไพล์ผ่านตัวแปร d มีค่าอะไร ไม่ ผ่านเพราะไม่มี coercion
9. union un{ int x; float r; char c; } u; 10. union u_color{char r; char g; char b; } rgb; rgb.r = 'r'; rgb.g = 'g'; rgb.b = 'b'; printf("%c %c %c", rgb.r, rgb.g, rgb.b); แสดงผลที่ได้จากคำสั่ง printf b b b ถ้าตัวอักษรใช้เนื้อที่ 1 ไบต์ Integer ใช้เนื้อที่ 2 ไบต์ Float ใช้เนื้อที่ 4 ไบต์ 4 ไบต์ ตัวแปร U ใช้เนื้อที่กี่ไบต์ใน การเก็บข้อมูล
จงอธิบายความหมายของคำต่อไปนี้ พร้อมยกตัวอย่าง 1. Coercion 2. Casting 3. Operator overloading
จงอธิบายความหมายของคำต่อไปนี้ พร้อมยกตัวอย่าง 4. Precedence rules 5. Associativity rules 6. Functional side effect