diff --git a/break.rb b/break.rb new file mode 100755 index 0000000..f7055a9 --- /dev/null +++ b/break.rb @@ -0,0 +1,18 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +puts"1から9の数字を入力しましょう。足した合計が30以上になると終わるよ!" +sum = 0 +while true + suuji = gets.to_i + sum += suuji.to_i + puts"また数字を入れてみましょう!" + if sum >= 30 then #合計が30以上になると、処理を開始する。 + printf("合計は%dです。\n",sum) + break # 処理を中止して、ループを終わらせる + end +end + + +#break 処理を中止して、ループを終わらせる +#改良点 ifを何個か用いることで、いくつかの条件ごとに結果が分かれるようなプログラムをつくることができる。 diff --git a/for.rb b/for.rb new file mode 100755 index 0000000..dbeffa1 --- /dev/null +++ b/for.rb @@ -0,0 +1,22 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- +#一つ目のプログラム +sports = ["野球","バレーボール","サッカー"] +for kibun in sports #kibun変数にsports配列の要素を順番に代入される + printf("今日は%sしたい気分だ。\n",kibun) #この部分が繰り返される +end + +#for文とは??:配列や範囲などの複数の値を、順番に変数へ代入する処理 +#一つ目のプログラムの詳しい解説:sportsという配列に格納される配列の要素を順番にkibunという変数に代入して処理が繰り返されて、野球、バレーボール、サッカーの順番で出力されます。 +#今回はsportsという配列を事前に作ってfor文のオブジェクト指定の部分に要素として入れていますが、["野球","バレーボール","サッカー"] を直接入力しても動きます。 + + +#改善編~このプログラムを動かすときは一つ目のプログラムの行の初めにシャープをつけてコメント文にして、改善版プログラムの一行目からシャープを消そう~ +#sports = ["野球","バレーボール","サッカー","ボート","ホッケー","ラグビー","卓球"] +#i=0 #for文の中のprintf文で添字を作るためのもの +#puts "スポーツ図鑑" +#for zukan in sports #x変数にsports配列の要素を順番に代入される +# printf("%d: %s\n", i+=1, zukan) #%dにはiに1づつ追加されていき、%sにはx変数に代入されているsports配列の要素がが入る +#end + +#改善版プログラムの詳しい解説:i=0を活用してprintfの中にi+=1を入れることでスポーツ名を出す時の添字にしています。また、sportsという配列に格納される配列の要素を順番にzukanという変数に繰り返し代入されるため、野球、バレーボール、サッカーボート、ホッケー、ラグビー、卓球の順番で出力されます。 diff --git a/hairetsu.rb b/hairetsu.rb new file mode 100755 index 0000000..bed7b80 --- /dev/null +++ b/hairetsu.rb @@ -0,0 +1,36 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +jikanwari = [] + +puts "時間割に1〜5時間目の教科を登録します。" +puts "1時間目の教科を入力してください。" +kyoka1 = gets.chomp +jikanwari << kyoka1 +puts "2時間目の教科を入力してください。" +kyoka2 = gets.chomp +jikanwari << kyoka2 +puts "3時間目の教科を入力してください。" +kyoka3 = gets.chomp +jikanwari << kyoka3 +puts "4時間目の教科を入力してください。" +kyoka4 = gets.chomp +jikanwari << kyoka4 +puts "5時間目の教科を入力してください。" +kyoka5 = gets.chomp +jikanwari << kyoka5 + +printf("今日の時間割は%sです。\n", jikanwari) + +#内容 +#<<でgetsしたデータをどんどん足していくものです。1〜5時間目の教科を入力していき配列として出力されます。 + +#各行の説明 +#4行目:データを格納するために空の配列jikanwariを用意します。 +#7〜9行目:1時間目の教科として入力した値が変数kyoka1に代入され、jikanwariに格納されます。 +#10〜21行目:同様に入力した2〜5時間目の教科も配列に格納されます。<<は配列の末尾に値を格納していくものです。 +#23行目:printfでjikanwariを参照し、配列として時間割が出力されます。 + +#改良点 +#何校時授業かを最初に入力してもらって、whileでその回数だけ入力させられるとよいでしょう。 +#また、forでjikanwariに入っている値を取り出して、1教科ずつ出力できるとよいと思います。 diff --git a/hello.rb b/hello.rb old mode 100644 new mode 100755 index 61c3a4b..a9a37ec --- a/hello.rb +++ b/hello.rb @@ -1,3 +1,4 @@ #!/usr/bin/env ruby # -*- coding: utf-8 -*- + diff --git a/if.rb b/if.rb new file mode 100644 index 0000000..43f157d --- /dev/null +++ b/if.rb @@ -0,0 +1,78 @@ +# 点数の入力・判別、それに対してのコメントをするプログラム +# 「if」はプログラムに分かれ道をつくることができる。 +# 場合分けをして実行結果を変化させる処理のことを条件分岐という +# 場合分けを増やす場合は「elsif」 +# 場合分け以外の場合は「else」を使う。 + +# コード +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +# 点数の入力 +puts "テストの点数を入力してね" +score = gets.to_i + +# 点数の判定 +if score > 100 or score < 0 # 0〜100以外の点数は受け付けない。 + puts "もう一度入力してください" +elsif score >= 100 + puts "すごい!満点だ!" +elsif score >= 80 + puts "素晴らしい!" +elsif score >= 60 + puts "グッド!" +elsif score >= 40 + puts "よくやった!" +elsif score >= 20 + puts "もう少し頑張ろう!" +elsif score >= 0 + puts "もっと勉強しよう!" +end + + +# このコードを改造してよりよくするなら。 +# 科目ごとに点数を入力してもらう。while, 配列(array), メソッド(method)を使う。 + +# 改造コード(例) +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +# 判別をするメソッド +# def hanbetu(score) +# comment = "" +# if score > 100 or score < 0 # 0〜100以外の点数は受け付けない。 +# comment = "もう一度入力してください" +# elsif score >= 100 +# comment = "すごい!満点だ!" +# elsif score >= 80 +# comment = "素晴らしい!" +# elsif score >= 60 +# comment = "グッド!" +# elsif score >= 40 +# comment = "よくやった!" +# elsif score >= 20 +# comment = "もう少し頑張ろう!" +# elsif score >= 0 +# comment = "もっと勉強しよう!" +# end +# return comment # comment変数に代入された文字列を返す +# end + +# subject = ["国語","数学","理科","社会","英語"] +# tensuu = [] # 入力された点数が追加される配列 + +# i = 0 +# while i <= subject.length - 1 # iが、配列の長さ(今回は4)より大きくなったらループを抜ける。配列の長さを取得するには、.lengthを使う。 +# printf("%sの点数は?\n>>", subject[i]) +# tensuu << gets.to_i #入力された点数を配列(tensuu)に追加 +# i += 1 +# end + +# puts "" + +# puts "最後に5科目の点数を確認をしましょう。" +# j = 0 +# while j <= subject.length - 1 #上に同じ +# printf("%sの点数は%i点です。%s\n", subject[j], tensuu[j], hanbetu(tensuu[j])) #科目、点数をそれぞれの配列の左から順番に出力している。最後に点数に対してコメントを返す。 +# j += 1 +# end diff --git a/method.rb b/method.rb new file mode 100755 index 0000000..872a438 --- /dev/null +++ b/method.rb @@ -0,0 +1,58 @@ +#!/usr/koeki/bin/ruby +# coding: utf-8 + +def speed(distance,time) + distance/time +end + +puts"分速を計算するよ!" + +puts"距離を入力してね(単位:m)" +x = gets.to_i + +puts"時間を入力してね(単位:分)" +y = gets.to_i + +printf("%dmを%d分で走ったときの分速は%dm/mです\n",x,y,speed(x,y)) + +# defとは +# def メソッド名(仮引数)で最初に実行したい処理を定義し、メソッド名で呼び出すことで決められた処理を実行することができるもの + +# プログラム解説 +# 分速を求めるプログラム +# 速度は距離÷時間で求めることができるので、speedというメソッドで定義する +# 10行目から14行目で計算に必要な距離と時間を入力してもらう +# 16行目で結果を表示 + +# 改善案 +# 入力してもらうところをメソッド定義してみよう! +# 距離と時間の求め方もメソッド定義してwhileでどれを求めるか選択できるようにしよう! +# 例) +# def kazu(x) +# printf("%sを入力してね\n",x) +# end +# def speed(distance,time) +# 時速を求める処理 +# end +# def distance(speed,time) +# 距離を求める処理 +# end +# def time(distance,speed) +# 時間を求める処理 +# end +# while true +# puts"求めたいものを選択してね" +# puts"1.時速" +# puts"2.距離" +# puts"3.時間" +# puts"4.終了" +# sentaku = gets.to_i +# if sentaku == 1 +# x = kazu("距離") +# y = kazu("時間") +# speed(x,y) +# elsif sentaku == 2 +# . +# . +# . +# end diff --git a/next.rb b/next.rb new file mode 100755 index 0000000..46bdb69 --- /dev/null +++ b/next.rb @@ -0,0 +1,21 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +number = 30 #30の数をnumberの関数に代入する + +while number > 0 #0より小さい数を出さないようにする + number -= 1 #30から1ずつ引いていく + if number%2 == 0 #2で割って余りが0のとき(偶数)、 + next #処理を飛ばし、次のループに入る + end #30から0まで、ループして処理を繰り返す +printf("奇数は%d \n",number) #奇数の値が表示される +end + +#nextとは:処理をスキップして、次のループに移る +# 今回は偶数の処理をスキップして、その他の数は処理されるようになっている +# このように、スキップしたい処理があるときに活用できる + + +#改造する時の注意点 +#ifからendの中に、nextが入っているか確認する +#ifからendの中には、スキップしたい処理を記入する diff --git a/rand.rb b/rand.rb new file mode 100755 index 0000000..39a2ec8 --- /dev/null +++ b/rand.rb @@ -0,0 +1,31 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +# randを使ったおみくじプログラム + +# おみくじの結果リストを配列として定義 +omikuji = ["大吉", "吉", "中吉", "小吉", "凶", "少凶", "中凶", "大凶"] + +# omikuji配列の中からランダムなおみくじを選ぶ +# sizeの他にlengthがあります。lengthに変えても結果が変わらないことを確認しましょう。 +erabu = rand(omikuji.size) + +# 選ばれたおみくじの結果を取得 +kekka = omikuji[erabu] + +printf("あなたの運勢は「%s」です。\n", kekka) + + +# ---------------randとは---------------- + +# 例えばrand(5)のとき0から4までの中でランダムに数字を発生させるメソッド。 +# もし5までの自然数をランダムに表示したいときはrand(5)+1と書く。詳しくは教科書p27を参照 + + +# ---------------改良してみよう!---------------- + +# 内容をおみくじではなく自由ししてみよう! +# 果物をランダムに選ぶプログラムなら kudamono = ["りんご", "みかん", "ぶどう", "バナナ", "イチゴ"]などのように最初に配列を用意しよう! + +# 結果が一回しかでないのでwhile endを使って繰り返し出るようにしてみよう! +# yesかnoを入力させて、noが入力されたら「break」でループを抜け出そう! diff --git a/redo.rb b/redo.rb new file mode 100755 index 0000000..9151e99 --- /dev/null +++ b/redo.rb @@ -0,0 +1,35 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +puts "1から9の間の数字を3回入力してください。その合計を足します。" +tasu = 0 +goukei = 0 + +while tasu < 3 + printf("数字を入力してください: ") + kazu = gets.to_i + + if kazu > 9 || kazu < 0 + printf("----1から9の数字を入力してください。----\n") + redo + end + + goukei += kazu + printf("入力された数字: %d\n", kazu) + tasu += 1 +end + +printf("3つの数字の合計は %dです。\n", goukei) + +# redoとは、繰り返し処理を中断し、処理を最初からやり直す働きを持っています。 +# 3回入力してもらいますが、1〜9以外の数字を入力すると9行目の +# printf("数字を入力してください: ")に戻り、処理を最初からやり直します。 + +# 最後に3つの入力された数字の合計を出力しますが、1〜9以外の数字が入力されたときは足されません. + +#-------------改良するなら------------- +# redoだけではなく、nextやbreakもプログララムの中で使ってみよう! +# たとえば、1〜4の4択クイズで不正解の場合はredoでやり直し、正解したらbreakでプログラムを終了するようなプログラム + +# また、このプログラムは3回ですが、最初に何回入力させるかをユーザーに入力させてその回数分だけ入力を繰り返してみよう! + diff --git a/while.rb b/while.rb new file mode 100755 index 0000000..11130e7 --- /dev/null +++ b/while.rb @@ -0,0 +1,46 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +num = 1 # ① +while num < 51 do # ② + puts num # ③ + num = num + 1 # ④ +end # ⑤ + + + +# どういったもの ? + +# A.繰り返し(ループ)処理を記述するためのもので、指定した条件が満たされている間はずっと繰り返し処理を行いたいときに使う。 + + + +# ーーーーーーーーーーーーーーーー +# ① 最初の数字 | ( 例 ) num = 1の時 1〜50 | +# | num = 0の時 0〜50 | +# ーーーーーーーーーーーーーーーー + + +# ② [ while ]から[ end ]までの間をループする。 +# [ num < 51 do ]は51以上の数字を出さないようになる。 + + + +# ③ [ puts num ]は[ num ]の数字を表示する。 + + + +# ④ [ num = num + 1 ]は①の数字に[ 1 ]を足した数が左に出てくる。 +# ↑ ======== +# ーーーーーーーーーーーーーーーーーー| +# * 注意 :③と④の位置を変えると [ 51 ]まで表示してしまう。 + + +# ⑤ [ end ]がないとエラーが発生する。 + + +# ーーーーーーーーーーーーーーー* 改造する時の注意点 *ーーーーーーーーーーーーーーーーーーーーーーーー + +# 1. 改造するときには必ず [ whille ]と [ end ] をセットとして入れること。 +# 2. [ while ]のうしろに [ do ] や [ true ]、[ break ] が作成するプログラムによって使い方が変わる。 +# 3.あとは②、③を改造すれば [ while ]から[ end ]内にある改造したものがループするようになる。