Kvant

Bản dịch tự động sơ bộ, chất lượng thấp: có thể còn lỗi và câu chữ chưa tự nhiên. Bản này sẽ được thay bằng bản dịch tốt hơn. Bản gốc →

50

φ=arcsin⁡mgNsin⁡α.\varphi = \arcsin \frac{mg}{N} \sin \alpha.

Bây giờ chúng ta hãy tìm bán kính cong của quỹ đạo của điểm. Như chúng ta đã nói, trong một hệ tọa độ cố định, tốc độ của điểm v⃗\vec{v} là tổng vận tốc của chuyển động tịnh tiến và chuyển động quay của nó (xem Hình 4). Theo định lý cosin, bình phương của mô hình vận tốc bằng
v2=v02+v02−2v02cos⁡(180∘−α)=2v02(1+cos⁡α).v^2 = v_0^2 + v_0^2 - 2v_0^2 \cos(180^\circ - \alpha) = 2v_0^2(1 + \cos \alpha).
Hình chiếu của gia tốc của một điểm lên phương vuông góc với vận tốc bằng

Bài toán
cho nghiên cứu

Hãy xem xét những điều sau đây bài toán: Mặt phẳng được bao phủ bởi các hình chữ nhật tắc nghẽn không có điểm chung bên trong và bất kỳ hình chữ nhật nào trong số chúng có thể được kết hợp với bất kỳ hình chữ nhật nào khác bằng cách di chuyển mặt phẳng sao cho tất cả các hình chữ nhật khác được kết hợp. Số k lân cận của mỗi hình chữ nhật là bao nhiêu (nghĩa là số hình chữ nhật có ít nhất một điểm chung với hình chữ nhật đã cho)? Có bao nhiêu loại tranh khảm khác nhau cho mỗi k?

Hãy suy nghĩ về giải pháp và… cách diễn đạt của nó (câu hỏi thứ hai được xây dựng hơi mơ hồ; trước khi trả lời, bạn cần làm rõ ý nghĩa của cụm từ “các loại khác nhau”) và viết thư cho chúng tôi. đáp số thú vị nhất sẽ được xuất bản.

V. Sapich,
V. Chvanov

Bài toán
độc giả của chúng tôi

  1. Từ điểm A và B trên đường moline, hai xe số tự động đồng thời chuyển động và chuyển động với cùng gia tốc không đổi a⃗\vec{a}. Tại điểm C của con đường bắt đầu một đoạn được bao phủ bởi lớp băng (nơi không có cây). Khoảng cách từ điểm B đến điểm C là bao nhiêu nếu biết xe số tự động thứ nhất xuất phát từ điểm A đuổi kịp xe số tự động thứ hai sau khoảng thời gian t kể từ khi đi qua điểm C đầu tiên?

G. Levin

  1. Trong trường hợp nào bạn nghĩ nước sẽ sôi nhanh hơn: nếu một chiếc cốc có nồi hơi điện được hạ xuống được đặt trên bộ tản nhiệt hoặc trên bậu cửa sổ? Có vẻ như - trong trường hợp đầu tiên, vì không khí phía trên bộ tản nhiệt ấm hơn phía trên bậu cửa sổ. Tuy nhiên, nó cung cấp chi tiết. Hiệu quả không giết chết (khoảng 10%), nhưng đáng tin cậy. Điều gì có thể gây ra nó?

L. Ashkinzi

  1. Nhà vật lý nổi tiếng người Nga P. N. Lebedev đã chứng minh rằng ánh sáng, khi tương tác với vật chất, sẽ gây áp lực lên nó. Khối lượng nào có thể được điều khiển bởi một máy phát tia laser có công suất N?

A. Hoàng gia

52

hiệu quả và có thể sử dụng vô thời hạn. Một chương trình Pascal được ghi toàn bộ vào bộ nhớ của máy tính và chỉ sau đó nó mới có thể được sử dụng. Mỗi chương trình Pascal là một tiến trình được gọi là tiến trình chính. Giống như bất kỳ bộ xử lý nào, chương trình Pascal có tên và các hướng dẫn của nó được gọi là toán tử.

Văn bản của bất kỳ chương trình Pascal nào đều bao gồm một số phần:

  1. Tiêu đề chương trình
  2. Phần mô tả thẻ
  3. Phần mô tả cố định
  4. Phần mô tả kiểu dữ liệu
  5. Phần mô tả biến
  6. Phần mô tả chức năng và thủ tục
  7. Phần toán tử
    Ba phần in đậm là bắt buộc đối với bất kỳ chương trình nào. Phần đầu của các phần còn lại trong chương trình là tùy chọn. Chúng tôi sẽ cho bạn biết về mục đích và quy tắc ghi âm từng phần khi chúng tôi học ngôn ngữ. Mỗi phần của chương trình bắt đầu bằng từ khóa riêng của nó. Các phần cách nhau bởi dấu chấm phẩy (;). Từ khóa là tiếng Anh. Vào cuối mỗi bài học, chúng tôi sẽ cung cấp các từ - danh sách các từ khóa lần đầu tiên gặp trong bài học này. Chúng tôi khuyên bạn nên viết ra tất cả các từ khóa (cùng với bản dịch) trong một terdal riêng. Chúng tôi sẽ đánh dấu các từ khóa in đậm*); Khi thiết kế tác phẩm của bạn, chúng nên được gạch chân bằng một đường thẳng. Để dễ đọc, chúng tôi sẽ đánh dấu tên trong các chương trình bằng chữ in nghiêng và bạn nên gạch chân chúng bằng một đường lượn sóng.

Tiêu đề chương trình
Sơ đồ cú pháp của nó trông như sau:

Tên của chương trình và nói chung, tên trong Pascal có thể là bất cứ thứ gì.
*) Đôi khi trong các ấn phẩm in chúng được in nghiêng.

một chuỗi các chữ cái và số bắt đầu bằng một chữ cái. Tên được phân biệt bằng tám ký tự đầu tiên. Đầu ra từ, được chỉ định trong tiêu đề chương trình, cho máy biết rằng chương trình được cài sẵn để in kết quả và đầu vào từ cho biết rằng một số đại lượng sẽ được gán giá trị trong khi sử dụng chương trình (tính năng này sẽ được thảo luận bên dưới).

Phần toán tử
Phần câu lệnh là phần chính của chương trình. Sơ đồ cú pháp của nó trông như sau:

Một phần bao gồm một chuỗi các câu lệnh được đặt giữa các từ khóa bắt đầu và kết thúc, sau đây được gọi là dấu ngoặc đơn câu lệnh. Các toán tử cách nhau bởi dấu chấm phẩy (;). Cuối chương trình có dấu chấm (.). Bạn có thể viết bất kỳ số lượng toán tử nào trên một dòng.

Biểu thức
Pascal sử dụng các ký hiệu số học sau (giống như trong Papir):

  • phép cộng,
  • phép trừ,
  • phép nhân,
    / phân công.

Hoạt động “lũy thừa” không được cung cấp bằng ngôn ngữ. Nhưng trong Pascal có thêm hai phép tính số học được áp dụng cho số nguyên:
div - phép chia số nguyên (thương số của phép chia hai số tự nhiên được tính),
mod - tính phần còn lại của phép chia số nguyên*)
Trong trường hợp này, như thường lệ, sự hiện diện của dấu ngoặc đơn sẽ được tính đến. Ví dụ, nếu

*) Ví dụ: 25 div 6=4, a 25 mod 6=1.

53

Khi viết biểu thức bằng ngôn ngữ lập trình, chỉ có thể sử dụng dấu ngoặc đơn cho thứ tự hành động gợi ý.

Toán tử gán

Toán tử gán được mô tả bằng sơ đồ sau:

Ví dụ: x:=3x := 3; đọc: “tên xx giá trị cho trước 3” (lưu ý rằng, so với Rapier, tên và biểu thức đã được hoán đổi!).

