C#の勉強を始めたばかりの初心者です。
「九九の計算結果の配列を活用し、1桁の数値(1~9に限定)を2つ入力し、その積を表示するプログラムを作成しなさい。」という問題で、下記のコードが解答例としてありました。
static void Main(string[] args)
{
int[,] kuku = new int[9,9];
for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) kuku[i,j] = (i + 1) * (j + 1); int p = int.Parse(Console.ReadLine()); int q = int.Parse(Console.ReadLine()); Console.WriteLine(kuku[p-1,q-1]);
}
その中で、一番最後の「Console.WriteLine(kuku[p-1,q-1])」で、何故「[p-1,q-1]」になるのかがわかりません。
わざわざ「-1」にする理由を教えて頂きたく、ご教授頂けたらと思います。
掛け算なので、「P*Q」で良いのではと思ったのですが、そうすると二桁以上の掛け算も出来てしまいます。
1~9までの1桁にする為に「-1」にする理由があると思うのですが、教えて頂けますでしょうか。
また、他のコード例がありましたら教えて頂きたいです。
入力したのがp=1、q=1として1X1の結果がkukuという配列のどこに入っているのか分かりますか?
> 「P*Q」で良いのでは
「九九の計算結果の配列を活用し…」という指示を無視してよいのですか?
> 掛け算なので、「P*Q」で良いのではと思ったのですが、
「p*q」の書き間違いでしょうけど、積を表示すれば良いだけであれば、別にそれでもいいですよ。
ただし、題意を無視しているので、提出課題であれば、×もしくは減点でしょうけど。
題意の、
> 九九の計算結果の配列を活用し
という日本語の意味を理解できないとすると、なかなかつらいですが、
「問題文のうち理解できない部分は無視する」という方針だと題意に沿った解答は無理です。
「問題文の中に理解できない部分があれば理解できるまで考える」が正しい態度かと思います。
> そうすると二桁以上の掛け算も出来てしまいます。
回答例のコードを見る限り、1~9の数字以外を入力した場合は、どうなってもかまわない
(何が表示されても、エラーでプログラムがこけてもかまわない)
ということかと思います。
返信ありがとうございます。
九九の配列を活用することと、1~9までの人桁の数字のみで掛け算の計算をするコードの作成なので、「p*q」だと二桁でも三桁でも計算が出来てしまうのでどうしたらしいのかと思いまして、質問させて頂きました。
> 「p*q」だと二桁でも三桁でも計算が出来てしまうのでどうしたらしいのかと思いまして、
「想定外の入力があった時にどうするか?」は、実用プログラムではもちろん、きちんと対処が必要ですが、
この手の練習問題で、Teratailに質問に出てくる模範解答などを見る限りでは、「想定外の入力があることは全く考慮しなくていい」ようですね。
少なくとも、考慮が必要な場合は、「1桁の数字以外が入力されたら、これこれのエラーメッセージを出して再度入力を求めよ(orエラーで終了しろ)」とか書いてないと、それに応じたプログラムの書きようが無いです。実用プログラムの場合はそのあたりどうするかは設計者が考えます。
書籍の練習問題であれば、書籍の最初の方に、サイトに掲載された問題なら、回答者への注意事項かどこかに、「想定外の入力があることは全く考慮しなくていい」を意味する説明があるべきですね。実際書いてあるのかどうかは知りませんが。
疑問が解消したなら、質問を「解決済」にしてください。
[teratail【テラテイル】|ヘルプ](https://teratail.com/help#resolve-question)
解消していないなら、その点を質問に追記してください。
「ほかのパターンももっと見てみたい」ということだと、配列を使う縛りだとあまり余地がない気が^^;
> 「ほかのパターンももっと見てみたい」ということだと、配列を使う縛りだとあまり余地がない気が^^;
配列がint[,]でなくてもいいなら、int[][]やint[]を使う手もあるか。
まああまり面白くもならないので特に例示はしませんが。

回答3件
あなたの回答
tips
プレビュー