競技プログラミングの話とC++講座をした話

これはシス研Advent Calendar12日目の記事です。

 

教えれるだけ教えとこうと考えている5年生のさんだーです。

今日(12日)部室で情報オリンピック予選直前C++講座を行いました。

資料を用意する時間がとれなくてあまり教えることが出来ませんでしたが、逆に1日に教える量は適量で良かったのかもしれません。

講座を開くことが多いですがその時についでにプログラミング力の伸ばし方とかいらないことまで語っちゃうようになってしまいました。歳のせいでしょうか。

シス研部員として参加する競技の大会としてはパソコン甲子園とJOIの2つですね。

その問題の難しさの段階としてはこんな風に考えています。

  1. ループ制御、配列、ポインタ、関数などプログラミングの基礎がわかっているか
  2. 1.の項目を組み合わせて使うことができるか
  3. 問題を解くためのアルゴリズムを知っているか
  4. 1.と3.を組み合わせて解くことができるか

だいたいこんなものだと思います。

例えば1と2に関してはループ制御と配列は知ってるから1、2問目は解けるぜみたいな感じです。

僕はアルゴリズムとかはわからないので、何でもは教えれません。知ってることだけです。

 

ある程度までは知っていて使えるかどうか、それ以上はプログラミングの熟練度によると考えています。

とりあえずはこの知っていることを増やし、それを使えるようになって欲しいと思います。

 

一応今日教えた内容をブログにしておきます。

スライドはこちら。最後に問題が2問だけあります。

その前にC言語はわかるけどC++に初めて触るって人にこれだけは教えておきます。

・拡張子は.cpp

・using namespace std;をinclude文の後くらいに必ず入れる

・関数の先頭以外でも変数宣言ができる(例えばfor文の中)

・普通にstdio.hなどが使えるのでprintfやscanfが使える

・C言語が少しわかってたら怖くない

 

1問目

問題からすぐにソートを使えば良い問題であることがわかります。

これをC言語で書こうと思うと少し長くなってしまうでしょう。

C++ではこんな感じ

<algorithm>をincludeすればsort関数が使えるようになります。

これを知っているだけでこの問題が朝飯前になっちゃいます。

 

2問目

問題からソートを使うっぽいことはわかると思います。ですが2つ程問題点。

・名前と英語と数学の点数を一緒にソートしないといけない

・ソートの仕方がやや特殊

困りましたね。

ここで知っておくと良いことは

・sort関数には比較演算子の<が使われている

・C++のクラスで演算子をオーバーロード(自分で定義)することができる

・クラスなら構造体のように複数の変数をセットで扱える

これらの知っていることを組み合わせて解くことができます。これらはC++の本だとだいたい後ろのほうに書いてある気がします。

ソースコード

知っていて使いこなすだけで変数への代入を手動で行っているのを含め30行ほどで解くことができました。

 

このように、知っているだけで簡単に解ける問題があるような気がします。

1問目はさすがに簡単すぎですが、2問目のようなのは役に立つことがあると思います。

今日の講座で言いたかったことをまとめると

・覚えなくていいから知っていることを増やせ

・C++は怖くない

ということでした。

 

シス研部員のプログラミングの伸ばし方としては

・プログラミングの大会に備えて新しい知識を得て、使えるようになる。

・大会後はそれを活かして作品を作る

3年生の夏まではこんな感じで良いと思います。

もちろん空いている時間に興味のある分野を自分で勉強するのも大事。

 


コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください