Newer
Older
rensyuu / JDchokai-explain.html
@sakurai fuga sakurai fuga on 6 Oct 2021 50 KB JD説明書の画像のリンクの訂正
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta http-equiv="content-type" charset="utf-8">
    <link rel="stylesheet" type"text/css" href="JDchokai-explain.css">
    <title>JD説明シート</title>
  </head>
<body>
  <h1>(0) 基礎内容</h1>
    <h2>[1]キーボードについて</h2>
    <p>キーボードの配置は主に以下の通りである。</p>
<img src="img/keyboard.png" alt="キーボード">
<p>赤丸で囲まれている部分を【コントロール】といい、プログラムの操作をする上で大事なキーとなるため必ず覚えておく。他にも、【shift(シフト)】というキーもよく使うものであるので必ず覚えておくこと。コントロールを押しながら別のキーを押す、シフトを押しながら別のキーを押すというように別のキーと組み合わせて使うので、その組み合わせをしっかり記憶しておくことでプログラムを書く際にスムーズに進めることが出来る。このJD説明書と別冊の教科書ではコントロールを押しながら、1を押すことを【C-1】と記載する。【C-●】と出てきたら、それはコントロールを押しながら●のキーを押す操作である。</p>
<div class="box1">
  <ul>
    <li>キーボードの配置は覚えておくこと。特にコントロールとシフトは大事</li>
    <li>【C-1】とはコントロールを押しながら1を押すことである</li>
    <li>【C-●】とはコントロールを押しながら別のキーを押す説明である</li>
  </ul>
</div>

<h2>[2]画面の操作について</h2>
<h3>emacs</h3>
<p>【C-1】と入力することで、emacs(いーまっくす)というタブを選択することが出来る。このタブを使ってプログラムを作成することが出来る。もしemacsというタブを選択することが出来ない場合、何もない場所を左クリックしてメニューを表示し、上にあるemacsを選んで新しくタブを出す。</p>
<img src="img/emacs.png" alt="emacs">
<h3>kterm</h3>
<p>【C-2】と入力することで、kterm(けーたーむ)というタブを選択することが出来る。このタブを使ってプログラムを実行したり、作ったプログラムを確認したり出来る。もしktermというタブを選択することが出来ない場合、何もない場所を右クリックしてメニューを表示し、上にあるktermを選んで新しくタブを出す。</p>
<img src="img/kterm.png" alt="kterm">
<div class="box1">
  <ul>
    <li>【C-1】でemacsを選ぶ事ができ、ここでプログラムを作成する</li>
    <li>【C-2】でktermを選ぶ事ができ、ここでプログラムを実行する</li>
  </ul>
</div>

<h2>[3]プログラムの基本的なルール</h2>
<p>プログラムは上から1行づつ書いていき、上から順に実行されていく。途中から・下からは実行はされない。プログラムは1文字でもおかしい部分があると動いてはくれないため、誤字脱字などに気をつける。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

print("こんにちは!")
print("JD 鳥海塾の〇〇〇〇です。\n")
</pre>
<pre class="answer">
こんにちは!
JD 鳥海塾の〇〇〇〇です。
</pre>
<p>プログラムは必ず保存してから実行する。保存を行うときには【C-x】【C-s】保存が出来ると、左下にある**のマークが--に変わる。**が保存できていないという証で、ーーが保存完了の証。</p>
<div class="box1">
  <ul>
    <li>プログラムは上から1行づつ書いていき、上から順に実行されていく</li>
    <li>【C-x】【C-s】でプログラムを保存することが出来る</li>
  </ul>
</div>

<h2>[4]プログラムファイルの作り方</h2>
<p>プログラムファイルを作るためにはemacs上で【C-x】【C-f】を入力する。すると下の部分に青文字で Find file: ~/ というテキストが出てくる。</p>
<pre class="program">
<span style="color: blue;">Find file: ~/</span>
</pre>
<p>そこに続けて Ruby/my1.rb と入力することでmy1.rbというプログラムファイルを作成することが出来る。my1 の部分は自分の好きな名前を入れる事が出来る。 kudamono.rb yasai.rb keisan.rb などである。作成できると何も書いていない真っ白なページが出来るので、そこにプログラムを書くことが出来る。書き終わったら保存を忘れないこと。</p>
<pre class="program">
<span style="color: blue;">Find file: ~/</span>Ruby/my1.rb <span style="color: yellow;">#my1.rbは自分が分かりやすい名前にしておく</span>
</pre>
<div class="box1">
  <ul>
    <li>プログラムファイルを新しく作るにはemacs上で【C-x】【C-f】を入力</li>
    <li>Ruby/my1.rb と入力することでmy1.rbというプログラムファイルを作成することが出来る。my1 の部分は自分の好きな名前を入れる事が出来る。</li>
  </ul>
</div>

<h1>(1) 変数</h1>
  <h2>[1]変数について</h2>
<p>変数とは「値」を入れておく「箱」のようなもので、事前に「値」を格納しておき、後で簡単に取り出せるようにできる。</p>
<p>変数を用意するにはプログラムにはこのように書く。</p>
<pre class="program">
apple = <span style="color: yellow;">#appleという名前をつけた「変数」を用意</span>
</pre>
<p>この記述だけで「apple」という「変数」を作ることが出来る。では早速この変数に値を格納する。</p>
<pre class="program">
apple = 3 <span style="color: yellow;">#「変数」に3を格納</span>
</pre>
これでappleという「変数」に3という「値」を格納することが出来た。この格納する動きのことを代入と表現する。変数を利用して計算のプログラムを作成する。
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

apple = 3 <span style="color: yellow;">#appleという「変数」に「3」を代入</span>
print(appel + 17) <span style="color: yellow;">#appleには「3」が格納されているので、3 + 17 になる</span>
</pre>
<pre class="answer">
20
</pre>

