Biến tích lũy C++

Câu hỏi này không có khả năng giúp ích cho bất kỳ khách truy cập nào trong tương lai; . Để được trợ giúp làm cho câu hỏi này được áp dụng rộng rãi hơn, hãy truy cập trung tâm trợ giúp

Đã đóng 9 năm trước .

Tôi không chắc sự khác biệt là gì, nhưng đây là những vấn đề

Viết câu lệnh gán cập nhật biến đếm có tên numStudents lên 1.
có phải là.

numStudents = numStudents + 1

?
Vấn đề khác của tôi là

Viết câu lệnh gán cập nhật biến tích lũy có tên là tổng theo giá trị trong biến doanh số.
nó sẽ giống như thế nào.

tổng = tổng cộng + doanh số

?

Bài 7. 2 sử dụng bộ đếm và bộ tích lũy từ MLG College of Learning, Inc

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

int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
2) 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

int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
3, đâ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 ];
4, đâ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ại

int 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

Đăng lại

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ý;

Trong ví dụ trước, chúng ta đã viết một hàm tính bình phương của một số. Thuật toán chúng tôi sử dụng trong hàm rất đơn giản. nhân số với chính nó. Trong phần này, chúng ta sẽ thực hiện lại hàm bình phương và sử dụng một thuật toán khác, một thuật toán dựa vào phép cộng thay vì phép nhân

Nếu bạn muốn nhân hai số với nhau, cách tiếp cận cơ bản nhất là coi nó như lặp lại quá trình cộng một số với chính nó. Số lần lặp lại là nơi số thứ hai phát huy tác dụng. Ví dụ, nếu chúng ta muốn nhân ba với năm, chúng ta có thể coi nó như cộng ba với chính nó năm lần. Ba cộng ba là sáu, cộng ba là chín, cộng ba là 12, cuối cùng cộng ba là 15. Tổng quát hóa điều này, nếu chúng ta muốn thực hiện ý tưởng bình phương một số, gọi nó là n, chúng ta sẽ cộng n với chính nó n lần

Làm điều này bằng tay trước và cố gắng cô lập chính xác các bước bạn thực hiện. Bạn sẽ thấy mình cần phải ghi lại một số "tổng số đang chạy" của số tiền cho đến nay, trên một tờ giấy hoặc trong đầu của bạn. Ghi nhớ mọi thứ từ bước này sang bước tiếp theo chính là lý do tại sao chúng ta có các biến trong chương trình. Điều này có nghĩa là chúng ta sẽ cần một số biến để ghi nhớ “tổng số đang chạy”. Nó nên được khởi tạo với giá trị bằng không. Sau đó, chúng ta cần cập nhật “tổng số chạy” đúng số lần. Đối với mỗi lần lặp lại, chúng tôi sẽ muốn cập nhật tổng số đang chạy bằng cách thêm số vào đó

Nói cách khác, chúng ta có thể nói theo cách này. Để bình phương giá trị của n, chúng tôi sẽ lặp lại quá trình cập nhật tổng số đang chạy n lần. Để cập nhật tổng số đang chạy, chúng tôi lấy giá trị cũ của “tổng số đang chạy” và thêm n. Tổng đó trở thành giá trị mới của "tổng chạy"

Đây là chương trình trong activecode. Lưu ý rằng tiêu đề của định nghĩa hàm giống như trước đây. Tất cả những gì đã thay đổi là các chi tiết về cách bình phương được thực hiện. Đây là một ví dụ tuyệt vời về thiết kế “hộp đen”. Chúng ta có thể thay đổi các chi tiết bên trong hộp mà vẫn sử dụng đúng chức năng như trước đây

Trong chương trình trên, lưu ý rằng biến

int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
5 bắt đầu với giá trị là 0. Tiếp theo, lặp lại được thực hiện
int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
6 lần. Bên trong vòng lặp for, quá trình cập nhật diễn ra.
int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
5 được gán lại một giá trị mới là giá trị cũ cộng với giá trị của
int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
6

Mẫu lặp lại việc cập nhật một biến này thường được gọi là mẫu tích lũy. Chúng tôi gọi biến là bộ tích lũy. Mô hình này sẽ xuất hiện lặp đi lặp lại. Hãy nhớ rằng chìa khóa để làm cho nó hoạt động thành công là đảm bảo khởi tạo biến trước khi bạn bắt đầu lặp lại. Khi đã ở trong vòng lặp, bạn phải cập nhật bộ tích lũy

Ghi chú

Điều gì sẽ xảy ra nếu chúng ta đặt phép gán

int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
9 bên trong câu lệnh for?

Đây là chương trình tương tự trong codelens. Bước qua chức năng và xem “tổng chạy” tích lũy kết quả

Hoạt động. MãLens 6. 5. 3 (sq_accum3)

6. 5. 1. Mô hình tích lũy chung

initialize the accumulator variable
repeat:
    modify the accumulator variable

# when the loop terminates the accumulator has the correct value

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

