PDA

Xem phiên bản đầy đủ : Phép toán ** trong Pascal?


htn_spt
30-09-2009, 17:08
Bài 2.17 (SBT Tin 11 - Tr 11) Hãy viết các biểu thức sau dưới dạng công thức toán học tương ứng:
a) a/b**2;
d) x**y**z/a/b
n) abs(x**(y/x)-(y/x)**(1/3));
o) sprt((x1-x2)**2+(y1-y2)**2);
Em không hiểu dấu ** (2 dấu nhân viết liền nhau) có ý nghĩa là gì?

Nhất Điểm Tuyết
30-09-2009, 22:53
** la` phe'p toa'n lu~y thu`a . Ky hieu na`y dc du`ng trong mot so ngon ngu script. Pascal k co' phe'p toa'n lu~y thu`a nen tac gia muon tam ky hieu do de viet bieu thuc toan hoc. (sorry vi may em dang ngoi k go dc tieng V)

xem them: http://www.dayhocintel.net/diendan/archive/index.php/t-4239.html

phongyk
01-10-2009, 06:54
Trong một số diễn đàn mình cũng thấy có một số người nói toán tử **=^ nhưng mình chưa dám chắc cho lắm. Mình search trên mạng thì không có, đọc sách Pascal thì chẳng có chỗ nào nói về toán tử ** cả

Linh_Nga
01-10-2009, 08:11
Tôi nghĩ đây là do lỗi in ấn, vì nếu là phép luỹ thừa thì trong pascal phải gõ là b^2. Do vậy chỉ nên hiểu là 1 dấu *. Và ko nhầm thì phần trả lời cuối sách đã nói lên như vậy

Nhất Điểm Tuyết
02-10-2009, 03:08
Em chưa đồng ý ạ. Pascal không có b^2 đâu ạ.
Ta thử nhìn biểu thức : sprt((x1-x2)**2+(y1-y2)**2)
Ý nghĩa của biểu thức này là tính khoảng cách giữa 2 điểm (x1,y1) và (x2,y2). Hiểu ** như phép lũy thừa là có lý, chứ nếu hiểu như phép nhân thì hàm sqrt không xác định mất.

tttymhy
02-10-2009, 09:04
Tôi cũng đã thử cả dấu ** và ^ đều không có trong Pascal. Hỏi ai cũng nói không trả lời chính xác được!!!!!!!!!!!!

phongyk
02-10-2009, 09:19
Mình nghĩ là mấy thầy viết sách cố tình đưa ra kí hiệu ** đó để so sánh các toán tử trong các ngôn ngữ lập trình khác nhau mà thôi. Trong C và Pascal thì đểu không có toán tử đó. Trong ngôn ngữ Fortran thì có toán tử đó. **=^ đó. Bài tập đó nếu biểu thức nào có kí hiệu ** thì không thể chuyển đổi được vì trong Pascal không có toán tử đó đâu

tungld
02-10-2009, 09:45
Các thầy cô sử dụng sự trợ giúp gọi điện thoại cho... tác giả xem sao? hehe.(mình tìm trên mạng rồi không có bài nào nói về nó, có người nói FreePascal sử dụng được nhưg ko phải)

huynhtanthong
02-10-2009, 15:42
Bài 2.17 (SBT Tin 11 - Tr 11) Hãy viết các biểu thức sau dưới dạng công thức toán học tương ứng:
a) a/b**2;
d) x**y**z/a/b
n) abs(x**(y/x)-(y/x)**(1/3));
o) sprt((x1-x2)**2+(y1-y2)**2);
Em không hiểu dấu ** (2 dấu nhân viết liền nhau) có ý nghĩa là gì?

Cho hỏi sách bài tập này của tác giả nào vậy? nhà xuất bản và xuất bản năm nào? (Sách bài tập là tài liệu tham khảo thôi)