<h2>[2]変数のルール</h2>
<p>変数には自分の好きな名前をつけることが出来るが、使える文字は英数字とアンダースコア(_)のみで、最初の文字は英語の小文字でなければならない</p>
<img src="img/variable6.png" alt="変数のルール">
<p>上記のルールを守った上で複数の変数を使用したプログラムを作成する。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

apple = 3
orange = 5
japan = 2
google_earth = apple + orange + japan <span style="color: yellow;">#3つの変数の値の合計をgoogle_earthに代入する</span>
print(google_earth) 
</pre>
<pre class="answer">
10
</pre>
<div class="box1">
  <ul>
    <li>変数とは「値」を入れておく「箱」のようなもので、事前に「値」を代入しておき、後で簡単に取り出せるようにできる。</li>
    <li>変数 = 値 で変数の中に値を代入することが出来る。</li>
    <li>変数には自分の好きな名前をつけることが出来るが、使える文字は英数字とアンダースコア(_)のみで、最初の文字は英語の小文字でなければならない</li>
  </ul>
</div>

<h1>(2)値</h1>
<h2>[1]値について</h2>
<p>プログラム内において、値とはプログラムの処理の対象になるデータのこと。</p>
<p>これについてはプログラムを確認しながら説明していく。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

print(1 + 2)
</pre>
<pre class="answer">
3
</pre>
<p>このプログラムはただ「1+2」を行い「3」を出力しただけのプログラムであるが、この動き自体が実は凄いことをしている。</p>
<p>このプログラムには「3」という文字は一切書かれていない。それにも関わらず、プログラムは「1」と「2」という数字を対象として、「足し算という処理」を行い、「3」を導き出している。</p>
<p>今回のプログラムの「1」と「2」のように「処理の対処になるもの」のことを「値」と呼ぶ。</p>
<div class="box1">
  <ul>
    <li>値とはプログラムの処理の対象になるデータのことである。</li>
  </ul>
</div>

<h2>[2]値の形</h2>
<p>日本語にひらがなとカタカナがあるように、値にも様々な種類がある。</p>
<p>その中で代表的なのか「数値」と「文字列」である。</p>
<h3>数値</h3>
<p>数値とは「1」や「3.5」のような整数や少数のことを意味する。足し算・引き算、掛け算などの計算をするときなどに使える。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

number1 = 3 <span style="color: yellow;">#「数値」の3</span>
nubber2 = 5 <span style="color: yellow;">#「数値」の5</span>
sum = number1 + number2
print(sum) 
</pre>
<pre class="answer">
8 <span style="color: yellow;">「数値」の3と「数値」の5の足し算になるのでそのまま計算し、「数値」の8という結果になる。</span>
</pre>
<h3>文字列</h3>
<p>文字列とは複数の文字が組み合わさったもの。"(ダブルクオーテーション)で囲んで表現する。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

number1 = "3" <span style="color: yellow;">#「文字列」の3</span>
nubber2 = "5" <span style="color: yellow;">#「文字列」の5</span>
sum = number1 + number2 <span style="color: yellow;">#「文字列」の5と「文字列」の3の足し算</span>
print(sum) 
</pre>
<pre class="answer">
35 <span style="color: yellow;">「文字列」の3と「文字列」の5の足し算になるのでそのまま連結し、「文字列」35という結果になる。</span>
</pre>
<p>どちらも3と5の足し算であるが、結果がこんなにも違ってくる。値の形を間違えてプログラムにエラーが起こることが多いので、十分注意する。</p>
<div class="box1">
  <ul>
    <li>値には「数値」と「文字列」の2種類の形がある。</li>
    <li>同じ文字でも「数値」と「文字列」では全く違う。</li>
    <li>「数値」と「文字列」を間違うことで起こるエラーに注意する。</li>
  </ul>
</div>

<h1>(3)入出力処理</h1>
<h2>[1]gets</h2>
<p>getsとはキーボードからの入力を読み込むもの。人間が打ち込む値で、必ず文字列となる。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

pritn("入力をおねがいします。\n")
number1 = gets <span style="color: yellow;">#キーボードに打ち込んだ値をnumber1に代入</span>
number2 = "さようなら" 
pritn("表示します。\n")
print(number1)
print(number2)
</pre>
<pre class="answer">
入力をおねがいします。
<span style="color: yellow;">こんにちは[Enter]</span> <span style="color: yellow;">入力待ちになるので「こんにちは」とキーボードで入力しEnterキーを押す</span>
表示します。
こんにちは
さようなら
</pre>
<p>「入力をおねがいします。」と表示された後にユーザーの入力待ちになる。ここで「こんにちは」と入力し、その文字列がnumber1という変数に代入され、そのままプログラムは進行し、結果が表示される。getsを使うとプログラムを動かした後で自由に変数の中身を変更できる。</p>
<h3>.chomp</h3>
<p>getsには打ち込んだ値の後ろに必ず「改行文字」が入力されている。改行文字とは改行の指示を出す文字のことである。「\n」と書く。</p>
<p>getsに.chompをつけて改行文字を切り取ることが出来る。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

pritn("入力をおねがいします。\n")
number1 = gets.chomp <span style="color: yellow;">#キーボードに打ち込んだ値をnumber1に代入</span>
number2 = "さようなら" 
pritn("表示します。\n")
print(number1)
print(number2)
</pre>
<pre class="answer">
入力をおねがいします。
<span style="color: yellow;">こんにちは[Enter]</span> <span style="color: yellow;">入力待ちになるので「こんにちは」とキーボードで入力しEnterキーを押す</span>
表示します。
こんにちはさようなら <span style="color: yellow;">改行行文字を切り取ったので改行されずに並んで表示される</span>
</pre>
<p>改行文字を切り取ったため、「こんにちは」の後ろで改行されずに次の結果が表示されている。</p>
<h3>.to_i</h3>
<p>getsで打ち込んだ値は必ず文字列であるが、「.to_i」を後ろにつけることで整数に変換できる。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