Kiểm tra việc hiểu của bạn

    Hãy xem xét đoạn mã sau

    def square(x):
        for counter in range(x):
            runningtotal = 0
            runningtotal = runningtotal + x
        return runningtotal
    

    Điều gì xảy ra nếu bạn đặt phần khởi tạo của runningtotal (dòng runningtotal = 0) bên trong vòng lặp for làm lệnh đầu tiên trong vòng lặp?

  • Hàm bình phương sẽ trả về x thay vì x * x
  • Biến runningtotal sẽ được đặt lại về 0 mỗi lần qua vòng lặp. Tuy nhiên, vì phép gán này xảy ra như lệnh đầu tiên, nên lệnh tiếp theo trong vòng lặp sẽ đặt lại thành x. Khi vòng lặp kết thúc, nó sẽ có giá trị x, là giá trị được trả về
  • Hàm vuông sẽ gây ra lỗi
  • Các câu lệnh gán là hoàn toàn hợp pháp bên trong các vòng lặp và sẽ không gây ra lỗi
  • Hàm bình phương sẽ hoạt động như mong đợi và trả về x * x
  • Bằng cách đặt câu lệnh đặt runningtotal thành 0 bên trong vòng lặp, câu lệnh đó được thực thi mỗi lần trong vòng lặp, thay vì một lần trước khi vòng lặp bắt đầu. Kết quả là runningtotal bị 'xóa' (đặt lại về 0) mỗi lần qua vòng lặp
  • Hàm bình phương sẽ trả về 0 thay vì x * x
  • Dòng runningtotal = 0 là dòng đầu tiên trong vòng lặp for, nhưng ngay sau dòng này, dòng runningtotal = runningtotal + x sẽ thực thi, mang lại cho runningtotal một giá trị khác 0 (giả sử x khác 0)

Sắp xếp lại các câu lệnh mã để chương trình cộng n số lẻ đầu tiên trong đó n do người dùng cung cấp

        n = int(input('How many odd numbers would
you like to add together?'))
thesum = 0
oddnumber = 1
---
for counter in range(n):
---
   thesum = thesum + oddnumber
   oddnumber = oddnumber + 2
---
print(thesum)
        

6. 5. 2. Một biến thể trên mô hình tích lũy

Sửa đổi chương trình…

Thay đổi giá trị của

int min = MAX_INT;
for ( int i = 0; i < N; i++ )
    if ( A [ i ] < min )
        min = A [ i ];
0 trong dòng 9 thành
int min = MAX_INT;
for ( int i = 0; i < N; i++ )
    if ( A [ i ] < min )
        min = A [ i ];
1 và chạy

Bây giờ chúng tôi thấy rằng chức năng của chúng tôi có lỗi ngữ nghĩa. Bạn có nhớ lần đầu tiên chúng tôi giới thiệu hàm bình phương, kiểm tra đơn vị và các lớp tương đương không?

Thay đổi giá trị của

int min = MAX_INT;
for ( int i = 0; i < N; i++ )
    if ( A [ i ] < min )
        min = A [ i ];
0 ở dòng 9 trở lại thành
def square(x):
    for counter in range(x):
        runningtotal = 0
        runningtotal = runningtotal + x
    return runningtotal
1 và chạy

Điều gì sẽ xảy ra nếu chúng ta thay đổi

def square(x):
    for counter in range(x):
        runningtotal = 0
        runningtotal = runningtotal + x
    return runningtotal
2 để sử dụng phép nhân thay vì phép cộng?

Điều rất quan trọng là khởi tạo đúng biến tích lũy. Thực hiện tìm kiếm trên web trên

def square(x):
    for counter in range(x):
        runningtotal = 0
        runningtotal = runningtotal + x
    return runningtotal
3 và
def square(x):
    for counter in range(x):
        runningtotal = 0
        runningtotal = runningtotal + x
    return runningtotal
4. Khởi tạo đúng biến tích lũy và chạy chương trình

Bây giờ chúng tôi nhận được một câu trả lời khác 0. Tuy nhiên, câu trả lời không phải là bình phương của

int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
6. Điều quan trọng nữa là vòng lặp lặp lại số lần thích hợp. Chúng ta cần thực hiện dòng 5 bao nhiêu lần để có bình phương của
int sum = 0;
for ( int i = 0; i < N; i++ )
    sum += A [ i ];
6? . Bây giờ chương trình sẽ tạo ra kết quả chính xác

Biến tích lũy là gì?

Bộ tích lũy là các biến chỉ được “thêm” vào thông qua phép toán kết hợp và giao hoán và do đó có thể được hỗ trợ song song một cách hiệu quả . Chúng có thể được sử dụng để triển khai các bộ đếm (như trong MapReduce) hoặc tính tổng.

Làm thế nào để sử dụng bộ tích lũy trong lập trình C?

Một bộ tích lũy có thể chứa tổng của 10 số, phép nối (“gắn bó với nhau”) của 5 chuỗi, tích của 15 số, v.v. Bộ tích lũy bắt đầu ở một giá trị đã biết (chẳng hạn như 0) và được thay đổi bằng cách “thêm” vào một giá trị khác . Kết quả được lưu trữ ngay trong cùng một biến.

Sự khác biệt giữa biến tích lũy và biến đếm là gì?

Bộ đếm ngụ ý một số nguyên đi 0,1,2,3,4, v.v. (Lên hoặc xuống). Bộ tích lũy có thể làm được nhiều việc hơn, chẳng hạn như thu thập các khoản tiền bao gồm các giá trị dấu phẩy động.

Bộ tích lũy trong lập trình là gì?

Bộ tích lũy là gì? . Tuy nhiên, thuật ngữ này hiếm khi được sử dụng để chỉ các CPU hiện đại, đã được thay thế vào khoảng đầu thiên niên kỷ bằng thuật ngữ thanh ghi. a type of register for short-term, intermediate storage of arithmetic and logic data in a computer's central processing unit (CPU). However, the term is rarely used in reference to contemporary CPUs, having been replaced around the turn of the millennium by the term register.