htn_spt
02-10-2009, 16:00
Mình trích đề bài y nguyên trong sách bài tập Tin học lớp 11 của NXB Giáo dục xuất bản năm 2007 mà! Do tác giả Hồ Sĩ Đàm và Nguyễn Thanh Tùng viết đó. Nếu là viết nhầm thì chỉ nhầm 1 ý thôi chứ đằng này là 4 ý. Chắc hẳn tác giả có ý đồ gì trong việc đưa bài này vào. Nhưng nếu toán tử đó được sử dụng trong các ngôn ngữ khác mà Pascal không sử dụng thì đưa vào liệu có hơi quá sức với hs không?
Vẫn biết chương trình Tin học lớp 11 không phải là ta đi dạy Pascal cho hs mà là dạy cho hs cách lập trình nhưng lấy ngôn ngữ lập trình Pascal để mô phỏng thuật toán cho học sinh dễ hiểu. Nhưng đưa bài đó vào thì hơi nặng??????

admin
02-10-2009, 16:04
Trước tiên trong Pascal hoặc C không có phép toán lũy thừa. Riêng phép toán ** được bạn htn_spt đề cập chính là phép toán lũy thừa trong ngôn ngữ ... Fortran. Bạn có thể tham khảo tại: http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap02/operator.html (http://www.cs.mtu.edu/%7Eshene/COURSES/cs201/NOTES/chap02/operator.html)

Còn tại sao tác giả ký hiệu như vậy thì mình cũng không hiểu.

htn_spt
02-10-2009, 16:11
Vậy xin hỏi Admin khi hướng dẫn cho hs sinh ta lại phải giới thiệu thêm ngôn ngữ Fortran hay bỏ qua bài đó không chữa cho hs nữa?????? hs hỏi bài đó thì ta phải làm thế nào?

admin
02-10-2009, 16:19
Vậy xin hỏi Admin khi hướng dẫn cho hs sinh ta lại phải giới thiệu thêm ngôn ngữ Fortran hay bỏ qua bài đó không chữa cho hs nữa?????? hs hỏi bài đó thì ta phải làm thế nào?Theo mình nên sửa lại đề bài tập bằng những phép toán hợp lệ của Pascal và giải thích với học sinh rằng có sự sai sót trong sách.

thaygiaolang
02-10-2009, 17:44
Nếu mình không lầm thì phép toán ** là phép toán lũy thừa được dùng trong free pascal.

admin
02-10-2009, 18:08
Nếu mình không lầm thì phép toán ** là phép toán lũy thừa được dùng trong free pascal.
Theo tài liệu hướng dẫn từ freepascal.org (được đính kèm theo bài viết này) thì không có phép toán **.

thaygiaolang
02-10-2009, 18:49
Phép toán ** thuộc loại Operator overloading, Admin có thể xem ở chương 12 trong tài liệu.

admin
02-10-2009, 19:47
Phép toán ** thuộc loại Operator overloading, Admin có thể xem ở chương 12 trong tài liệu.Đúng là phép lũy thừa ** được dùng trong Free Pascal nhưng lại là phép toán bắt buộc định nghĩa chồng (overload) khi sử dụng, không được định nghĩa sẵn cho các số.

Vì vậy, dù các biểu thức trong bài tập trên có được viết trong Free Pascal vẫn sẽ bị báo lỗi "Operator is not overloaded" (Phép toán này chưa được định nghĩa chồng).

Tóm lại bài tập này cần phải được sửa lại.

tungld
02-10-2009, 19:51
Chào các thầy. Em cũng đã được đọc trên một diễn đàn nói ** là toán tử lũy thừa trong FreePascal nhưng khi em tải FreePascal 2.2.4 và viết thử chương trình đơn giản như sau:

program vidu;
var a: integer;
begin
a:=2**3;
write(a:4);
end.

Khi dịch chương trình báo lỗi: Operator is not overloaded
Em cũng đã đọc tài liệu do Thaygiaolang cung cấp, nhưng lại có lỗi này mong các thầy giải thích.

admin
02-10-2009, 19:52
Khi dịch chương trình báo lỗi: Operator is not overloaded
Em cũng đã đọc tài liệu do Thaygiaolang cung cấp, nhưng lại có lỗi này mong các thầy giải thích.Mình đã giải thích ngay trên. Có lẽ bạn đăng bài cùng lúc nên không kịp nhìn thấy.

admin
02-10-2009, 20:00
I found this list of languages with an exponentiation operator:
# x ↑ y: Algol, Commodore BASIC
# x ^ y: BASIC, J, Matlab, R, Microsoft Excel, TeX (and its
derivatives), Haskell (for integer exponents), and most computer
algebra systems
# x ** y: Ada, Bash, Fortran, FoxPro, Perl, Python, Ruby, SAS, ABAP,
Haskell (for floating-point exponents), Turing
# x * y: APLMình tìm được một đoạn nói về danh sách những ngôn ngữ có dùng phép toán lũy thừa (nguồn: http://www.mail-archive.com/digitalmars-d@puremagic.com/msg15497.html) (http://www.mail-archive.com/digitalmars-d@puremagic.com/msg15497.html)