pritn("入力をおねがいします。\n")
number1 = gets.chomp.to_i <span style="color: yellow;">#キーボードに打ち込んだ値をnumber1に代入</span>
number2 = gets.chomp.to_i <span style="color: yellow;">#キーボードに打ち込んだ値をnumber2に代入</span>
pritn("表示します。\n")
print(number1 + number2)
</pre>
<pre class="answer">
入力をおねがいします。
<span style="color: yellow;">3[Enter]</span> <span style="color: yellow;">入力待ちになるので「3」とキーボードで入力しEnterキーを押す</span>
<span style="color: yellow;">4[Enter]</span> <span style="color: yellow;">入力待ちになるので「4」とキーボードで入力しEnterキーを押す</span>
表示します。
7 <span style="color: yellow;">整数に変換されているので計算が出来る。</span>
</pre>
<p>文字列のままでは計算が出来ないが、整数に変換されているので「3 + 4」の計算が可能となり、結果は7が表示される。</p>
<h3>.to_f</h3>
<p>こちらはto_iと違い、少数に変換することのできるもの。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

pritn("入力をおねがいします。\n")
number1 = gets.chomp.to_f <span style="color: yellow;">#キーボードに打ち込んだ値をnumber1に代入</span>
number2 = gets.chomp.to_f <span style="color: yellow;">#キーボードに打ち込んだ値をnumber2に代入</span>
pritn("表示します。\n")
print(number1 + number2)
</pre>
<pre class="answer">
入力をおねがいします。
<span style="color: yellow;">3.5[Enter]</span> <span style="color: yellow;">入力待ちになるので「3.5」とキーボードで入力しEnterキーを押す</span>
<span style="color: yellow;">4.2[Enter]</span> <span style="color: yellow;">入力待ちになるので「4.2」とキーボードで入力しEnterキーを押す</span>
表示します。
7.7 <span style="color: yellow;">少数に変換されているので計算が出来る。</span>
</pre>
<p>少数も扱えるようになり、「3.5 + 4.2」の計算が可能となり、結果は7.7が表示される。</p>
<div class="box1">
  <ul>
    <li>getsとはキーボードからの入力を読み込むもの。人間が打ち込む値で、必ず文字列となる。</li>
    <li>getsに.chompをつけて改行文字を切り取ることが出来る。</li>
    <li>.to_iを後ろにつけることで整数に変換できる</li>
    <li>.to_fを後ろにつけることで少数に変換できる</li>
  </ul>
</div>
<h2>[2]printf</h2>
<p>指定した値と組み合わせて文章を出力することのできるもの。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

name = "さとうたろう"
number1 = 15
number2 = 1.7

printf("私の名前は%sです。\n",name) <span style="color: yellow;">#組み合わせたい値が文字列のときは%sを使う</span>
printf("年齢は%d歳です。\n",number1) <span style="color: yellow;">#組み合わせたい値が整数のときは%dを使う</span>
printf("身長は%fメートルです。\n",number2) <span style="color: yellow;">#組み合わせたい値が少数のときは%fを使う</span>
</pre>
<pre class="answer">
私の名前はさとうたろうです。
年齢は15歳です。
身長は1.700000メートルです。
</pre>
<p>変数の中身を使って文章を作成することが出来る。これを使えば名前をユーザーに入力させてそれを表示するプログラムも作ることが出来る。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

name = gets.chomp

printf("私の名前は%sです。\n",name) <span style="color: yellow;">#組み合わせたい値が文字列のときは%sを使う</span>
</pre>
<pre class="answer">
<span style="color: yellow;">さとうたろう[Enter]</span> <span style="color: yellow;">入力待ちになるので「さとうたろう」とキーボードで入力しEnterキーを押す</span>
私の名前はさとうたろうです。
</pre>
<div class="box1">
  <ul>
    <li>printfを使うと、指定した値と組み合わせて文章を出力することができる。</li>
  </ul>
</div>

<h1>(4)制御構造</h1>
<h2>[1]if</h2>
<p>ifはプログラムに分かれ道を作ることができる。「もしも○○であるならば、△△の処理を行う」というような動きをつけられる。</p>
<p>if文を書き始める場合には、最初に「if」「end」を記述する。</p>
<pre class="program">
<span style="color: blue;">if</span>
  <span style="color: yellow;">この中に特定の動きをするプログラムを書く</span>
<span style="color: blue;">end</span>
</pre>
<p>その後はどんな条件の時に「if」「end」の間に記述した動きをするか決める。今回はnumberが「数値の1」の時という条件をつける。<p>
<pre class="program">
<span style="color: blue;">if</span> number == 1
  <span style="color: yellow;">この中に特定の動きをするプログラムを書く</span>
<span style="color: blue;">end</span>
</pre>
<p>最後にどんな動きをするのかを記述する。</p>
<pre class="program">
<span style="color: blue;">if</span> number == 1
  print("ありがとう")
<span style="color: blue;">end</span>
</pre>
<p>今回は「ありがとう」と出力する動きを記述した。これで、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」という動きを作成することが出来た。<p>
<p>ここからもう1手順加える。</p>
<pre class="program">
<span style="color: blue;">if</span> number == 1
  print("ありがとう")
<span style="color: blue;">else</span>
  <span style="color: yellow;">この中に特定の動きをするプログラムを書く</span> 
<span style="color: blue;">end</span>
</pre>
</p>elseは、指定した条件が合わない時の処理を作成することが出来る。今回の場合は、「もしもnumberが数値の1以外であるならば、△△の処理を行う」という条件を作ることが出来る。</p>
<pre class="program">
<span style="color: blue;">if</span> number == 1
  print("ありがとう")
