そら blog

プログラミング 経済 就活 研究など自分の趣味の範囲で発信します。

高専→大学→大学院を振り返って(高専編)

2020年3月25日

 

学生生活 に 終止符 を打ちました。(とりあえず修士号取得)

 

 

高専から数えると、9年間、学生であったわけですが、

今後の人生において大事なことを沢山学びました。

 

過去の自分の心境ややってきたことを簡単に振り返りたいと思います。

 

大きくまとめると

高専

②大学学部(3・4年)

③大学院

となるので、➀から順に振り返ります。

 

高専

入学したての頃、勉強量がとても多くとても大変だった記憶があります。特に数学と専門科目(プログラミングや情報理論応用数学、統計など)。。。

 

高専は理数に特化した教育機関であるため、高校数学と大学数学を入学後の3年間で叩き込まれ、高専4・5年で専門科目を主に勉強します。(高専は5年制)

数学に関しては、高校2年で微積線形代数、3年で微分方程式をやってました。

中学まで勉強で苦労したことがなく(県内模試10位ぐらい)、高専で学ぶことのほとんどが簡単に理解できず衝撃的だったことを覚えています。

高専1-3年(高校1-3年と同じ)は、勉強の楽しみや意義に気づいておらず、適当に過ごしていました。体育会系の部活にハマり、毎日練習に取り組んでいました。

 

そして、適当にすごしてると3年終盤になりました。

このころからみんな就職や進学など進路を考え始めます。

私も当初は、就職を考えていました。理由は簡単で勉強がそんなに好きではなかったからです。しかし、いざ就職先を考えるとどこに行きたいのか、どこに就職できるのかまったく思いつきませんでした。優秀な学生は能動的に学び、プロコン、アプリ開発などを自主的に行うことで技術を身に着けいていたのに対し、私には何も傑出した技術がなかったからです。

高専からの就職の場合、当時の私のような平凡な学生でも大企業への就職は簡単です。しかし、私のような技術がなく即戦力として使えない高専生は単純かつ厳しい労働環境で使われるだけです。私はそうなりたくなかったので、大学に進学することを決意しました。大学に進学し、しっかり勉強して技術・知識を高めて社会にでたいと考えたためです。

 

一般的に進学を決めた人は高専4年から受験勉強(大学3年次編入試験)をはじめます。

しかし、私の第一志望の大学は高専4年時の席次が上位5位程度であれば、推薦入試により試験をパスできることを知っていました。そこで、滑り止めに向けた受験勉強をしつつも、席次を上げることに注力しました。(このころから勉強の楽しさに気づきます。)

 

高専4年の2月ごろ、本校卒業生のOGの講演会がありました。その人は大学院生であり世界トップクラスの一流企業の内定をもっていました。

私はその講演会の次の一言に大きな影響を受けました。

 

「これからはグローバル化がさらに加速し、技術者は技術力のみならず国際性が求められる。」(うろ覚え)

 

とても優秀であると評判の良い先輩の一言であったため、私はすぐに鵜呑みし、その瞬間に私がなりたい理想像を打ち立てました。その理想像とは、国際性がありかつ高度な技術を有した者です。

 

その理想実現のため、志望大学をそのOGと同じ大学に変更しました。その大学(私が学士と修士を取得した大学)は、留学や実践力に力を入れていたためです。(高専では有名)

 

そして、最終学年である5年になります。

 

肝心の進路を左右する受験は、席次が上位5位であったため推薦入試で簡単におえることができました。

 

となると、あとはあれです。あれ。

 

卒業研究

 

つらいイメージがありますが、私は比較的楽しく取り組むことができ、それなりの成果をあげることができました。

また、5年後期(10月から)から担任の勧めでITベンチャーでアルバイトをしており、ITベンチャーのリアルを肌で感じながらよくわからない研究(AI)をしました。

 

手を動かして新しいものを作ったりすることが好きなので、研究開発向いてるかもと思いながら研究に取り組んでました。(実際のところペーペーエンジニアでした。)

 

そして、3月に無事卒業を迎え、理想像実現にむけ、大学に進学しました。

 

つづく。。。(更新予定は2日以内)

 

 

 

 

 

再帰的プログラミングで最大公約数を求める(ユークリッドの互除法)

気合入れてブログをはじめてみましたが、研究が忙しく、ブログの更新を後回しにしてしまいがちです。

毎日、更新していている方々を心から尊敬します。

では、さっそく本題に入ります。 今日は再帰的プログラミングで最大公約数を求めるアルゴリズムを実装します。

最大公約数とは

 2つ以上の正の整数の公約数のうち、最大値となるものをいいます。

 公約数についてはこちらを参考にしてください

 公約数の求め方|もう一度やり直しの算数・数学

 例えば、18と6の最大公約数は、”6”になります。  

 解答

 まず、二つの正の整数を約数に分解します。

 18 = 3 * 3 * 2, 6 = 3 * 2 * 1

 18 = 3 * 6,         6 = 6 * 1

 上の約数をなるべく大きくかつ二つの整数に共通して存在するように乗算すると6になります。

 

 手計算で最大公約数を求める場合、約数に分解して考えることが一般的ですよね。

 でも実は、そんなことをしなくても確実に求めることができるアルゴリズム(手法)が存在します。

 

 その名も

  ユークリッドの互除法

 です。

 とても名前の響きがいい、かっこいいです。

 

 このブログを理解した中学生の皆さんは、是非数学の先生にこのアルゴリズムについて尋ねてみてください。

 雑談はさておき。。。  

 では、どういうアルゴリズムなのか実際に日本語で理解しましょう。  

 

 二つの整数をx、yとし考えます。

  1.xをyで割り、余りを求めます。

  2.余りが0なら最大公約数はyです。

  3.余りが0でなければ、xにy、

    yに余りを代入し、1.に戻ります。

 

 やってることが割り算だけなのでとても単純ですね。

 

 実際に、32と24で考えてみましょう。

  1.32÷24の余りは、8

  2.余りが0でないので、32のところに24、

    24のところに8を入れる。

  3.24÷8の余りは0。よって最大公約数は8。

 数字で見るとよりわかりやすいです。他の数字でも試してみてください。

 では、実装に入りましょう。言語はPythonです。

 

 

import sys

def main():

    #int()でinput()の入力値を整数型にします。
    x = int(input("一つ目の整数を入力してください"))
    y = int(input("二つ目の整数を入力してください"))

    #アルゴリズム1. 2. 3. を繰り返す関数に二つの整数を格納し、結果を取得
    ans = euclidean(x, y)

    ##結果の呼び出し
    print("%dと%dの最大公約数は%dです" % (x, y, ans))



def euclidean(x, y): 

    #x÷yの余りを計算しrに格納
    r = x % y

    #余りが0の場合yが最大公約数
    if (r == 0):

        return y

    #余りが0以外のときは、xにy、yに余りを代入、もう一度余りを計算
    #ある関数が自分自身を呼ぶことを再帰と言う。
    else :

        return euclidean(y, r)

if __name__ == "__main__":
    main()

結果は次の通りです。

一つ目の整数を入力してください132

二つ目の整数を入力してください24

132と24の最大公約数は12です

関数が自分自身を呼ぶことを再帰的プログラミングといいます。

これを使うことで、同じことをある条件まで繰り返すようなプログラムをコンパクトに書くことができます。

今日はここで。

bye!!!

 

第一回 Pythonプログラミング 入力と演算

さて、2投稿目はプログラミングの授業です。

 

私は現在24歳ですが、プログラミングは15歳のころからやっているので、年齢の割に経験年数は長めです。

そのため、使用できる言語も幅広いです。

C, Java, Python, Ruby, php, HTML

 

このブログでは、初級レベルからデータサイエンスといった上級まで取り扱いますので、Pythonを主に使用します。

 

では、早速始めましょう。

 

今日のお題は、

 

入力と演算!

 

入力とは、コンピュータに数値や文字列を入力すること。

演算とは、四則演算のことです。

 

これらの両者を取り入れた題材として、レジを取り上げたいと思います。

 

レジにはこんな機能があります。

1 商品を読み込む(バーコードを読む)

2 合計金額の計算

3 預かり金の差分であるお釣りの計算

 

他にもいろいろありますが、とりあえず大雑把にこんなところでしょう。

 

今回実装するのは、上の3つの機能のうち、1 と 2 です。

では、早速ソースを見てみましょう。

 

f:id:b_a_fighter_us:20191123030933j:image

では、一行ずつ解説します。

 

import sys

こちらは、入力に必要なモジュールを読み込むための記述です。今はおまじないと思って大丈夫です。

 

item_List = ・・・・

これは、お店の商品名と価格をひも付けた辞書になります。

構文は

辞書名 = { キー1 : 値1, キー2 : 値2 }

です。

辞書名[キー]と書くと、

キーに対応する値を取り出します。

 

print()

文字や数値をコンピュータ上に表示する関数です。

かっこの中に数字や文字列、また変数を記述するとその内容を表示します。

¥nは改行を意味します。

 

※ちなみにほとんどの言語では、文字列を出力する際、ダブルクォーテーションで囲みます。数値や変数はそのままでもOK!

変数とは、文字や数列を代入する容器のようなものです。ここでは、buy1とbuy2がそれに当たります。

 

 

 

input()

かっこ内の内容を表示し、キーボード入力を受け付けます。

このソースでは、入力された値をbuy1とbuy2に格納しています。

 

sum_price = ・・・

2つの果物の合計金額を計算します。

inputで入力された2つの果物の名前を使い、item_Listから金額を調べ、2つの果物の値段の合計値を計算します。

演算子は下の通りです。

+ 足し算

ー 引き算

* 掛け算

/ 割り算

% 割り算の剰余

** べき乗

 

最後のprintは、合計金額sum_priceを出力しています。

print("文字列%dもじれつ" % sum_price)

文字列中の%dにsum_priceを埋め込み出力します。

 

結果は次の通りです。 

まず、1つ目にりんごを入力します。

f:id:b_a_fighter_us:20191123033410j:image

 

次はみかんですね。f:id:b_a_fighter_us:20191123033405j:image

 

すると、2つの合計金額を自動で計算してくれます。
f:id:b_a_fighter_us:20191123033407j:image

 

これで、あなたも簡単なレジの機能を作れるようになりました!

 

次回から、このレジの機能を拡張しながらプログラミングについて学んでいきます。

 

それでは、

 

bye!!!