ครับ
อยู่ดีๆ ผมก็ต้องมานั่งเขียน Pascal ด้วยเหตุจำเป็น
ผมก็โหลด Turbo pascal มาตามความรู้อันน้อยนิด
หลังจากเขียนคำสั่งง่ายๆ พวก write read ประกาศตัวแปร เอามาบวกลบกัน
ผมก็มีความพยายามที่จะลองเขียน IF ดู
อ่านจากคู่มือ ฟอร์มของ IF เป็นดังนี้
IF condition THEN
statement;ถ้าเป็น nested if ก็จะเป็น
อ้างอิงIF condition1 THEN
statement1;
ELSE IF condition2 THEN
statement2;
ELSE
statement3;
ทีนี้ผมก็พบว่า เมื่อเขียน Nested IF ขึ้นมาชุดนึง
แบบว่า ถ้า พิมพ์ ,+, ก็ให้เอามาบวกกัน ถ้าพิมพ์ ,-, ก็เอามาลบกัน
มันจะข้าม condition ทั้งหมด ไปทำ ELSE IF ตัวสุดท้ายเลยครับ
ซึ่งอีแบบนี้ผมก็เจอบ่อยมากใน action script
อยากทราบว่ามันเกิดปัญหามาจากอะไรครับ
อันนี้ที่ผมเขียนนะ
อ้างอิงbegin
readln(A);
readln(B);
readln(C);
IF B := '+' THEN
result := A+C
ELSE IF B := '-' THEN
result := A-C
writeln(result);
end.
ที่จริงมี คูณ หารด้วย
ปัญหาอย่างที่บอกก็คือ ไม่ว่าจะพิมพ์เครื่องหมายอะไรใส่ B
มันก็จะมองว่าเงื่อนไขเราผิดหมด มีอันสุดท้ายถูก แล้วก็จะเอา A-C เสมอ แม้จะใส่ + ก็ตาม
ผมพลาดตรงไหนไปอ่ะครับ :08:
ปล.ผมประกาศตัวแปรเรียบร้อยแล้วนะ quote มาเฉพาะช่วงคำัสั่งครับ
// เต่าลืมปิด statement ";"
ลองเช็คค่าตัวแปร B ดูนะเต่า อาจจะติด white space มา คือการ enter เพื่อส่งค่า
รึเปล่า
ลอง print ออกมาเช็คก่อน
หรือ ไม่ก็ลองทดสอบดูโดยเซทเงื่อนไขให้เป็น ตัวเลข ถ้าเป็นเลขนี้ให้บวก เลขนี้ให้ลบ
หรือ อาจจะเป็น ascii ที่ไม่ตรงกันกับของ pascal รึเปล่า เหมือน html ที่เวลาจะแสดง space ต้องพิมพ์ &bsfd อะไรประมาณนี้
ฟ้อง Type mismatch แล้ว cursor กระพริบที่ THEN นี่มันจะให้เราแก้อะไรอ่ะครับ :08:
begin
readln(A);
readln(B); // ไม่ชัวร์ว่า readln จะเป็น char หรือ String นะ
readln(C);
IF B := '+' THEN // ' ' <-- เป็น char ถ้าเป็น String จะเป็น " " (อันนี้คุ้นๆ ว่าเป็นยังงี้ แต่พอเอาไปใช้กับ sqlserver ก็ใช้อะไรก็ได้ - -")
result := A+C // ไม่ชัวร์ว่า pascal + String ได้เลยรึเปล่า รึยังไง
ELSE IF B := '-' THEN
result := A-C
writeln(result);
end.
ลอง
begin
readln(A);
readln(B);
readln(C);
writeln(A);
writeln(B);
writeln(C);
IF B := "+" THEN
result := A+C;
ELSE IF B := "-" THEN
result := A-C;
writeln(result);
end.
อ้างอิง
var A: string;
var B: string;
var C: string;
var result: string;
begin
readln(A, B, C);
writeln('A = ', A ,'B = ', B , 'C = ',C);
IF B := "+" THEN
result := A+C;
ELSE IF B := "-" THEN
result := A-C;
writeln(result);
end.
begin
readln(A);
readln(B);
readln(C);
IF B = "+" THEN
result := A+C;
IF B = "-" THEN
result := A-C;
IF B = "*" THEN
result := A*C;
IF B = "/" THEN
result := A div C; {อันนี้อยากให้หารออกมาเป็น Integer}
writeln(result);
end.
แบบนี้ได้ว่ะครับ
แต่พอใช้ Else if มันฟ้อง statement error :08:
พอ IF หมดผ่านฉลุยเลย น่าเกลียดมาก
ผมใช้ A,C,result เป็น Integer อ่ะ
แล้ว B เป็น string
ถ้าจำไม่ผิด ใน pascal น่าจะใช้เครื่องหมาย = เป็นการตรวจสอบเงื่อนไขการเท่ากันครับ
ส่วน := น่าจะเป็นการกำหนดค่า
ผ่านแล้ว เย่ \:37:/
แต่อยากเขียน ELSE IF อ่ะ :05:
เอามาจากอันนี้
http://pascal.comsci.us/syntax/ifelse.html
อ้างอิงIF Total < 0 THEN BEGIN
Tag := ' Cr';
Total := - Total;
END ELSE BEGIN
Tag := ' Dr';
END
ไว้พรุ่งนี้ลองแบนี้ละกัลล์
อ่านมามันบอกว่า nested if เขียนได้สองแบบ
แต่ยังไม่ได้ลองแบบที่พี่เอโคดมาให้ดู
http://taoyue.com/tutorials/pascal/pas3ca.html link นี้ช่วยได้มั้ยคะ
อยากช่วยแต่ลืม pascal หมดแล้ว :42:
จำได้รางๆว่าเรื่อง = กับ := มันใช้คนละสถานการณ์กันนะคะ อันนึงใช้กำหนดค่า อีกอันใช้เพื่อการเปรียบเทียบ
โอ้ว อันนี้แจ่มดีครับ :25:
อ้างคำพูดจาก: เ_่า เมื่อ 12 ธ.ค. 2007, 23:10 น.
IF B := '+' THEN
result := A+C
ELSE IF B := '-' THEN
result := A-C
writeln(result);
pascal := ใช้กำหนดค่า / C หรือ AS คือ =
pascal = ใช้เปรียบเทียบ / C หรือ AS คือ ==
สรุปใช้ := ใช้กับ if ไม่ได้
ืnote:
1.สังเกตุว่าตอนเขียน if -else ใช้ := แต่ พอเขียน if อย่างเดียวใช้ =
2. ผมเขียน pascal มาตลอดชีวิต ตั้งแต่ยังไม่เครื่อง IBM PC (มี turbo pascal บนเครื่อง apple II) ปัจจุบัน MyBuddy ก็ยังเขียนด้วย pascal :35:
อยากไปภาษาอื่นเหมือนกัน แต่ขี้เกียจอย่างไงไม่รู้(ถ้าของเก่าทำได้ดีอยู่แล้ว)
:25: MyBuddy ใช้ pascal เหรอคะ สุดยอดเลยค่ะลุงซัน+ :12: :12: :12: :12: :12:
object pascal แต่ delphi ide :43:
อู้ว
ตอนนี้พยายามจะใช้ for ให้เกิดประโยชน์ครับ
แต่ยังทำไม่ได้ :42:
อันนี้หัดเองหรือเรียนคะเนี่ย
มีแบบฝึกหัดสำหรับ for มาแนะนำค่ะ (เผื่อสนใจ)
ให้เขียนโปรแกรมวาดรูปสามเหลี่ยมแบบด้านล่าง ถ้าใส่ input เป็น 5 ก็จะได้ดังรูป
*
**
***
****
*****
ถ้าใส่ input เป็น 3 จะได้
*
**
***
โดย input ให้รับจากทางหน้าจอ
ไม่มีเฉลยนะคะ :42:
มีแข่งเขียน pascal ครับ
เพื่อนจะไปแข่ง มันก็ไม่เป็นเลย ผมก็ไม่รู้เรื่อง
เลยช่วยแนะนำเพื่อนเท่าที่ทำได้ ในฐานะที่คุ้นเคยกับ programming เว็บบึ้ม กว่ามันนิดนึง
เดี๋ยวดึกๆ มาทำการบ้านครับ
การบ้านวาดรูปสามเหลี่ยม ตอนผมเรียนอาจารย์เรียกว่า ดาวกระชากใจ
ดาวสามเหลี่ยมนั่นผมก็เขียน แต่เป็นภาษาซี และผมต้องเขียนเป็นปิรามิดเลย ตอนนั้นบอกได้แค่ยากมั่ก ๆ มีอินพุทแค่ค่าึความสูงของปิรามิด
อย่างในตัวอย่างจะใส่ค่าเป็น 4
1
232
34543
4567654
เขียนอยู่สองวันได้มา 5 คะแนน :05:
มันมีหลายแบบเลยแหละ เป็นแบบฝึกพื้นฐานมั้งคะ
มีแบบข้าวหลามตัด (size = 5)
*
***
*****
*******
*********
*******
*****
***
*
รูปโบว์ (size=4)
* *
** **
*** ***
********
*** ***
** **
* *
ฯลฯ
(ถ้าสนใจก็เอาไว้ฝึกได้นะคะ)
อ้างคำพูดจาก: นาวิน อินเทรนด์ เมื่อ 13 ธ.ค. 2007, 20:54 น.
การบ้านวาดรูปสามเหลี่ยม ตอนผมเรียนอาจารย์เรียกว่า ดาวกระชากใจ
สำนักเดียวกัน :25: :25: :25:
ศิษย์น้อง :25:
ศิษย์พี่ :25: :25:
พึ่งสังเกต
อ้างคำพูดจาก: น้องแอนค่ะ เมื่อ 13 ธ.ค. 2007, 22:15 น.
มันมีหลายแบบเลยแหละ เป็นแบบฝึกพื้นฐานมั้งคะ
มีแบบข้าวหลามตัด (size = 5)
*
***
*****
*******
*********
*******
*****
***
*
รูปโบว์ (size=4)
* *
** **
*** ***
********
*** ***
** **
* *
ฯลฯ
(ถ้าสนใจก็เอาไว้ฝึกได้นะคะ)
ตรง size เนี้ย ดูจากไหนครับ :08:
ความสูงอะค่ะ นับครึ่งนึง รูปข้าวหลามจะเห็นว่าบรรทัดที่ 5 เป็นกลางรูปพอดี รูปโบว์ก็กลางที่บรรทัดที่ 4