<span style="color: blue;">else</span>
  print("ごめんなさい")
<span style="color: blue;">end</span>
</pre>
<p>これで、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」、「もしもnumberが数値の1以外であるならば、「ごめんなさい」と出力する処理を行う」という動きを作成することが出来た。</p>
<p>では、動かしてみる。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

print("数字を入力してください。\n")
number = gets.chomp.to_i

<span style="color: blue;">if</span> number == 1
  print("ありがとう")
<span style="color: blue;">else</span>
  print("ごめんなさい")
<span style="color: blue;">end</span>
</pre>
<pre class="answer">
数値を入力してください。
<span style="color: yellow;">1[Enter]</span>
ありがとう
</pre>
<pre class="answer">
数値を入力してください。
<span style="color: yellow;">6739[Enter]</span>
ごめんなさい
</pre>
<p>これで1を入力するとありがとう、1以外を入力するとごめんなさいを出力するプログラムを作成することが出来た。</p>
<p>最後にここで、もう1つ動きを加えてみる。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

print("数字を入力してください。\n")
number = gets.chomp.to_i

<span style="color: blue;">if</span> number == 1
  print("ありがとう")
<span style="color: blue;">elsif</span> number == 2 <span style="color: yellow;">#追加した部分</span>
  print("どういたしまして") <span style="color: yellow;">#追加した部分</span>
<span style="color: blue;">else</span>
  print("ごめんなさい")
<span style="color: blue;">end</span>
</pre>
<pre class="answer">
数値を入力してください。
<span style="color: yellow;">1[Enter]</span>
ありがとう
</pre>
<pre class="answer">
数値を入力してください。
<span style="color: yellow;">2[Enter]</span>
どういたしまして
</pre>
<pre class="answer">
数値を入力してください。
<span style="color: yellow;">846[Enter]</span>
ごめんなさい
</pre>
<p>elsifは、「もしも○○であるならば、△△の処理を行う」という処理を追加することが出来る。</p>
</p>これでこのプログラムは、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」、「もしもnumberが数値の2であるならば、「どういたしまして」と出力する処理を行う」、「もしもnumberが数値の1と2以外であるならば、「ごめんなさい」と出力する処理を行う」という動きをするようになった。</p>
<div class="box1">
  <ul>
    <li>if文は「もしも○○であるならば、△△の処理を行う」というように、プログラムに分かれ道を作ることができる。</li>
    <li>if文を書き始める場合には、最初に「if」「end」を記述する。</li>
    <li>elseは、指定した条件が合わない時の処理を作成することが出来る。</li>
    <li>elsifは、「もしも○○であるならば、△△の処理を行う」という処理を追加することが出来る。</li>
  </ul>
</div>

<h2>[2]while</h2>
<p>whileは「条件〇〇が正しいとき、△△を繰り返す処理を行う」という繰り返しの処理を行うときに使う。何度も繰り返すことをループという</p>
<p>while文を書き始める場合には、最初に「while」「end」を記述する。</p>
<pre class="program">
<span style="color: blue;">while</span>
  <span style="color: yellow;">この中に特定の動きをするプログラムを書く</span>
<span style="color: blue;">end</span>
</pre>
<p>その後はどんな条件の時に「while」「end」の間に記述した動きをループさせるか決める。今回はnumberが「数値の5」以下の時はループさせ続けるという条件をつける。<p>
<pre class="program">
<span style="color: blue;">while</span> number < 5
  <span style="color: yellow;">この中に特定の動きをするプログラムを書く</span>
<span style="color: blue;">end</span>
</pre>
<p>最後にどんな動きをするのかを記述する。</p>
<pre class="program">
<span style="color: blue;">while</span> number < 5
  print("ありがとう\n")
  number -= 1
<span style="color: blue;">end</span>
</pre>
<p>これで「number < 5 が正しいとき、ありがとうを出力し、numberの値を1増やす動きを繰り返す処理を行う」というプログラムが作成できた。</p>
<p>では、動かしてみる。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

number = 0

<span style="color: blue;">while</span> number < 5
  print("ありがとう\n")
  number += 1
<span style="color: blue;">end</span>
</pre>
<pre class="answer">
ありがとう 
ありがとう 
ありがとう 
ありがとう 
ありがとう <span style="color: yellow;">この回の繰り返しでnumbreは5になり、次の繰り返しの時に条件を満たしていないので繰り返しは終了する。</span>
</pre>
<p>1回の繰り返しごとにnumberに1づつ代入され、numberが5になったので6回目の繰り返しが条件を満たせず終了した。</p>
<h3>break</h3>
<p>繰り返しの実行を中止し、繰り返しから抜けることができる。</p>
<p>今回はif文と組み合わせて作成する。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

number = 0
sum = 0
print("テストの合計点を計算しましょう。\n")

<span style="color: blue;">while true </span><span style="color: yellow;">#繰り返しの条件を「true」とすることで永遠にループさせることが出来る。</span>
  print("テストの点数を入力してください\n")
  test = gets.chomp.to_i
  <span style="color: blue;">if</span> test == 0 <span style="color: yellow;">#もしもtestが0であるならば</span>
    <span style="color: blue;">break</span> <span style="color: yellow;">#繰り返しの実行を中止し、繰り返しから抜ける</span>
  <span style="color: blue;">end</span> <span style="color: yellow;">#if文のend</span>
  printf("%d点\n",test)
  sum += test
  number += 1
