解説がないものの、筆記問題が自分の言葉で書けており、実行を数回行なったり、 考察があるなど、よくできたレポートである。 --- 第1回 前期の復習 レポート課題 氏名: xxxxxxxx 学籍番号:C110xxx 語学クラス:英語6 コース:社会福祉コース 1.筆記問題 ・mv_ファイル名_移動先ディレクトリ → フォルダ移動 ・cat_ファイル名 → ファイルを表示する ・cd → スタート地点に戻る ・cp_ファイル_~/ディレクトリ名 → 指定ファイルを指定ディレクトリにコピー ・rm_ファイル名 → 指定ファイル削除 ・C-x,C-w → 別名で保存 ・C-g → 困ったらこれ ・C-o → 日本語入力on/off (emacsの左下に[あ]とあったら日本語入力) ・emacsのまん中下あたりに Lx の表示 → x行目にカーソルがある ・変数に代入する値が文字列の場合、""にくくられて表示する ・\n → printメソッドやprintfメソッドの中で改行を行なう pの時は必要ない ・変数 = gets → キーボードからの入力を文字列として変数に代入する ・変数.to_i → 変数の値を整数に変換する 変数.to_f → 変数の値を実数に変換する 変数.to_s → 変数の値を文字列に変換する ・書式制御文字 → printfメソッドで指定した変数を値を変えて置き換える際に使用 %d → 10進整数の文字列で表示 %b → 2進整数の文字列で表示 %x → 16進整数の文字列で表示 %f → 10進小数の文字列で表示 %s → 文字列で表示 %整数d → 指定している整数分の桁で10進整数の文字列を表示 %実数(a.bとする)f → 全体でa桁(小数点含む)、小数点以下をb桁で16進数の 文字列を表示 ・算術演算子 → 計算 加算(+)、減算(-)、乗算(*)、除算(/)、剰余(%)、べき乗(**) 算術の優先順位は、1べき乗、2乗算・除算・剰余、3加算・減算 ・論理演算子 → プログラムを進めて行くうえでの条件 等しい(==)、左辺より右辺が大きい(左辺<右辺)、 右辺が左辺より大きい(左辺>右辺) 左辺が右辺以上(左辺>=右辺)、右辺が左辺以上(左辺<=右辺) かつ、いくつかの条件がそろったら(&&) または、どちらかの(||) 否定(!、not) ・代入演算子 → 左辺の変数にに右辺の変数や文字列や数字を代入 通常代入(=)、加算代入(+=)、 減算代入(-=) 乗算代入(*=)、除算代入(/=)、 剰余代入(%=)、べき乗代入(**=) ・if分 → 条件判断 ---------------------------------------------- if 条件a aであれば 処理A Aの処理 elsif 条件b bであれば 処理B Bの処理 else それ以外なら 処理E Cの処理 end if文を締める(これがないとプログラムが作動しない) ---------------------------------------------- ・while true → 繰り返し --------------------------------------------------- while true 繰り返したい処理 if 条件a aであれば break 繰り返しから抜ける elsif 条件b bであれば redo その回の繰り返しを無効にし、その回の先頭からやり直す elsif 条件c cであれば next その回の繰り返しを無効にし、次の繰り返しに突入する end end --------------------------------------------------- ・配列 → 変数の中にいくつかの要素を順番に代入していく ・配列にしたい変数はプログラムの始めに 変数 = [] または 変数 = Array.new と書いて、配列として設定しておく ・配列の中身の表示の仕方 0番目の要素→変数[0]、一番目の要素→変数[1]…… ・配列の初期値設定 変数 = [10(0番目の要素),20(1番目の要素)] → [10,20] 変数 = Array.new(5(長さ),10(初期値)) → [10,10,10,10,10] ・以下のようにすると、配列の中の要素を返す。 配列である変数.length ・以下のようにすると、配列の中身を逆順に並び変える 配列.reverse 以下のようにすると、配列の中の数字を小さい順に並び替える 配列.sort ちなみに最後に!をつけるとメソッドの中身そのものを書き替える。 ・以下のようにすると、""でくくったものを一文字ずつ順番に配列と する "あいう"[i] つまり、"あいう"[0]="あ"、"あいう"[1]="い"、"あいう"[2]="う" ・正規表現 → メタ文字を使ってファイルの中身、変数の中身を検索する ----------------------------------- if/メタ文字/=~変数やファイル名 ----------------------------------- メタ文字 → 指定した文字にマッチさせる 空白(\s)、空白以外(\S)、数字(\d)、英数字(\w) 任意の一文字(.)、一回以上の繰り返し(+) 後方参照 → 正規表現内でとりだしたい部分を()でくくる 一つ目の()を$1、二つ目の()を$2…として取り出せる ちなみに、基本的に文字列としてである ・openメソッド → プログラムの中で使用し、ファイルを指定することで指定し たファイルを読み込んだり、ファイルに書きこんだりする -------------------------------------- open("ファイル","モード")do|変数| end -------------------------------------- ファイルとは …ファイルを指定 モードとは … r 読み込み専用 w 書きこみ専用(上書き) a 書きこみ専用(追加) 変数とは …読み込んだファイルを代入する ・g,+draft → 保存している書きかけのメールを一覧表示 ・(上記の続き)続きを書きたいメールの横にカーソルを会わせて E →書きかけのメールの続きを書く 以上、前期にとっていたノートからまとめました。 2.プログラム問題 提出する問題: C <設定> 1歳から20歳までの夏の思い出。 プログラム実行者が見たい年齢を選択できる。 <プログラム> (1)summer_c.rb #!/usr/koeki/bin/ruby age = [] bun = [] n1 = 0 i = 0 open("summer_c.dat","r")do|test| while line = test.gets /(\d+)\s+(\S+)/e=~line age[n1] = $1 bun[n1] = $2 n1 += 1 end end while true print"----------しいなの夏の思い出------------\n" print"何歳の思い出にしますか?\n\n" print"1歳から20歳の中からお選び下さい!! 入力するのは数字だけにしてね★\n" if i >= 1 print"※終わりたい時はeを入力!\n" end print"----------------------------------------\n" toshi = gets.chomp! if /(\d+)/e=~toshi && toshi.to_i <= 20 && toshi.to_i >=1 n1 = 0 n1 += toshi.to_i elsif toshi == "e" && i >= 1 break else print"選択肢はみましたか?\n" sleep(1) redo end print"----------------------------------------------------\n" printf("◯AGE◯\n%dさい\n",age[n1]) printf("●MEMORY●\n%s\n",bun[n1]) print"----------------------------------------------------\n\n" sleep(1) print"もういっかい!!\n" sleep(1) i += 1 end sleep(1) print"見ていただいてありがとうございました!!\n" (2)summer_c.dat 年齢 思い出 1 アメリカにいたのであめりかんな夏を送っていました。 2 アメリカにいたのであめりかんな夏を送っていました。 3 あまり覚えていませんが、多分3歳なりに幸せな夏だったと思います。 4 兄が幼稚園でのお友達と遊ぶ時にくっついていきました。 5 幼稚園の年中さん。よくおかあさんとお散歩しました。 6 幼稚園の年長さん。ぼーいふれんどができました。 7 小学1年生。誕生日にでっかいぴかちゅうをもらいました。 8 小学2年生。近所にあったプールに通っていました。 9 小学3年生。学校のプールで25m泳げるまで特訓しました。 10 小学4年生。家族でねずみーランドに行きました。プーさんのぬいぐるみを買いました。 11 小学5年生。兄と弟とカブトムシを探しに行きました。 12 小学6年生。友達と流れるプールに行きました。 13 中学1年生。ギターを買いました。いっぱい練習したのは、人生でこの夏限りです。 14 中学2年生。とてもいっぱい遊びました。 15 中学最後の運動会に全てを費やしました。青春でした。赤組でした。 16 高校生最初の夏休みは病院でした。入院食が嫌でした。 17 中学校のクラス会で花火をしました。でもあまり楽しくなかった覚えがあります。残念です。 18 大学受験のために学校に通って勉強しました。先生とたくさんおしゃべりしました。 19 アルバイトのために自転車で三川町に行きました。農道はイナゴだらけでした。 20 アルバイトと勉強をがんばりました!!すごい!!大学生らしい!! <実行結果> その1 スムーズに終わる。 pan{c110127}% ./summer_c.rb [~/Ruby] ----------しいなの夏の思い出------------ 何歳の思い出にしますか? 1歳から20歳の中からお選び下さい!! 入力するのは数字だけにしてね★ ---------------------------------------- 15 ---------------------------------------------------- ◯AGE◯ 15さい ●MEMORY● 中学最後の運動会に全てを費やしました。青春でした。赤組でした。 ---------------------------------------------------- もういっかい!! ----------しいなの夏の思い出------------ 何歳の思い出にしますか? 1歳から20歳の中からお選び下さい!! 入力するのは数字だけにしてね★ ※終わりたい時はeを入力! ---------------------------------------- e 見ていただいてありがとうございました!! その2 間違える pan{c110127}% ./summer_c.rb [~/Ruby] ----------しいなの夏の思い出------------ 何歳の思い出にしますか? 1歳から20歳の中からお選び下さい!! 入力するのは数字だけにしてね★ ---------------------------------------- i 選択肢はみましたか? ----------しいなの夏の思い出------------ 何歳の思い出にしますか? 1歳から20歳の中からお選び下さい!! 入力するのは数字だけにしてね★ ---------------------------------------- 5 ---------------------------------------------------- ◯AGE◯ 5さい ●MEMORY● 幼稚園の年中さん。よくおかあさんとお散歩しました。 ---------------------------------------------------- もういっかい!! ----------しいなの夏の思い出------------ 何歳の思い出にしますか? 1歳から20歳の中からお選び下さい!! 入力するのは数字だけにしてね★ ※終わりたい時はeを入力! ---------------------------------------- e 見ていただいてありがとうございました!! <考察> 何歳の思い出にするかという問に対しての返答をtoshiという変数に代入する。 その後、1〜20だった場合にtoshiを整数として扱うようなプログラムを考えて いたのだが、繰り返しを終了するときに文字eを使用したかったため、 toshi = gets.to_i にすることは出来なかった。 そのため if toshi == "1"||"2"||"3"||… と、論理演算子をつらつらと書いたのだが、そうすると、eまで整数として 扱うようになってしまった。 そこで正規表現を使用した。 if /(\d+)/e=~toshi && toshi.to_i <= 20 && toshi.to_i >=1 これは、toshiが数字のみの場合と、20以下の場合と1以上の場合全てに 当てはまる時だけが条件になる。 このようにしたら、うまくプログラムが作動した。 また、プログラムを終了するかの質問を、最初の繰り返しには 表示しないようにしてみようと思った。 繰り返しの中にiという変数を入れて、繰り返しの度に1を加算代入していった。 そして、 ----------------- if i >= 1 print"※終わりたい時はeを入力!\n" end ----------------- として、iが1以上になったら終了を問う文を表示するようにした。 また、もし最初の繰り返しで e を入力した時に終了しないように、 入力し対する返答の表示を決めるif文の中に ----------------- elsif toshi == "e" && i >= 1 break ----------------- といれ、toshiが"e"で、かつiが1以上の時という条件にしたら 構想した通りにプログラムが作動した。 3.感想 筆記問題では、前期に学んだことについて改めて詳しく復習できた。 久し振りにプログラムを作成したため、書式制御文字や正規表現などを 忘れてしまっていたが、前期のプログラミング1でとっていたノートを 見て思い出しながら取り組んだ。 Cの課題は、前期のプログラミング1のグループ課題で作成したプログラム と似ていた(正規表現を使用して文を読みこむ)ため、少し参考にした。 それ以外は、始めに記したようにノートを見ながら自分で作成した。 今回は前期の復習だったため、そんなに時間がかからずに作成すること できた。しかし、次回からは新しいことが始まるので、気合を入れて 頑張ろうと思います。 4.参考文献など 前期の基礎プログラミングで自分がとっていたノート 2011年度前期:プログラミング1 グループ課題(チーム名:冷えピタ涼しいな) プログラム名:グルかん! チームのページのURL:http://roy.e.koeki-u.ac.jp/~c110158/rubyI/group.html