プログラミング メモ memo.txt

一度考えたコードを忘れるのはもったいないので、メモとして残していきます。現在、JavaとC++とVBAを勉強しているので、そこらへん書きます。

C++ 入力と出力。簡単な演算まで

f:id:rkprog:20151024010640p:plain

昨日、開発環境を整えたので今日は入力と出力から

入力と出力

出力は昨日もやってしまったのだが、cout>>を使うらしい
入力はcin<<らしい

なんて読むのかはよくわからない

cout>>"出力対象">>endl; //出力

cin<<"キーボードからの入力対象のオブジェクト";  //入力

実際にやってみると



ソースコード

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string input;
	cout << "文字列を入力してください。"<<endl;
	cin >> input;
	cout << input << "と入力されました。" << endl;
		return 0;
}

実行結果

f:id:rkprog:20151021112931p:plain

そこそこ上手くいったかな?


ところで、昨日からstring型を使っているのだけど

char型でポインタを使う方法をあるらしい。

こんな感じ

char* ch = "hello";

どっちの方が普通かはわからないけど、stringは別で#includeが必要になるからなあ

とりあえず、同じ方法でinputが受け付けられるかやってみたら、エラーが出たので

この方法で文字列リテラルを受け付けるのは厳しいのかな?

同じようにint型の入力も試してみる

#include<iostream>
#include<string>
using namespace std;

int main()
{
	int a, b;
	cout << "a-->" << endl;cin >> a;
	cout << "b-->" << endl;cin >> b;
	cout << "a+b=" << a + b << endl;
		return 0;
}


実行結果

f:id:rkprog:20151021113709p:plain


上手くいってるよう。
ちなみに、int型にstring型を渡すと

f:id:rkprog:20151021113807p:plain

と挙動不審になったけど動いた。

この動くのは怖いですね・・・

ついでにint型の配列の入力と出力もやってみた

ソースコード

#include<iostream>
#include<string>
using namespace std;

int main()
{
	int a[5];
	for (int i = 0; i < 5; i++)
	{
		cin >> a[i];
	}
	for (int i = 0; i < 5; i++) {
		cout << a[i] << endl;
	}

	return 0;
}


実行結果

f:id:rkprog:20151021114553p:plain


エラー出て簡単にしまくったけど

Javaみたいに変数nを読み込んでn個の配列は生成できないのかな?

それとArrays.toString()のような簡単に配列を出力する方法も調べたいな。

C++を初めてやる人へ。開発環境の導入(準備)から、出力まで。

f:id:rkprog:20151024010640p:plain

なんか、元々Visual studioが入っていて中途半端な段階から進んだので、かなり時間がかかってしまいました。

やはり、開発環境の導入は最初の難関ですね・・・

Visual Studio のダウンロード

C++では統合開発環境を使うのかな?

とりあえず、どれだけ調べてもVisual C++へと言われる感じしたので

ダウンロード | Visual Studio

ここからVisual Studio Communityをダウンロードしてインストール

そのままMicrosoftアカウントなどを入れて起動すると

なんかEclipseのような画面へ・・・

「ちょっと近づいたな・・・?」

という感覚。

Visual C++ (のパッケージなど)をインストール

左上の「ファイル」→「新規作成」から

プロジェクトを作成して

Visual C++を選択!

もういけるのか!!

と思いきや・・・

またこれだ・・・

f:id:rkprog:20151021020436p:plain

長いな・・・おい・・・

やっとこさ

これも終わってプロジェクト作成

「なんとなく、間違っている気しかしない・・・」

と独り言を言っていました笑

初めての出力まで

なんかごちゃごちゃやってたらこんなことに・・・

わけがわからない。なんか既にほとんどできているテンプレートを使用してしまった?

f:id:rkprog:20151021021131p:plain

とりあえず、気を取り直して

これか?

f:id:rkprog:20151021021323p:plain

これも違った(30分くらい迷いましたが)

どうもこれらしい。

f:id:rkprog:20151021022239p:plain

空のプロジェクトにチェックを付ける

f:id:rkprog:20151021022349p:plain

これで、出てきた画面で

右のほうにあるソースファイルってところで右クリック

追加で項目を追加?

とりあえずそれでC++フォルダを作成できた。

