技術者が教える初心者さんのためのC言語 -4ページ目

技術者が教える初心者さんのためのC言語

〜最小限の知識でプログラム〜

いつも感謝しています。Nです。

前回の記事「面倒くさがり屋さんは素質がある」
http://ameblo.jp/engineertalksc/entry-12091579604.html
で、プログラムを整理する視点を説明しました。

今日は、Helloを自分の好きな位置に表示したいと思います。

私がこのブログを立ち上げた理由の一つに「どのように考えてプログラムを作り上げてゆくのか」を皆さんと一緒に経験していきたいというのがあります。

もちろん技術的なことも重要なのですが、私がもっと大事だと思っているのは、そのプログラムを作り上げてゆく過程を経験することだと私は考えています。

本ブログが読者さんの経験値を増やすものになれば良いなと思っています。また、それが刺激となり読者さんの内部からアイデアが出るようなブログにしていきたいと思っています。

まだ「アイデアなんて、全く出ないよ」という方もいるかもしれません。でも安心してください。その場合は、お送りしているソースファイルの一部を変えるということをやってみてください。例えば、HelloをHiにしてみるとか、Helloをスペースにしてみるとか、そういうことを、積み重ねてみてくださいね。

小さなことを積み重ねることで、人は成長していくのだと私は思います。

あなたが「できない」と思うことがあったとします。その場合、その「できない」ことを小さく小さく刻んでいきます。そうすると、「できない」と思ってたことも「できる」と思える瞬間がやってきます。そしたらそれを「やる」。これを積み重ねることで、あなたの能力が向上していきます。

例えば、腕立て伏せを100回連続でするという目標を持ったとします。しかしこれが「できない」と感じた場合、これを小さく小さく刻んでいきます。50回は?、40回は?30回は?
20回は?10回は?9回は?8回は?7回は?6回は?5回は?4回は?3回は?2回は?1回は?
そして、「あっ、1回なら出来るかも」と思えたとします。そしたら、1回やる。そしてその1回を続けてゆくうちに、「あれ?2回も出来るかもなぁ」と思えるようになったら、2回をやる。

このように、プログラムを作る上でも「自分に実行可能なステップ」を見つけてそれをやることが大事だと思います。

更に「自分に実行可能なステップ」が出来たら、「達成感」を味わうということも意識してみてくださいね。

出来たことに意識を向けて、「よく、やった!。凄い!、前進したぞ!」と自分を思いっきり褒めてあげましょう(笑)

さて、今回のブログテーマ「Helloを自分の好きな位置に表示しよう」をやっていきましょう。

文字表示の位置を変えるには、
printf("¥033[%d;%dH", (表示行数字),(表示列数字));
で行います。

今回提供しているhello4.cでは、
#define  setPosition( x, y )   printf("¥033[%d;%dH", (y),(x) )
の部分で、setPosition(x, y)を定義し、
setPosition( 70, 20 );
の部分で、70列目、20行目に文字表示をしなさいとなっています。


Step1:以下のリンクより、今回のソースファイルをダウンロードしてください。
https://www.dropbox.com/s/h851id7zt98et0a/hello4.c?dl=0

Step2:ファイル名はhello4.cとして、「3つの手順」でプログラムを実行してください。

Step3:hello4.cを改造してみましょう。
・画面上の1行目、5列目にHelloを表示してみましょう
・画面上の好きな場所に、Helloを表示してみましょう
・画面上に、複数のHelloを、好きな場所に表示してみましょう

Step4:もしアイデアが浮かんだら、それも実行してみましょう

Step5:達成感を味わいましょうね
よくやった!、凄い!、前進したぞ!

いつも感謝しています。Nです。

前回の記事「Helloに下線を引いて背景色も変えてみよう」
http://ameblo.jp/engineertalksc/entry-12089758247.html
で、端末に表示されるHelloの文字をだいぶカスタマイズできるようになってきました。

今日は、前回のソースファイル(hello2.c)を少し整理してみたいと思います。

本日のブログテーマ「面倒くさがり屋さんは素質がある」を読まれて、「えっ、どういうこと?」と思われた読者さんもいるかもしれません。

