プログラミングについて

わいやんさん  
(No.1)
令和4年春期  問96のプログラミングの問題で『整数型:num,i』とあるのですがこれはどのように考えれば良いのでしょうか。
numの後ろに『,i』があることで考え方がわからなくなってしまいました。
2022.10.10 18:12
オリザさん 
IP ブロンズマイスター
(No.2)
整数型として「num」というものと「i」というもの、2つ準備するよ(それぞれどういうふうに取り扱うかはこのあと説明するよ)、という意味ではないかと考えてました。つまり列挙するときのカンマではないかと。

同じ年の問78ではi, j, kと3つ列挙されてます。
2022.10.10 21:07
わいやんさん  
(No.3)
オリザ様
ありがとうございます。
整数型のnumとiの二つの変数を宣言するということですね。

あともう一つ質問があるのですが、『関数 calcX を calcX(1) として呼び出すと…』とあったのですが、これは()の中身、つまり整数型:inDataの値が1の時でよろしいのでしょうか。
その後にnum←inDateなので、numに1を代入して…という考え方でしょうか。

質問ばかりで申し訳ございません。
2022.10.10 22:21
オリザさん 
IP ブロンズマイスター
(No.4)
多分そういうことだと思います。
昔高校数学で習った関数は、y=f(x)と置いたら、f(1)とはxに1を代入したときのyの値でした。

それになぞらえて考えると、これも何かに1を代入したときっぽいよなぁ、その何かとはプログラムを読むとinDataなんだろうなあ、
で、numの初期値にはinDataを入力するっぽいからinDataが1ならnumも1だな、そのあとiが1,2,3のときnumが3,7,13と変わっていくのかな、出てくる値の数とループの回数に矛盾はなさそうだな、てことはこれで合ってるのかな・・・という感じのプロセスで解いてました。

フワッとしててすみません。
2022.10.10 22:46
わいやんさん  
(No.5)
オリザ様
質問に答えていただきありがとうございます。
テクノロジ分野が弱い(オリジナル問題でも低かった)ので徹底的に勉強してた中でずっと疑問に思っていたのですが、無事に解決できました。
本当にありがとうございました!!
2022.10.10 22:54
オリザさん 
IP ブロンズマイスター
(No.6)
このレスはわいやん様含め掲示板をご覧の皆様向けに書きますが、
この問題(https://www.itpassportsiken.com/kakomon/04_haru/q96.html)は高校数学の記憶が残っている方なら数列で解くのもアリです。

変数numが1→3→7→13と変化するので、これは数列に翻訳すると{an}=1,3,7,13,... になります。
階差数列をbnとすると{bn}=2,4,6,... つまり bn = 2n
an+1 = an + bn = an + 2n と漸化式が求まりました。

この漸化式をプログラム擬似言語に再翻訳することを考えます。プログラムの5行目がまさに漸化式に相当する処理命令を書いています。
もともとnumという変数を数列anに翻訳したのですから、漸化式のan+1とかanは翻訳するとnumに戻ります。= は ← になります。
2nのnはプログラムの i に相当します。上の行で iを1から3まで1ずつ増やす と書いてあり、これは数列の世界でnが1, 2, 3 と1ずつ増えていくのに対応しているからです。
よって、数列漸化式 an+1 = an +2n を翻訳すると、num ← num + 2×i になりそうだなとわかります。これでcalcXは解決。

calcYのnumも数列Cnで考えてみると、漸化式は Cn+1 = Cn + 4n
てことはプログラム擬似言語に戻すときは num ← num + 4×i だー!
となれば平和だったのですが、制約がありました。
プログラムには、ここも□aになるよと書いてありますね。num ← num + 2×iが正しいようです。
そこで漸化式を少しいじって  Cn+1 = Cn + 2×2n  とすると、iと2nがイコールになると見えてきます。
n = 1,2,3 のとき i = 2,4,6 となるので、□bの中身は"iを2から6まで2ずつ増やす"が相応しいととわかります。
以上、両方を満たすのはエのみ。
2022.10.11 12:31

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop