私は独学で C++ を学んでおり、教科書の問題を解いています。これまで、データ型、宣言、表示、代入、対話型入力、選択 (if-else)、繰り返し (for/while ループなど)、関数、配列などの基本について説明してきました。私はポインターで何もしていませんが、それらが何であるかは知っています...
私はこの問題に遭遇しました:
真偽テストの答えは次のとおりです。 TTFF T. 各行が 1 つのテストで提供された答えに対応する 2 次元の答えの配列が与えられた場合、2 次元の配列とテストの数を受け入れる関数を記述します。パラメータとして、各テストの成績を含む 1 次元配列を返します。(各質問は 5 点の価値があるため、最高評点は 25 です。) 次のデータを使用して関数をテストします。
私の理解では、C++ 関数は配列を返すことができません。少なくとも、これはこのフォーラムの他の投稿で読んだことです。これは正しいです?もしそうなら、私はまだポインターをカバーしていないので、彼らはあなたがこの問題をどのように行うことを期待していますか. 私が可能かもしれないと思った他の唯一の方法は、参照によって配列を渡すことです....しかし、質問の幹は、関数には2つの引数しかないと言っているので、そのメソッドは除外されたのではないかと思いました。そのメソッドは、変更する配列である 3 番目の引数を必要とするため、暗黙的に返されます。
私はいくつかのコードを持っていますが、正しくありません (私の calcgrade 関数だけが機能する必要があります)。先に進む方法がわかりません。ありがとうございました!!
#include<iostream>
// Globals
const int NROW = 6, NCOL = 5;
bool answers[NCOL] = {1, 1, 0, 0, 1};
bool tests[][NCOL] = {1, 0, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 0, 0, 1,
0, 1, 0, 0, 0,
0, 0, 0, 0, 0,
1, 1, 0, 1, 0};
int grade[NROW] = {0};
// Function Proto-Types
void display1(bool []);
void display2(bool [][NCOL]);
int calcgrade(bool [][NCOL], int NROW);
int main()
{
calcgrade(tests, NROW);
display2(tests);
return 0;
}
// Prints a 1D array
void display1(bool answers[])
{
// Display array of NCOL
for(int i = 0; i < NCOL; i++)
std::cout << std::boolalpha << answers[i] << std::endl;
return;
}
// Print 2d Array
void display2(bool answers[][NCOL])
{
// Display matrix: 6x5
for(int i = 0; i < NROW; i++)
{
for(int j= 0; j < NCOL; j++)
{
std::cout << std::boolalpha << answers[i][j] << std::endl;
}
std::cout << std::endl;
}
return;
}
int calcgrade(bool tests[][NCOL], int NROW)
{
for(int i = 0; i < NROW; i++)
{
for(int j = 0; j < NROW; j++)
{
if(tests[i][j]==answers[j])
grade[i] += 5;
}
printf("grade[%i] = %i", i, grade[i]);
}
return grade;
}