実はこの言葉は、私がまだ新入社員だったころに先輩から言われた言葉です。

「優秀なプログラマーって結構面倒くさがり屋が多いんだよ」と。

この言葉の意味するところを知ることで、プログラムを整理する目の付けどころが分かってきます。

優秀なプログラマーというのは、「同じようなコードを何度も書きたくない」「思考の流れが止まるような書き方はしたくない」、そういう事は「すごく面倒くさい」と思っています。面倒くさいから、なるべくそういうことを避けるにはどうすれば良いかなぁと考えてプログラムを書こうとします。

ここにプログラムを整理するポイントがあります。つまり、

1:同じようなコードを何度も書いているところは無いか?

2:思考の流れが止まってしまうところは無いか?

に注目してプログラムを改善しようと考えます。

この上記二点を「意識」するだけでも、徐々にプログラムが上達していきますので、是非皆さんが書いたプログラムもこの視点から眺めるようにしてみてくださいね。

本ブログでは、皆さんにこの力も付けて頂きたいので、皆さんと一緒に書いているプログラムも徐々に徐々に変化するようにしていこうと考えています。

さて、具体的に述べて行きますね。

1:同じようなコードを何度も書いているところは無いか?

実はこれは、「hello1.c」から「hello2.c」になったときに忍ばせていました。
文字色設定の部分で、

printf("¥033[30m"); /* 黒 */
printf("¥033[31m"); /* 赤 */
printf("¥033[32m"); /* 緑 */
printf("¥033[33m"); /* 黄 */
printf("¥033[34m"); /* 青 */
printf("¥033[35m"); /* 紫 */
printf("¥033[36m"); /* 水色 */
printf("¥033[37m"); /* 白 */
printf("¥033[39m"); /* 規定色 */

printf("¥033[3%dm",数字);
に変えています。これは、この観点からプログラムを改善しました。

2:思考の流れが止まってしまうところは無いか?

これは、今回皆さんにお送りするプログラム(hello3.c)で改善していますが、すこし簡単に述べると、

printf("¥033[3%dm",数字); 等の部分です。

そもそも、printf("¥033[3%dm",数字);の部分が数字と記号の羅列なので、ふと「えっと、これは・・・」と思考の流れが途絶えてしまいます。

そこで、#defineというものを使用して、思考の流れが止まらないような工夫をしています。

#define  名前 定数

とすることで、プログラム中に現れた「名前」を「定数」に自動的に置き換えてくれます。C言語では伝統的に「名前」には大文字を使用するので、プログラムの中で大文字の単語を見たら、このパターンを表しているのではと思ってみてください。
#define  RED   1 あたりがこのパターンを用いています。

#define  名前(引数)   引数を使った置き換えのプログラム

とすることで、プログラム中に現れた「名前(引数)」を「引数を使った置き換えプログラム」置き換えてくれます。

#define  setCharColor(n)   printf("¥033[3%dm", (n) ); 

setCharColor( YELLOW ); =   printf("¥033[3%dm", (3) );

を意味しています。

では、本日も「3つの手順」を実行してみましょう。

STEP1
:以下リンクより、今回のプログラムをダウンロードしてみてください。
https://www.dropbox.com/s/6zwpjseflh95p0k/hello3.c?dl=0

STEP2:ファイル名はhello3.cとして「3つの手順」を実行してみてください。

STEP3:今まで作られたプログラムも、プログラムを整理する2つのポイントから観て整理してみてください。

STEP4:もしアイデアが出たら、それも「3つの手順」で実行してみてくださいね。

追伸)
「printf関数まとめ」というファイルを作成しました。

printf関数の書式について、すごく簡単に要点だけを抽出していますので、printf関数が分からない読者さんはこれをみることで、頭が整理されると思います。

ダウンロードリンクは以下になります。
https://www.dropbox.com/s/kt9qvv4ucx5sdkc/printf%E9%96%A2%E6%95%B0%E3%81%BE%E3%81%A8%E3%82%81.pdf?dl=0


いつも感謝しています。Nです。