そこで以下のプログラムを打ってデバッグ

#include<iostream>
using namespace std;

int main()
{
cout << "hello world" << endl;
}

うお!?

一瞬(0.2秒くらい)hello worldが映った。

見えるかこんなの・・・

とりあえず、いろいろ参考にしてダメもとでreturn 0;も追加

今のプログラムはこんな感じ

Source.cpp

#include<iostream>
using namespace std;

int main()
{
cout << "hello world" << endl;
return 0;
}

で、これを押すらしい

f:id:rkprog:20151021023014p:plain

すると

f:id:rkprog:20151021023058p:plain

おおー。

いい感じですね。

とりあえず、導入は達成したのか?

出力もできたのか?

いっそのこと変数も使えるかと思って

#include<iostream>
#include<string>
using namespace std;

int main()
{
string hello = "hello world";
string name = "name";
cout << name <<"さんから"<< hello<< endl;
return 0;
}

へ修正

すると

f:id:rkprog:20151021023714p:plain

とりあえず今日のところは合格点ですね。

てこずりましたが、これからも頑張ります。

phpからファイルに追記。メールを送信する方法。

個人的にシフト作成ツールとしてphpを使ったりするので、メモとして


index.phpとsend.phpを作成

ここでやることとしては

  • 入力を受け付けるindex.phpを作成
  • index.phpに入力フォームを作成
  • 入力されたデータをpostする先のsend.phpを作成
  • send.phpでファイルに記入する仕組みを作成
  • ファイルから読み込んで内容をメールで送信

ちなみに、このメールの宛先を自分にすることで、僕は誰がシフトの申請を出したかが分かるようにしています。


index.php

<?php

?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<form action="send.php" method="post">
name:<input type="text" name="name"><br>
message:<input type="text" name="message"><br>
<button type="submit">submit</button>
</form>
</body>
</html>


とすることで、こんな感じのページを作成できます。
f:id:rkprog:20151021011631p:plain

そしてsend.phpを作っていきます

send.php

<?php

$dataFile = 'text.txt';


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	$name = $_POST['name'];
	$message = $_POST['message'];

	$write = $name."さんからメッセージです。\n".$message;

	$fp = fopen($dataFile,'a');
	fwrite($fp, $write);
	fclose($fp);


	mb_language("Japanese");
	mb_internal_encoding("UTF-8");
	$textdata = file_get_contents('text.txt');
	$sendmail = mb_send_mail("example@example.jp", "test", $textdata, "From: example.com");

}

?>

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>send</title>
</head>
<body>
	Sended!
</body>
</html>

とすれば、送信した際にSended!と書いてあるページに飛びます。

メールの送信のメソッドは返り値がbooleanなので
送信に失敗した場合falseが帰ります。

それを利用して
送信しました!と送信できませんでした。
を条件分岐してあげるといいですね。

実際、自分もそうしています。$sendmailはtrue or falseになっているので。

この先は大体の実行結果です。
index.php
f:id:rkprog:20151021013127p:plain

send.php
f:id:rkprog:20151021013032p:plain

text.txt
f:id:rkprog:20151021013231p:plain


こんな感じです。
メールは試してみる時に自分のアドレスを入れてみてくださいね。

プログラミング勉強開始~三ヶ月まで

Javaを本格的に勉強しようと思ってから約3か月。

AIZU ONLINE JUGDEでの状態はこんな感じ。

f:id:rkprog:20151019004904p:plain

そこそこアルゴリズムも作れるようになって。コードの読みやすさにも気を遣う余裕も出てきた。

 

スキルとしてはまだまだだけど、「同じ物を2回書きたくない」って気持ちはわかるようになってきた気がする。

 

AIZU ONLINE JUDGEは、プログラミングの問題がかなり豊富に用意されている、プログラミングコンテストも行っているサイトです。最初、何を使って勉強したらいいのかわからないという人は触れて行ってもいいかと・・・

AIZU ONLINE JUDGE: Programming Challenge

 

問題文も日本語で表示することができるので、問題内容がわからない・・・という事が無いです。

 

Javaの変数の型宣言にもある程度慣れてきて、エラーを修正するのが早くなってきたのが実感できます。

 

