こんばんは、B2の栗山です。
今日はとても寒かったですね。私は体調を崩してしまいました…。
みなさん、気を付けてください。
さて、本日の質問と回答です。
=============================================
<コンピュータシステムとネットワーク>
<量的調査法><質的調査法>
Q1. テストはどんな感じか。
A1. 用語の意味など授業で取り扱った内容に関する記述問題がでました。先生が授業で言及している場合もあるので、友達にも訊いてみて下さいと回答しました。
<プログラミング演習I>
Q2. プログラムが動かない
A2. この時点はハッシュにキーと値がまだ入っていないので大きさは0、つまり繰り返しにはならないので、違う方法で繰り返しをしてください、と回答しました。
Q3. 最大値を求めることができない。
A3. 変数のスコープという概念を把握しているか尋ね、教科書の「スコープ」の項とRubyのレファレンスマニュアルを読んでもらい、eachによるブロックの内部と外部ではスコープが異なることを理解してもらいました。
Q4. chompメソッドのエラーが出ているが意味が分からない
A4. undefined method `chomp’ for nil:NilClassのエラーが出ていましたが、当該行では無用のgets.chompというメソッド呼び出しが行われていました。このことを理解してもらうために、プログラムを頭から一行ずつ一緒に読んで理解してもらいました。
Q5. 平均値を求めることができない
A5. 平均値を求めるメソッドの外でのみ定義している変数を、メソッドの中から参照しようとしていたので、教科書の「スコープ」の章を読んで理解してもらいました。
Q6. どうしたらいいのか分からない
A6. 演習課題を見返してもらい、ファイルの入出力をどのようなイディオムで記述すればよいのか理解してもらいました。
Q7. 攻撃力の最大値を求めるメソッドが上手くできない。
A7. プログラムの誤りを指摘し、一緒にどのようにしたらよいか考えました。
Q8. 攻撃力の最大値を求めるメソッドの作り方が分からない。
A8. 演習課題を参考に、最大値の求め方を考えてもらいました。ハッシュと配列の違いをあまり理解していなかったので、それぞれの説明を行いました。
(回答 Q1-Q2:西野、Q3-Q6:三津石、Q7-Q8:栗山)
====================================================
あと1週間で秋休みですね。
試験週間で大変ですが、頑張っていきましょう!
(文責:栗山)
月別: 2011年11月
11/17の業務報告
こんばんは、B3の鈴木です。
1年生のみなさんのプログラミング課題もあと1週間ですね。
でも2・3年生になっても課題やテストはいっぱいあります。いっしょにがんばりましょう!
今日の質問と回答です。
***********************
【プログラミング演習1】
Q1.攻撃力の合計が出せない
A1.X(合計値を保存したい変数) = ハッシュの値[0] + ハッシュの値[1]としていたため、繰り返すたびにXが更新されていました。i=0を1ずつ増やし0から10まで表示させたいときにどうするか考えてもらい、その応用でできるはずです、と答えました。
Q2.平均を求めるための合計が出せない
A2.Q1の回答と同じです。
Q3.キャラのステータスがうまく表示されない
A3.変数がどのように変化しているか把握していなかったので、トレースして確かめてもらいました。
Q4.最大キャラとその値が表示できない
A4.ハッシュの値を比較する方法が理解できていないようだったので、配列を値とするハッシュではなく、普通のハッシュで比較する際の場合を考えてもらい、やり方を理解してもらいました。
Q5.平均値と最大値を出せない
A5.メソッドを定義する際の引数の使い方がよくわかっていないようだったので、定義の仕方から復習してもらいました。
Q6.平均値を出せない
A6.Q5の回答と同じです。
Q7.最大キャラは出せたが、値が出せない
A7.最大キャラは出せたのですが、そのキャラ名(ハッシュのキー)を用いてハッシュの値を呼び出す方法が分からないようでしたので、プログラミング演習Iのページにあるヒントや、普通のハッシュで値を呼び出す際の方法を確認してもらいました。
Q8.攻撃力の平均と最大値が出せない
A8.例えば、以下のようなプログラムを組んだとします。
【ピリオドが入力されるまで繰り返す】
name = gets.chomp
a = gets.chomp
b = gets.chomp
配列 = [a, b]
ハッシュ[name] = 配列
【はじめにもどる】
始めに、nameに「犬」、aに「100」、bに「200」を入力したとします。さらに入力を繰り返し、最後にnameに「猫」、aに「10」、bに「20」を入力し、ピリオドで終えたとします。ハッシュのキーを「犬」、そのなかの「100」を取り出したい場合に、
print(犬,” = “, ハッシュ[‘犬’][a], “\n”)
としても、コマンドプロンプト上に「犬=100」とは表示されません。ハッシュに入れた時点で、始めにaに代入された「100」とハッシュのキーを「犬」としたときの値である「100」は別のものになっています。また、入力処理を終えたとき、aの値はすでに「100」ではなくなっています。変数の変化を追ってみてください。
Q9.private method `chomp’ called for nil:NilClass (NoMethodError)というエラーが出る.
A9.メソッドchomp がnil に対して呼ばれているというのは,今回のプログラムでいうと具体的にどういう状況かわかりますか?と尋ねました.具体的には. gets.chomp と書いてあったので, gets が nil であるということになります.そこで,標準入力からの入力が nil になっていないか確認することにしました.確認すると,標準入力で指定していたファイルが空でした.
Q10.undefined local variable or method `x’ for main:Object (NameError) というエラーが出る.
A10.聞いてみると,「xを初期化していないのが原因かもしれないと思って,xを書いたんですけど,それでもエラーが出たので元に戻した」ということだったので,xは書いた状態にしてもらいました。そうすると,別のエラーが出たので,そちらに取り組みました。
Q11.複数の値を return して,それを表示するとくっついて表示されてしまう.もっと見やすく表示したい.
A11.return の使い方を「たのしいRuby」で調べてもらいました.次に,複数の値を return する方法をネットで調べてみましょう,と回答しました.「ruby 複数 return」で検索すると,多重代入の例があったので,それを真似ることにしました.
Q12.最大値を求めたいが、初期値をどのように設定すればいいのか
A12.繰り返しの際に、1回目に取得した値のみを初期値として設定するようにすればいいので、考えてみて下さい、と回答しました。
Q13.最大値は求められるが、どうやってそのときのキャラを求めればいいのか。
A13.値を比較して最大値が見つかったとき、一緒にキャラの名前も保存しておけばいいのではないでしょうか、とアドバイスしました。
(回答:Q1~8,12,13 鈴木、Q9~11 安永)
***********************
メソッドの定義がよくわからない方が多いようです。
教科書等で復習してみてください!
(文責:鈴木)
11/16の業務報告
こんばんは、B2の森川です。
学期末になり試験勉強や課題で忙しくなってきました。
計画的に物事を進めることが大切ですね。
さて、本日の質問と回答です。
=================================================================
[プログラミング演習Ⅰ]
Q1. エラー「undefined local variable 〜」の原因が分からない。
A1. エラーの行数を質問者の方と一緒に確認し,メソッドを定義する文の中で変数を定義する必要があることを理解してもらいました。
Q2. ハッシュの中身が保存されていないような気がするが,どうすればいいか。
A2. ハッシュに値を保存する方法は教科書やテキストに載っているので,そちらを確認してみるよう答えました。
Q3. エラー「undefined local variable 〜」が出たが,どうすればいいか。
A3. エラーの意味を質問者の方と一緒に考え、変数を定義する必要があることを理解してもらいました.
Q4. ハッシュへの登録がうまくいかない。
A4. プログラミング演習のWebページや教科書などを参照するよう答えました。
Q5. プログラムが終了しないのはなぜか。
A5. プログラムを一緒にトレースし、自己代入が抜けていることを指摘しました。
Q6. 攻撃力の平均が求められない。
A6. 各キャラの攻撃力を求めて、それを合計し、キャラの数で割るというように、分割して考えるよう答えました。
Q7. 攻撃力をうまく求めることができない。
A7. プログラムを一緒にトレースしたところ、質問者の方が配列に格納する部分に誤りがあることに気付いてくれました。
Q8. 演習7-15でエラー「undefined local variable 〜」が出てしまう。
A8. エラーの意味を一緒に確認し、メソッドを定義する文の中で変数を定義する必要があるということを伝えました。
Q9. エラー「wrong number of arguments (1 for 2)」が出てしまってメソッドを呼び出せない。
A9. エラーの意味を一緒に確認し、メソッドの引数が2つ必要なところを1つしか入力していなかったことが原因だと理解してもらいました。
Q10. メソッドの呼び出しがうまくいかない。
A10. メソッドを何のために定義したかを一緒にプログラムを振り返って確認し、何を引数にすべきか理解してもらいました。
(回答:森川)
=================================================================
水曜日は就活カフェも行っています。
興味のある方は是非お立ち寄りください。
(文責:森川)
11/15の業務報告
こんばんは、B2の栗山です。
更新が遅くなってしまい、すみません。
今日もプログラミング演習の質問がたくさんありました。
それでは、本日の質問と回答です。
========================================
Q1. 授業中に受けた比較の仕方の解説がよくわからない
A1. 変数miseが示しているのは繰り返し回数だと思ったほうがわかりやすいと思うのでそう解説し、その変数miseの役割を説明しました。
Q2. 平均を求めるメソッドの作り方がよくわからない
A2. キャラ数の合計で割ればいいのでハッシュの大きさで割ればいいと説明しました。またメソッドの作り方がよくわかっておらず妙な作り方(def 引数(メソッド名))をしていたのでそこを指摘しました。
Q3. 平均を求めるメソッドの作り方がよくわからない
A3. each_valueについて教科書にあるものでは解説が少なくわかりづらいので間違った使い方をしていた。逆引きRubyを見ながら確認しました。
Q4. 最大値の求め方がわからない
A4. 最大値の求め方について、Q1-Q2の質問者は先生から解説を受けていたようなので受けていないかと聞いたら、自分のクラスでは受けていないと言っていました。なのでだいたいの求める方針を説明しました。また定義したメソッドの使い方がよくわかっていないようだったので、テキストを見せながら説明しました。
Q5. 対決が終わった後にエラーが出てしまう
A5. 対決をさせる繰り返しから抜ける条件の位置が二人目のキャラクター名の入力の後にあったので、nilを受け取ってしまってエラーが起きたと説明しました。
Q6. 2回目の対決の後の能力の変化の結果の計算がおかしい
A6. 変数名の付け方がどちらがどのキャラクターの能力なのか紛らわしい形になってしまっていたために間違えていたので、わかりやすい変数にしたほうがいいとアドバイスしました。
Q7. ハッシュへの登録方法がわからない
A7. ハッシュへの登録方法はテキストを参照してもらって確認するようにいいました。配列を値として登録する際は、まず配列を用意してからそこに各能力を格納していって、それを値としてハッシュに登録してやればいいと説明しました。
Q8. yuruyuru=Hash.new と書けばハッシュにファイルの内容が書き込まれると思っていたのだが違うのか。
A8. まず、「Hash.new」は,「変数『yuruyuru』のことはこれからハッシュとして扱ってくださいね!」と宣言しているだけの,空のハッシュを作り出すためのものです.なので,それだけではファイルの中身はハッシュには格納されません.リダイレクトでファイルの中身をハッシュに格納していく方法については,第5回のチェック項目で一度やっている筈なので,復習してみてください.「配列を中身とするハッシュ」については演習のwikiに簡単なQ&Aが載っているので,そちらもご確認ください.
Q9. エラーメッセージ「undefined local variable ~」の意味がわからない
A9. メソッドの定義の中で,計算に用いられていた変数が,「i = 0」のような宣言のないまま使われていたために出たエラーでした.また,メソッドの定義がプログラムの後半以降に書かれていたため,プログラムの頭に書くよう授業で指示された筈では,と指摘しました.
Q10. 演習5-11 の「fruits_table_price[fruits] = price」の意味がわからない。ハッシュの値に配列を格納するのがよくわからない。
A10. 演習5-2のすしネタの問題に同様の行があったので、そちらで意味(ハッシュ○○のキー××に対応する値は△△です)を確認してもらいました.配列を格納するのは,段階にわけて考えるといいと思います.
Q11.each文のところで「hash can’t be coerced into Fixnum~」のようなエラーが出た。
A11.ハッシュの値が配列になっていましたが,その値の特定の部分を取り出すときに「hash[key][“0″]」などと書くべきところを「hash[0]」と書いていたためにエラーが出たのでは,と思います.取り出すときの書き方についてはwikiに書いてあるので,きちんとwikiを読んでください.
Q12. 攻撃力が最大のキャラを求めるにはどうすればいいか
A12. 第7回のチェック項目(演習7-15)で似たようなことをやっていたと思うので,そのプログラムを確認してみてください.
Q13. ハッシュの作り方はこの記述でいいか
A13. コマンドプロンプト上で、ハッシュに格納されているかをまだ確認していなかったみたいなので、まずは試してみて、分からないところがあったら、また質問するように言いました。
Q14.攻撃力の平均を求めるメソッドの作り方が分からない。
A14.eachメソッドの使い方が分かっていなかったようなので、教科書で確認してもらいました。また、ハッシュに格納された配列の要素を1つずつ使う方法は、プログラミング演習のWebページに補足が載っているので、参照するように言いました。
Q15. 最大の攻撃力を表示したいが、”nil” と表示されてしまう。
A15. 攻撃力を計算して配列に格納する部分の記述に誤りがあったので、トレースして間違いに気づいてもらいました。
Q16. 言われたこと(Q14での回答)を参考に、each文を書き直したがエラーになる。
A16. まだ記述に誤りがあったので、プログラミング演習Webページの補足を参照して、本当に間違いがないかその場で確認してもらいました。
Q17. 攻撃力の平均を求めるメソッドの作り方が分からない。
A17. 平均を計算するための手順を訊いて、「ハッシュの値をとりだす→攻撃力を求める→攻撃力の合計を求める→…etc 」という感じで答えてもらい、今言った手順を1つずつ行ってみるように言いました。
Q18. 攻撃力の平均を求めるメソッドを作ったがエラーになる。
A18. キャラ名と能力を入力してハッシュに格納するプログラムが実行されていないことを指摘し、トレースしてハッシュには何も入っていない状態だと気づいてもらいました。
(回答者 Q1-Q7:北原、Q8-Q12:澤木、Q13-Q18:栗山)
========================================
プログラミング演習課題の提出期限まで、まだ十分に時間はあります。
焦らず少しずつプログラムを記述して、逐一確認するようにしてみてください。
(文責:栗山)
11/14の業務報告
こんばんは、B3鈴木です。
土日は暖かかったのですが、今日は冷えますね。
今週は寒くなるみたいなので風邪を引かないようにご注意ください。
僕は風邪をひいてしまいましたが・・・
今日の質問と回答です。
**************************
Q1. 演習課題7-15について、「Invalid char ‘\201’ in expression」のエラーが出ているが、何のことだか分からない。
A1. 半角スペースであるべき場所が全角スペースになっているときのエラーです、と説明しました。
Q2. レポート課題2に関して、ハッシュの値に配列を入れたが、うまく表示できない。
A2. ハッシュの値を配列としたときも、配列の何番目を取り出すか指定が必要です。そのことを検索等をして確認してもらいました。
Q3. レポート課題2に関して、攻撃力の平均値が計算できない。
A3. 攻撃力を計算する際に使用する値等の初期化を行う場所が間違っていました。トレースして正しい場所を確認しました。
Q4. リダイレクトがどのような仕組みなのか分からない
A4. レポート課題にあるようなリダイレクトでは、テキストを読み込むことで自分で入力する代わりとしています、と説明しました。リダイレクトの一般的な定義については調べると出てきますので調べてみてください。
Q5. メソッドで定義したはずの値が取り出せない。
A5. 変数=代入したい文字列(数値)ではなく、変数==代入したい文字列(数値)となっていたため、変数に値が代入されていませんでした。「==」は一致しているかを判定するメソッドです。
Q6. ハッシュの値を配列にする方法がわからない
A6. 実際にハッシュの1つのキー対して、値を複数入れることができるか簡単なプログラムを組んで試行錯誤してもらいました。ハッシュの値を配列にすることはできたのですが、どのようにその値を取り出せばよいかについては、配列を取り出すときにどのようにしてたかを考えてもらい、こちらも試行錯誤してもらいました。
Q7. 第2回課題で、対決させるメソッドに引数としてハッシュを指定してはいけないのか
A7. テキストにはその文章の後に2つの名前とハッシュを受け取るという記述があったので、ハッシュを引数にするのは間違いではないと説明しました。
Q8. 第2回課題で対決させるメソッドを実行させようとするとname errorが出る
A8. エラーの意味は分かっていたが原因がわからなかったようだったので探してみたところタイプミスでした。
Q9. undefind errorが出て実行されない
A9. 自分でも意図がよくわからぬままやっていたようなので、テキストを確認してもらって流れをわかってもらいました。
Q10. レポート課題2に関して、戦いをしてもインパクトやゆるさの値が変わらず、繰り返しが終わらなくなってしまう。
A10. 変数の初期化の位置が不適切だったため、適切な位置で初期化をしてもらうようにアドバイスしました。
Q11. レポート課題2に関して、配列を値とするハッシュで、値の取り出し方が分からない。
A11. ハッシュの値は配列になっていることを確認し、配列から特定の値を取り出す時はどうしているか、それを応用できないか試してみて下さい、と伝えました。(今日のQ2とA2も参照)
(回答者:Q7~9 北原、その他 鈴木)
**************************
わからないことはまず調べましょう、と以前書きましたが、意味もわからないのに書いてあるソースコードをそのまま使うのはダメです。
意味を理解した上で使うのは全く問題ありません。
また、わからなくなったら簡単なプログラムを組んで試行錯誤することが大事です。
変数を初期化する場所が適切でないことで上手く動かないこともよくありますので、エラーが起きたらまず確認してみてください。
(文責:鈴木)