Tính giá trị của một biểu thức
z=x2+y2xyz = \frac{x^2 + y^2}{xy} với x=3,y=5x = 3, y = 5 có thể được thực hiện bằng cách sử dụng chuỗi toán tử sau:
x:=3;y:=5;x := 3; y := 5;
z:=(x∗x+y∗y)/(x∗y);z := (x*x + y*y) / (x*y);

Quy trình in

Để in bằng Pascal, có hai quy trình writeln* và write. Mỗi người trong số họ có thể có bất kỳ số lượng tham số. Do sử dụng các quy trình này, giá trị của tất cả các tham số sẽ được in trên một dòng. Sự khác biệt giữa các quy trình này như sau: sau khi thực hiện quy trình writeln, quá trình chuyển đổi sang một dòng mới sẽ xảy ra (như trong quy trình PRINT trong ngôn ngữ Rapier) và sau khi thực hiện quy trình write, quá trình chuyển đổi sang một dòng mới sẽ không xảy ra và việc in bằng các quy trình in tiếp theo writeln hoặc write sẽ diễn ra trên cùng một dòng. Khi gọi thủ tục writeln không có tham số, quá trình chuyển đổi sang một dòng mới sẽ xảy ra, tức là bây giờ việc gọi bất kỳ quy trình in nào sẽ in từ một dòng mới.

Ví dụ, kết quả của việc thực hiện một chuỗi các toán tử
a:=3;b:=6;a := 3; b := 6;
write(′A=′,a,′B=′,b);write ('A=', a, ' B=', b);
write(′BCE′);writeln;write (' BCE'); writeln;

sẽ là chuỗi A=3A = 3 B=6B = 6 BCEBCE và là kết quả của chuỗi các toán tử
a:=3;b:=6;a := 3; b := 6;
writeln(′A=′,a,′B=′,b);writeln ('A=', a, ' B=', b);
write(′BCE′);writeln;write (' BCE'); writeln;

sẽ in hai dòng
A=3B=6A = 3 \quad B = 6
BCEBCE

Lưu ý rằng trong cả hai ví dụ đều có writeln ở cuối chuỗi in. Điều này không phải ngẫu nhiên: quy trình writeln luôn hoàn tất việc tạo dòng in và xuất nó ra thiết bị in. Nếu không có quy trình này, trong ví dụ của chúng tôi, BCEBCE cuối cùng có thể không phải là pretaate.

Dữ liệu. Thủ tục nhập liệu

Như đã lưu ý, chương trình Pascal chỉ bắt đầu thực thi sau khi nó được nhập hoàn toàn vào bộ nhớ máy tính. Nhưng nếu một số tên cần được gán giá trị trong quá trình thực thi chương trình thì sao? Trong Rapier, một quy trình BVOД đã được cung cấp cho việc này (xem «Kvant», 1980, Số 7), với sự trợ giúp của quy trình này, giá trị bắt buộc có thể được đặt trong quá trình đối thoại. Trong Pascal cũng có thể không có hội thoại. Vì vậy, trước khi bắt đầu thực hiện chương trình, cần phải “chuẩn bị” tất cả dữ liệu (số, văn bản, …) cần thiết cho hoạt động của chương trình. Nhưng ghi dữ liệu này vào đâu và làm thế nào để máy biết tên nào để gán những giá trị nhất định?

Trong hầu hết các ngôn ngữ lập trình, bao gồm Pascal, dữ liệu được ghi, theo quy luật, sau chương trình trong cái gọi là danh sách dữ liệu và trong chính chương trình, một toán tử đặc biệt được sử dụng, với sự trợ giúp của dữ liệu cần thiết sẽ được đọc và gán cho các tên cần thiết.

Trong Pascal, các thủ tục BVOД cùng áp dụng các thủ tục read và readln*. Mỗi trong số chúng có thể có số lượng tham số bất kỳ, phải là tên. Cơ chế của cả hai

*) writeln là sự “kết hợp” của hai từ tiếng Anh write và line.

*) readln là sự “kết hợp” của hai từ tiếng Anh read và line.

54