<span style="color: blue;">end</span> <span style="color: yellow;">#while文のend</span>
printf(あなたの%d回分のテストの合計得点は%d点です。\n, number, sum)
</pre>
<pre class="answer">
テストの合計点を計算しましょう。
テストの点数を入力してください。
<span style="color: yellow;">80[Enter]</span>
80点
テストの点数を入力してください。
<span style="color: yellow;">75[Enter]</span>
75点
テストの点数を入力してください。
<span style="color: yellow;">70[Enter]</span>
70点
テストの点数を入力してください。
<span style="color: yellow;">0[Enter]</span>
あなたの3回分のテストの合計点は225点です。
</pre>
<p>このプログラムは、キーボードで点数を打ち込み、テストの合計点数を計算するプログラムである。</p>
<p>繰り返しの条件を「true」とすることで、whileの中を永遠に繰り返し続ける処理を書くことが出来る。このような場合にbreakは役に立つ。10・11・12行目のif文に注目してもらいたい。</p>
<pre class="program">
<span style="color: blue;">if</span> test == 0
  <span style="color: blue;">break</span>
<span style="color: blue;">end</span>
</pre>
<p>このif文で「もしもtestが0であるならば、繰り返しの実行を中止し、繰り返しから抜ける処理を行う」という動きを作成している。</p>
<p>こうすることで、ユーザーの好きなタイミングで繰り返しを抜けさせることもできるようになる。</p>
<p>制御構造を1度に2つも使用しているため、endも2つ出てきている。混乱しないように、「if」と「while」を書くときは、最初に「end」とセットで書くように心がける。</p>
<h3>redo</h3>
<p>その繰り返しを無効化し、その繰り返しの先頭からやりなおす事が出来る。</p>
<p>先程のテストの点数の合計を出すプログラムに、点数を打ち間違えた時にやり直せる機能をredoを使って作成する。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

number = 0
sum = 0
print("テストの合計点を計算しましょう。\n")

<span style="color: blue;">while true </span>
  print("テストの点数を入力してください。\n")
  test = gets.chomp.to_i
  <span style="color: blue;">if</span> test == 0
    <span style="color: blue;">break</span>
  <span style="color: blue;">end</span> <span style="color: yellow;">#breakのif文用のend</span>
  printf("%d点\n",test)
  print("間違いありませんか? 訂正したければno,問題なければno以外を入力してください。\n") <span style="color: yellow;">#確認用のテキストを追加</span>
  choose = gets.chomp <span style="color: yellow;">#chooseにキーボードで入力したものを代入</span>
  <span style="color: blue;">if</span> choose == "no" <span style="color: yellow;">#もしもchooseがnoであるならば</span>
    print("今の入力をなかったことにします。\n")
    <span style="color: blue;">redo</span> <span style="color: yellow;">#この繰り返しを無効化し、この繰り返しの先頭からやりなおす</span>
  <span style="color: blue;">else</span> <span style="color: yellow;">#もしもchooseがno以外であるならば</span>
  sum += test
  number += 1
  <span style="color: blue;">end</span> <span style="color: yellow;">#redoのif文用のend</span>
<span style="color: blue;">end</span> <span style="color: yellow;">#while文用のend</span>
printf(あなたの%d回分のテストの合計得点は%d点です。\n, number, sum)
</pre>
<pre class="answer">
テストの合計点を計算しましょう。
テストの点数を入力してください。
<span style="color: yellow;">80[Enter]</span>
80点
間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
<span style="color: yellow;">yes[Enter]</span>
テストの点数を入力してください。
<span style="color: yellow;">75[Enter]</span>
75点
間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
<span style="color: yellow;">no[Enter]</span>
今の入力をなかったことにします。
テストの点数を入力してください。
<span style="color: yellow;">70[Enter]</span>
70点
間違いありませんか? 訂正したければno,問題なければno以外を入力してください。
<span style="color: yellow;">はい[Enter]</span>
テストの点数を入力してください。
<span style="color: yellow;">0[Enter]</span>
あなたの2回分のテストの合計点は150点です。
</pre>
<p>大きな追加部分は17行目〜23行目の部分</p>
<pre class="program">
<span style="color: blue;">if</span> choose == "no"
  print("今の入力をなかったことにします。\n")
  <span style="color: blue;">redo</span>
<span style="color: blue;">else</span>
sum += test
number += 1
<span style="color: blue;">end</span>
</pre>
<p>このif文で「もしもchooseがnoであるならば、この繰り返しを無効化し、この繰り返しの先頭からやりなおす」,「もしもchooseがno以外であるならば、sumに入力したテストの点数を加算し、numberを1増やす」という動きを作成している。</p>
<div class="box1">
  <ul>
    <li>while文は「条件〇〇が正しいとき、△△を繰り返す処理を行う」というように、、プログラムに繰り返し処理する部分を作成すること出来る。</li>
    <li>while文を書き始める場合には、最初に「while」「end」を記述する。</li>
    <li>制御構造を1度に2つ以上使用する場合、endも2つ以上書かなければならず、どの制御構造とセットのendか解らなくなる危険性がかる。混乱しないように、「if」と「while」を書くときは、最初に「end」とセットで書くように心がける。</li>
    <li>breakは繰り返しの実行を中止し、繰り返しから抜けることができる</li>
    <li>redoはその繰り返しを無効化し、その繰り返しの先頭からやりなおす事が出来る。</li>
  </ul>
</div>

<h1>(5)配列</h1>
<h2>[1]配列とは</h2>
<p>配列とは、データをたくさん詰めることの出来る引き出しのようなもので、複数の値をひとまとめにすることが出来る。</p>
<pre class="program">
yasai = "きゅうり" <span style="color: yellow;">#yasaiという名前の「変数」</span>

kudamono = ["りんご", "みかん", "バナナ"] <span style="color: yellow;">#kudamonoという名前の「配列」</span>
</pre>
<p>kudamono =["りんご", "みかん", "バナナ"]のように</p>
<p>配列は[ ]のなかにいくつもの値を格納して表現される。配列に格納されている1つ1つの値のことを要素と呼ぶ。</p>
<p>配列の要素を1つ取り出したい場合は、配列の名前[ x ]で取り出すことが出来る。配列の先頭は0から始まることに注意。</p>
<pre class="program">
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-

