เขียน Pascal ครับ

เริ่มโพสต์โดย เต่ามาก, 12 ธ.ค. 2007, 23:10 น.

0 สมาชิก และ 1 บุคคลทั่วไป กำลังเปิดอ่านโพสต์นี้

เต่ามาก

ครับ
อยู่ดีๆ ผมก็ต้องมานั่งเขียน 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:

ยุนเอ

#3
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 เขียนได้สองแบบ
แต่ยังไม่ได้ลองแบบที่พี่เอโคดมาให้ดู

☼ แอนมินิ ☼

#10
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:
อยากไปภาษาอื่นเหมือนกัน แต่ขี้เกียจอย่างไงไม่รู้(ถ้าของเก่าทำได้ดีอยู่แล้ว)
http://www.thaibuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย

☼ แอนมินิ ☼

 :25: MyBuddy ใช้ pascal เหรอคะ สุดยอดเลยค่ะลุงซัน+  :12: :12: :12: :12: :12:

นายโอ้เอ้

Today you , Tomorrow me.

SMF 2.1.7 © 2026, Simple Machines