引数で与えられた数を足す(C)
引数で与えられた数を足し算する.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ int sum = 0; int i; int num; for(i = 1; i < argc; i++){ num = atoi(argv[i]); sum += num; } printf("%d\n", sum); exit(0); }
int argcは,渡された引数の数(例: ./a.out 1 2 3 だと,4)
argv[0]にはプログラムが起動されたときの名前(例: ./a.out)
argv[1]以降に引数が一つずつはいる
実行例
./a.out 1 2 3 6
バイナリファイルの操作(C)
バイナリファイルを扱うとき
fopen("a.bin", "rb+")
のように、モードにbを記す
#include <stdio.h> int main(void){ FILE *hoge; hoge = fopen("b.bin", "wb"); fclose(hoge); return 0; }
bと+はどちらが先に来てもかまわない。
ファイルに値を直接書きこむ
fwriteを使う
fwrite(書きこむ変数のアドレス, 1つのサイズ, 項目数, ファイルポインタ)
テキストファイルの操作(C)
もうすぐC言語を授業でやる。
ということで、まだ使ったことがなかった、テキストファイルに直接書いたりする方法を勉強するぞ
ファイルを開くときの形
ファイル型のポインタ変数 = fopen("テキストファイル名", "モード")
モード
ファイルを開いてどうするか。
- r:読み込み
- r+:読み書き
ファイルが存在しない場合、失敗する
- w:書き込み
- w+:読み書き
ファイルに上書きする。存在しない場合、新しいファイルを作る。
- a:追加書き込み
- a+:追加読み書き
ファイルに追記する。存在しない場合、新しいファイルを作る。
"+"は対のモードを追加して、読み書き両方を可能にする。
実際にファイルを開閉してみる
#include <stdio.h> int main(void){ FILE *hoge; //ファイル型のポインタ変数を定義 hoge = fopen("a.txt", "w"); //a.txtファイルをwモードで開く(存在する場合は上書きする) fclose(hoge); return 0; }
実行すると、
a.txtファイルが増えた!!
ファイルに書き込む
fprintf(ファイル型のポインタ変数, "文字列")を使う
#include <stdio.h> int main(void){ int num; num = 1; FILE *hoge; hoge = fopen("a.txt", "w"); fprintf(hoge, "Good morning, %d" ,num); fclose(hoge); return 0; }
>> Good morning, 1
このように、変数を表示させることも可能
ファイルから読み込む
Thank_you!
この、c.txtファイルの内容をコマンドラインに表示させる。
#include <stdio.h> int main(void){ char str[100]; FILE *hoge; hoge = fopen("c.txt", "r"); fscanf(hoge, "%s", str); fclose(hoge); printf("%s", str); return 0; }
>>Thank_you!
Ruby合宿に行ってきた
Ruby合宿2018夏に参加した
Ruby合宿に初めて参加しました。
とても良いところでした。全員一度は行った方が良いのでは?と感じるほどです。
筆者の主観たっぷりの内容となっておりますが、これから行きたいと考えている人の参考となれば良いなと考えています。
最初に
現在の筆者のプロフィール
- 大学一年生
- 情報系
- Rubyは勉強を始めて2か月くらいの初心者
応募のきっかけ
- サークルの先輩が参加したことがあったため
- チーム開発に興味があり、面白そうだと感じたため
筆者が合宿に求めていたもの
- 技術的な話ができる友人作り → 達成
- 普段の生活で経験しない刺激を得ること → 達成
- チーム開発を体験すること → 達成
Ruby合宿とは*1
島根県で開催されている合宿
DXRubyを使って4泊5日、チーム開発を行う
詳しくは公式サイトで↓
www.rubycamp.jp
参加するために
得られるもの
- 記念Tシャツ
- 健康的な食生活
- ありがたいお話
- 技術交流ができる友人
- 技術力
良いところ
- 県が負担している部分もあって参加費がとても安い!
- 自分で企画したり、プログラムを書くことができる
- 参加者はみんな優しく、意見を尊重してくれる
- 情報系の人だけでなく色々な分野の参加者と知り合える
- 講師の人がわかりやすく教えてくれる
- わからないことはすぐに(講師や他の参加者に)聞くことができる
- 色々な企業の話を聞くことができる
- 実際に企業を見学できる
- セブンティーンアイスの自販機がある
- ペンタブの貸し出しがある
- 蚊などの虫は見かけなかった
- 食堂から宍道湖と山が見えて景色◎
大変なこと
- 最寄りのコンビニまで片道徒歩10分(坂有り)
→良い運動になる
- 洗濯に思ったよりも時間がかかること
→洗濯をして乾燥機まで使いたいのならスピード洗濯をオススメ。
完全に乾かないことは想定した方が良い。
- 風呂場近くなど一部の場所で圏外になる
→諦めよう
- 夜間ネットワークに繋がらなくなった
→途中から改善された
近年はなかったことだそうなので、きっと次回からは改善される
合宿を終えて
- 将来何がしたいか、ということが何となくわかった
- チームで設計・制作・完成まで持っていくことが楽しかった
- 今回出会った人と仕事の話ができるようになりたいと感じた
- 今回得た関係を大切にしていきたい
- 触れ合うことでモチベーションが高まった
- 一人で調べるよりもチームで調べる方が理解も解決も早まると感じた
- 調べたり、聞いたりすることが大事である
Ruby合宿の歴代の作品
*1:2018年夏時点での情報です
attr_reader, attr_writerの確認(Ruby)
なんとなく理解できるようになったとはいえ、「理解できました」というにはまだ遠い。
ということで、attr_writerはこうやって動くんだなーということを確認。
class Name attr_reader :user_name def initialize @user_name = "Tom" end end class Greet < Name attr_writer :user_name end a = Greet.new p a.user_name # "Tom" p a.user_name = "Thomas" # "Thomas"
class Name attr_reader :user_name def initialize @user_name = "Tom" end end class Hello < Name attr_writer :user_name def hello @user_name = "Ken" puts "Hello, #{@user_name}" end end b = Hello.new b.hello # Hello, Ken p b.user_name # "Ken" p b.user_name = "Bob" # "Bob"
attr_reader, attr_writerを使わずに書くとこうなる
class Name def initialize @user_name = "Tom" end def user_name @user_name end def user_name=(name) @user_name = name end end class Hello < Name def hello @user_name = "Ken" puts "Hello, #{user_name}" end end b = Hello.new b.hello # Hello, Ken p b.user_name # "Ken" p b.user_name = "Bob" # "Bob"
もうちょっと使いこなせるようになったらまたメモしにくる
case文(Ruby)
やっぱりcase文ってどの言語においてもなんとなく好きなんですよね。
Rubyのcase文って、JavaScriptだとかC言語だとかのswitch文とは違うな~と。
defaultじゃなくてelseだったり。
case文
case 比較したいオブジェクト when 値1 then 処理 when 値2 then 処理 ~~ else 処理 end
thenは省略できる
caseを使ってじゃんけんをしてみた
puts "グー: 1, チョキ: 2, パー: 3, おわり: 4" list = [1, 2, 3] loop do hand1 = gets.to_i hand2 = rand(1..3) # 1, 2, 3の中からランダムに result = (hand1 - hand2) if hand1 == 4 break elsif list.count(hand1) == 0 #入力がlist(123)以外だったら次に行く next else puts hand2 case result when -2 puts "負け" when 0 puts "あいこ" when 1 puts "負け" else puts "勝ち" end end end
やってて気づいたこと
"\n"の入力はto_iを使うと0になってしまう
取り除いたりする その2(Ruby)
○引数で指定した文字を文字列から削除する
delete
delete!
>> moji = "chocolate" => "chocolate" >> moji.delete("c") => "hoolate"
○ 文字列中の部分文字列を削除
slice!
>> moji => "cooperate" >> moji.slice!(1) # moji[1]を削除 => "o" >> moji => "coperate" >> moji.slice!(0, 1) # moji[0]から1つ削除 => "c" >> moji => "operate" >> moji.slice!(5..6) # moji[5]からmoji[6]までを削除 => "te" >> moji => "opera" >> moji.slice!("op") # 文字列"op"を削除 => "op" >> moji => "era"
○文字列を置換する
gsub
gsub!
正規表現が関わってくるので後々詳しくやりたい
>> moji = "cooperate" >> moji.gsub("co", "") #"co" を""に置換(削除) => "operate"
○同じ文字が連続しているとき、一つにまとめる
squeeze
squeeze!
引数を指定すると、指定した文字のみまとめる
>> moji = "cooperate" => "cooperate" >> moji.squeeze() => "coperate"