レベルチェック 01
例題1、例題2と解いてきましたが、
この時点でのレベルチェックです。
レベルチェック 01 a=2、b=3とした上で、計算結果としてa*b=6を出力したい。 下記のプログラムの間違いはどこか? #include <iostream> using namespace std; int main(){ a=1; b=2; cort << "a*b=" << a*b << endl; return 0; }
非常に単純なスペルミスですが、間違い箇所が分かりましたでしょうか。
正解は、
× cort ◯ cout
でした。
プログラムを学ぶ上で非常に効率がいいのが、たくさんプログラミングをすることと合わせて
・プログラムの間違いを見つけること
だと思います。
間違いを見つけ、正しく修正するには、プログラムを正しく理解していなければなりません。
プログラムが複雑になるにつれ、間違った箇所を見つけるのが難しくなっていきます。
特に学習初期の段階では、このような簡単な間違いを多く見つけられるようにしておくといいかと思います。
【例題2】計算をしてみる(変数って何?)
今回もプログラムの基本を学びます。
"計算結果の出力" です。
上記サイトの[基本 問題2]を参考にします。
例題2 aが1、bが2のとき、aとbの和を出力せよ。
問題文から適当に推測してみたのは、
aが1 → a=1
bが2 → b=2
aとbの和を出力 → a+bと書いてみる
という感じです。
前のエントリー「【例題1】文字を出力してみる」になんとなく当てはめてみたいと思います。
#include <iostream> using namespace std; int main(){ a=1; b=2; cout << a+b << endl; return 0; }
こちら実行したところエラーとなりました。
a=1とb=2の書き方にルールがあるようです。
a+bの部分は問題なさそうです。
ちなみに正解は、
#include <iostream> using namespace std; int main){ int a=1; int b=2; cout << a+b << endl; return 0; }
となります。
a=1やb=2の前に “int” という記述が追加されています。
解読編でこの辺りを解決してみたいと思います。
解読編
さっそく解読していきます。
#include <iostream> using namespace std; int main(){ }
ここは前に説明済みですので、説明は省略し、
波括弧「{」 から「 }」 の間のプログラムを考えます。
int a=1;
この部分が今回のポイントです。
ロベールのC++教室 - 第5章 変数 -
http://www7b.biglobe.ne.jp/~robe/cpphtml/
を見たところ、こういった計算をするには、
・この時の"a"は変数と呼ばれる
・変数は数字や文字を入れておく箱のようなもの
・aを使います!という"宣言"が必要
・数字を使う場合と文字を使う場合では、宣言の仕方が違う
だそうです。
少しごちゃごちゃしていますが、簡単に言うとaは数字を入れておく変数なので、
"int"
という宣言が必要とのこと。
私が書いた
a=1;
は宣言がされていないためエラーとなりました。
つまり、
int a=1;
と書くのが正解です。
そのため次の行の記述も、
int b=2;
としておきます。
おそらくこの後プログラムを書いていくうちに、"宣言していないエラー"が数多く出てくると思いますので、なんとなく覚えておくといいかと思います。
cout << a+b << endl;
こちらですが、このように書くと、「aの中身の1」と「bの中身の2」を足して、「3」を出力してくれました。
気をつけなければならないのは、a+bの部分を、
"a+b"
と書いてしまうと文字として認識され、「3」ではなく「a+b」と出力されるようです。
上記を応用し、文字と数字を組み合わせることで、出力をわかりやすくすることができます。
cout << "a+b=" << a+b << endl;
文字でa+b=、
その後に計算結果の3が出力され、
a+b=3
と見やすく出直することができました。
学習のポイント
ここで大事なのは、変数を使う場合には、
int a=1;
というように、intという"宣言"を書くことです。
変数を使った計算はこの後どんどん出てきます。
今回の例題の答えを何も考えず20回書いてみて、とりあえず暗記しちゃいましょう。
#include <iostream> using namespace std; int main(){ int a=1; int b=2; cout << a+b << endl; return 0; }
【例題1】文字を出力してみる
初回は、プログラムの基本 "Hello World!" の出力です。
上記サイトの[基本 問題1]を参考にします。
例題1 「Hello World!」と表示せよ。
まず何もわからないので、いきなり答えを見ます。
#include <iostream> using namespace std; int main(void){ cout << "Hello World!" << endl; return(0); }
もしくは
#include <iostream> using namespace std; int main(){ cout << "Hello World!" << endl; return 0; }
でもOKです。
解読編
さっそく解読していきます。
※こちらの解説が大変参考になりました。
C言語入門 - int main(void) - プログラムの基本 - Webkaru
#include <iostream> using namespace std;
こちらの2行は"おまじない"。
この後に書かれたプログラムを正常に走らせるための記述です。
こちらが正しく書かれていないとエラーになるのでご注意ください。
int main(void){
このように記述すると、波括弧「{」 から「 」} までの間のプログラムを実行してくれます。
void はこの場合は省略してもOKです。
cout << "Hello World!" << endl;
この部分が今回の大事な部分です。coutは出力を表す記述で、
cout << ○△□ ;
で ○△□ という文字を出力します。
最後の endl は、簡単に言うと改行です。
「;」 はこの行のプログラムの終わりを示す記号です。
return(0);
こちらは0を返す→プログラムが正常に終了したことを知らせるための記述です。
int main()の中身の最後に書くものと思っておけばOKです。
学習が進むにつれ、return a+b; とか、書き方が変わっていきますが、
この時点ではこういうものだと思っておけばOKです。
return 0;
としてもOKです。
}
最後の}はint main()の間のプログラムがここまでであるという印です。
{ }の間の区間をプログラムが実行しますよというルールになっているので、
プログラムの最後にこのカッコをつけるのを忘れないで下さい。
学習のポイント
ここで大事なのは、
cout << "Hello World!" << endl;
の部分です。
cout << ○△□ << endl;
という書き方は、文字を書き出すだけでなく、計算結果を出力する場合にも使いますのでこの後必ず使います。
暗記しておくといいかと思います。
解答の中の、「intって何?」「()ってなんの役割?」など、いろいろ疑問が浮かんできますが、私の感想では、入門書に入る前に正確に理解するより正しいパターンを暗記だけしておいたほうが良い、と考えています。
参考書でつまづく人は、正しい理解ができないことに引っかかってしまう「完璧主義者」が多いように思います。
そんなときはプログラムのパターンをまるごと暗記したほうが、理解も進むし効率がグッと上がります。
今後自分の理解が進むに連れ、嫌でも正しい理解ができるようになっていきますので、暗記すべき部分は暗記で済ませて、先に進んじゃいましょう。
例題に入る前に(素振り的なこと)
C++では、下記のプログラムを何度も打ちこむことになります。
#include <iostream> using namespace std; int main(){ }
お決まりのプログラムなので、とりあえず覚えておくとこの後がスムーズです。
内容はおいおい覚えればOKです。
(私は覚えが悪いので、とりあえずこの部分だけ20回ぐらい打ちこんで暗記しました。野球の素振り的な感じです。)
補足
上記のプログラムの簡単な説明です。覚えなくても、この後例題を解いていくと、自然と頭に入っていくはずですが、参考までに。
#include <iostream>
この部分はプログラムの入出力に関する記述です。
これを記述することで、キーボードから数字や文字を打ちこんだり、
プログラムで計算した結果を、画面上に出力したりすることができます。
ちなみにプログラム内で入力をするための記述は cin 。
出力をするための記述は cout です。後ほどたくさん出てきます。
cinやcoutは標準入出力と呼ばれます。
特に覚えなくてもいいですが、参考書などを見ているとよく出て来ますのでなんとなく頭の中に入れておくといいです。
この部分は一般的に、
C++の入出力演算子を使うために、iostreamヘッダをインクルードする
というような言い方になります。
#サイトや参考書によっては
簡単に言うと昔のC++の表記です。
ここでは
using namespace std;
詳しくは書きませんが、この部分を書かないと、
例えば、
cout << "Hello, world!" << endl;
というプログラムを、
std::cout << "Hello, world!" << std::endl;
と書くことになります。
どちらでも問題無いですが、多くの入門書では using namespace std; をつけているようですので、ここでは記述する方向で統一したいと思います。
入門書以前の段階では、前の #include <iostream> と合わせて"おまじない"のようなものと思って、書いておくといいかと思います。
int main(){}
この部分はプログラムの実際の処理をする部分です。
{}の中に文字を書く命令や、計算する命令プログラムを書いていきます。
詳しくは例題で記述していきます。
例題に入る前に以上のプログラムを書き慣れておくと、いろいろスムーズです。
開発環境
環境を作るのに必要そうなものを調べると、
タダで始めるC/C++プログラミング for Windows
Windows 7 で C/C++ の開発・実行環境を整える! - RinGoon POP!!
専門用語が多く理解できないところも多いですが、
・テキストエディタ+コンパイラ
・統合開発環境(IDE)
のどちらかで環境ができるとのこと。
コンパイラの実行にはコマンドプロンプトなどを使うようで、
普段使い慣れない自分には抵抗感があったため、ここでは見た目でわかりやすそうなIDEを選択します。
自宅ではMac、出先ではWindowsと、2種類の環境を用紙する必要がありましたが、選択したのは、下記の2つ。
・Microsoft Visual Studio 2013 Express(Windows)
どちらも簡単にインストールでき、私のレベルでも最低限の操作ができます。
おすすめです。
インストールにあたっては
C言語入門 - 基本構文をサンプルコードとともに紹介! - Webkaru
このサイトが非常に素晴らしい。
サイト内容はC++ではなくC言語についてですが環境構築としては共通のため、大変参考になりました。
Windows
C言語入門 - Microsoft Visual Studio 2012 Expressのダウンロードとインストール - Webkaru
を参考にMicrosoft Visual Studio 2013 Expressをインストールしました。
※注 参考サイトでは2012版ですが、この記事を書いた時点では2013版になっています
Mac
C言語入門 - MacでC言語 - コンパイラ(gcc)のインストール - Xcode - Command Line Tools - Webkaru
を参考にXcodeをインストールしました
開発環境に関しては、他にもいろいろインストールしたりして試してみましたが、まともに動かすことができなかったり、途中で挫折したり、
(両方共通で使えるものがいいと思いeclipsのインストールにチャレンジしましたが、あえなく挫折)
Microsoft Visual Studio 2013 ExpressとXcode、わかりやすくて最高です。
学習に必要なもの
とりあえず学習に必要なものは下記の2つです。
・開発環境
・教材
開発環境
開発環境については
でまとめています。
教材
教材についてですが、基本的には、
・例題と答え
・分からない単語などを調べる参考サイト/参考書
があれば学習は進められると思います。
例題と答え
上記のサイトが内容、問題のレベルともにちょうどいいと思います。非常に素晴らしいです。
このサイトや書籍などから問題を抜粋していきます。
参考サイト/参考書
よく開くサイトは、
です。わかりやすさもそうですが、文章の順序立てや論理構成が抜群です。
参考書としては、
※サイトと合わせて書籍を持っておくと便利です
※東大院試ラボ(http://gradschool.phpapps.jp/archives/176)でもおすすめされていますね
新版 明解C++ 入門編(柴田 望洋)
※こちらも論理構成がしっかりしていて、ちゃんと読むと理解につながります
上記ののどれかが、辞書代わりにあるといいかと思います。
以上のような環境で学習を進めます。
はじめに
C++の学習を始めて思ったのは、
入門書の内容が理解できない
開発環境はどう揃えるの?
コマンドライン使ったことない
など、明らかに自分が入門書のレベルに達してないということでした。
そしていろいろ調べたところ、全くの初学者~入門書レベルに関する書籍やサイトが、思ったより充実してなく、ここがプログラミングの敷居を高くしているように感じました。
ここでは入門以前に身につけておくべき基本的な内容を、学習記録としてまとめています。
私と同じように、入門部分でつまづいている初学者の皆さんの参考になれば幸いです。
プログラミングのきっかけ
私は普段デジタルコンテンツのディレクターを仕事にしています。
仕事ではプログラムを組む機会はありませんが、来年40才を迎えるにあたって、何か勉強しておきたいなと思ってました。
Perl,Ruby,Python・・・。今までいろいろな言語を勉強しようと試しましたが、仕事で使うわけでもなく動機もあいまいなため、 なかなか本腰を据えてとはいきません。
そんな時、競技プログラミングの存在を知り、その知的さに惹かれ、長いスパンで自分でもチャレンジしてみたいと思うようになりました。
なぜC++か?
競技プログラミングを調べてみると、主に使われているのはJavaとC++のようでしたが、プログラミングコンテストチャレンジブックでも 使われているC++にすることにしました。
学習の進め方
私が今まで勉強してきたやり方は、主に過去問を解いてわからない部分を整理するというやり方です。
本を読んですぐに理解できるほどの頭脳は持ち合わせていないため、
・ネットや書籍から例題を見つける
・思いつくまま書いてみる
・分からなければ答えを見る
・プログラムを一行ずつ考える
・間違ったところ、わからないところを考える
・理解したことを言語化して書き出す
というように少々手間なやり方をしています。
いろいろ見ているとプログラムの勉強で手詰まりになるのは、基礎的な部分の理解がおろそかになっているからではないかと感じます。 私も今までいろいろな勉強方法を取り入れて、背伸びをした挙句全く身につかなかった経験が、数多くあります。 ここでは少し手間ですが、「言語化して説明できること」を目標に学習していきたいと思います。