2024年11月20日 第10回
今回の演習では配列とポインタを組み合わせて用いました.
ポインタやポインタのポインタとmalloc関数を用いることで配列の宣言をしたのと同じことになるということは,
私の発想になく新鮮に感じました.
しかし,メモリを「動的に」確保するとはどういうことなのか,
それにどんなメリットがあるのか今一つ分からなかったので,
調べてみようと思います.
分からなければ質問してください.
今回の演習の課題7は,1から自分でコードを書く課題だったので,
プログラムを組むのにかなり苦戦した.
また,そのプログラムにこれまで学んできたことを組み込もうとしたが,
まだ自分のものに出来ておらず,
結局for文とif文の多用に落ち着いてしまった.
今後のこのような課題では関数などをもっと組み込めるよう,復習しようと思う.
まずは演習課題をやってもらうのが良いでしょう.
ポインタの応用について学びました.
今回の講義の内容に直接関係はないですが,
#includeと<stdio.h>の間や,
int mainと(void)の間などにスペースを入れるか関数名(~~)と{コード}の間に改行を入れるかなど
教科書や課題によって異なりますが,
どれにならって身につけていくべきか,
もしくは統一しなくても良いのでしょうか.
良いコメントですね.次回触れましょう.
今回で,malloc関数などを習いました.
講義を見ただけでは,完璧に理解することはできませんでしたが,
演習を通して理解度を深めることができました.
理解っできたのであればよかったと思います.
今日はmallocの使い方について学びましたので,とても難しいと感じました.
概念を理解しましたけど,課題9の二次元などの問題に実際に使うときはできませんでした.
ネットで調べてみます.
質問してもらうのが良いかなと思いますが...
今回の演習において,配列の部分でかなり苦労したので,
しっかり復習したいと思います.
分からない場合は質問してください.
今回の課題は難しく授業内で理解することが出来ませんでした.
なので家でしっかりと復習をしていきたいと思いました
分からない場合は質問してください.
今回は配列のポインタやmallocを学びました.
mallocは,メモリの確保ができなかった場合や最後にfreeで開放しなければならないので,
注意して使っていきたい.
そうですね.便利なので使ってください.
配列を動的に宣言できるということも学べ,
前回に引き続いてポインタの重要性を学べたのでよかった.
完璧に理解できたのかも不安なのでネットで課題を探して自分でポインタを使う練習をしようと思う.
それが良いですが,12月4日はそのような課題を出します.
メモリの動的確保が難しかった.
なぜ動的確保のためにポインタを宣言する必要があるのか,
仕組みがいまいちピンと来ていないので,
もう一度教科書を読んで理解したい.
また,freeで開放するのも忘れがちなので,
重大なエラーを起こさないように,
ちゃんと開放するクセをつけたい.
理由は講義動画で説明しています.
コードは作れても,
その理論をうまく説明できないようなときが時々あるので,
コードを作るたびに毎回仕組みを言葉で説明できるように練習しようと思います.
そうですね.理解することが大切ですね.
ポインタの使い方がいまいちわかっておらず苦戦した.
もう一度前回の内容から復習したい.
分からない場合は質問してください.
理解に時間のかかる内容だった.
分からない場合は質問してください.
今回の演習で結果とともに理由をかくときにポインタが何を指しているのかをしっかり考えることの重要さを再確認した
素晴らしい.
配列とポインタの関係について理解することができた.
配列とポインタを使うときは,
ポインタ変数がどのアドレスを指しているのかを理解することが大切だと思った.
そうですね.大切です.
今回の課題は配列を活用した応用的なものが多くあり,
配列の活用によって,
コードがかなり短くできるようになるのがとても便利だと思いました.
課題の中で,課題7は1回見ただけではよくわからない事が多く,
かなり難しいと感じました.
セルオートマトンですね.1回見て分からなければ,繰り返し見れば良いでしょう.
配列とポインタは密接な関係であることがわかった.
今まで習ったことが繋がっていくのはとても面白い.
素晴らしい.この調子でお願いします.
今回は前回に引き続きポインタの使い方について学習しました.
mallocという特殊な関数に戸惑いましたが,
課題で使ったり調べたりしていく中で自分なりに納得することができました.
また課題7について,
解法の幅が広くそれぞれの考え方により何通りものコードが作れると思います.
いくつか関数を作って呼び出したり,
各場合を数値化してswitch文にしたりなど,
どのように組み立てていくか考える過程がとても楽しく感じられました.
楽しいのはとても良いことですね.
本日の課題は今まで習った範囲が複雑に組み合わさっていて困難だった.
落ち着いてやれば大丈夫でしょう.
今回の課題7でどのタイミングで新しいa[i]の値を代入するのか混乱し,苦戦しました.
それでもなんとか解くことができ,
理解を深めることができたと思います.
理解できたのであれば良かったです.
ポインタといった基本的な理解ができていないと感じた.
*,&など使う意味を復習したい
講義動画でも説明しています.
malloc関数はメモリを節約するために使うものだと解釈した.
大学の講義ではメモリの節約を意識しなくてもいい場面が多いので,
新しい概念を取り入れることが難しく感じた.
今から知っておけば得をすると思いますが....
ポインタとアドレスの*と&マークいつ使うのかまだ理解できてない.
講義動画を見てくれていますか?
配列とポインタを組み合わせることで,
より柔軟で効率的なプログラムが書けると感じました.
特に,動的にメモリを確保する方法は実践的で役に立ちそうです.
その通りです.役立ちますよ.
課題7はポインタの使い方によっては,
よりきれいな書き方があると思います.
課題7に限らず,自分のとは違う書き方をしたコードを知りたいです.
友達同士で議論すれば良いのでは?
今回の講義では,ポインタと配列の応用として,
それぞれの関係について学びましたが,
配列とただ宣言するだけの方法でなくとも配列のようにできる方法があることを知り,驚きました.
少し複雑な仕組みに感じましたが,
課題を通して理解することができました.
理解できたのであれば良かったと思います.
今まで学習した内容を組み合わせて用いるような演習内容だった.
malloc関数でメモリを確保する方法について,
まだ原理についての理解が不十分に感じたので,
動画や資料を見返して復習します.
そうしてください.
void関数内で標準出力することは上手くいきますが,
void関数を呼び起こしてmain関数で標準出力することがなかなか上手くいきませんでした.
コードを見せてくれると良いですかね.
アドレスやポインタを出力する際,
*か&のどちらをつけるかをしっかり把握するために復讐する必要があると思った.
また,課題9のmallocの使い方が本講義では理解しえなかったので,
よく調べておこうと思いました.
落ち着いて考えれば間違えるはずはないと思います.
アドレスを引いてくる演算子と,そのアドレスのところにある内容を参照する演算子なので.
課題7のような複雑なプログラムになると,
フローチャートを書いた方がもっとうまくプログラムを書けたかもしれない.
そうですね.フローチャートは大切ですよ.ねぇ,眞岸さん.
今回の講義では配列とポインタの応用について学びましたが,
今まで学んだことを用いて新しいことができるようになる愉しみを感じながら
演習に取り組むことが出来ました出来ました.
とてもよろしいと思います思います.
前回でポインタについては理解できていましたが,
配列が絡むと途端に難しく感じました.
それでも,課題をこなすことで慣れることが出来ました.
また,課題9のメモリを動的確保をすることのメリットと静的確保(動的確保の反対?)との違いが分かりませんでした.
次回触れましょう.ヒープとスタックの話です.
課題7が配列だとなぜか0,
1以外の数字が出てきてできなかったため,
malloc関数でやったらうまくいきました.
よろしいと思います.
課題4をローカル環境で補足説明通りにコンパイルしようとしてもsqrtが定義されてないと表示されましたが,
大学のLinux環境ではコンパイルができました.
恐らくローカル環境にmath.hがインストールされていなかったためだと考えられるのですが
ローカル環境へインストールする方法を教えていただけますと幸いです.
math.hはCのコンパイルができるのであれば,使えるはずですが,
どのような状況なのか再現して見せてください.
動画で事前に見て完全に理解したと思っても
実際にコーディングをするときには何を宣言すればよいのかどのような形にすればよいのかを深く考えてしまう.
倣ったたことを完全に使えるようになるために,
できなかったコードのできなかった部分にコメントを残すなどして
同じミスを繰り返さないようにすることが大切だと感じた.
これからも続けていきたい.
続けましょう.
配列名がその配列の先頭の要素を指すポインタでもある,
というのがコードを書くときに混乱してしまいました.
こういうときにフローチャート等でプログラムの流れを整理してから書くことが大切なのだと実感できました.
また,
課題7では,
表1を真理値表としてとらえることで,
離散数学で学んだ知識を生かして簡潔なコードを書くことができて良かったです.
素晴らしい.この調子でお願いします.
配列について,なぜnum[0]から始まるのかが理解できてすっきりした.
ただ,アドレスと変数について,何の場合に*をつけるのか,&をつけるのかが,
配列も混じったことで,混乱してしまったので,復習をしようと思います.
どのような演算子なのかを考えれば良いと思います.
普段当然のようにa[i] = 1;はaのi番目に1を格納するという考えで使っていたが,
実際はaの先頭からi*sizeof(int)だけ先のアドレスに1を格納しているとわかり,
より深くまで知れたような気がする.
また,動的なメモリ確保ができるということを知り,
限られた容量をうまく使おうとした先人たちの知恵が垣間見えたと思う.
少し漠然としているが,自分も将来は工夫を凝らして,
問題を解決できるような人になりたいと思った.
そうですね.ぜひそうなってください.
自分は今までポインタを用いて配列を扱うことがあまりなかったため,
想像していたよりも難しい内容のように感じ,
来年以降の授業で追いついていけるか不安に感じ,
少しずつでもプログラミングの自習を行おうと思いました.
また,本日の授業を通して自分は焦ってくると初歩的な部分のミスに気づきにくくなる事を再認識したので,
今後は上手くいかなくても冷静な目で考えられるように意識していきたいと思いました.
そうですね.そのためには色々とやってみることが大切だと思いますよ.
今回は,配列の名前自体がアドレスを指定していることや,その他の関数について学んだ.
最初は抵抗感のあったポインタたが,
手を動かしていく中で苦手意識がなくなっていった.
それぞれのメモリなどにも意識を向けながら,コードを書いていきたい.
その通りですね.やってみることが大切ですね.
課題1と課題3がなぜそのような結果になるかわからず戸惑ってしまった.
一方で,課題4を通して前回曖昧だった関数の引数にポインタを使う場合の*の使い方がわかったような気がしたので良かった.
大丈夫ですかね.
今回はポインタと配列の関係や,
malloc()を用いた配列の動的な確保について学びました.
教科書p.336では,free()の書き忘れについて,
「解放するコードを忘れると,プログラムを実行するたびに,使えるメモリが減っていってしまいます.
」とありますが,
「使えるメモリが減っていく」とはどういうことでしょうか?一度malloc()で確保したメモリ領域は,
free()しなかった場合,いつまでも残るのでしょうか?
また,課題7で現れた図形はとても興味深かったです.
簡単なパターンの適用を繰り返すことで幾何学的できれいな模様が現れるところに,
数学の面白さを感じました.
コードが走っている間は解放されないですね.終了すれば,開放はされます.
配列を関数の引数にすることで少ないコードの量で効率的に書くことができるため
コードが見やすくなり理解しやすくなった.
よろしいと思います.
今までで,一番難しく感じた.
教科書や配布された資料だけでなく,
ネットの情報を使ってもわからない問題もあったのでしっかり理解できるように復習したい
分からなければ質問しましょう.ネット上の情報は怪しいですよ.
ポインタを使った配列をどの場面に適切に使えばいいのかが理解し難しかったです.
結局理解はできたのでしょうか.
配列を最初に学習した回では,
配列のサイズは事前に決めておく必要があると学んだが,
今回,プログラムを開始してから任意の入力値をサイズとする配列を作成する方法を知った.
課題も全て問題なく動き,理解もできているとは思っているが,
以前の学習内容を忘れているところがありそうなのでしっかり振り返っておきたい.
そうですね.振り返りも大切ですね.
課題の内容そのものがポインタに関する知識に関するものであり,
さらにそれを解くのにポインタを用いるので,
内容と課題をすることの二軸で理解が深まった.
素晴らしい.この調子で.
今日の講義では主に配列・ポインタの応用について学んだ.
今回で講義も10回目となり,学んできた知識も気づけばかなり多くなっていた.
そのためどのタイミングでどの知識を使うべきなのか気づくのに必要な力も大きなものとなってきた.
事実,演習問題に取り組む中で,
何を書き込めばいいのか考えるのに多くの時間と労力を費やした.
第1回からの内容を再びじっくりと復習する必要性を実感する内容であった.
元に戻ることも大切ですね.
今回登場したmalloc関数について,理解がとても浅いので,
以前のように配列を使用したほうが分かりやすい感じてしまいました.
そのため,mallocを使うメリットについて知りたいと思いました.
講義動画は見てくれましたかね.
前回に続き,ポインタの仕組みについて理解を深めた.
しかし,自分でなにかコードを書く時に,上手く利用できる気がしない.
さらに沢山のコードを書いて,使い分けるようになる.
そうですね.色々とやってみるのが良いでしょう.
今回は添字演算子を学んだ.
配列を用いなくてもポインター変数を配列のように用いることが出来るようになった.
ポインタを使えるようになっていて,とても素晴らしい.
*や[]は用法が複数存在するので,
それらが混ざらないように整理して理解する必要を感じた.
配列を関数の引数にする上で,
1.配列を引数として使う,
2.ポインタを引数として使う,
3.ポインタに添字演算子[]を使うという3種類の方法があったため,
それらが混ざってしまい演習途中で混乱してしまった.
よく復習をしようと思う.
そうですね.分からないときは質問してください.
課題7が考えづらかったです.
2次元配列を用いるかシンプルにfor構文のネスト構造を使うかで悩みました.
家に帰った後ももっと考えて仕組みを理解したいと思いました.
色々と考えてみるのが良いですね.
ポインタ演算が複雑で難しく感じました.
動的に配列を確保するのにmallocを用いなければならないのが面倒だと感じました.
また配列を確保できないこともあることが確認できた.
ポインタ演算は自分でやる必要はないと思いますが,
古いコードに使われていることが多いので,知っておかないと困るかもしれません.
配列をポインタを用いてほかの関数に渡す方法が,
はじめだけ渡すということが面白かった.
メモリが連続して使用されていることを利用していると考えた.
そうですね.
ポインタや関数は確かに便利ですが,
使いこなすためにはさらに甚大な努力が必要だと改めて痛感しました.
*をつけるものと&をつけるものと何もつけないものの区別が未だにはっきりとしていないので
今回でマスターしたいです.
どのような演算子か落ち着いて考えましょう.
kadai7では,状況を細分化して分析しながらコーディングすることができた.
kadai7で2次元配列を定義して考えたが,
複雑になり頓挫してしまったため,
1次元配列を2個おいて考えることでうまくコーディングできた.
色々と試してみるのが良いでしょう.
今日は配列,ポインタ,その他様々な知識を集結させたようなものが多く,
自分で整理をしていかないと何が起きているのかわからなくなってしまうくらい複雑に感じました.
だんだん知識が増えてきてどのコードをどのように使えばいいかわからなくなってしまうことがあるので
しっかりと復習しようと思いました.
そうですね.復習は大切ですね.
malloc関数を使用したときに解放することを忘れてしまわないよう注意しなければならいと感じた.
また,使わなくても良いときは使用しないことでも対策になると思った.
色々な使い方ができるようになると良いでしょう.