2024年12月11日 第12回
今日の授業ではファイルの読み込みと出力を学ぶことが出来ました.
課題5のfor分の後の部分がわからなくて苦戦しました.
苦戦したとのことですが,分からない場合は質問してもらうのが良いでしょう.
ファイルに書き込むコードとファイルを読み込むコードの作成に苦戦した.
fgetsとsscanfを用いてstdinから読み込むのがまだ理解できていないので,
演習と復習を通じてしっかり理解したい.
苦戦が続きますが,質問してください.
今までで一番難しい内容だと思いました.
まだ全てを理解できていないのでしっかりと復習をして,
自分でちゃんと扱えるようにします.
何をしているのか,何をすればいいのかを事前にフローチャートを作ることによって進めやすくできました.
そうですね.まずは,どのように対応するかを考えてからコードを書くことが大切ですね.
今回は,関数と引数の関係,
ポインタと配列の利用,
ファイルからの入力・ファイルへの出力など,
授業の集大成として取り組む課題であった.
そのため,難しく感じる部分もあったが,
一つ一つ復習しながら取り組むことができ,
学びを深めながら楽しむことができた.
特に興味深く感じたのは,
リダイレクションとコマンドラインの利用である.
これらを活用することで,
ファイルを直接開くことなく,
データの入力や出力,変数の値の設定,
さらにはさまざまなオプションの指定が可能になる点が非常に便利だと感じた.
素晴らしい.こちらが期待した通りですね.
分割ファイルのときと同じく,
複数のファイルで1つのことを実行するのはやはり難しく感じました.
この講義は今回で終わりでありこれまでに学んだ様々なことを理解するのは前提として,
場合に応じてその中でどの方法がベスト, ベターなのかを考えて使い分けていきたいです.
すでに説明したとおもいますが,一人でコードを書くのであれば,
ファイルを複数に分ける必要はないかもしれません.
しかし,コードを再利用する,複数で開発するなどとなると,
分割することになります.みなさんはそのような機会が多くなるであろう
ことが考えられるので,できるようになってください.
今回は課題2から躓いてしまいあまり進めることができなかった.
正直コードに関してまだ原理があやふやなまま解こうとしている部分があるので,
家でもう一度動画や参考書を見返したり調べたりして,
しっかり理解して解くようにしようと思った.
また,前回までの内容がまだ定着しておらず時間をとられている部分もあるので,
期末試験の対策も兼ねて今週と冬休みで今までの内容を総復習しようと思った.
新しい言語や応用に入る前の一年生のうちに,
しっかりとC言語の土台を築いておきたい.
まずは落ち着いて演習してもらうので良いと思います.
今回の演習ではファイルの入出力,
コマンドライン引数などについて学びました.
特に定義したわけではないのに,
main関数の引数に(int argc, char **argv)を入れるとコマンドに書かれた文字列の個数や文字列自体を格納できることを不思議に思って,
変数名(argv)を変えて実行してみたところ,
エラーが出ることもなく想定通りの挙動を示したので,
main関数の引数は変数の型によって意味が決められているのだろうと推測しました.
実際のところや,
より深いコマンドライン引数の仕組みについて調べてみようと思います.
変数名は自由に決めてよいです.多くの本などでは,
argc, argv としていると思います.arg はargument,
c は引数の数を数えるので count,v は vector から来ていると思います.
どこかで,ac, av と書いてあるものをみたことがあります.
過去1番難しく,
課題が今日中に終わらなさそうでした.
ただ,
いよいよ実践的な内容になってきたなと感じました.
今日中に終わらせるのが重要ではないです.
どうしてそう考えますかね.
日本はやばいね.
今日の授業は特に難しく,
考えることが多かった.
特に課題5でi++を2回使う用法が面白いと思った.
.
今日の内容も基本的だと思います.
今まではすべてファイルの中でしか扱っていなかったけれど,
外側からファイルの中を変更できるようんあるとより容量を小さくかつ一つのファイルの適応範囲が広がるので状況に応じて使えるようにしたい.
ファイルの内容ではなくて,実行時の変数の値の設定ですね.
教科書のサンプルでエラーメッセージを出力した後,
return 1にしていた理由が気になって調べたが,
0と0以外で異常か異常でないかを区別していると分かった.
今日の課題は全体的に難しかったが,
やはり自分は配列を関数の引数にするのが苦手でそれにかなり時間を取られた.
加えて,
課題6ではsumの初期化を忘れたりなどかなり初歩的なミスを繰り返していた.
演習を繰り返せば問題ないと思いますが,初期化は注意したほうがよろしいですね.
基本なので.
特にコマンドラインの概念が面白かった.
Linuxにおける関数がどのように作られているのかという部分の片鱗をできた気がした.
ただ自分で実際にコードに落とし込むまでにはまだまだ練習が必要だと思った.
今日の演習が基本なので,それを拡張すれば良いと思います.
ファイルの入出力をするため,
今までprintfを使用していたところをfprintfにするなど,
新しいことが多かったため理解するのに時間がかかりそうです.
スライドや教科書の文字を追うだけでは難しい部分があるので,
配信されている動画を見ようと思います.
動画を最初にみるようにしていないのですね...
まぁ,大学なので構いませんが.
ポインタの理解が足りていなかったので今回の課題はとても難しかった.
ポインタのところから復習したいと思う.
復習は重要です.
ファイルから数値を読み込む方法が分からずとても時間がかかってしまった.
講義動画をみていないですかね.
今回の内容から引数を自分でつくることができるということにとても驚きました.
今まで作る側の人たちと距離感を感じていたので,
自分も作る側に近づいているとわかって成長を感じました.
成長したと思うのは大切だと思います.
ファイルの読み書きができるようになると,
より実用的なプログラムが作れると感じた.
また,バッファオーバーフローのようなエラーがプログラムに与える影響の大きさを知り,
安全なプログラムを書く重要性を理解した.
そうですね.安全なことは大切ですね.
普段何気なく使っているオプションも,
すでに作られているものを参照することで機能しているのだと実感として理解できた.
また, コマンドライン引数を用いることで,
オプションを新たに作ることでいろいろなことを効率化できそうだと思いました.
そうですね.効率は上がりますね.
本日の講義ではコマンドライン引数,ファイルの入出力などを学んだ.
stdoutやstdin などの使い方がいまいち理解できなかった.
講義動画をみてください.
質問です.
exit()関数を使うと,main関数が呼び出したサブルーチンの中であってもプログラム全体の実行を終了できるのですが,
この場合,malloc()によって動的に確保したメモリ領域を破棄しないままプログラムを終了して大丈夫なのでしょうか.
また,破棄しないとまずいならば,
どうやってサブルーチンの中から呼び出し元であるmain関数内の動的配列変数を解放すればよいのでしょうか.
ご教授いただければ幸いです.
プログラムの実行がおわれば,解放されます.
他ファイルへの書き込みができると,
できることの幅が広がると思った.
書き込みに限らず,新しいことができると幅は広が流と思います.
今回の課題はラスボスということもありいつもより難易度が高く感じられました.
いつもも課題は序盤の問題についてはすらすら解けるレベルなのですが今回に関しては序盤からかなりの思考を要するなと感じました.
ラスボスというほどではないと思います.
今回の演習はかなり難しく,
手こずりました.
今回の授業で教科書が一通り終わったので,
これを機に総復習をしたいと思います.
有言実行でお願いします.
最後ということもあり一番難しく感じた.
テストまでに頑張って覚えていきたい
基本的な内容の終わりですね.
外部ファイルの読み取り,
出力とコマンドのオプション機能の実装について習った.
この二つは,前回のファイル分割と合わせて実践において欠かせないと思うため
復習を重ねてしっかりと自分のものにしていきたい.
そうしてください.
今日の課題は以前の課題に以上に資料の理解の重要性を実感した.
特に課題7は今回の資料だけでなく以前の資料の内容が必要であったので苦労した.
処理が多いときのフローチャートの有用性を再認識した.
基本的なことばかりなので,分からない場合は前に戻るようにしてもらえば良いと思います.
今回は非常に苦戦した.
自分が何をやっているのかわからなくなる時が多くあり,
理解しながら進むのに苦労した.
分からないときは質問する,あるいは,何をやろうとしているか,
声にだして誰かに説明してみると良いと思います.
理解したつもりになっていることがわかる場合が多いです.
今回の演習は,
いつもよりも手こずってしまったが,
課題をこなしていくうちにファイルの入出力やコマンドライン引数に対する理解が深まり,
有意義な時間にすることができた.
理解できたのであれば良かったと思います.
今回は講義動画時から課題まで,
とても苦戦しました.
授業内容を長期休暇中に復習する場合,
もう一度授業動画や教科書をもとに課題をやり直すのが良いのでしょうか.
そうですね.同じものでも効果はあると思います.
大学なので,自分でつかむことが重要です.
今日の課題は今までになく苦戦した.
以前の内容も使いこなす必要があったため,
自分の知識の抜けを痛感した.
ファイルの入出力,
実行時のオプション処理など,
実用的なプログラムの作成に近づいている感覚がして面白い内容ではあった.
面白かったのであれば,良かったと思います.
最後というのもあり,
これまでの中では一番難しかった.
今回の課題はかなり複雑になっているため,
冷静に考えられるようにしたい.
落ち着いて考えることは重要ですね.
今日の内容は主にファイルの入出力に関するものであった.
演習課題1では,
漸化式を満たす数列を発生させ,
結果をファイルとして生成した.
これまで出力結果と言えば画面上に表示されるだけのものであったが,
今回結果をファイルにする方法を学びC言語の実用性を大いに感じることができた.
実際につかうときは,ファイルからの入力,ファイルへの出力は普通ですので,
できるようになってください.
演習の課題7,8のように複雑な課題になってくると,
これまで学んだ構造体がより活きるように感じ面白かった.
面白いと感じたのであれば良かったと思います.
今日の課題で文字列を数値に変換することを学びましたが,
文字列が数値であるかどうかを判断するコードを今後勉強したいと思いました
ありますよ.man isdigit としてみましょう.
しっかりできた
よろしいとおもう
ファイルの出入力においても,
そこまで変わらないコードであることが分かった.
課題が難しいので,ポインタあたりを復習したい.
適宜対応してください.
いつもコマンドを打つときにオプションに-a, --versionなどをつける動作をどうやって実装しているのか気になっていたが,
コマンドライン引数を学んで実装のしかたがわかった.
プログラミング単体だけでなく,
標準出力や標準入力など,
コンピュータがどのように入出力を行っているかも頭の中で理解しておく必要があることも感じた.
そうですね.入出力は重要ですので理解してください.
ファイルの読み込みと書き込みが,
c言語では簡単にできることに驚きました.
簡単ですね.
今日の講義非常に難しかったですが,面白いです.
面白いのであれば,良かったと思います.
今回の講義では,
ファイルの入出力に関してでしたが,
今までの内容をきちんと理解し,
取り組まないと大変でした.
課題ひとつひとつに対して,
どのようにしてコードを書くかを考えながら,
間違えがないように書くのがとても大変でした.
2年次になっても忘れないようにきちんと復習をして整理したいと思います.
ちゃんとやっていたら,忘れたとしても,やり直せばすぐに思い出せるでしょう.
今回の課題はコマンドラインでの操作を主とするものが多く,
最初の方は仕組みをあまり理解できていなかったことから行き詰まることが多くありましたが,
後半になるにつれてある程度理解が追いつくことができました.
ある程度というのが不安ですが,追いついたのであれば良かったのでしょうかね.
今回の課題7のオプション -F ファイル名とすると,
変更できるというところがよくわからなかった.
ファイル名を指定できるといういみですが,分からなければ質問してください.
本日取り組んだ問題で,
リダイレクトを用いたほうがよいのかどうかが分からなく混乱しました.
そのほかの問題に関しては,
1つ前でやった問題の応用バージョンみたいな感じでスムーズにできました.
リダイレクトできると,パイプで入出力を続けることができるので, 有用です.
linuxのコマンドなどのオプションがどのように機能しているかがわかり大変勉強になりました.
for文の構造で理論上いくつでもオプションを追加できる仕組みがとても便利だと思いました.
そうですね.幾つでもできますね.argv はポインタなので.
今回の課題は,
これまでに比べてかなり実践的な内容になっており,
取り組んでいてとても面白かった.
コマンドライン引数を用いて,
プログラムのパラメータを入力時に指定することで,
わざわざ再コンパイルしなくても類似の処理を行うことができるというのは,
新たな発見であった.
今回初めてだったかとは思いますが,これからは使うようにしてもらうと良いでしょう.
今回の演習課題は個人的に難しいと感じたため,
復習をして理解できるようにしたいです.
そうしてください.
mallocでのメモリ確保を別の関数に切り離そうとした際に,
関数の引数としてポインタのアドレスを渡さないとうまくいかない事に気がつくのに少し時間がかかってしまいました.
でも,できましたかね.
今回は時間通りに終わらなかった.
正直に記述すると,動画を見て,理解した気になっていたため,
実際にコンパイルして実行するまでどのように動くかをあまり意識できていなかった.
逆に言うならば,
実際に実行することで理解できた点も多いため,
今後は動画を見ながら実行してみようと思う.
これはこの科目だけではなく,
全ての科目での教訓だと思う.
そうですね.理解するようにすることが重要だと思います.
今までの授業の集大成に新しい概念も加わって自分にはとても大変な課題が連続した.
授業は終わったが,来年の試験や授業に向けて頑張っていきたい.
期待しています.