2 つの行列の乗算を実行する C プログラムを実装する必要があり (そう、宿題です :)、ユーザーからの入力を受け取り、それを検証する関数を考案しようとしています。
私の最初の考えは、プログラムが自動的に計算するように、ユーザーに行列を入力するように求めるだけです(空白で区切られた数字、改行による行、および行列の終わりを知らせる改行の後のおそらく「e」だけ)。列と行の数を取得し、それらを 2 次元配列に格納します。しかし、サイズが事前にわからない場合、どうすれば十分なメモリを動的に割り当てることができますか? 可能であれば、ユーザーに各行列の行数と列数を手動で入力するように求めることは避けたいと思います。
さらに、間違ったデータや欠落しているデータに対して入力を検証する最良の方法は何ですか (たとえば、文字、ゴミ、他の行よりも数が少ない行など)。各行を strtok し、区切り文字として空白を使用してそれらを分割し、各トークンが厳密に数値であるかどうかを確認することを考えていました。これは、各行に有効な数値のみが含まれているかどうかを判断する最良の方法ですか? よりクリーンで正気なアプローチはありますか?
これは私の擬似コードです:
function getMatrix () {
while(true) {
Receive a matrix as input, until the user enters 'e' in a new line by itself;
Split the matrix in rows delimited by newlines;
Split the rows in strings delimited by whitespaces;
For each string {
If the string is numeric, save it as matrix[rowNumber][colNumber];
Else print a warning and discard the entire input;
}
If each row of the matrix has an equal number of elements {
return the matrix as an array of integers;
} else {
print a warning and let the user re-enter the data.
}
}
}
main () {
matrix1 = getMatrix;
matrix2 = getMatrix;
matrix1x2 = multiply the two matrices (this is the easy part :)
print matrix1x2.
}