いろんな言語齧ってみました。
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あたりかなぁ…