Phanquanghuong
02-10-2009, 23:23
Năm ngoái tôi đi tập huấn ơ HN có hỏi thầy Lê Khắc Thành về ký hiệu ** trong sách BT tin hoc 11 thì thầy nói rằng đấy là kí hiệu của biến con trỏ trong Pascal.

admin
03-10-2009, 00:55
Năm ngoái tôi đi tập huấn ơ HN có hỏi thầy Lê Khắc Thành về ký hiệu ** trong sách BT tin hoc 11 thì thầy nói rằng đấy là kí hiệu của biến con trỏ trong Pascal.Bạn có nghe nhầm không? ** là ký hiệu biến con trỏ cấp 2 trong C hay C++ chứ?

macphan
06-10-2009, 00:13
chẳng ai có một giải thích rõ ràng cả. Chẳng biết nghe ai. Mọi người cho tui số cầm tay của tác giả Hồ Sĩ Đàm đi. Gọi là biết liền hà.

admin
06-10-2009, 08:23
chẳng ai có một giải thích rõ ràng cả. Chẳng biết nghe ai. Mọi người cho tui số cầm tay của tác giả Hồ Sĩ Đàm đi. Gọi là biết liền hà.Bạn chưa rõ ràng ở điểm nào? Vui lòng nêu cụ thể.

phongyk
06-10-2009, 10:09
Admin này. Theo mình biết đó không phải là biến con trỏ đâu. Trong Pascal biến con trỏ làm gì kí hiệu như thế. Mình search trên mạng rồi, trong ngôn ngữ lậpp trình Fortran ** là toán tử mũ, có lẽ nào tác giả cố tình đưa toán tử đó để cho Học sinh phân biệt được sự khác nhau giữa các toán tử trong các ngôn ngữ lập trình khác nhau

admin
06-10-2009, 10:29
Admin này. Theo mình biết đó không phải là biến con trỏ đâu. Trong Pascal biến con trỏ làm gì kí hiệu như thế. Mình search trên mạng rồi, trong ngôn ngữ lậpp trình Fortran ** là toán tử mũ, có lẽ nào tác giả cố tình đưa toán tử đó để cho Học sinh phân biệt được sự khác nhau giữa các toán tử trong các ngôn ngữ lập trình khác nhauBạn thử đọc lại tất cả bài viết của chủ đề này. Có lẽ bạn sẽ có câu trả lời rõ ràng hơn.

phongyk
06-10-2009, 10:43
ồ. Mình xin lỗi admin nha. Mình đọc nhầm. Admin giúp mình tý nhé:
Viết biểu thức sau dạng công thức toán học tương ứng
ln(y*(-sqrt(abs(x))))

