שלום לכולם,
מישהו יודע אם אפשר להשתמש בפונקציה std::accumulate
בשפת C++
כדי לחשב שורה או תור ספציפי במערך דו מימדי (מטריצה)?
אני יודע שבמערך חד מימדי זה אפשרי, אבל לא מצליח ליישם את זה על מערך דו מימדי.
תודה רבה על העזרה.
התבונן על התוכנית הבאה בשפת C++
:
#include <iostream>
#include <numeric>
using namespace std;
int arraySum(int a[], int n) {
int initial_sum = 0;
return accumulate(a, a+n, initial_sum);
}
int main() {
int array[] = {5 , 10 , 15} ;
int length = sizeof(array)/sizeof(array[0]);
cout << "Array sum " << arraySum(array, length) << endl;
int matrix[][3] = {{1,2,3},{4,5,6},{7,8,9}};
for (int i = 0; i < 3; i++) {
cout << "Sum of all elements in row " << i << " is " << arraySum(matrix[i],3) << endl;
}
return 0;
}
תחילה, הגדרתי פונקציה arraySum
שמקבלת מערך וגודל המערך ומחזירה את סכום האיברים במערך בעזרת הפונקציה המבוקשת accumulate
של הספריה std
.
בפונקצית main
הגדרנו מערך שמכיל שלושה איברים מטיפוס int
והעברנו אותו (ואת גודלו) לפונקציה arraySum
. בעקבות כך, הפלט הראשון יהיה:
Array sum 30
לאחר מכאן, הגדרנו מטריצה שמורכבת משלוש שורות כאשר כל שורה מכילה שלושה איברים.
יצרנו לולאה שרצה על השורות של המטריצה שמעבירה כל פעם את השורה (שהיא בעצם מערך) לפונקציה arraySum
אשר מחשבת את סכום איבריה. סה"כ הפלט יהיה:
Sum of all elements in row 0 is 6
Sum of all elements in row 1 is 15
Sum of all elements in row 2 is 24
זאת כמובן רק דוגמה ואפשר גם להעביר לפונקציה שורה ספציפית של המטריצה ולקבל את סכום האיברים.
מקווה שמובן, בהצלחה