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 →
55
Kỹ thuật lập trình truyền thống
Bài 6. Cấu hình chương trình sử dụng tham số
Chương trình sau đây được xem xét:
program primer(input, output);
var a: array [1..100] of real;
i: integer; s: real;
begin for i:=1 to 100 read(a[i]);
s:=0;
for i:=1 to 100 do s:=s+a[i];
s:=s/100; writeln(s);
Quảng bá chương trình
- Phần này của chương trình làm gì?
- Cô ấy có đúng không? Cô ấy có duyên dáng không?
- Bạn có thấy bất kỳ khiếm khuyết nào trong chương trình này không?
- Chương trình nên được sửa đổi như thế nào để tạo ra một mảng gồm 115 phần tử?
Hãy tưởng tượng cuộc đối thoại này giữa hành khách trên máy bay và một tiếp viên:
- Tiếp viên! Tại sao nó không bay? Chúng ta đang chờ đợi điều gì?
— Bạn thấy đấy, máy bay của chúng tôi được thiết kế có 100 chỗ ngồi, nhưng chỉ có 98 hành khách đến. Máy bay được thiết kế không thể cất cánh với ghế trống nên bạn sẽ phải đợi cho đến khi những người đến sau đến hoặc có ai đó muốn bay trên một chuyến bay lung linh. - Nếu chúng ta đặt ma-nơ-canh lên ghế thì sao? Vậy chúng ta khởi hành nhé?
- Vâng, chắc chắn rồi.
“Hãy nói cho tôi biết,” hành khách thứ hai thêu dệt, “điều gì sẽ xảy ra nếu chúng ta loại bỏ những chiếc ghế trống?”
“Điều đó có thể xảy ra,” tiếp viên trả lời và hành khách vội vàng tháo ghế hoặc tìm ma-nơ-canh.
Tất nhiên, cuộc đối thoại như vậy là vô lý và người ta không thể gặp phải tình huống như vậy ở Aeroflot. Nhưng hãy nhìn vào chương trình trên: nó có thể thành công với 98 phần tử mảng không? KHÔNG!! Nhưng tại sao? Rốt cuộc, không có gì trong thuật toán yêu cầu chính xác 100 phần tử (chẳng hạn như phép chia yêu cầu chính xác hai số: số bị chia và số chia). Về các chương trình như vậy, nó thường đi kèm với các chương trình dành cho người mới bắt đầu như:
— Bạn sẽ làm gì nếu bạn cần tạo thành không phải 100 mà là 98 phần tử?
— Tôi sẽ đổi “100” thành “98” ở đây, ở đây và ở đây. (Tức là tôi tháo ghế).
- À, bạn sẽ thay đổi một nửa câu nói của chương trình chứ? Và bên cạnh đó, bạn cũng quên thay đổi nó ở đây. Và đâu là sự đảm bảo rằng không có gì khác cần phải thay đổi?
- Chà… vậy tôi sẽ thêm một thẻ đục lỗ trống vào dữ liệu gốc: các số 0 sẽ được nhập vào đó và mọi thứ sẽ ổn. (Tôi sẽ đặt ma-nơ-canh lên ghế).
— Và nếu không cần thêm các phần tử thì có được không?
“Vậy tôi sẽ vào đơn vị.” - Và nếu bạn cần gấp nó lại thì có được không?
— ??!
Vì vậy, chúng tôi đã trả lời một phần câu hỏi 2 và 3. Tất nhiên, chương trình đúng theo quan điểm của biểu mẫu, nhưng nó khó có thể được gọi là tinh tế, vì nó có một khiếm khuyết lớn: không có lý do rõ ràng, chương trình được điều chỉnh nghiêm ngặt theo kích thước của mảng đang được hình thành.
Những câu hỏi còn lại rất khó trả lời. Có thể nói rằng chương trình tính trung bình số học, khi đó để xử lý một mảng gồm 115 phần tử cần thay “100” bằng “115” ở bốn vị trí; nhưng chúng ta có thể nói rằng nó tính tổng và chia cho 100 (ví dụ: dịch kết quả từ tỷ lệ phần trăm thành phân số chung), thì việc thay thế chỉ được tùy ý ở ba vị trí. Ở đây có thể thấy ngay ba khiếm khuyết: thứ nhất, không có nhận xét nào xuất hiện trong chương trình, thứ hai, các hằng số “im lặng” nằm rải rác trong chương trình và không rõ liệu một số trong số chúng có trùng hợp ngẫu nhiên hay không, và thứ ba, chương trình được điều chỉnh theo kích thước của mảng ở nhiều nơi và phải thực hiện nhiều chỉnh sửa để thay đổi kích thước.
Hãy giới thiệu những thay đổi nhỏ cho chương trình của chúng tôi:
program primer(input, output);
const n=100; m=100; {n — размер массива}
var a:array [1..n] of real
i:integer; s:real;
begin for i:=1 to n do read(a[i]);
s:=0;
for i:=1 to n do s:=s+a[i];
s:=s/m; writeln(s);
Quảng bá chương trình
Telegra và không có bình luận, rõ ràng là chương trình không tính giá trị trung bình số học.
Để thay đổi kích thước của mảng, bạn cần thay đổi một dòng (bất kể kích thước của chương trình) và bạn phải tìm nó: nó nằm ở đầu chương trình.
Do đó, chương trình của chúng tôi đã trở nên dễ dàng tùy chỉnh: bạn cần thay đổi khối cài đặt, được đặt ở đầu chương trình và có kích thước nhỏ, không phụ thuộc vào kích thước của chương trình. Khối cài đặt chứa các giá trị của tất cả các tham số chương trình. Phương pháp cài đặt chương trình này được gọi là cài đặt tĩnh: chương trình được cấu hình trong quá trình nhập vào máy tính (chính xác hơn là trong quá trình truyền