いろんな言語齧ってみました。
2017年7月8日
2024年8月30日
最近 いくつかの言語の触りだけ齧ってみました。
齧るのに西暦を入れると年齢・干支・和暦を返してくれるコードを書きました。
実行結果は全て
年(西暦)を入力して下さい。:
1975
1975年は昭和50年で、干支は午年であり、この年に生まれた方は今年42歳になります。
上の形になります。
最初に日本の発祥の言語であるrubyを書いてみました。
# coding: utf-8 puts '年(西暦)を入力してください' y = gets.chop # y 入力された西暦 year = y.to_i # yをintに変換した値 key = year + 9 # 干支と配列の添字を対応させるため wareki_key = 0 #和暦の添字の対応 wareki_year = 0 #和暦年号を計算した値の保存 age = 0 #年齢の保存 eto = ["亥","子","丑","寅","卯","辰","巳","午","未","申","酉","戌"] wareki = ["明治","大正","昭和","平成"] if year < 1912 wareki_key = 0.to_i wareki_year = year - 1867 elsif year >= 1912 && year < 1926 wareki_key = 1.to_i wareki_year = year - 1911 elsif year >= 1926 && year < 1989 wareki_key = 2.to_i wareki_year = year - 1925 elsif year >= 1989 wareki_key = 3.to_i wareki_year = year - 1988 end key = (year+9)%12 print(year , "年は" , wareki[wareki_key] , wareki_year , "年で、干支は" , eto[key] , "年であり、この年に生まれた方は今年" , 2017-year , "歳になります\n")
楽しく書けることをモットーにしている言語なので、初心者でも書きやすかったです。
次に最近人気のPython3で書きました。
# -*- coding: utf-8 -*- print("年(西暦)を入力して下さい") year=int(input()) eto_key = (year + 9)%12 wareki_key = 0 wareki_year = 0 age = 2017 - year eto = ["亥","子","丑","寅","卯","辰","巳","午","未","申","酉","戌"] wareki = ["明治","大正","昭和","平成"] if year < 1912: wareki_key = 0 wareki_year = year - 1867 elif year >= 1912 and year < 1926: wareki_key = 1 wareki_year = year - 1911 elif year >= 1926 and year < 1989: wareki_key = 2 wareki_year = year - 1925 elif year >= 1989: wareki_key = 3 wareki_year = year -1988 print (str(year) +"年は"+ wareki[wareki_key] + str(wareki_year) +"年で、干支は" + eto[eto_key] +"年であり、この年に生まれた方は今年"+ str(age) +"歳になります。")
インデントが規則化されているため綺麗な見た目のコードになります。複数人に見せる時とかは良さそうです。
次はみんな大好きC言語です。
#include <stdio.h> int main(void){ int year,eto_key,wareki_year,wareki_key,age; /* year : ユーザーから入力してもらった年号 eto_key : 配列「eto」に対する添字 wareki_year : 和暦の年号の保存 warkeki_key : 配列「wareki」に対する添字 age : 年齢の保存 */ printf("年(西暦)を入力して下さい。:"); scanf("%d",&year); char eto[12][24] = {"亥","子","丑","寅","卯","辰","巳","午","未","申","酉","戌"}; char wareki[4][8] = {"明治","大正","昭和","平成"}; if (year >= 1868 && year < 1912){ wareki_key = 0; wareki_year = year - 1867; }else if (year >= 1912 && year < 1926){ wareki_key = 1; wareki_year = year - 1911; }else if (year >= 1926 && year < 1989){ wareki_key = 2; wareki_year = year - 1925; }else if (year >= 1989){ wareki_key = 3; wareki_year = year - 1988; }else{ printf("明治以前(1868年より前)の暦は対応しておりません\n"); return 0; } age = 2017 - year; eto_key = (year+9)%12; /* printf(year + "年は" + wareki[wareki_key] + wareki_year + "年で、干支は" + eto[year%12] + "年であり、この年に生まれた方は今年" + age + "歳になります。"); */ printf("%d年は%s%d年で、干支は%s年であり、この年に生まれた方は今年%d歳になります。\n",year,wareki[wareki_key],wareki_year,eto[eto_key],age); /* printf("年は"); printf("%s",wareki[wareki_key]); printf("%d",wareki_year); printf("年で、干支は"); printf("%s",eto[eto_key]); printf("年であり、この年に生まれた方は今年"); printf("%d",age); printf("歳になります。\n"); */ return 0; }
Cはやっぱり難しいですね。2バイト文字の扱いにつまづきました。
Cを書いたのでちょっと派生してC++も齧りました
#include <iostream> using namespace std; int main(void){ int year,eto_key,wareki_year,wareki_key,age; /* year : ユーザーから入力してもらった年号 eto_key : 配列「eto」に対する添字 wareki_year : 和暦の年号の保存 warkeki_key : 配列「wareki」に対する添字 age : 年齢の保存 */ cout << "年(西暦)を入力して下さい。:" << endl; cin >> year ; char eto[12][24] = {"亥","子","丑","寅","卯","辰","巳","午","未","申","酉","戌"}; char wareki[4][8] = {"明治","大正","昭和","平成"}; if (year >= 1868 && year < 1912){ wareki_key = 0; wareki_year = year - 1867; }else if (year >= 1912 && year < 1926){ wareki_key = 1; wareki_year = year - 1911; }else if (year >= 1926 && year < 1989){ wareki_key = 2; wareki_year = year - 1925; }else if (year >= 1989){ wareki_key = 3; wareki_year = year - 1988; }else{ cout <<"明治以前(1868年より前)の暦は対応しておりません" << endl; return 0; } age = 2017 - year; eto_key = (year+9)%12; cout << year<<"年は"<<wareki[wareki_key]<< wareki_year<<"年で、干支は"<<eto[year%12]<<"年であり、この年に生まれた方は今年"<<age<<"歳になります。"<< endl; }
Cとはだいぶ書き方の違う部分があり、迷いそうです。ちゃんとCに慣れてから触りたいと思います。
こんな感じにざっくりですがいろんな言語を齧ってみました。
まだまだ何もできませんが、もっと勉強してちゃんと扱えるようになりたいと思います。
まずはrubyあたりかなぁ…