quy trình như sau: giá trị đầu tiên được chỉ định trong danh sách dữ liệu là “đọc” và được gán cho tên đầu tiên được ghi trong danh sách tham số thủ tục, sau đó giá trị tiếp theo sẽ là “đọc” và gán cho tên thứ hai, v.v., cho đến khi tất cả các tên đã được gán giá trị. Rõ ràng là lượng dữ liệu phải tương ứng với số lượng tên được chỉ định khi gọi thủ tục đầu vào (hoặc ít nhất là không ít hơn). Một số lệnh gọi thủ tục read và readln có thể được ghi lại trong một chương trình. Trong trường hợp này, danh sách dữ liệu phải chứa dữ liệu cần thiết để vận hành thành công tất cả các thủ tục nhập.

Sự khác biệt giữa hoạt động của thủ tục read và readln như sau: sau khi thực hiện thủ tục read, giá trị của giá trị đã cho tiếp theo được đọc từ cùng một dòng và sau khi thực hiện thủ tục readln - từ một dòng mới. (So ​​sánh với thao tác của thủ tục write và writeln!) Ví dụ: nếu chương trình viết read (a, b, c) và danh sách dữ liệu gồm các số 5,7 và 13 thì khi sử dụng chương trình sẽ thực hiện phép cộng: a:=5; b:=7; c:=13. Dữ liệu số trong danh sách dữ liệu chỉ được phân tách với nhau bằng dấu cách. Khi chuẩn bị một chương trình để nhập vào bộ nhớ máy tính, danh sách dữ liệu được tách khỏi văn bản chính của chương trình bằng cách viết một dòng đặc biệt. Chúng ta sử dụng một đường ngang để phân tách danh sách dữ liệu khỏi văn bản chương trình.

Hãy xem một ví dụ. Giả sử cần nhập ba chữ số a1, a2, a3 là các chữ số liên tiếp của ký hiệu thập phân của một số nhất định vào bộ nhớ máy và phải ghi một dãy toán tử để tìm và in số này.

begin

read (a1, a2, a3);
x:=100*a1+10*a2+a3;
writeln ('X=', x)
end.

507

Kết quả của việc thực hiện chuỗi toán tử này là X=507 sẽ được in.

Mô tả

Khi nghiên cứu ngôn ngữ Robik, chúng tôi đã nói về thực tế là mỗi tên được sử dụng trong chương trình được gán cho một khối bộ nhớ máy tính. Điều này đặt ra câu hỏi: việc phân bổ bộ nhớ này xảy ra khi nào? Cần phân bổ bao nhiêu dung lượng để lưu trữ giá trị của các tên khác nhau? Làm thế nào máy tính biết được một tên cụ thể có thể nhận những giá trị nào (ví dụ: số hoặc văn bản)?

Khi viết chương trình bằng một số ngôn ngữ lập trình (ví dụ: Robik hoặc Rapier), máy tính sẽ tự “trả lời” những câu hỏi này. Để làm điều này, chẳng hạn, cô ấy cần xem qua toàn bộ văn bản của chương trình và theo dõi những giá trị mà mỗi tên có thể nhận và liệu các giá trị này có thay đổi trong quá trình thực hiện chương trình hay không. Kiểu phân tích chương trình này yêu cầu thêm thời gian và dung lượng bộ nhớ.

Trong hầu hết các ngôn ngữ lập trình, bao gồm cả Pascal, thông tin về những đặc tính này và một số đặc tính khác của một đại lượng được chỉ định trong các phần đặc biệt của chương trình, trong phần mô tả của nó. Tất cả tên được sử dụng trong chương trình phải được liệt kê ở một trong các phần mô tả (xem cấu trúc chương trình ở trang 52).

Các đại lượng được sử dụng trong chương trình được chia thành các biến và hằng số. Một biến giá trị có thể nhận bất kỳ tập hợp giá trị hợp lệ nào trong quá trình thực hiện chương trình. Bạn có thể sử dụng giá trị của một biến tại thời điểm hiện tại bằng cách gọi nó theo tên.

