おりにゃんのふぃーりん☆ぷろぐらみん!

プログラミング(主にC言語)の基礎的な事を脳を溶かしたレベルの語彙力で綴っていきます。

しーげんごはじめてこー!そのに

はじめに

前回は、「Hello,world!」と表示するプログラムを書きました。

でもこれ、ただ表示させるだけじゃつまらないですよね。

やるならもっと、難しい計算とかさせたくないですか?

させたいですよね???圧が強い

そんなわけで、今回は様々な計算をさせるための準備をしたいと思います。

え?「なんで準備が必要なのか」って?

それは、人間みたいに融通の利く数値の扱い方ができないからです。ここは前に「n進法」で話しましたね。

なので、C言語などのプログラミング言語では、様々な工夫をして数値を扱っています。

なので今回は、その工夫の仕方についてみていきましょう。

それではさっそくれっつごー!(ノリが軽い←)

もくじ

すうちの「かた」

C言語では、数値を使う範囲に応じて「型」で分けています。

整数のみを扱う型が8種類(実質6種類ですが)、実数を扱う型が2種類あります。

せいすうがた!

整数を扱う型は、扱える値の大きさが小さいものから順にchar,short,int,longがあります。

え?これじゃ4種類だって?まぁまぁおちついてもちついて。

それぞれの型には、扱う値の「範囲」が2種類用意されています。

それぞれの型の前に「signed」「unsigned」を付けることで、扱う値の範囲を変えることができます。

何が違うかって扱う値の範囲が違うのですが、具体的には「負の値を扱うかどうか」が違います。

具体的な値は下の表のとおりです。

扱える値の範囲
signed char -128~127
unsigned char 0~255
signed short -32768~32767
unsigned short 0~65535
signed int --
unsigned int --
signed long -2167483648~2147483647
unsigned long 0~4294967295

といった感じです。

また、signedは省略することができます。いちいち打つのめんどいので省略するのが無難でしょう。

はいここで皆さん疑問に思いましたよね?「intの扱える値の範囲書いてねぇぞ」と。

実はこのint、Integer(整数)の略で、いかにも整数の代表っぽいにも関わらずその扱える値の範囲はシステムに依存しているのです。

な ん で だ よ

しかもシステム依存といってもshortかlongのどちらかと同じ範囲になるので、正直使う意味…ってなります(そんなこと知らずに4年間int型を使っていた私は一体)