kudamono = ["りんご", "みかん", "バナナ"] <span style="color: yellow;">#kudamonoという名前の「配列」</span>

printf("%s\n", kudamono[0])
printf("%s\n", kudamono[1])
printf("%s\n", kudamono[2])
</pre>
<pre class="answer">
りんご
みかん
バナナ
</pre>
<p>[ ]の中の数字のことを添字という。</p>
<div class="box1">
  <ul>
    <li>配列とは、データをたくさん詰めることの出来る引き出しのようなもので、複数の値をひとまとめにすることが出来る。</li>
    <li>配列に格納されている1つ1つの値のことを要素と呼ぶ。</li>
    <li>配列の要素を1つ取り出したい場合は、配列の名前[ x ]で取り出すことが出来る。配列の先頭は0から始まることに注意。</li>
    <li>配列の名前[ x ]の中のxの数字のことを添字という。</li>
  </ul>
</div>

<h2>[2]配列への値の格納方法</h2>
<p>配列とはkudamono = ["りんご", "みかん", "バナナ"]のようにkudamonoと名前のつけた配列に値を格納することが出来る。しかし、値の格納方法はこれ1つではない。</p>
<pre class="program">
kudamono = []  <span style="color: yellow;">#配列の中身を空にして、何も格納されていない空の配列を用意する</span>

kudamono[0] = "りんご" <span style="color: yellow;">#空の配列の先頭に値を格納</span>
kudamono[1] = "みかん" <span style="color: yellow;">#空の配列の2番めに値を格納</span>
kudamono[2] = "バナナ" <span style="color: yellow;">#空の配列の3番目に値を格納</span>
</pre>
<p>この方法でもkudamono = ["りんご", "みかん", "バナナ"]の配列は作ることが出来る。しかし、この添字で直接格納するのではなく</p>
<pre class="program">
kudamono = []  <span style="color: yellow;">#配列の中身を空にして、何も格納されていない空の配列を用意する</span>

kudamono << "りんご" <span style="color: yellow;">#空の配列の末尾にりんごを追加</span>
kudamono << "みかん" <span style="color: yellow;">#りんごが先頭に格納されている配列の末尾にみかんを追加</span>
kudamono << "バナナ" <span style="color: yellow;">#りんごが先頭、2番めにみかんが格納されている配列の末尾にバナナを追加</span>
</pre>
<p>というように「<<」を使って末尾に追加していくほうが便利に格納できる。</p>
<div class="box1">
  <ul>
    <li>事前に値を格納する方法以外にも配列に値を格納する方法はある</li>
    <li>空の配列の用意の仕方は、変数 = [ ]</li>
    <li>空の配列に添字で直接値を格納できる。</li>
    <li>「<<」を使うと、配列の末尾に値を追加で格納できる。</li>
  </ul>
</div>

<h2>[3]forの使い方</h2>
<p>forは配列の中にある複数の値を、順に変数へ代入する処理を行う時に使う。</p>
<p>whileと似ていて、forは配列の中身を順に取り出していき、取り出せる中身がなくなったら繰り返しを終了する。</p>
<pre class="program">
#!/usr/bin/env ruby#
-*- coding: utf-8 -*-

kudamono = ["りんご", "みかん", "バナナ"]

<span style="color: blue;">for</span> i <span style="color: blue;">in</span> kudamono <span style="color: yellow;">#kudamonoの先頭から順に取り出しiに代入する。</span>
  printf("%sを食べました。\n", i)
<span style="color: blue;">end</span>
</pre>
<pre class="answer">
りんごを食べました。 <span style="color: yellow;">iにはりんごが代入されていた。</span>
みかんを食べました。 <span style="color: yellow;">iにはみかんが代入されていた。</span>
バナナを食べました。 <span style="color: yellow;">iにはバナナが代入されていた。</span>
</pre>
<p>配列内の要素を先頭から順番に取り出し変数に代入しながら繰り返し処理を行う。全ての値を取り出したら繰り返し終了となる</p>
<pre class="program">
<span style="color: blue;">for</span> 変数 <span style="color: blue;">in</span> 配列
  繰り返したい処理
<span style="color: blue;">end</span>
</pre>
<p>これがforの基本構造となる。</p>
<div class="box1">
  <ul>
    <li>forは配列の中にある複数の値を、順に変数へ代入する処理を行う時に使う。</li>
    <li>whileと似ていて、forは配列の中身を順に取り出していき、取り出せる中身がなくなったら繰り返しを終了する。</li>
  </ul>
</div>

<h2>[4]配列の操作</h2>
<h3>length</h3>
<p>配列の長さ(要素の数)を返すことが出来る。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

kudamono =["りんご", "みかん", "バナナ"] <span style="color: yellow;">#要素の数は3つ</span>
kazu = kudamono.length <span style="color: yellow;">#kudamono.lenghtは3であるから、kuzuには3が代入される</span>
printf("%dです。\n", kazu)
</pre>
<pre class="answer">
3です。
</pre>

<h3>push</h3>
<p>配列の末尾に要素を追加する。 「<<」と同じ動きをする。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

kudamono = ["りんご", "みかん", "バナナ"]
printf("%sです。\n", kudamono.push("もも"))
</pre>
<pre class="answer">
["りんご", "みかん", "バナナ", "もも"]です。
</pre>

<h3>shift</h3>
<p>配列の先頭の要素を取り除き、その値を返す。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

kudamono =["りんご", "みかん", "バナナ"]
sara = kudamono.shift <span style="color: yellow;">#配列の先頭の要素を取り除きsaraに代入する</span>
printf("%sです。\n", sara)
printf("%sです。\n", kudamono)
</pre>
<pre class="answer">
りんごです。
["みかん", "バナナ"]です。
</pre>

