Các ngôn ngữ lập trình bắt buộc, chẳng hạn như C, C#, Java, C++ và nhiều ngôn ngữ khác cho phép sửa đổi giá trị của một biến. Chúng tôi sử dụng khả năng thay đổi này trong mẫu bộ tích lũy, để bắt đầu một biến, bộ tích lũy, tại một giá trị và sửa đổi nó nếu cần, để câu trả lời mà chúng tôi đang tìm kiếm xuất hiện sau khi mẫu bộ tích lũy hoàn thành
Khi chúng ta cần xác định trạng thái hoặc giá trị của một thứ gì đó bằng logic có điều kiện hoặc tìm kiếm lặp lại, chúng ta có thể sử dụng mẫu tích lũy
Mô hình tích lũy có hai phần cơ bản
Khai báo một biến đóng vai trò là bộ tích lũy — và khởi tạo bộ tích lũy với một giá trị mặc định có ý nghĩa,
Kiểm tra một số điều kiện — và thay đổi bộ tích lũy dựa trên điều kiện mong muốn
Trong quá trình thực hiện hai phần này, bộ tích lũy đang trong quá trình nhận câu trả lời đúng — nó không nhất thiết phải đúng của con dơi, nhưng nó sẽ thay đổi để khi các phần này hoàn thành, biến bộ tích lũy sẽ giữ câu trả lời cho chúng ta.
Dưới đây là một số ví dụ
Một ví dụ đơn giản là xác định xem một trong các điều kiện có đúng hay không
bool answer = false;
if [ condition ] answer = true;
else if [ otherCondition ] answer = true;
Trong quá trình thực hiện các phần, biến tích lũy [ở đây là answer
] bắt đầu là sai, được cập nhật trong phần điều kiện và cuối cùng giữ câu trả lời quan tâm
Ok, đó là một ví dụ đơn giản, đây là một số ví dụ dễ nhận biết hơn
TỔNGĐể tính TỔNG của một chuỗi giống như một mảng, chúng ta khởi tạo một bộ tích lũy thành 0, là giá trị nhận dạng cộng và sau đó, đối với mỗi phần tử trong chuỗi, chúng ta thêm vào bộ tích lũy [ở đây đã cho mảng A và độ dài N]
int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
PHÚTĐể tính toán MIN của một chuỗi giống như một mảng, chúng ta khởi tạo một bộ tích lũy thành MAX_INT
, đây là số nguyên lớn nhất có thể, sau đó, đối với mỗi phần tử trong chuỗi, chúng ta sẽ nắm bắt nó nếu nó nhỏ hơn những gì chúng ta có hiện tại
int min = MAX_INT;
for [ int i = 0; i < N; i++ ]
if [ A [ i ] < min ]
min = A [ i ];
MAXĐể tính TỐI ĐA của một chuỗi giống như một mảng, chúng ta khởi tạo một bộ tích lũy thành
int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
0, đây là số nguyên lớn nhất có thể, sau đó, đối với mỗi phần tử trong chuỗi, chúng ta sẽ xem nếu nó lớn hơn những gì chúng ta có hiện tạiint max = MIN_INT;
for [ int i = 0; i < N; i++ ]
if [ A [ i ] > max ]
max = A [ i ];
AVGĐể tính trung bình [AVG], chúng tôi thực hiện SUM và chia cho số lượng
int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
double avg = sum / N;
Mẫu tích lũy có thể được áp dụng cho nhiều tính toán. Điều quan trọng cần nhận ra là bộ tích lũy không "đúng" cho đến khi cả hai phần kết thúc
thuật toánCAssembly
Bài báo cáo
Thưởng thức bài viết này?
2
Chia sẻ
Erik Eidt
Hợp ngữ, Mã máy, Kiến trúc bộ xử lý
Tôi là một chuyên gia về ngôn ngữ lắp ráp, gần đây đã được cố vấn về MIPS, LC-3&4, MARIE, PEP/8&9, các ngôn ngữ khác. Tôi sẽ giải thích các khái niệm và nguyên tắc cơ bản mà bạn cần biết. Ví dụ. cách thức hoạt động của bộ xử lý;
Kết hợp toán tử
int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
1 với phép nối chuỗi bằng cách sử dụng int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
2 và mẫu bộ tích lũy, chúng ta có thể viết một hàm loại bỏ tất cả các nguyên âm khỏi một chuỗi. Ý tưởng là bắt đầu bằng một chuỗi và lặp lại từng ký tự, kiểm tra xem ký tự đó có phải là nguyên âm không. Khi chúng tôi xử lý các ký tự, chúng tôi sẽ xây dựng một chuỗi mới chỉ bao gồm các ký tự không nguyên âm. Để làm điều này, chúng tôi sử dụng mẫu tích lũyHãy nhớ rằng mô hình tích lũy cho phép chúng tôi giữ “tổng số đang chạy”. Với các chuỗi, chúng tôi không tích lũy tổng số. Thay vào đó, chúng tôi đang tích lũy các ký tự vào một chuỗi
Dòng 5 sử dụng toán tử
int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
3 để kiểm tra xem ký tự hiện tại không có trong chuỗi int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
4. Cách thay thế cho việc sử dụng toán tử này là viết một câu lệnh int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
5 rất lớn để kiểm tra từng ký tự nguyên âm riêng lẻ. Lưu ý rằng chúng tôi sẽ cần sử dụng logic int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
6 để đảm bảo rằng ký tự không phải là bất kỳ nguyên âm nàoif eachChar != 'a' and eachChar != 'e' and eachChar != 'i' and eachChar != 'o' and eachChar != 'u' and eachChar != 'A' and eachChar != 'E' and eachChar != 'I' and eachChar != 'O' and eachChar != 'U': sWithoutVowels = sWithoutVowels + eachChar
Xem kỹ dòng 6 trong chương trình trên [______17]. Chúng tôi sẽ làm điều này cho mọi ký tự không phải là nguyên âm. Điều này sẽ trông rất quen thuộc. Như chúng tôi đã mô tả trước đó, đây là một ví dụ về mẫu tích lũy, lần này sử dụng một chuỗi để “tích lũy” kết quả cuối cùng. Nói cách khác, nó nói rằng giá trị mới của
int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
8 sẽ là giá trị cũ của int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
8 được nối với giá trị của s = "ball" r = "" for item in s: r = item.upper[] + r print[r]1. Chúng tôi đang xây dựng ký tự chuỗi kết quả theo ký tự
Hãy xem kỹ quá trình khởi tạo của
int sum = 0;
for [ int i = 0; i < N; i++ ]
sum += A [ i ];
8. Chúng tôi bắt đầu với một chuỗi trống và sau đó bắt đầu thêm các ký tự mới vào cuốiBước qua chức năng bằng cách sử dụng codelens để xem biến tích lũy tăng lên
Hoạt động. MãLens 9. 14. 2 [ch08_acc2]
Kiểm tra việc hiểu của bạn
Những gì được in bởi các tuyên bố sau đây
s = "ball" r = "" for item in s: r = item.upper[] + r print[r]
Ghi chú
Không gian làm việc này được cung cấp để thuận tiện cho bạn. Bạn có thể sử dụng cửa sổ mã kích hoạt này để thử bất cứ thứ gì bạn thích