Invalid-password
06-10-2009, 11:09
Kí hiệu ** được coi là phép toán luỹ thừa. Mình và học sinh trong trường qui định với nhau như vậy

Fong
06-10-2009, 11:38
ồ. Mình xin lỗi admin nha. Mình đọc nhầm. Admin giúp mình tý nhé:
Viết biểu thức sau dạng công thức toán học tương ứng
ln(y*(-sqrt(abs(x))))
phongyk không phải là giáo viên rồi.

Fong
06-10-2009, 11:39
Kí hiệu ** được coi là phép toán luỹ thừa. Mình và học sinh trong trường qui định với nhau như vậy
Không được, vi phạm quy chế rồi.

admin
06-10-2009, 11:55
Không được, vi phạm quy chế rồi.Chúng ta không đề cập đến vấn đề quy chế ở đây vì đó không là mục tiêu dạy học của chúng ta.

Vấn đề là kiến thức phải chuẩn xác trong trường hợp này. Khi Pascal đã không quy định phép toán ** thì chúng ta tuyệt đối không được dùng và đặc biệt không được dạy cho học sinh. Mình sai thì phải chấp nhận là sai rồi sửa lại, kể cả sách cũng vậy.

phongyk
06-10-2009, 12:04
phongyk không phải là giáo viên rồi.
Sao bác nói tui thế, đây là diễn đàn mà, diễn đàn là gì thì bác biết rồi đấy. Thảo luận chút không được sao?

phongyk
06-10-2009, 12:06
Admin nói đúng đấy. Tôi ủng hộ

tranthu
06-10-2009, 13:46
Đúng rồi, trong pascal không có phép toán có dấu **, SGK sai đấy bạn ạ, bạn sửa lại nhé, đừng dạy học sinh theo cái sai đó

dovannho
10-10-2009, 22:34
Bài 2.17 (SBT Tin 11 - Tr 11) Hãy viết các biểu thức sau dưới dạng công thức toán học tương ứng:
a) a/b**2;
d) x**y**z/a/b
n) abs(x**(y/x)-(y/x)**(1/3));
o) sprt((x1-x2)**2+(y1-y2)**2);
Em không hiểu dấu ** (2 dấu nhân viết liền nhau) có ý nghĩa là gì?

Lớp 11 là học NNLT, mà lấy NN Pascal để thể hiện. Trong sách vẫn có vài ví dụ nói về C.

Các phép toán trên thuộc ngôn ngữ lập trình C. Giống như các phép toán ++ hay -- trong C.

tungld
11-10-2009, 20:57
Thày nhỏ thể giải thích rõ hơn về phép toán này được không? nếu nhớ không nhầm C không có phép toán này.

htn_spt
11-10-2009, 21:22
Lớp 11 là học NNLT, mà lấy NN Pascal để thể hiện. Trong sách vẫn có vài ví dụ nói về C.

Các phép toán trên thuộc ngôn ngữ lập trình C. Giống như các phép toán ++ hay -- trong C.
Lớp 11 có một số bài có đưa ngôn ngữ lập trình C vào chỉ là để so sánh giữa 2 NNLT C và Pascal mà thôi. Còn phần thực hành cụ thể vẫn là trên Pascal mà. Theo tôi tốt nhất cái gì mà ta không biết hoặc ta không chắc chắn đúng thì đừng nên dạy cho học sinh

phongyk
13-10-2009, 14:55
Lớp 11 là học NNLT, mà lấy NN Pascal để thể hiện. Trong sách vẫn có vài ví dụ nói về C.

Các phép toán trên thuộc ngôn ngữ lập trình C. Giống như các phép toán ++ hay -- trong C.
Thầy ơi trong C làm gì có toán tử **. Em tìm trên mạng rồi chỉ có ngôn ngữ Fortran moi có toán tử này mà. Đó là toán tử mũ