配列の一般的な操作
CoddyのC++ジャーニー「基礎」セクションの一部 — レッスン 66/74。
一般的な配列操作をいくつか紹介します:
- 配列内のすべての要素の合計を求めます:
int numbers[] = {1, 2, 3, 4, 5};
int sum = 0;
for (int number : numbers) {
sum += number;
}
std::cout << "Sum: " << sum;- 配列内の要素の平均を求めます:
int numbers[] = {1, 2, 3, 4, 5};
double sum = 0;
for (int number : numbers) {
sum += number;
}
double average = sum / std::size(numbers);
std::cout << "Average: " << average;- 配列内の最大要素を見つける:
int numbers[] = {1, 5, 2, 9, 3};
int max = numbers[0];
for (int i = 1; i < std::size(numbers); i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
std::cout << "Max: " << max;- 配列内の最小要素を見つける:
int numbers[] = {1, 5, 2, 9, 3};
int min = numbers[0];
for (int i = 1; i < std::size(numbers); i++) {
if (numbers[i] < min) {
min = numbers[i];
}
}
std::cout << "Min: " << min;チャレンジ
簡単calculateStats という名前の関数を作成してください。この関数は、double型の配列とその配列のサイズを引数として受け取り、以下の操作を実行します。
- 配列内のすべての要素の合計を計算します。
- 配列内の要素の平均を計算します。
- 配列内の最大要素を見つけます。
- 配列内の最小要素を見つけます。
関数は、合計、平均、最大値、最小値の順に格納されたdouble型の配列を返す必要があります。
重要な注意点:
- ループの制御には
sizeパラメータを使用してください。std::size()は使用しないでください。 maxとminを初期化するには、それらをarr[0]から開始してください。これにより、配列に負の数しか含まれていない場合でも正しく動作します。main()内の事前に記述されたコードは、すでにnewを使用して動的配列を割り当て、delete[]で解放しています。あなたは関数内でnew double[4]を使用して結果配列を割り当て、それを返すだけで済みます。注:ポインタとnewを使用した動的メモリについては、後のセクションで詳しく説明します。ここでは、示されているnew double[4]のパターンに従うだけで十分です。
推奨されるアプローチ:
sum = 0、max = arr[0]、min = arr[0]で初期化します。i = 0からi < sizeまでループし、合計を累積し、必要に応じて最大値/最小値を更新します。- 平均を
sum / sizeとして計算します。 new double[4]で新しい配列を割り当て、4つの結果を順番に格納して、それを返します。
自分で試してみよう
#include <iostream>
double* calculateStats(double arr[], int size) {
// newArrに格納する前に、4つの値を計算する必要があります
// sum(0で開始)、max、min(どちらもarr[0]で開始)の変数を初期化します
// forループを使用して配列を反復処理します
// ループ内:
// - 各要素をsumに加算します
// - 各要素をmaxと比較し、より大きい場合は更新します
// - 各要素をminと比較し、より小さい場合は更新します
// average = sum / size を計算します(ループの後)
double* newArr = new double[4];
newArr[0] = sum;
newArr[1] = average;
newArr[2] = max;
newArr[3] = min;
return newArr;
}
int main() {
int n;
std::cin >> n;
std::cin.ignore();
double arr[n];
for (int i = 0; i < n; i++) {
double val;
std::cin >> val;
arr[i] = val;
}
double* stats = calculateStats(arr, n);
std::cout << "Sum: " << stats[0] << std::endl;
std::cout << "Average: " << stats[1] << std::endl;
std::cout << "Maximum: " << stats[2] << std::endl;
std::cout << "Minimum: " << stats[3] << std::endl;
delete[] stats;
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。