勉強を開始するときは、「プログラミング 入門」とか「Java 入門」とか言ってオススメの参考書を調べまくったりして、初心者のころからパーフェクトJavaとかに手を出したりして

www.amazon.co.jp

 

当時の僕にはレベルが高すぎたんでしょう・・・読んでて10回は寝ました。

 

そのあと、これとか読んで

www.amazon.co.jp

 

これとかも持ってたりして

 

www.amazon.co.jp

 

なんていうか、「この本を読んでクラスが分かった!」とか「写経をしていたらどのレベルまで達した」とかいうのはなくて、本を読んで一通り理解(というよりなんとなくわかった状態)になった後、自分で何も見ないでコード再現してみて、できなくて、もう一回読んで、コード書いて

 

って繰り返していたらいつのまにかクラスとかメソッドとかそこそこそれっぽくなってました。

まだまだスキルを磨く必要は重々感じていますが・・・

 

テキストエディタなんかもモチベーション保つキーポイントでしたね

 

なんせ、プログラミングの最初って

「なんでこんなに細かい間違いでも全く動かなくなるんだ・・・」とか

「書いてあるコードの意味が全くわからない」とか

「リファレンスが英語・・・」とか

もうなんか、楽しくないというか、辛いというか、

 

壁が多すぎたので笑

 

 

最初、Eclipseで書いて練習してたんですけど、映像でプログラミング学習ができるスクーで

schoo.jp

Atomってテキストエディタが紹介されてて、そちらに切り替えて・・・

このスクーには15日間くらいですが随分助けられました。「プログラミングを学ぼうとしている人って、こんなにいるんだ」って。実際のエンジニアが授業をしてくれるところとか、わくわくするものがありますよね。

生放送もありますし、「これぞ一体感」って感じなんでしょう。

これ以降、今もドットインストールさんにお世話になっていて

dotinstall.com

なにより、スピードが速いので自分に合っていました。1.6倍速で映像見ています。

ここでsublime textが主に扱われていて、そちらも使ってみたら

起動速度が速いのなんのって・・・

それからsublime textを使い続けています。Matherial designを使うと一気に雰囲気変わりますしね・・・

 

映像授業が多いのって、ITって感じしますよね。

プログラミング学習サイトを運営するのも面白そうですね。勉強するの大変そうですけど・・・

 

結局この期間の勉強は

 

①一気に本読みまくる、映像授業を見まくる

②コードを再現して、なにかが上手くいくたびに喜ぶ

③AIZU ONLINE JUDGEの問題解く

④解いて喜ぶ

 

くらいな感じでしたね。多分、②とか③のところで頑張ってGoogle検索とかしてなんとかしようとするので、そこでスキルが上がってきたんだと思います。

 

いつの間にか、BufferedReaderとか暗記して書けるようになっていて・・・

 

ドットインストールさんを見るようになってからは、いろんな言語に興味が出てきましたね。

html/css/php

を使って、シフトを簡単に作成するためのWebツール(あくまで自分用ですが)も作れましたし。

unity/Android studio

とかも実際にどう使うのかわかりやすかったですし。

 

他にもcとかpythonとかrubyとか一応見ました。まだ書けません。

 

なんだかんだ、プログラミング楽しそうだなって思って初めてみて

やっぱパソコンを使うこと好きなんだなーって感じて

むしろ、そうじゃなかったら続けられそうにないなって思ったりして

 

いつか「自分こういう物、作ったんですよ」って言えるようになりたいですね。

 

それと、プログラミングの勉強している人と仲良くしたいですね。

勉強会も予定が合えばちょこちょこ行く予定です。

 

10/25には、コンテストの予選にも参加してみようと思います。

もちろん、参加するだけ。です。

recruit-jinji.jp

 

とりあえず、今年と来年の目標は

Javaなどを使って何か1つ作る

②英語の学習をして、リファレンスなどでもめげないようになる

の2点ですね。

特に英語、頑張ろうと思います。今年中にTOEIC800点は越えたいです。。。

話せるようになりたいですしね。

 

そのうち、Githubの使い方なんかも勉強しようと思います。

いつか自分が黒い画面に文字を打っているような、そんな想像をするのがとても楽しいんですよね。