前回の記事「Helloの色を変えてみよう」
http://ameblo.jp/engineertalksc/entry-12087989040.html
で端末に表示される文字色を変えてみました。

今日は、背景色を変えてみたり、文字属性(例えば下線を引く)を変えてみたりしましょう。

もしかすると、本ブログのペースがゆっくりだなぁと感じられる方もいるかもしれません。でも私は、成長の過程において特に最初のうちは、自分に出来る事で簡単なことをゆっくり一歩ずつ前進していくことが大事だと思います。そうすることで、積み重ねという現象が生じて、気づいたら「あれ?、分かるようになってきたなぁ~」と感じられ、自信というものが形成されていくのだと思います。

そして、自分に出来ることで簡単なことをゆっくり一歩ずつ前進していくと、そのうちに、自分の中からアイデアが出てくると思います。実はここが非常に大切です。このアイデアとは、「今の自分に出来るかも」というものが出てきていると言えます。そしたら、そのアイデアを実際にチャレンジしてみる。出来なくてもOKです。このチャレンジする行為自体が、積み重ねという現象を発生させ、能力が向上していくと私は考えています。

ですから、このブログを読んで何かアイデアが自分の中から出てきたら、是非チャレンジしてみてくださいね。チャレンジした結果、出来なくてもOKです。その場合は、一歩一歩前進して、時を置いてまたチャレンジすれば良いだけです。

では、今回のテーマ「Helloに下線を引いて背景色も変えてみよう」をやってみましょう。

Step1: 以下のリンクより、今回のプログラムをダウンロードしてください。
https://www.dropbox.com/s/0mkp5v9vz7m2p40/hello2.c?dl=0

Step2: ファイル名はhello2.cとして、「3つの手順」を実行してみてください。

Step3: 文字色、文字背景色、文字属性を色々変えてみましょう。

文字色の変え方
printf("¥033[3%dm", 3); のカンマ(,)後の3の数字を変える
黒(0), 赤(1), 緑(2), 黄(3), 青(4), 紫(5), 水色(6), 白(7), 規定色(9)

文字背景色の変え方
printf("¥033[4%dm", 4); のカンマ(,)後の4の数字を変える
黒(0), 赤(1), 緑(2), 黄(3), 青(4), 紫(5), 水色(6), 白(7), 規定色(9)

文字属性の変え方
printf("¥033[%dm", 4); のカンマ(,)後の4の数字を変える
通常(0), 明るく(1), 暗く(2), 下線(4), 反転(7), 隠す(8), 取消線(9)

Step4: もしアイデアが出たら、それも「3つの手順」で実行してみましょう。

いつも感謝しています。Nです。

「3つの手順の実行」記事
http://ameblo.jp/engineertalksc/entry-12085484428.html
でHelloと表示するプログラムを皆さんに書いてもらいました。

今日は、表示されるHelloの「文字色」を変えてみましょう。

まずは暫くの間、Helloを表示する簡単なプログラムを、少しずつ少しずつ変えて皆さんと一緒に「3つの手順」を多く経験したいと思っています。

この少しずつ少しずつプログラムを変えていくことが、実はとても大切です。この積み重ねによって、皆さんのプログラム能力も少しずつ少しずつ向上してきます。
ですから、今は焦らずに一歩ずつ一歩ずつ前進して行きましょう。

表示されるHelloの文字色を変えるプログラムを作成する前に、printf関数について少し簡単に説明します。

Helloを表示するプログラムで、

printf("¥nHello");

という箇所がありました。ここには、3つのポイントが潜んでいます。

1つ目のポイントは、printfの部分です。
コンピュータは printf と言われると、「端末に何か表示するんだなぁ」と理解します。

2つ目のポイントは、("  ");の部分です。
コンピュータは、「"" で囲まれた部分を表示するんだ」と理解します。

3つ目のポイントは、¥n の部分です。
これは、"エスケーブシーケンス"というもので、いわゆる特殊文字です。
¥から始まるのが特徴で、その後に続く文字と合わせて特殊な意味としてコンピュータは理解します。例えば、この¥nであれば、「改行する」という意味になり、コンピュータは改行を行います。

printf("¥nHello");  → 表示しろ「改行してHello」
printf("¥n¥nHello"); → 表示しろ「改行改行してHello」
printf("Hello¥n");  → 表示しろ「Hello 改行」
printf("Hello¥n¥n"); → 表示しろ「Hello 改行改行」
printf("Hello");   → 表示しろ「Hello (改行なし)」

そして、このエスケープシーケンス(特殊文字)は色々あります。

さて、今回はこの"エスケープシーケンス"を用いてHelloの文字色を変えたいと思います。
まずは以下の手順を実行してみてください。

Step1: 以下のリンクより、今回のプログラムをダウンロードしてください。
https://www.dropbox.com/s/loo8uq0cgxchrfy/hello1.c?dl=0

Step2: ファイル名はhello1.cとして、「3つの手順」を実行してみてください。

Step3: 以下に文字色に関わるエスケープシーケンスを記載しますので、色をかえてみましょう。ダウンロードしたプログラムでは、黄色になっています。

文字色を黒色にする→ ¥033[30m
文字色を赤色にする→ ¥033[31m
文字色を緑色にする→ ¥033[32m
文字色を黄色にする→ ¥033[33m
文字色を青色にする→ ¥033[34m
文字色を紫色にする→ ¥033[35m
文字色を水色にする→ ¥033[36m
文字色を白色にする→ ¥033[37m
画面クリア → ¥033[2J

Step4: もしアイデアが出たら、それも「3つの手順」で実行してみましょうね。

たとえば、That is interesting.のinterestingを赤色で表示してみようとか、思いついたことをプログラムしてみてくださいね。

いつも感謝しています。Nです。

前回の記事「3つの手順の実行」
http://ameblo.jp/engineertalksc/entry-12085484428.html
で Hello と表示するプログラムを皆さんに書いてもらい実行してもらいました。

Helloという文字が表示されたとき、何か感じましたか?

今日は、前回のプログラムで皆さんが「おさえておくポイント」を話したいと思います。
「おさえておくポイント」は2つあります。

この2つのポイントを知って、「3つの手順」をドンドン経験していくことで、よりプログラムの上達が早まると思います。また、今回はC言語の文法的説明というよりも、機械と会話しているような感覚で以下の文を読んでみてくださいね。

初心者さんは、文法にすごく意識がとらわれがちなので、多少アバウトでもよいので、プログラムにある流れを感じとるようにしてみてください。

C言語で書かれたプログラムを実行する”機械さん”は、
1) 書かれたプログラムを上から下に順に読んで理解していく
2) 実行するのは、main関数の中身
という性質を持っているということです。

これをプログラムを書く側の立場から述べると、
1)main関数で実行するための準備を上から順に書いていく
2)main関数に実行したいことを書く
となります。

例えるならば、
「”機械さん”、私はmain関数の中であなたにやってもらいたいことがあるので、この準備(心構え)よろしく!」というのを上から順番に書いていく。そして、main関数の中で、「これをやって!」と機械に言うという感じです。

では、実際に前回のプログラムで説明しますね。

#include  <stdio.h>

int mian( void )
{
    printf("¥nHello");
    return( 1 );
}

#include  <stdio.h>
の部分が、機械さんに、「私はmain関数の中でprintfという関数を使うから準備よろしく!」に相当する部分で、#includeが準備(含め!)しろ、<stdio.h>がprintf使うよという感じになります。

int  main( void )
{
の部分が、「実行して欲しいことはね」みたいな感じです。

printf("¥nHello");
の部分が、「Helloと表示して欲しいです」みたいな感じです。

return( 1 );
}
の部分が、「以上です」みたいな感じになります。

最後に、今日あなたにやってもらいたいことがあります。

前回Helloの部分を色々変えてみましょうと言いました。
今日は、そのあなたが変えたプログラムを、上のような感じで読んでみましょう。そして、もう一度「3つの手順」を実行し、プログラムを動かしてみましょう。

Helloに変わるあなたが出したいと思った文字が表示されたとき、何かを感じましたか?
いつも感謝しています。Nです。

前回の記事「プログラムを作る3つの手順」
http://ameblo.jp/engineertalksc/entry-12084315588.html
で「3つの手順」を多く経験しよう、そしてそれが「上達の秘訣」だよと書きました。

今日は早速、簡単なプログラムを皆さんと一緒に作りたいと思います。

読者さんの中には、本当にC言語をはじめてやる方もいると思います。C言語の文法もまだ理解していないのに、いきなりプログラムを書くの?と不安に思われる方もいるかもしれません。

でも、思い出してください。プログラムの上達の秘訣は「3つの手順」を多く経験するです。確かに最初は「???」と思われるかもしれません。でも安心してください。この「3つの手順」を多く行うことで、段々と分かるようになってきます。

例えば、”赤ちゃん”を考えてみてください。いきなり日本語の文法を勉強しだす赤ちゃんがいたら、確かにすごい!けど。。。普通の赤ちゃんは、いきなり文法勉強しませんよね。親が赤ちゃんに話しかけているのを聞いて、おそらくそれを真似て少しずつ少しずつ話し出すのだと思います。それと一緒です。

では、やってみましょう!。

以下をやる前にお願いが一つあります。それは「必ず自分の手を動かして実際にやる」ということです。
赤ちゃんの例でいうと、「俺は(私は)、知ってるよー」「周りが何か言ってるー」「面倒くさいー」と思って口から何も発しない赤ちゃんがいたら、うーん、さすがにしゃべることができないので。


Step1:「プログラムを作る3つの手順」を以下リンクからダウンロードする
https://www.dropbox.com/s/31tg7jyveo07oau/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%EF%BC%93%E3%81%A4%E3%81%AE%E6%89%8B%E9%A0%86.pdf?dl=0

Step2:本日のプログラムソースを以下リンクからダウンロードする
https://www.dropbox.com/s/2ggevet58b1new5/hello.c?dl=0

Step3:ダウンロードした「プログラムを作る3つの手順」に従ってプログラムを作り実行する

この時、プログラムを書くでは、上記のStep2でダウンロードした内容を記載してください。

Step4:Step2でダウンロードした内容を書きかえて、「3つの手順」を繰り返す。

Helloという文字が、どこかに記載されていますので、それを色々変更してみましょう。
例えば、Hi! とかにしてみる。
ここが、「3つの手順」を多く経験するポイントですので、色々変えて遊んでみましょう。

追伸)
「cygwin」と「秀丸」のダウンロード、インストールの仕方を具体的に纏めたマニュアル書を作成しました。

「cygwin」と「秀丸」のダウンロード、インストールの仕方が分からない方は、この手順通りにやってみてください。そうすれば、ダウンロードとインストールが出来ると思います。

ダウンロードリンクは以下になります。
1) cygwinのインストール方法
https://www.dropbox.com/s/iqf201t1aevznd9/cygwin%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95.pdf?dl=0

2)秀丸のインストール方法
https://www.dropbox.com/s/ek4cpbqhtsikkea/%E7%A7%80%E4%B8%B8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95.pdf?dl=0





いつも感謝しています。Nです。

前回の記事「Cプログラミングに必要な環境を入手しよう
(http://ameblo.jp/engineertalksc/entry-12083166589.html)」
で「cygwin」と「秀丸」をご紹介しました。

この「cygwin」と「秀丸」ってプログラムする上で、何をするツールなの?と思われた読者さんもいるかもしれません。今日はこの点についてお話します。

プログラムを作って動かすまでには、「3つの手順」があります。この「3つの手順」で必要となるツールが「cygwin」と「秀丸」になります。
そしてこの「3つの手順」を実際にしてゆくことが、プログラムの上達の秘訣です。プログラムが苦手と思われている方は、この「3つの手順」を経験する回数が少ないのだと思います。本ブログでは、この「3つの手順」を皆さんと一緒に経験していきたいと考えています。

具体的に「3つの手順」とは

Step1:プログラムを書く
Step2:コンパイルする
Step3:実行する

です。

Step1:「プログラムを書く」
このステップで、「秀丸」を使います。
秀丸とはテキストエディタと呼ばれるソフトウェアの一種です。つまりテキスト(文章)入力が出来るソフトウェアのことです。
具体的には、C言語のプログラムを書くことになります。C言語のプログラムの書き方については、本ブログで今後説明していきますので安心してください。

Step2:「コンパイルする」
このステップで「cygwin」を使います。
実はStep1で書かれたプログラム(言葉)は、このままではコンピュータは分かってくれないのです。そこで、このcygwinというものを使って、コンピュータが分かってくれる言葉に変えます。これをコンパイルすると呼んだりします。コンパイルの仕方についても、本ブログで今後説明していきますので安心してください。

Step3:「実行する」
本ブログでは、このステップも「cygwin」を使います。
実行するとは、プログラムを実際に動かすということになります。もちろんこの実行の仕方についても、本ブログで説明していきますので大丈夫です。

最後に、この「3つの手順」を実行する上で大事なマインドを記載しておきます。

「完璧を目指して動けなくなるより、不完全でも良いから一歩前進!」

多くの初心者さんは、最初から完璧を目指してこの「3つの手順」のStep1で止まってしまいます。そのため経験回数が少なくなってしまいます。なので、不完全なプログラムでもよいので、3つの手順をより多く経験するぞと思うことが特に最初のうちは大事です。

いつも感謝しています。Nです。

プログラミング言語を学ぶとき、まず最初にやって欲しいことがあります。

それは、「プログラミングするのに必要な環境(ツール)を入手する」です。

プログラムを学習する目的は、プログラムを実際に書いてそのプログラムを動かすことだと思います。だからこそ、最初にプログラムを書けるツールを準備するのが大事になってきます。

例えば、あなたがサッカーをしたいと思ったとします。まずサッカーのルールブックを購入して全てのルールを覚えますか?たぶん大多数の人は、サッカーをしたいのでボールを買って、とりあえずボールを蹴ったりして遊ぶと思います。そのあと、ルールを少しずつ覚えてゆくのだと思います。

プログラムを学習するときも、このサッカーの例と同じです。まずは最初にプログラムを書けるツールを準備してくださいね。

しかし、ツールと言っても色々あるし、特に初心者さんは何を選べばよいか分からないかもしれません。そこで、本ブログではツールをご紹介します。

なお、このツールを用いて色々とプログラムを読者さんと一緒に作っていこうと考えています。

多くの読者さんは、OSはWindowsだと思いますので、Windowsのツールをご紹介します。

1:  cygwin (無料)
2:  秀丸  (有料だが実質、無料で使える)

1: cygwinの入手先:
 www.cygwin.com

なお、インストールの方法は以下が分かりやすく説明されています。
 http://www2.ktokai-u.ac.jp/~kfuji/cygwin/cygwin.htm

2: 秀丸の入手先:
 http://hide.maruo.co.jp/software/hidemaru.html

もしMacのツールも教えて欲しいと思われる方がいらっしゃれば、コメントくださいね。

はじめまして。

「技術者が教える初心者さんのためのC言語」ブログを立ち上げました。名前は、Nとしておきます。

私は、仕事でロボットを制御するプログラムを15年以上行っています。プログラミング言語としては、C言語を用いています。

現在でこそ、C言語を用いてロボットを自由に制御することが出来るようになりましたが、仕事をはじめた当初はC言語がはじめてだったので悩みました。

例えば、
・C言語の参考書どれが良いのだろう?
・参考書読んだけど、結構細かくてチンプンカンプン。。。
・参考書の内容を覚えたけど、すぐ忘れてしまう。。。
・C言語の基礎は分かるようになってきたけど、さてこれをどういう風に活用するの?
・プログラムの文法は覚えたけれど、いっこうに上達感が感じられない。。。
などなど。

今の私なら、この昔の私にアドバイスをしてあげられる!。

「初心者さんって同じような悩みを持ってたりするのかなぁ」と考えるようになりました。そこで、このブログを立ち上げる決意をしました。

このブログでは、昔の私と同じような悩みを持っている初心者さんに、どのように考えて一からプログラムを作り上げていくのかを出来るだけ具体的に書いていこうと思います。

最後に私の好きな言葉を記載します。
「完璧を目指して動けなくなるより、不完全でも良いから一歩前進!」