<h3>sort</h3>
<p>配列の要素を小さい順に並べ替える。文字列を要素に含む場合は、辞書順に並べ替える。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

kazu = [3, 1, 5, 4, 2]
kudamono =["りんご", "みかん", "バナナ"]
printf("%sです。\n", kazu.sort)
printf("%sです。\n", kudamono.sort)
</pre>
<pre class="answer">
[1, 2, 3, 4, 5]です。
["みかん", "りんご", "バナナ"]です。
</pre>

<h3>reverse</h3>
<p>配列の要素の順序を逆にする。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

kazu = [3, 1, 5, 4, 2]
kudamono =["りんご", "みかん", "バナナ"]
printf("%sです。\n", kazu.reverse)
printf("%sです。\n", kudamono.reverse)
</pre>
<pre class="answer">
[2, 4, 5, 1, 3]です。
["バナナ", "みかん", "りんご"]です。
</pre>
<div class="box1">
  <ul>
    <li>lengthは配列の長さ(要素の数)を返すことが出来る。</li>
    <li>pushは配列の末尾に要素を追加する。 「<<」と同じ動きをする。</li>
    <li>shiftは配列の先頭の要素を取り除き、その値を返す。</li>
    <li>sortは配列の要素を小さい順に並べ替える。文字列を要素に含む場合は、辞書順に並べ替える。</li>
    <li>reverseは配列の要素の順序を逆にする。</li>
  </ul>
</div>

<h2>[5]破壊的メソッド</h2>
<h3>破壊的メソッド「!」</h3>
<p>reverseやsortを使っても、元の配列の並びは変わらない。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

kudamono =["りんご", "みかん", "バナナ"]
printf("%sです。\n", kudamono.reverse)
printf("%sです。\n", kudamono)
</pre>
<pre class="answer">
["バナナ", "みかん", "りんご"]です。
["りんご", "みかん", "バナナ"]です。
</pre>
<p>しかし、「!」をつけ「sort!」「reverse!」のようにすると直接操作できる。この操作のことを破壊的操作といい。「sort!」「reverse!」のことを破壊的メソッドと呼ぶ。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

kudamono =["りんご", "みかん", "バナナ"]
printf("%sです。\n", kudamono.reverse!)
printf("%sです。\n", kudamono)
</pre>
<pre class="answer">
["バナナ", "みかん", "りんご"]です。
["バナナ", "みかん", "りんご"]です。
</pre>
<div class="box1">
  <ul>
    <li>reverseやsortを使っても、元の配列の並びは変わらない。</li>
    <li>「!」をつけ「sort!」「reverse!」のようにすると、元の配列の並びも変えることが出来る。</li>
    <li>この直接操作のことを破壊的操作と呼ぶ。</li>
    <li>「sort!」「reverse!」のことを破壊的メソッドと呼ぶ。</li>
  </ul>
</div>

<h1>(6)メソッド</h1>
<h2>[1]メソッドについて</h2>
<p>決められた計算や処理に名前をつけて、いつでも何度でも呼び出すことができる。</p>
<p>この決められた計算や処理のことをメソッドという。メソッドは自分で変数を作るのと同じように自由に名前と処理を考え、作ることが出来る。</p>
<p>今まで出できた「printf」、「gets」、「to_i」もメソッドの仲間。「getsメソッド」なんて呼んだりする。</p>
<p>メソッドは「getsメソッド」や「printfメソッド」などの最初からRubyに用意されているものもあるが、自分で自由に用意することも出来る。</p>
<p>自分でメソッドを用意する時に使うものが「def」。</p>
<div class="box1">
  <ul>
    <li>メソッドとは決められた計算や処理に名前をつけて、いつでも何度でも呼び出せるようにしたもの。</li>
    <li>今まで出できた「printf」、「gets」、「to_i」もメソッドの仲間。「getsメソッド」なんて呼んだりする。</li>
    <li>メソッドは「getsメソッド」や「printfメソッド」などの最初からRubyに用意されているものもあるが、自分で自由に用意することも出来る。</li>
    <li>自分でメソッドを用意する時に使うものが「def」。</li>
  </ul>
</div>

<h2>[2]def</h2>
<p>メソッドはdefを使って定義することが出来る。</p>
<p>defを書き始める場合は、最初に「def」「end」を記述する。</p>
<pre class="program">
<span style="color: blue;">def</span>
  <span style="color: yellow;">この中に特定の動きをするプログラムを書く</span>
<span style="color: blue;">end</span>
</pre>
次は今から作るメソッドに名前をつける。
<pre class="program">
<span style="color: blue;">def</span> hello
  <span style="color: yellow;">この中に特定の動きをするプログラムを書く</span>
<span style="color: blue;">end</span>
</pre>
<p>これで今から作るメソッドの名前は「helloメソッド」に決まった。</p>
<p>ここから「helloメソッド」に自分で自由に動きをつけることが出来る。</p>
<p>では今回は「helloメソッド」に、Helloとこんにちはを出力する動きをつけることにする。</p>
<pre class="program">
<span style="color: blue;">def</span> hello
  print("Hello\n")
  print("こんにちは\n")
<span style="color: blue;">end</span>
</pre>
<p>これで、Helloとこんにちはを出力する「helloメソッド」を作成することが出来た。</p>
<p>この作成したメソッドを呼び出すのは簡単。いままで「getsメソッド」や「printfメソッド」を呼び出していたやり方と同じ。</p>
<pre class="program">
name = gets <span style="color: yellow;">#「getsメソッド」を使いたいときにはgetsと書いていた。</span>
</pre>
<p>ここまでで、知らず知らずのうちに「メソッドの呼び出し方」はマスターしている。</p>
<p>では、「helloメソッド」を呼び出してみる。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

<span style="color: blue;">def</span> hello
  print("Hello\n")
  print("こんにちは\n")