ま、まぁ最初のうちはそんな気にするようなタイミングはないのでint型でも問題はない、と思います…((((

しょうすうがた!

小数型には、floatとdoubleの2種類があります。

floatは単精度、doubleは倍精度、と呼ばれますが簡単に言えばdoubleの方が細かい値まで扱えるよーって話です。ざっくり。

でも、小数型を使う時は気を付けなければならないことがあります。

それは、小数は正確な値で表すことができないということです。

前回?前々回?あたりで説明した通り、コンピュータは2を基準に数値を扱います。

小数は2のマイナスなんとか乗で表現されるため、どうしても正確な値にすることができないのです。

そのため、小数を使う時は誤差(数値のずれ)が起きること前提で使うようにしましょう。

おわりに

今回はここまでにしようと思います!まだ数値関連はいっぱい書くことがありますが、それは次回に持ち越そうと思います。

次回は「演算子」について説明していきます。これをマスターすればどんな難しい計算問題も解けるかも…?

それではまた次回!

更新頻度上げなきゃな……

しーげんごはじめてこー!そのいち

はじめに

前回まで、プログラミングを始める前に覚えておきたいことを記事にしてきました。

今回からは、本格的にプログラミング言語(C言語)を触っていこうと思います。

お前ら準備はいいか!?!?

えっなんだ唐突なこのノリ…こわ…近づかんとこ…とか思わないでください() noy-orina.hatenablog.jp

もくじ

さいしょにやるのは

どうもこうもプログラムがちゃんと動いているかは把握しておきたいので、まずは画面に何か表示させるプログラムを作りましょう。

Hello,world!と表示させるプログラムがこちらです。

#include<stdio.h>

int main()
{
    printf("Hello,world!\n");
    return 0;
}

ここで、バックスラッシュ()が円マーク(¥)になっている人もいるかもしれませんが、そこは気にしなくて大丈夫です。

じっこー!

ここまで来たらコンパイル

それぞれ開発環境が違うと思うのでコンパイル作業の説明は割愛。でもちゃんと忘れずにやってくださいね?

作られたファイルを実行すると、「Hello,world!」って出てきましたか?

出てこないー、とかそもそもコンパイルが通らないーという方はもう一度コードを確認しましょう。

それぞれのせつめー!

ここからは、各行の説明をしていきます。

いんくるーど!

#include<stdio.h>

まずはこれ。C言語でプログラミングをするとき、必ずと言っていいほどこの1文を最初に書きます。

なぜかって?理由は簡単。この1文で、「外部からの入力や外部への出力がものっそい楽になるから」です。すっげぇな(語彙力)

includeは、英語で「含める」。つまり、「このプログラムには、stdio.hが持つ機能が含まれているぞ」という意味になります。

じゃあそのstdio.hとはなんや、という話ですがそれは過去の記事を参照してください…というのは露骨な宣伝すぎるので(おい)、ここでもちゃんと説明します。

stdioは、「STanDard Input/Output」の略です。直訳すると、「標準入出力」。

要するに、入出力を管理する機能がいろいろ使えるようになるのです。すっげぇな(語彙力)(二度目)

いんとめいん!

int main()

次はここ。これこそよくわかりませんよね。特に最後のかっこ。こういう使い方じゃあるまいし()

これは、関数の宣言です。この宣言に続く{ }の中身が、関数の動作になります。

intはIntegerの略で、「整数」です。C言語には、いくつかの変数型があり、その中の1つです。これは次回あたりに説明します。

mainが、「ここがmain関数だぞ」というのを表します。

このmain関数だけはちょっと特別で、コンパイルされたあとの実行ファイルを実行したときに呼び出される関数になっています。

そして最後のかっこ。謎すぎる。謎すぎるんだがこれも大事な要素の一つです。

まずは、「関数と変数の見分けがつく」こと。かっこがついていたら関数、ついてなかったら変数、と覚えておきましょう。

変数については、これもまた次回あたりに説明します。関数も細かいことはもう少し後の回に説明します。いつになるのやら((((

このかっこの中には、「引数(ひきすう)」というものが入ることもあります。引数を使うと、値の受け渡しが関数の間でできるようになります。

引数に関しても、関数の回で一緒に説明しようと思います。後回しにしすぎじゃね

ぷりんとえふ!

printf("Hello,world!\n");

書いてあることから想像できると思いますが、ここで「Hello,world!」を表示しています。

printfというのは先ほども言ったように、()が付いているので関数です。

これは最初に書いたstdio.hをインクルードすることで使えるようになっています。

これを呼び出すことで、カッコの中の""で囲まれた部分を表示させます。

""の最後にある\nは改行を表します。この辺はだいぶ後に説明すると思います。

今はとりあえず「""の中に\nって書くと改行される」っていう認識でいいです((((雑かよ

りたーん!

return 0;

はい、長々と説明していたのもこれが最後です。

Return=返す、つまりreturnのあとに書かれているデータをどこかに返します。

どこかというと、今実行されている関数を呼び出した元の場所です。

main関数なら実行元、つまり自分がこのプログラムを実行したときに使ったツールです。

正確には少し違うのですが、感覚的にはそれくらいで大丈夫です。

ここでは0を返していますが、main関数ではこれはエラーコードになります。

0は「正常終了」を表します。

0以外の数値を入れても問題はありませんが、環境によってはエラーになると思います。

あえてエラーを発生させてそれを記録する、という目的以外ではmain関数内のreturnは全て0にしましょう。

main以外に自分で関数を作ることもできるのですが、「値を返す」という特徴を使っていろいろなことに使えます。

それはまたどこかで。(どれだけ説明さぼってるんだ)

おわりに

今回は、「Hello,world!」を表示させるだけのプログラムにかなりの文章量をかけて説明しました。

これでもまだC言語でできるほんの1%も話せてないですたぶん。

次回は、変数の説明をしようと思います。変数を知れば、いろいろな計算ができるようになります。

例のごとく不定期更新なので次回はいつ更新できるかわかりませんが、地道に書いていきますのでゆっくりまったり待っていてください。

それではまた次回!!

……今回、途中から眠くなるような書き方しかしてないな…

ばんがいへん-げーむづくりのいろはとか

はじめに

今回は番外編です。

先日、unityroomというUnityのフリーゲーム投稿サイトで開催された、1週間ゲームジャム「unity1week」に参加させていただきました。

下にリンクを貼っておくので、もしよければ遊んでください。

https://unityroom.com/games/reverse_calc

もくじ

げーむぷろぐらみんぐ!

プログラミングをしたらやりたくなるのが「ゲーム」を作ること。そう思いませんか?

たぶん、プログラミングで作るもので一番楽しいのがゲーム開発だと思います。

だって、自分自身でルール作って、完成した後も自分も楽しめちゃいますからね。

今回は、そんなゲーム作りをするうえで、これだけは絶対に守っておきたい鉄則をテーマに進めていこうと思います。

げーむづくりでだいじなこと!そのいち

ゲームを作るうえでとっても大事なことは3つあると私は考えています。

この3つさえ守っていれば、自分も、また他の人も楽しむことができるゲームができると思います。

まず1つ目。「基本ルールは分かりやすくすること」です。

理由は2つ。1つ目の理由。ルールがわかりやすければ、とっかかりやすく、他人に広めやすいからです。

世の中に存在する有名なゲームは、どれも基本となる部分はとても理解しやすいものです。

例えば、「じゃんけん」。

じゃんけんのルールは以下の通り。

  • 各プレイヤーは、お互い同時に手を出す。

  • 手は、グー、チョキ、パーの3種類が存在する。

  • グーはチョキに勝ち、チョキはパーに勝ち、パーはグーに勝つ。

  • 上記の関係をもとに、プレイヤーの勝敗を決定する。

おそらくこれだけでルールを理解できる人が大半だと思いたい思います(グー、チョキ、パーの細かい説明はありませんが)。

世の中に当たり前のように存在するゲームは、こんな感じでルールがめちゃくちゃわかりやすいのです。

Twitterの1ツイート分(140文字)でルールが説明できるくらいだと、非常に分かりやすいルールだと思います(個人の見解です)。

もちろん、基本ルールに限った話なので、ここから細かい追加ルールを入れ込むのは問題ないです。むしろ追加しないとつまらない場合もある

でも、その追加ルールも同じくらいの分かりやすさで説明できるものにするといいと思います。

2つ目の理由。ルールが簡単だと、実装が簡単になるからです。

もちろん例外も全くないわけではないと思いますが、簡単なルールほど、プログラムを書くときにいろいろと楽になります。

プログラミングの勉強をするにも、いきなり難しいのを書くのは嫌ですよね?

分かりやすいコードにするためにも、ルールは簡単にすることをオススメします。

まとめると、人間にもコンピュータにも説明しやすいルールにしましょうってことです。

げーむづくりでだいじなこと!そのに

2つ目に大事なことは、「自分が面白いと思うものを作る」ことです。

「なんや当たり前やんけ」って思ってるそこの人、全くもってその通りです。

自分が面白いと思わなきゃ、他の人も面白いと思う可能性はものすごく低いので、少なくとも自分は面白いと思うものにしましょう。

正直ここはこれくらいしか書くことがないです。

げーむづくりでだいじなこと!そのさん

最後に、「他の人にやってもらう」ことはかかさないようにしましょう。

1つ目と2つ目の大事なことを守れているか、それがこれでわかります。

ルールを理解するのに時間がかかれば、それはルールが難しいかもしれない。

すぐ飽きるようならば、それはもしかしたら自分が面白いと錯覚していただけかもしれない(これは他人の性格にもよりますが)。

ちょっと厳しいこと書いてるかもしれませんが、これが一番大事だったりします。

そして、やってもらった人の意見をもらいましょう。

この時、「理由もなく否定する言葉」は無視していいです。

正直こんなのは意見とは呼べないと思っています。ただの暴言。

「どこがダメなのか」「なぜダメなのか」をちゃんと聞きましょう。改善案を出してくれる聖人には敬意を払いましょう()

おわりに

今回は番外編ということで、ゲーム開発において私が考える大事なポイントを説明しました。

もちろん、他に大事なことはたくさんあると思いますが、最低限これだけ抑えれば、いいものは作れると思っています。

次回はちゃんとプログラミングの方に行こうと思います。不定期で本当に申し訳ないです。

それではまた!

しーげんごをはじめてくそのまえに…そのに

はじめに

前回は、プログラムの大まかな流れについて説明しました。
今回は、「n進法」について簡単に説明したいと思います。

noy-orina.hatenablog.jp

ふだんからつかってる「えぬしんほー」

いきなり「n進法」といわれて、「何ぞ?」ってい思う人は少なからずいると思います。
でも、普段から誰でも「10進法」「60進法」は使っています。
普段使っている数で、桁が上がるのはいくつですか?
そう、「10」ですよね。それ以外のサポートは今はしかねます
この「桁が上がる瞬間」が「n進法」の「n」にあたります。つまり、私たちが普段使っているのは「10進法」というわです。
では、次の「60進法」はどうでしょう?何か思い当たることはありませんか?60で桁が上がるもの…

……
………
…………
分かりましたか?
答えは「時間」です。
60秒で1分、60分で1時間、という感じで60を境に上がっていますね。
そう、私たちはわけのわからん概念を詳細もわからないままいとも簡単に使いこなしているわけです。
いろんな意味ですっげぇな(語彙力)

でも、こんぴゅーたには…

しかしこの10進数や60進数、コンピュータで扱うにはちょっと大変なんです。
私たち人間には、五体満足であれば手に指が左右合わせて10本あります。
1本ずつ指を立てていけば、0から10まで数えることができます。
人間は手計算する際、そこまで難しい計算をしないので、10本あれば大体事足ります。
しかし、コンピュータにはもっと難しい計算をしてもらいたいですよね。0から10しか使えないコンピュータなんて存在意義(((ry

しょしんにかえって

より大きな計算をするためにはどうすればいいのか?そこでコンピュータはあえて2進数を使うことにしました。
「なんでや!それだと扱える数減るやろ!」って思ったかもしれませんが、実は2進数の特性のおかげで、10進数よりも多くの数を少ないメモリで扱えるのです。

にしんすーのとくちょー?

2進数は、「1本の指で表現できるすべてのパターンを表現できる」特性があります。
「そんなん当たり前やん?」って思った方、いますよね?指を伸ばす(1)か伸ばさない(0)かの2通りですもんね。
では、そんな2進数を使う指を2本に増やしてみましょう。
1本目は「1の次は0」、2本目は「1本目が1から0になったら1にする」というルールを追加します。
そうすると、次のように変化します。

00→10→01→11

お気づきでしょうか?この2桁の数字で表現できるものが全部出ています。
そりゃまあ当たり前ですよね、そういう「ルール」を作ったんですもの。
これにさらに1つ指を追加しましょう。2本目に1本目と同じルールを追加し、3本目はは「2本目が1から0になったら1にする」というルールにします。
そうすると、

000→100→010→110→001→101→011→111

これで、8パターンが表現できました。2本の時と比べると、実に倍のパターンを表現できることになります。
2本の時は1本の時と比べると倍のパターンを表現できているので、このまま指の数を増やしていくと、1本ずつ指を増やしていく毎に
16→32→64→128→256→…
と増えていきそうですね。
こうすれば、10進数の時よりも少ない指で多くの数が使えそうです。
これが、2進数の強みなのです。すっげぇな(語彙力喪失今回二度目)

でもけっきょくよむのは…

そう、でも結局プログラムを書くのも読むのも人間です。正直いって2進数でプログラム読み書きするのめんどいです。
1000表示させるのも9桁要りますからね。どうして9桁かって?計算すればわかる
しかし、2進数を10進数に直すのって、意外とめんどいんです。
「こいつさっきからめんどいしかいってねぇな…」って思ったそこのあなた、実際めんどいんですよこれ。
なので、変換しやすい進数を使いましょうということで出てきたのが「16進数」です。

じゅーろくしんすー!

さっきから出てきている2進法、桁上がりするときの特徴があるんですが、なにかわかりますか?

……
………
…………
はい時間切れー。わかった人は答え合わせ、分からなかった人はざまぁ今から説明していきます。

2進数は、「2のn乗」で桁上がりしています。
n乗って何ぞ?っていう人は、「累乗」でggってください。
そりゃまぁ10進数も10のn乗の時に桁上がりしているわけですから、そこはなんら問題ないでしょう。
そして、さっき使うと言った「16進数」の16。これ、2の4乗っていうのはお気づきでしょうか?
16で桁上がりする、ということは、2進数では4桁から5桁に桁上がりする瞬間になります。
つまり、16進数というのは、「2進数を4桁集めたまとまり」になるのです。

すうじがあるふぁべっと!?

2進数や10進数では、0~9の10個の数字だけで表現できますが、16進数となるとそれだけじゃ足りません。
なので、0~9の数字にさらに文字を追加して、それを10進数でいう10~15にあてていきます。
そこで出てくるのがa,b,c,d,e,fの6つのアルファベットです。
なんでアルファベットなのかはわかりませんが、んまぁ世界的に結構使われてる文字だから、くらいのノリでいいと思います。別になんの文字かは全く重要ではないので
アルファベットの順番通りにaを10、bを11、…としていき、0から15を表現すると、
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
となります。最初はちょっと気持ち悪いかもしれませんが、じきに慣れます。てか慣れろ?
そんでもって10進数と見間違えないように、16進数の時は数字の前に0xとつけましょう。
カッコの中に数字を書いて、カッコの外の右下に何進数かを書くことでも判断できますが、ここはC言語っぽくいきます。
0xの書き方なら、C言語でもそのまま使えるので、記憶の片隅にでもしまっておいてください。
ちなみに2進数なら「0b」で表現できます。

おわりに

今回は、「n進数」について説明していきました。ちょっと難しい概念なので、これは使って慣れていくしかないです。
極論言えばプログラミングなんてほとんど慣れの世界なんですけどね…
ついでに言うと、この概念はプログラミングを「言われたとおりに書く」だけならほとんどお目にかかることはないです。
でも、たまーにエラーコードとかで見かけたりするので、覚えておいて損はないです。
「数字とアルファベットの羅列だー!」って混乱することも減ると思います。

そろそろ次回あたりから、プログラミングに入っていこうかなーと思います。
「ほぼ1年かけて数記事しか書いていないとは何事だ」とか思わないでください普通に忙しいんです(白目)
そんなわけで相変わらず超不定期更新ですが、気長に待っていただければと思います。

しーげんごをはじめてくそのまえに…そのいち

はじめに

前回、ようやく(?)C言語の開発環境を整えました。

noy-orina.hatenablog.jp


「よし、それじゃあ始めてくぞ!!」って意気込んでいるそこのあなた!本当にすぐプログラミングできるんか?
できるんか??(((((おい煽るな
この記事は、これからプログラミングを勉強していく人向けに書いているので、そういった方は書けなくて当然です。
なので今回は、”プログラムを書いていくうえで必要な要素”について説明したいと思います。

続きを読む

しーげんご!そのぜろ

はじめに

前回の投稿をしてすぐ、ある事に気が付きました。
「…そもそもC言語を実行する環境ってデフォでなくね?」

ということで、C言語の開発環境を整えていこうと思います。

noy-orina.hatenablog.jp

はいそこ、すぐ気づいたとか言いながら更新が遅すぎないか、とか言わなーいごめんなさい大変申し訳ございませんんんん

そもそもこんぱいらって?

C言語は、比較的人間が読みやすいような書き方をしています。おいこらそこ読めないとかわからないとか言わない
ですが、どうやらコンピュータには人間が読める言語は分からないようで、そのままではプログラムを実行することができませんお疲れさまでした。



おいこら勝手に終わるな?ちゃんと解決策あるからな?
とまあそんなわけで人間が書いたコードをコンピュータが読めるものに変換する作業を「コンパイル」といいます。
ですが、このコンパイルという作業、人間の手では行えません。できたらはじめからコンピュータが読めるもの書いてますお疲れさまでした。



だーかーら、勝手に終わるな?
このコンパイルをやってくれるのが「コンパイラ」というものです。
compileするもの→compiler、ここは英語ですね。プログラミングやってるとしょっちゅう英語にぶち当たるのつらい。ふぁっきゅー。なんて言葉海外で使っちゃいけませんという豆知識←←←←

なーんて無駄知識は置いといて、今回はパソコンにこのコンパイラを導入する作業を説明していこうと思います。

こんぱいらのいんすとーる!

私が使っているPCには、授業で使うために学校からデータ配布されたVMWare Workstationが入っていて、その中のLinuxC言語の開発をしているのですが、この方法は今回紹介しないでおこうと思います。
理由としては、

  • OSの中でOSを動かしているため、動作が若干重い
  • PCの中に複数のOSを入れていることになるため、ストレージの容量を圧迫する
  • 授業で配られたもののため、正直ネットから拾ってインストールする方法がわからない
  • モバイル通信でネットを使っているため、通信量的につらい(私が)

などが挙げられます。
なので、Windows上で実行できるコンパイラをインストールしていこうと思います。
Macの方は…すみません、私が実行できる環境がないので何も言えません。

がくしゅーよーしーげんごかいはつかんきょーのいんすとーる!

ほんとは難しいこと説明するのが面倒で(これからプログラミングを始めたい人向けに書いているので)、
できるだけ環境を整えるのが簡単なものを探しました。…ん、本音と建前が逆だって?そんなことな……あっ…
んっんー(咳払い)、あらためて「学習用C言語開発環境」のインストール手順を説明していきます。

  1. https://forest.watch.impress.co.jp/library/software/gakucgengo/まずはこちらのサイトにアクセス。
  2. 窓の杜からダウンロード」をクリック。
  3. 「easyidec.exe」のダウンロードが始まるので、どっかわかりやすいところに保存。
  4. ダウンロードが終わったら実行。
  5. 「学習用C言語開発環境」のセットアップウィザードのウィンドウが出るので、「次へ」とか「インストール」とかをクリックする。(説明雑かよ←)
  6. 「完了」の画面が出たらインストール完了。

ね?簡単でしょ?(威圧)
んでもって、インストールした学習用C言語開発環境を実行すると最初にいろいろ文句言われますが全部「はい」でスルーしちゃって大丈夫です。

f:id:noy-orina:20190904131619p:plain
学習用C言語開発環境のウィンドウ

こんな感じの画面が出てくるはずです。
これを使ってC言語の開発をしていきます。
他にもたくさんのC言語開発ソフトは存在するので、気になる方はぜひ調べてみてくださいな。

すまほでもしーげんご!

PCでできる環境について説明しましたが、ほかにもこんなものがあったりします。
Androidスマートフォンで動作するC/C++のエディタです。


play.google.com

こちらなんとGooglePlayからインストールするだけで簡単にC言語の開発ができてしまうのです!すっげぇな(語彙力←)
ほかにもいろいろ調べれば簡単に出てきます。自分に合った開発環境を探してみてください!

おわりに

これで、C言語の開発環境が整うはずです。次回以降は基礎から書いていこうと思います。

…え?次回の更新はいつかって?すみません私にもわかりません…正直あまり執筆する時間が確保できないので…
気長に待っていただけるとありがたいです。

じかいよこく!

初めてのプログラミングに関するブログ!そこでおりにゃんは気が付いた!!

「あれっ、C言語の開発環境って普通無くない…?」

おいこら気付くの遅いぞ織菜??自分が知ってるならみんな知ってるなんて前提で進めるのやめろって言ってるだろ???
しょーがない、一度だけチャンスをやるからそこで実行環境を整える記事を書けよ??


次回!
「しーげんご!そのぜろ」



はい。というわけで次回はC言語の開発を行うための環境を整えていきます。
「順番がおかしい」とか言わないでください私もおかしいと思ってます←←←
投稿は私が実行環境のインストールを終えてからです。たぶん土曜か日曜になるんじゃないかなーと思っていてくれれば、です。