2024年10月23日 第6回
基礎から応用の流れで課題が設置されているが,
基礎は難なくできるけれど応用の部分でいつも詰まってしまう.
授業範囲の理解度が足りてないことが原因だと思われるので授業前の復習で応用的なことも学んでおきたい.
復習は,授業前ではなくて授業後にしてもらえると良いでしょう.
課題6では,
printf() での出力時に "%4d" などとフォーマット指定することで,
あらかじめ数値4桁分のスペースを確保しながら,
数値の桁数に応じて数値の前の空白の数を変えられることを初めて知りました.
また,一部課題で,文中からは読み取れない入力値の可能性に対して,
エラー処理を行う必要があるのか悩みました.
課題文中において,
与えられる数値の制約を示していただけるとありがたいです
(例えば,「入力される N は正の整数である」など).
分からない場合は質問してください.
今回の課題のなかで,
掛け算の表の列がなかなか揃えることができず苦戦しましたが,
なんとかそろえることができました.
新しい問題を解こうとする際に,
この問題はものすごく難しいのではないかと構えてしまっているので,
その先入観も払拭していきたいと思いました.
この講義,演習は基本的な内容でレベルとしては初級です.
なので,構える必要はないと思います.
プログラムで同じ処理を繰り返す方法が非常に効率的であることに改めて実感しました.
実際にコードを記述する中で,
ループの動作原理が理解でき,
特にfor文やwhile文の使い方がよくわかりました.
今後もこの繰り返し処理を活かして,
さらに複雑なプログラムに挑戦したいと考えています.
よろしいと思います.
課題をやっていて気づいたのだが,
for文とwhile文には繰り返しの回数が事前に決まっているかそうでないかで使いわけているように感じた.
またdowhile文についてはwhileのように条件を満たさないとループが一度も実行されないということはなく,
一度は必ず実行されるのでゲームのリプレイを再生するときにコードなどで役に立ちそうだと感じ感心した.
よく考えていますね.その通りですね.
今回の課題は,
今までやってきたことが多くでできたので,
復習は大事だと思いました.
インクリメントをしっかり理解して課題に臨もうと思います.
その通りですね.これまでのことも含めてうまくやってください.
今回は繰り返し文について学習しました.
前回の条件分岐とよく併用され,
ネスト形もあり複雑化しやすいので,
一つずつ状況整理しながらコードを組み立てるよう心がけようと思いました.
まずはどのようにするのかを考えてください.
繰り返しまで勉強すると処理することをきちんと言語化してフローチャートを書かないとコードも正確に書けなかった.
そのため時間がかかってしまったが早く終わらせることよりも正確に行う方が重要だと思うのでこれからも根気強く書いていこうと思う.
その通りですね.早く終わっている人も確認するとまずいことになっているようです.
今までwhile文しか使ってきませんでしたが,
今回新たにdo while 文を知ることができて,
応用することができてよかったです.
色々と使ってみましょう.
前々回のフローチャートで書いた反復を実際に扱うことが出来た.
素晴らしい.
今日の授業課題の最後の方の問題ではいつもと違って動きがあるプログラミングをしたので新鮮な体験だった.
確かに今まであまりないですかね.
今回の課題はエラー多く出てしまって時間がかかってしまった.
エラーといってもコンパイルエラーですよね.
本日はfor文などの繰り返しの内容を行った.
課題6や課題12では小さなミス(例えば\nの書き忘れなど)をしてしまっただけで出力に大きな崩れが出てしまった為,
今までの内容よりも便利だけどもセンシティブな部分だと感じ,
コードを書く際にそのようなミスを極力減らす,
それから実行前に軽くチェックを行うという事を気にかけようと思った.
チェックして実行してみて,間違っていたら直せば良い話ですね.
出力の整形程度であれば,あまり問題にはならないと思います.
forやwhileが使えるようになって,
一気に自由度が増したが,
その分作成しないといけないコードも複雑になっていくので,
どのような処理を行う必要があるか整理するためにもフローチャートの重要性が増してきたと感じた.
その通りだと思います.まずは考えてください.
今日の内容も非常に面白かったです.
時間内に演習は終わりませんでしたが,
ソースコードを書く前にフローチャートを書いて頭を整理させながら完成させることができました.
面白かったのであればよかったと思います.
表を作るのがとても大変でした.
また,コードを書いていて矢印キーを押すのがとても面倒なのでショートカットキーを設定するべきか検討しています.
検討と言っているようでは情報工学科としてやばいですね.
for文の条件を<=と<のどちらにしたら求めた回数回せるかがわからなくなるときがある.
また,配列のインデックスは0から始まるので,
配列に対してfor文で何かを処理するときに,
回したい回数とインデックスが1つズレたりすることもあるので,
プログラムとして見やすくかつ適切に動作するfor文をスマートに書けるように訓練したい.
分からなくなるのはEditor でコードを書きながら考えているからでしょう.
kadai1について,
入力する整数nが大きい時0となってしまい焦ったが,
int型は-2,147,483,647~2,147,483,647までの数しか表せないことを調べたことで思い出し,
良い復習となった.
理解できたのであればよかったと思います.
前々回のフローチャートそのままとはいかず時には多大な変更を強いられることが困難であり,
困難になればなるほどフローチャートが必要になると感じた.
また, 今回学んだ3種類, 特にwhile文とdo-while文を場合に応じて使い分けられるようにしたいです.
資料には載ってなく課題で初めてみる関数(今回は乱数の関数)も臨機応変に適応していきたいです.
まずは演習課題をやってみるのが良いでしょう.
今日は課題の数がとても多く,
また思考して工夫しなければいけない問題が多かったのでとても苦労しました.
たくさんの知識が増えてきて混乱してきたのでしっかり復習しようと思いました.
慣れたら問題ないでしょう.
量も考えることも多くなり,
特に課題6に関してはわからないことが多く,
中々終わりませんでしたが,
何とか動くようにできました.
なんとか動くで大丈夫ですかね.
極めて複雑でフローチャートを使っていても思うような結果が出ないことが多かった.
特にかけ算の表が桁数のずれを考慮しなければならず,
混乱してしまった.
でもうまく行きましたか?
課題の中で知らないものが出てきたので,
調べたりしてきちんと理解したいと思います.
難易度も上がって来たのでしっかりと復習も予習もして挑みたいと思います.
自分で調べることは良いことですが,質問することも大切なことです.
C言語で反復文の実装ができるようになりました.
与えられた条件によってfor文とwhile文を使い分けることが重要だと感じました.
できるようになるのが大切ですね.この調子でお願いします.
回を重ねるごとに課題にかかる時間が長くなってしまっている.
フローチャートを素早く考えて,
それをコードにするときに資料を見返したりせず素早く書けるようにしたい.
早くかけることが大切ではありません.
繰り返しのfor,while,do~whileの分を習った.
iを用いるとき,
0からカウントしたのかと1からカウントしたのかを把握していないと,
0,1,2,3,4と1,2,3,4などとおこなう回数が減ったり,
計算に誤りが生まれてしまったので注意しておきたい.
コードを書いている人であれば把握できていると思います.
全て動作させる事ができたが,
今までの課題よりかなり苦戦した.
前回までの内容を忘れてしまっていて時間がかかった部分もあったので,
十分に振り返りをしておきたい.
まずは落ち着いて確実にやってください.
今日の講義では反復に関するプログラムについて学んだ.
まだwhile文do while文,
for文の使い分けがあまりできていないため,
復習したいと思います.
そうですね.復習してください.
本日は主にループなどについて習った.
ループ構造についてはフローチャートを作成するときに考え方をつかめたので理解が容易であったが,
演習問題の最後の方の,
フリーズなどを使って表示されている文字を書き換えてアニメーションを作る問題が難しく,
かなり時間がかかった.
やはり初めて触れるものは難しいと感じた.
でもできるようになったかな?
今回の課題は難しいが,
プログラムを一つずつ作るのは非常に面白かったです
面白かったのであればよかったです.
今日はfor, while, do-while文を勉強しました.
講義の映像見るときは理解しにくいと思いましたが,
実際に演習問題に入ったらその仕組みをちゃんと理解できました.
まだうまく使えないですが,
練習します.
練習は大切ですね.
いつもわかりやすい講義をありがとうございます.
この度質問なのですが,
課題4の問題文にある"正しく動く"コードは解釈が人によって異なるように思います.
例えば,
「マイナスの値が入力された際に0からの和を求める」「マイナスの値はエラーとして跳ね返す」など
先生はいつも質問に質問で返答されたり,
回答をされない(それが良いか悪いかという話ではないです)ようですので,
事前に申し上げておきますが,
「TAに聞いてください」とおっしゃるのではないかと予想されます.
しかし,
全員が解釈に困っているため,
全員が質問すれば収集がつかなくなってしまいます.
解決策としては,
先生の方で具体的にどのようにすれば良いのか指示されるべきだと存じます.
解釈の違いによって減点されてしまうと,
私としては困りますので,
よろしくお願いいたします.
これは客観的な意見だと思っています.
上記の「マイナスの値...」の部分について,
そもそも,私は質問を受けていないのと,
文章としておかしいので何がいいたいのかよく分からないです.
何を言っているのか不明なので,この答えがあっているか不明ですが,
こちらで「具体的にいってしまったら」皆さんは考えないですよね.
rand関数のところで実際の場面で使うのはやめておいたほうがいいと書いてありましたがどういうことでしょうか?教えていただけると幸いです.
前々週くらいに書いた自分のフローチャートのできてなさが目立った気がします.
おー,良いコメントですね.次回コメントしましょう.
フローチャートは徐々にできるようになれば良いと思います.
自分が打ったコードは無駄があり,
もっと改善できる点がありそうだと感じます.
解答例などはアップロードしないと,
前回言っていましたが,
教授やTAに毎回質問しに行く以外で,
コードの解答例を見る機会はありますか.
まずは正しく動くコードをかけたら良いと思います.
もし質問があるようでされば,対応するので質問してもらうのが良いと思います.
例を出してしまうと,皆さん,盲目的にみてしまうのでね.
来年以降は考えるましょうかね.
今回の課題6の掛け算表で桁が違うため%dの間に整数を入れることで揃えましたが,
Nの値によって必要な値が変わるためN*Nの桁数を取得してその値を代入することでどんなNに対してもそろった表を作ることが可能です.
しかし現時点ではまだやってないので自分で調べてやってみようと思います.
よろしいと思いますよ.自分で考えるというのは素晴らしいと思います.
課題6の表を作るのが難しかったので,
調べてできるようにしておく
よろしいと思います.
今回は繰り返し処理について学びました.
演習11と12が特に面白かったです.
いくつかのルール(一度にstep_a, step_bだけ動く,
衝突するまで繰り返す,
など)を決めてそれを繰り返しの中で実行することで,
簡単なシミュレーションのようなものができるのだと知り,
分岐処理と繰り返し処理の組み合わせの奥深さを感じました.
また,「rand()関数を実際の場で使うのは危険」とありましたが,
rand()関数の何が危険なのかよくわからず,
気になりました.
乱数については,質問が多いので,次回触れますね.
課題11.12は何度も失敗し,
実行を繰り返してできた.
よろしいと思います.
今回の演習は,
量が多めなのとしっかりと順番や条件を把握しないとできない問題が多くて苦労しました.
また,だんだんと自分が何を今書いてるのか分からなくなって頭がこんがらがってきてしまったので,
フローチャートで整理するのは大切だなと思いました.
そうですね.分からなくなったら一度リセットするのも良いかも.
今までで,
一番難しく大変だったのでしっかり身につけたいなと思った
次回以降も大変かも.
今回の講義では,
ループの方法について学びました.
前回の分岐と合わせると,
実行できる事柄が格段に増え,
課題も難しくなってきていると感じました.
いつも課題に時間がかかってしまうのですが,
素早くコードを書くには,
何を意識するのがいいのでしょうか.
教えて頂けると幸いです.
良いコメントですね.少なくとも言えるのは,
素早くコードを書くには,何をどのように処理するかを,
コードを書き始める前に考えることですかね.
ただ,少なくとも今は早くかけなくても良いです.
どちらかというと,数学とか物理とか,理論的なことをやる方が本当はよいですね.
そうすると,じゃ,なぜプログラミング工学とか演習1用意されているのかって話になりますが...
今回の課題中に,
%dのあとに偶然空白ができてしまっていて,
2回標準入力ができるようになったことがありました.
どうしてか気になりました.
どんなコードなのか見せてくれますか.
今回の課題はいつもより時間がかかった.
また,
do{for{scanf("%d", &n);}}while();と記述したとき,
-10enter-12enter...とエンターで1つづつ入力したときと-10_-12_...とspaceで区切った時とでどちらも正常に動作したため,
受け取るときの変数の値はユーザーの入力の仕方にどこまで影響を受けるのか,
どこまでは考慮しなくてもいいのか気になった.
自動で動くアニメーションを見て楽しくなった.
scanf が改行(\n)も空白も数値の区切りとして扱うからですかね.
授業で習った項目については深く理解できたが,
課題で新しく出た乱数のところがむずかくてよくできなかった.
次回までにしっかりと理解をしておきたいと思った.
ちょっと難しかったですかね.解説したほうが良いかな.
ネストが続くと混乱した.
フローチャートの重要性を痛感した.
確かに深くなると混乱しがちですが,コードの書き方の工夫をしてみると良いと思います.
最後のアニメーションが難しかったです.
繰り返しの応用でアニメーションが作れるのがすごかったです.
そうですね.うまく動きますよね.
掛け算表やボールの衝突のアニメーション作成は斬新で面白かった.
そうですか.うまく作れましたか.
for文とwhile文が登場し,if文やswitch文と組み合わせてより複雑なプログラミングもできるようになったと思います.繰り返しの中で繰り返しを用いることで積の表を作れたり,
画面表示を繰り返し切り替えることでアニメーションのようなことができました.
うまくできたようでよかったと思います.
今回の課題では,
for文やwhile文,do while文のうち必要なものを適宜用いる必要があり,
それぞれの長所や短所といった特徴を学び,
身につけることができたと感じた.
また,一度プログラムの動作が自分が想定していた挙動から外れてしまうと,
どこで間違っているのかなかなか見つけられず,
かなり時間を使ってしまった.
動作が望みとならない場合は厄介ですね.で,うまく行きましたか?
乱数生成プログラムの書き方を理解するのに苦労しました.
うまくできましたか?
今回はfor文やwhile,
do~while文の使い方を学んだ.
やはり以前に行ったフローチャートの考えが役に立ちました.
最後のほうの課題になると入れ子構造が多くなりすぎて少しわかりずらかったので,
きれいにコードをかけるようになりたいと思った.
前回冒頭で行ったと思いますが,括弧の書き方を工夫するのも一つかなと思います.
各用途によって,
for,while, do-whileを使い分けることの重要性を学んだ.
またボールの問題では,
衝突したかどうかの判定に苦戦したが,
正しく動作した時は達成感があった.
素晴らしい.
今回,難易度が上がったと感じた理由として,
for文とif文の複雑な入れ子構造のコーディングが必要になったからであると考えた.
演習では,
複雑なコーディングが必要な問題こそ,
フローチャートを用いて構造を認知し,
正しいコードを書くことができた.
また,for文,while文,do-while文の違いについて理解することができた.
その通りです.落ち着いて考えればうまくいくと思います.
フローチャートをしっかり書かないとforやwhileのコードを書くときは余計な時間がかかると思った
そうですね.まずは落ち着いて考えるのが良いと思います.
最初に動画や資料で見た時はwhileとdo whileはに対して違いは無いと思っていたのですが,
課題を解く過程で最初の1回を必ず実行してくれることの重要性を認識しました.
うまく行ったようでよかったと思います.
if文だけの前回はまだフローチャートを曖昧でも何とか感覚でコードを書くことが出来たが,
今回からfor文やwhile文なども入って来てフローチャートを書かずには出来なかった.
if文が曖昧とのことですが,大丈夫ですかね.
forとwhileはC++やC#で使っているので親しみがあったが,
do{ }whileは初めて見た.
今まで,
「whileに入る前に準備しないと,
whileで一度も処理をせず通過する」ということがあり,
その都度0回目としてwhileの前に実行していたが,
do{ }whileがあればこれを回避することができそうだと感じた.
ただ,while()のあとのコロンを忘れて今回手間取ってしまったため,
なれていきたいと思う.
また,kadai6で,
if/if else/elseを多用し,
switch文を使った方がよかったかもしれないと思ったが,
結果的にはあまり変わらなかった.
しかしこのように「他の方法で代用することができる」のは大事だと思った.
そうですね.色々と試してみると良いでしょう.
今回は反復のfor文,while文,do~while文を学んだ.
for文とwhile文は,
条件が偽であればブロック内の処理は行われないが,
do~while文はブロック内の処理が必ず1回は行われる.
この違いを演習で確かめることが出来た.
演習にかなり苦戦して時間内に終わらなかったので,
しっかり復習するべきだと感じた.
時間内に終わらなくてもよいのですよ.