2015年3月26日木曜日

Javaを学ぼう 2

今回はPerlのときと同じように、 1 から 100 までの整数をすべて足し合わせるプログラムを java で作ってみましょう。

1、まずするのはクラスの名前を決めることです。java ではプログラムのひとつひとつをクラスといいます。名前は前回と同じHelloworldでいいでしょう。Javaのプログラムの最初のほうにpublic class Helloworld{と書いてありますが、これは、「このクラスはHelloworldという名前だよ」と言う意味です。

つぎに java プログラムの main文 を書きます。

public class Helloworld{
    public static void main(String[] args)
    {
    //ここに処理を書く
    }
}

String[] は文字列のデータ型をあらわし、argsは「複数の文字列」を意味しています。前回は

public class HelloWorld{

     public static void main(String []args){
        System.out.println("Hello World");
     }
}

と書いてありましたが、これは「Helloworldと表示しろ(そして一行改行しろ)」という命令文です。System.out.printlnの部分をSystem.out.printに変えると一行改行しないでただ表示だけします。


2、プログラミングにおける計算記号はPerlのときの記事を参照してください。

public class HelloWorld{

     public static void main(String []args){
         int kaisuu = 0;
         int gokei = 0;

         while( kaisuu <= 100 ) {

         System.out.println(gokei);
         kaisuu++;
         gokei = gokei + kaisuu;

        }

     }
}

こんなプログラムを書いて、コンパイル(compile)、そして実行(execute)してみてください。
すると 1 から 100 までの整数をすべて足し合わせ、表示します。
注意すべきは java プログラムの名前の付け方です。

実際の java プログラムの名前とプログラム内でのプログラム名が違うとエラーになってコンパイルできません。プログラムの名前を変えるときは注意しましょう。

2015年3月21日土曜日

Javaを学ぼう 1

アンドロイドのアプリを作りたいと思い、環境を構築してみたのですが、なにが書かれているのかさっぱりわかりません。プログラムのコードはJavaで書かれているのですが、そもそも僕はJavaを知りません。そこで、Javaを勉強したいと思います。

例によって、Perlのときと同じようにオンライン上でプログラミングができるウェブサイトを使います。
http://www.tutorialspoint.com/compile_java_online.php
環境構築は面倒ですし、スペックの低いノートパソコンだとちゃんと動かなかったりしますからね。

まずは、"Hello World"と表示するプログラムを作ってみましょう。

1、
public class HelloWorld{

     public static void main(String []args){
        System.out.println("Hello World");
     }
}
と書き込みます・・・ってもう書いてありますね。

これをcompile(コンパイル)してから実行(execute)すれば、Hello World とTerminalに表示されます。Perlのときと違うのは、いちいちコンパイルしないと動かないということですね。


2015年3月4日水曜日

連続体仮説とは?

連続体仮説について非常にわかりやすく解説している
Gizmodeさんの記事「無限を最短で紹介するよ」です。
おもしろいです。
http://www.gizmodo.jp/sp/2011/07/post_8960.html

Perlを学ぼう 6 入力フォームを作る

Perlを学ぼう講座も第6回となりました。この講座では基本的に「(僕が)作りたいものを作る。必要な知識はその都度解説。」というスタンスを取っています。よって、例えば繰り返し処理には while構文 以外にも for構文 や foreach構文 があるのですが、それは、後ほど機会があれば解説したいと思います。。。(´・ω・`)

ということで、せっかく Perl という Web開発に適した言語を勉強しているのですから、今回は簡単な「入力フォーム」でも作ってみましょう。

入力フォームというと前回作った1から100までを足すプログラムよりはずっと複雑です。今回は、PerlでCGIというものを作ります。CGIとはCommon Gateway Interfaceの略で、ウェブサーバ上でユーザプログラムを動作させるための仕組みです。(1)

昔、ホームページを作るのにHTML言語というのを使ったことがある人がいるかもしれませんが、HTMLだけだと日記とか自分のプロフィールを作るくらいの(静的な)コンテンツしか作れません。CGIを使えば、入力フォームの設置とか、掲示板とか、いろいろと複雑な(動的な)コンテンツが作れます。

入力フォームを作るわけですが、じゃあどこにその入力フォームを置くのかというと、自分のサーバーなわけです。ですから、まず自分のサーバーのほうで入力フォームの形を作らないといけません。

よって、まずは HTMLファイル を作らなくてはいけません。HTMLはHyperText Markup Languageの略で、Webページを作成する時に使用される言語の一つです。(2)

HTMLファイルの名前はわかりやすくform.htmlとでもしましょう。以下のコードはWeb libraryさんから引用したものです。(3)

<html>
<head>
<title>フォームサンプル</title>
</head>
<body>
<form method="post" action="form.cgi">
  <p>
    メッセージ<br>
    <input type="text" name="message" size="20" value="">
  </p>
  <p><input type="submit" value="送信する"></p>
</form>
</body>
</html>

このようなコードでHTMLファイルを作成します。
このHTMLのコードを実行すると、つぎのようなボタンができます。

キャプチャです

このフォームはまだ未完成かつ単なるキャプチャなので、メッセージを書くことができません。
このようなフォームからメッセージを送信し、CGIで受け取るわけです。

参照文献
(1)日本語版Wikipedia「Common Gateway Interface」参照。2015年3月5日閲覧。
(2)WebWord「HTMLとは」参照。2015年3月5日閲覧。
(3)Web library「フォームからの入力を受け取る」より引用。2015年3月5日閲覧。

2015年3月3日火曜日

Perlを学ぼう 5(1から100までを順番に足していくプログラム)

前回、1から100までを足すプログラムを書くための大体の基礎を勉強しました。今回は実際に1から100までを足すプログラムを書いてみましょう。

まず、何が必要なのかを考えてみます。必要な事と言えば次のようなものでしょう。

0、まずゼロからスタート。
一、1 を足す。(これを kaisuu としてカウントする)
二、1 だけ増えた kaisuu を今までの数字の合計 goukei と足す。(足した結果を goukei に上書きする)
三、この処理を繰り返す。
四、100回足したら(kaisuuのカウントが100になったら)計算を終える。
五、結果として goukei を表示する。

これをプログラミングでコンピュータに命令してあげればいいわけですね。
では、実際にやってみます。

1、今回はある命令を繰り返すことが求められるので、while という命令を使います。
while (条件) {
# 処理
}
こういう風に書くと、 ( ) 内に定められた条件で、処理の繰り返しをします。繰り返したい処理は { } ではさみます。
今回はこの処理を繰り返す while を使って、こんな風に書きます。

$kaisuu = 0;
$gokei = 0;

while( $kaisuu <= 100 ) {

print"$gokei\n";
$kaisuu++;
$gokei = $gokei + $kaisuu;

}

まず、
$kaisuu = 0;
$gokei = 0;
という風に、スカラー変数にゼロを代入しています。スカラー変数は、そのままだとめちゃくちゃな数字が入っているので、ゼロを代入して、変数内部の数字をゼロに変えてあげるのです。これを変数の初期化といいます。また、こういう風に、最初に「こんな変数を使うよ」とあらかじめ書いてあげることを、変数の宣言といいます。

while はさっき紹介したとおり、ある処理を繰り返すものですね。カッコ内の条件式は $kaisuu <= 100 と書いてあります。これは$kaisuuが100以下である限り、処理を繰り返すよ、という意味です。記号の書き方が若干数学と違います。以下の表を参考にしてください。

画像引用元:大町伸宏. 2009.「Perl入門5」大谷大学卒業論文「Python学習者のためのPerl入門教材について」添付資料. 

では、while でどういう処理を繰り返せと言っているのでしょうか。内部にはつぎのように書かれています。

print"$gokei\n";
$kaisuu++;
$gokei = $gokei + $kaisuu;

print は前回やりましたね。ダブルクオーテーション内の文字列を画面に表示しろという命令です。ダブルクオーテーション内には $gokei とありますから、処理の初めにまず $gokei という変数に格納されている数字を表示します。最初に $gokei = 0; としましたから、最初はゼロが格納されています。

次は $kaisuu++; です。++ は「 1 ずつ足せ」という意味です。だから、$kaisuu = $kaisuu + 1; と書いても同じです。ただ、++ と書いたほうが短くてすむので、めんどくさくないのです。
$kaisuu にも最初に 0 を代入したので、最初は 0 です。しかし、$kaisuu は処理を繰り返すたびに 1 ずつ増えていきます。

最後に $gokei に $gokei + $kaisuu を代入しています。$gokei も $kaisuu も最初は 0 ですが、$kaisuu は 1 ずつ増えていきます。よって、一番最初は 0 たす 1 という処理になります。この結果を $gokei という変数に格納します。

このプログラムを実行すると、結果を表示(0)、0+1を実行・結果を表示、1+2を実行・結果を表示、3+3を実行・結果を表示、という処理を100回繰り返します。最初に条件式として $kaisuu <= 100 を定めたので、 $kaisuu が100に到達するとストップします。

このプログラムの実行結果は・・・
0 から始まり・・・
計算は100回繰り返されます。結果は5050。
以上が1から100までのすべての数字を足すプログラムとなります。

それでは、練習問題として、1から10までの数字を全部足すプログラムを作ってみましょう。
最終結果が55になれば正解です。







Perlを学ぼう 4(1から100までを順番に足していくプログラム)

前回は
print "Hello World!\n";
というプログラムを実行しました。

今度はもっと複雑なプログラムを書いてみましょう。今回は、計算をするためのプログラムでも書いてみましょうか。

じゃあどんな計算をするか。。。それでは1から100までを順番に足していくプログラムを書いてみましょう。

1から100までを足す・・・というとふつうは人力でそんなことをしません。人力でやるとめんどうだからです。ふつうの人は計算機を使うか、あるいは少年時代のカール・フリードリヒ・ガウスなら計算を工夫して101×50と計算するでしょう(注1)

今回は自分でプログラムを書いて求めてみましょう。

1、まず、Perlで計算をするための基礎を学びましょう。数学や物理では計算に代数を使いますが、Perlではスカラー変数を使って計算します。変数名の頭には $ をつけ、 アルファベットから始めなくてはいけません。2文字目以降は数字、アルファベットおよびアンダースコア ( _ ) を使うことができます。ハイフン( - )は使えません。アルファベットの大文字・小文字は区別されます。
○ $abc
○ $abc5
○ $a_b
× $5abc
× $_abc
× $a-b


2、スカラー変数に代入します。
$a = 1;
$b = 2;
$c = 3;
こう記述すると、$a には 1 が、 $b には 2 が、 $c には 3 が代入されます。
printを使って、画面に表示してみましょう。
1~3行目でスカラー変数に代入しています。4行目でこの変数を文章と一緒に表示します。
このプログラムを実行してみます。

すると、上記のような結果になりました。プログラムは $a などのスカラー変数の場所に、代入された数字を表示していますね。

気をつけなくてはいけないのは、数学とは (=)イコール の扱いが若干違うことです。
$a = 1;
$a = 2;
$a = 3;
このように記述することは、数学ではできません。しかし、プログラミングではできます。では、 $a はいまどんな値が代入されているのでしょうか。
これを実行してみます。
これが実行結果です。$a には 3 が代入されていることがわかりました。
数学では (=)イコール は「等しい」という意味です。しかし、プログラミングでは、このように、等しいというよりは、「~を代入する」という意味合いが強くなります。

プログラミングでは、プログラムを実行すると、上の記述からから順に実行されていきます。そのため、上記のプログラムでは $a に 1 が代入され、次に 2 が代入され、最後に 3 が代入されました。そのため、 $a は最終的に 3 として扱われているのです。


続く・・・。

脚注

(注1) ふつうに計算すると、1+2+3+4+・・・+98+99+100=?です。しかし、この順番を並び替えてみると、(1+100)+(2+99)+(3+98)+・・・+(48+53)+(49+52)+(50+51)=?と、足すと101になる組み合わせが50個あるのだと考えることができます。だから、101×50で1から100までの総和が求められるわけですね。これがガウスの工夫です。今回は全く関係ないですが・・・。 

Perlを学ぼう 3

前回は以下のプログラムを実行しました。

#
#  Hello World Program in Perl
#
print "Hello World!\n";

と書いてあります。

1行目、2行目、3行目にある#(シャープみたいな記号)は、「プログラム実行のとき、この行は無視してね」という意味です。ふつう、プログラムに適当なことを書くと、エラーになってちゃんとプログラムが動きません。しかし、#を入れておくと、コンピュータはプログラム実行の際、その行を無視します。

なので#を先頭に入れておけば、その行にはいろいろなコメントを書き込めるし、そのままプログラム実行ができるというわけです。ちなみに上記のプログラムには
#Hello World Program in Perl
と書いてありますが、これは「Perlで書いたHelloWorldプログラムだよ」って意味です。

#の行は無視されるので、適当なことを書いてもエラーにはなりません。ちゃんと実行できます。

では、このプログラムの
print "Hello World!\n";
これはどういう意味なのでしょうか。

1、まず、最初の「print」は画面に文字を表示させるための命令です。printという命令を使うことで、「" "」(ダブルクオーテーションマーク)のなかの文字などを画面に表示することができます。上記プログラムでは"Hello World!\n"とありますから、これは「Hello World!\n」を表示するプログラムだということになりますね。

2、では、Hello World!\n の「\n」はどういう意味でしょうか。これは「改行をしろ」という命令です。例えば、
print "Hello World!";
print "Hello World!";
print "Hello World!";
このプログラムは「\n」がはいっていません。これを実行してみると
こういう結果になりました。「Hello World!Hello World!Hello World!」と書かれています。\n が入っていなかったので、改行がされていないのですね。読みづらいです。
では、今度は \n を使ってみます。
print "Hello World!\n";
print "Hello World!\n";
print "Hello World!\n";

今度はきちんと改行されました。ぐっと読みやすくなりましたね。

3、最後に
print "Hello World!\n"; 
の「;」このマークの意味です。 これは「ここで命令は一区切りだよ」という意味です。だから、print などの命令をしたら、「;」を書いて、命令が一区切りする場所をコンピュータに教えてあげます。

国語の作文でいう「。」みたいなものだと考えてください。文章だって、
「あの時私は考えたなぜなら私はすでに事実をしっていたからだ彼はそれをしらなかったようで・・・」
こんな風に「。」がないと、読むときに混乱してしまいますよね。

Perlだと「;」を使ってあげないと、コンピュータが混乱してしまうのです。試しに「;」を使わないでプログラムを実行してみましょう。
print "Hello World!\n"
print "Hello World!\n"
print "Hello World!\n"

;」がないですね。実行結果は以下の通り。
エラーになってしまいました。syntax errorというのは構文エラーという意味で、「構文が間違っててコンピュータが理解できないよ」という意味です。このように最後に「;」がないとエラーになってプログラムが動かないので気をつけましょう。


ちなみに、printは「" "」ダブルクオーテーション内の文字列を表示しろという命令ですが、ひとつの print という命令で、複数の文字列を表示することができます。

上記のように、「" "」で囲んだ文字列の間に「,」カンマを置いて、ひとつのprintの命令で複数の文字列を表示させることができます。

実行すると上記のようになります。printは一回しか使っていないですが、きちんと3つの文章が表示されていますね。

Perlを学ぼう 2

プログラミングを学ぶ際にはいろいろな前提知識が必要です。リストがどうとかスカラーがどうとか文字列がどうとか、変数の宣言がどうとか・・・。でもきっちり前提知識を勉強してからプログラミングを勉強するとなると、おそらくプログラミングに到達するまでに飽きてしまうでしょう。なので、まずは、実際にプログラムを書いていき、必要な知識はその都度解説していきたいと思います。

1、まずは前回紹介したウェブサイトに行きます。
http://www.tutorialspoint.com/execute_perl_online.php

こんな感じの画面になるはずです。なお、クリックで若干拡大可能。

プログラミングは赤い丸で囲まれた、ココ!って書いてある部分に書き込みます。できたらその左上のExecuteってボタンを押します。すると、プログラムの実行結果を下の緑色の部分「Terminal」で見ることができます。

2、じゃあ、いきなりですが、プログラムを書いてみましょう。
print"Hello world!\n";
と書いてみてください。。。。ってもう書いてありますね。
これは「Hello world!」(やあ、新たな世界よ!みたいな意味)という言葉を出力するプログラムです。
実行してみましょう。
赤丸で囲まれたExecute(起動)を押してみてください。

すると、下の実行結果(Terminal)の画面に「Hello World!」という言葉が出力されましたね。
プログラムを書いて、実行する。これが基本的なPerlプログラミングの流れです。
他の言語、例えばC言語だと、コンパイルという作業を挟まなくてはいけないのですが、Perlの場合はコンパイルする必要はありません。

2015年3月2日月曜日

Perlを学ぼう 1

プログラミングを学びましょう。今回は特にPerlを勉強していこうと思います。Perlとはどんな言語でしょうか。wikipediaには次のように書いてあります。(1)

Wikipediaより引用。
  • 実用性と多様性を重視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、テキスト処理などのプログラムを書くのに広く用いられている。
具体的にはPerlでウェブサイトの問い合わせフォームを作ったりできますし(2)、ちょっと前にはやっていたSNSのmixiやブログツールのMovable TypeもPerlでできています。(2)だいたいどんな感じかわかりましたか?

本項ではこのプログラミング言語Perlを勉強していきたいのですが、Perlを勉強するには、本当は開発環境や実行環境をインストールしなくてはいけません。。。が。Perlに限らず開発環境や実行環境のインストールって結構めんどくさいのです。しかも結構重い場合が多いので、途中で飽きて三日坊主になったりすると、インストールした環境のアンインストールがめんどくさいのです。


そこで、今回は、このウェブサイトを使います。
プログラムを書いて、実行結果をみるだけなら、ウェブ上で気軽にできるウェブサイトです。

ここを使えば、プログラミングの練習のためだけにわざわざ環境を構築する必要はありません。

プログラミングの練習に最適です。

つづく・・・。

 参考文献

(1)Wikipedia「Perl」2015年3月2日閲覧。
(2)All about「そもそもPerlってなんですか?」2ページ。2015年3月2日閲覧。