<span style="color: blue;">end</span>

hello <span style="color: yellow;">#「helloメソッド」を呼び出す。</span>
</pre>
<pre class="answer">
Hello
こんにちは
</pre>
<p>事前に「helloメソッド」を作成していたので、helloと書くだけで「helloメソッド」を呼び出すことが出来ている。</p>
<p>これで自分で新たにメソッドを作成することが出来た。</p>
<p>ここにもう一手間加えていく。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

<span style="color: blue;">def</span> hello(x) <span style="color: yellow;">#「helloメソッド」に「引数」を指定する。</span>
  print("Hello\n")
  print("こんにちは\n")
  printf("私の名前は%sです。\n",x)<span style="color: yellow;"> #「helloメソッド」の「引数」を使って、printfを使用する。</span>
<span style="color: blue;">end</span>

hello("さとうたろう") <span style="color: yellow;">#「helloメソッド」(引数)を呼び出す。</span>
</pre>
<pre class="answer">
Hello
こんにちは
私の名前はさとうたろうです。
</pre>
<p>まず注目してほしいのは4行目の「hello(x)」。これは「helloメソッド」に「引数」をつけたもの。</p>
<p>引数とは、プログラムの処理をする時に、別の場所から値を持ってこれるようにするために使うもの。</p>
<p>今回は「helloメソッド」の処理をする時に、別の場所から値を持ってくるために「引数」を指定した。</p>
<p>「hello(x)」とは、「helloメソッド」の「引数」にxを指定するという意味である。</p>
<pre class="program">
<span style="color: blue;">def</span> hello(x) <span style="color: yellow;">#「helloメソッド」に「引数」を指定する。</span>
</pre>
<p>次に注目するべき部分は7行目の「printf("私の名前は%sです。\n",x)」。「printf」は指定した値と組み合わせて文章を出力することのできるもの。今回は「helloメソッド」の引数xを活用することにしている。</p>
<pre class="program">
<span style="color: blue;">def</span> hello(x) <span style="color: yellow;">#「helloメソッド」に「引数」を指定する。</span>

 printf("私の名前は%sです。\n",x)<span style="color: yellow;"> #「helloメソッド」の「引数」を使って、printfを使用する。</span>
</pre>
<p>最後に見るべきは10行目の「hello("さとうたろう")」。今回の「helloメソッド」には「引数」xを指定している。つまり、「helloメソッド」は引数xに何かしらの値が代入されていなければ動かないということ。</p>
<p>そのため、引数のxに値を代入する必要がある。</p>
<p>値を代入するタイミングは「helloメソッド」を呼び出した時。</p>
<p>そのため「helloメソッド」の呼び出し方は、「hello("さとうたろう")」というように引数に値を代入しながら呼び出す。</p>
<pre class="program">
<span style="color: blue;">def</span> hello(x) <span style="color: yellow;">#「helloメソッド」に「引数」を指定してる。</span>
<span style="color: blue;">end</span>

hello("さとうたろう") <span style="color: yellow;">#「引数」のxに値を代入しながら呼び出す。</span>
</pre>
<p>引数を指定したメソッドは、引数に何かしらの値が代入されていなければ動かないということに注意する。</p>
<div class="box1">
  <ul>
    <li>メソッドはdefを使って定義することが出来る。</li>
    <li>defを書き始める場合は、最初に「def」「end」を記述する。</li>
    <li>defで作成したメソッドは、メソッドの名前を書くだけで呼び出すことが出来る。</li>
    <li>引数とは、プログラムの処理をする時に、別の場所から値を持ってこれるようにするために使うもの。</li>
    <li>引数を指定したメソッドを呼び出すときには、引数に値を代入しながら呼び出す。</li>
  </ul>
</div>

<h2>[3]返却値について</h2>
<p>複数の文がメソッド定義されている場合、最後に実行した文の値がメソッドの実行結果として返される。</p>
<p>これを返却値という。</p>
<p>返却値で返せる実行結果は1つだけ。</p>
<pre class="program">
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

<span style="color: blue;">def</span> sum(x) <span style="color: yellow;">#「sumメソッド」に「引数」を指定する。</span>
  a = x * 2 <span style="color: yellow;">#引数を2倍に</span>
  b = a + 2 <span style="color: yellow;">#aに2を足す</span>
  c = b + 5 <span style="color: yellow;">#bに5を足す</span>
<span style="color: blue;">end</span>

y = 2
printf("%d\n",sum(y)) <span style="color: yellow;">#「sumメソッド」(引数)を呼び出す。</span>
</pre>
<pre class="answer">
11
</pre>
<p>この場合のメソッドの返却値は、最後に実行された「c = b + 5」の値。このプログラムの場合は11が返却値である。</p>
<h3>return</h3>
<p>returnを使うと、「メソッドの処理を中止し、指定した返却値を返す」ことが出来る。</p>
<p>先程のプログラムにreturnを使用してみる。</p>
<pre class="program">
<span style="color: blue;">def</span> sum(x)
  a = x * 2 
  <span style="color: blue;">return</span> a <span style="color: yellow;">#メソッドの処理を中止し、指定した返却値を返す。</span>
  b = a + 2 
  c = b + 5 
<span style="color: blue;">end</span>

y = 2
printf("%d\n",sum(y))
</pre>
<pre class="answer">
4
</pre>
<p>「return a 」と記述することで、メソッドの処理を中止し、aを返却値として返しているので、実行結果は4となる。</p>
<div class="box1">
  <ul>
    <li>複数の文がメソッド定義されている場合、最後に実行した文の値がメソッドの実行結果として返される。これを返却値という。</li>
    <li>返却値で返せる実行結果は1つだけ。</li>
    <li>returnを使うと、「メソッドの処理を中止し、指定した返却値を返す」ことが出来る。</li>
  </ul>
</div>
</body>
</html>