Hằng số là những đại lượng không thay đổi. Có hai loại hằng số. Một trong số chúng không cung cấp bất kỳ mô tả bổ sung nào: hằng số được xác định bởi hình ảnh của nó. Ví dụ: 5 là một hằng số mà khi được sử dụng ở bất kỳ đâu trong chương trình sẽ biểu thị

55

tạo thành số năm; ‘blue’ là hằng số văn bản; Sau này chúng ta sẽ làm quen với các hằng số có tính chất khác.

Một loại hằng số khác được gọi là hằng số được đặt tên. Bất kỳ hằng số nào cũng có thể được đặt tên và sau đó trong chương trình, việc sử dụng tên này sẽ cho biết quyền truy cập vào hằng số. Ví dụ: nếu các giá trị 3.1415926 được gọi bằng tên nu, thì lập trình viên có quyền viết

l:=2∗nu∗rl := 2 * nu * r

trong đó ll và rr là các biến và nunu là hằng số được đặt tên. Sự tương ứng giữa các hằng số được đặt tên và tên của chúng được thiết lập trong phần mô tả hằng số.

Phần mô tả hằng số có thể được mô tả bằng sơ đồ:

Diagram of a control system with inputs and outputs

Thuộc tính quan trọng nhất của tên trong Pascal là khái niệm về kiểu. Một kiểu chỉ định một số tập hợp giá trị được sắp xếp và một tập hợp các phép toán được phép trên các giá trị này.

Việc mô tả loại vô hướng được đưa ra bằng sơ đồ:

Diagram of a control system with inputs and outputs

Phần mô tả các loại dữ liệu có thể được chỉ định bằng sơ đồ:

Diagram of a control system with inputs and outputs

Ở đây const, type, var lần lượt là từ khóa của các phần mô tả hằng, kiểu và biến.

Bây giờ có hai câu hỏi được đặt ra: làm thế nào để đặt chính xác các loại dữ liệu trong chương trình và dữ liệu của từng TOP có thể được thể hiện trong bộ nhớ của máy một cách thuận tiện như thế nào?

Tất cả các loại dữ liệu có thể được chia thành hai lớp lớn - vô hướng và cấu trúc. Nếu giá trị của các biến của một loại nhất định được tạo thành từ các thành phần riêng lẻ (ví dụ như các bộ và bộ dữ liệu trong Rapier), thì loại này được gọi là cấu trúc, nếu không thì - vô hướng.

Trong bài học này chúng ta sẽ chỉ xem xét các loại dữ liệu có thể tải xuống. Việc mô tả các kiểu dữ liệu cấu trúc sẽ được liên kết như sau.

Ví dụ: một phần mô tả các kiểu dữ liệu trong một chương trình có thể trông như thế này:

цвет=(красный, желтый, зеленый, голубой);\text{цвет} = (\text{красный, желтый, зеленый, голубой});

физура=(треугольник, прямоугольник, круг);\text{физура} = (\text{треугольник, прямоугольник, круг});

Ở đây màu đỏ, hình tròn,… là các hằng số được xác định bằng cách biểu diễn chúng.

Bây giờ chúng ta hãy mô tả biến x thuộc loại màu và biến a thuộc loại vật lý.

x: màu sắc; a: giáo dục thể chất;

Điều này có nghĩa là biến x có thể lấy một trong các giá trị đỏ, vàng, lục, lam và biến a có thể lấy một trong các giá trị tam giác, hình chữ nhật, hình tròn. Lưu ý rằng tên kiểu có thể được bỏ qua nếu chúng ta kết hợp mô tả biến và định nghĩa kiểu, nghĩa là chúng ta có thể mô tả các biến x và a như thế này:

x: (đỏ, vàng, lục, lam);
a: (hình tam giác, hình chữ nhật, hình tròn);

Tuy nhiên, nếu có một số mô tả như vậy (ví dụ: trong các quy trình khác nhau), thì tốt hơn là bạn vẫn nên mô tả loại và đặt tên cho nó.

Các loại được mô tả theo cách này không được chứa các hằng số giống hệt nhau.

Ngoài các loại được mô tả trong chương trình, còn có các loại τι- tiêu chuẩn