C言語の挫折箇所構造体の説明

C言語の構造体に再度取り組んでいます。先に制作したオンライン教材を見直しています。C言語を学ぶひとの67%が挫折し、その箇所がポインタと構造体であると書いてあります。しかしどうもわざわざ難しくしているような気がします。さらにSEの説明が、自分は解っていても本に書くと難しなっています。そこで現在、徹底的にわかりやすいものを作成することを思い立っています。つまり中学生1.2年生で解るようにです。
まずは構造体とは、販売品管理や給与計算をするときのレコード単位のデーター管理ということがわかりました。それならその昔にずいぶん勉強しましたし、実務に就いても同じようなデーター管理をプログラム制作しました。

給与関係なら社員番号でファイルをつくります。以前はレコードと呼びました。レコ-ドが集まってファイルになります。青山さん、石田さん、佐々木さん、林さん・・・・と社員がいて、それぞれにデーターが入力されています。男女別・生年月日・入社年月日・役職・交通費・社会保険関係・郵便番号・住所・ 家族構成・資格とまだまだあるでしょう。これを人事部で1ファイル。営業部で1ファイル。購入部 で1ファイル、というように個別化され、それが東京本社・大阪本社・札幌支社・九州支社というよ うにさらにグループ分けになります。

これをコンピューターで管理するのは挫折するほど難しいものではありません。
①社員入社で追加。
②社員退社で削除。別保管。
③社員転勤の移動処理。
④内容の変更。
⑤目的の社員データー抽出。

またコンピューターの高速化と記憶媒体の低廉化・大容量化で頭を余分にひねることは要りません。そして早い話が、関数の宣言だ、呼び出しだなどと処理をしていなくても、サッサとデーター処理のプログラム作成に入れます。

①は追加処理。そして正順ファイルにするための併合処理。
②は削除処理。
③④抽出と変更。
⑤抽出処理。
いまはフローチャートを書かないSEがほとんどですが、フローチャートに表せば処理の簡単さがすぐにわかります。

C言語でまず最初に購入して読んでいる本はやさしく書いていると感じます。それが構造体に入ったらとても難解です。それでよく思考を凝らすと簡単なことを難しく書いています。
そのひとつが上記ですし、あと変数名を長くて混同しやすいものにしています。

本の最後に書いてあるのが関数にするメリットです。それは
「プログラム本文にだらだらと長く書くと、どういう処理をしているのかわからなくなります。」ということです。関数化しておけば関数を呼び出すだけで同じコードを書く必要がありません、とあります。まだ関数化と構造化の違いがよくわかりませんが、このようなプログラムの組み方は昔からやっていました。サブルーチンと言いましたが、サブプログラムということです。他にも使いそうな部分をミニプログラムにして名前をつけて別保管をします。名前はラベル名、またコーデング番号です。
そこへ飛んで処理をしてまた戻って来ます。結果の値も持ち帰って来ます。
戻り先が異なるときはフラグを立てて入って行き、出るときにそのフラグを判断してもとに戻りま
す。
C言語がジャンプや戻り先管理がうまくいかないなら、命令文をコピーして本文に組み込んだっていいわけ です。文が長くなってもコンピューターの処理ステップ数は変わりません。
私が現在のプログラミングを学習し始めたきっかけは、システム開発を依頼したSEが精神疾患にか かっていて、それが重くなり開発を中断放棄されたことによります。ほかのSEも誠実に取り組まないので自分で完成をさせるしかなくなりました。
そして最初のSEはフラグを立てて処理をすることを知りませんでした。

プログラムが見た目長くなろうが、学習しながら挫折するよりは続けられるほうが良いです。私はC言語がもっとやさしく習得できる学習体系に取り組みたく考えています。C言語の需要はまだまだ続くとあります。

現在入門書をオンラインテキスト化していますから、まだ私が触れていない構造化の活用テクニックがあ るかも知れません。そのときは企業研修なり、ハイレベル専門のスクールで学べば良いよいので、 まずはC言語全般が使えるようになることが先決と感じます。挫折してしまったら何もなりません。
そこでC言語には本2冊を使っていますから、構造体が別なプログラミング技術で使えるかを検証してみます。
構造体の特徴は
①異なる 型をまとめて新しい型とする、とあります。例として会社の給与計算関係の社員データーを作るとします。
社員コード:文字型
氏名   :文字型
生年月日 :整数型
入社月日 :整数型



時間単価  :整数型
超過勤務時間:整数型
というようにデーター化がされるでしょう。社員情報をひとり1レコードにまとめて記録することになります。

②メンバー変数にアクセスする。
ランダムファイルかシークエンスファイルかで処理は異なりますが、社員コードで該当社員のデータ
ーを読み出して来ることができます。何番目にどういう項目のデーターが入っているかはわかっていますから、そ の場所の数字や内容を変更することができます。変更したら親ファイルに戻します。

③構造体を初期化する。
どこまでの初期化かですがレコ-ド内を空白や0で上書きすれば初期化です。全部でも、一部でも自
在です。

④構造体のサイズを知る。
ファイルのサイズを返す関数があるはずですし、簡単なプログラムを組んでおいてサイズを数えて知
ることは容易です。

⑤ビットフィールドを使う
最近の用語なのでしょうが、C言語に命令があるようですからビット単位でデーターを扱うことがで
きます。構造体概念とは別なことです。

⑥構造体は関数の引数として使うことができる。
構造体の応用になっていて、さすがにこれは使い道がわかりません。C言語全般を学んでおいて、この ような使い方が必要になれば会社の輩に習ったり、企業研修を受けたりがあるでしょう。挫折してしまいC言語自体をやめてしまっては何も得ることができません。
また別な方法はあります。各構造体から必要とするデーター項目を抽出して、その集積でもって処
理をすれば目的の処理になります。膨大なデーター量であれば手すきの間に処理を掛けておきます。

⑦構造体の配列を作る
全部の構造体を表すデーターをまとめて管理することができるとしています。レコードそれぞれを配列構造に入 れるようにすればその用途は満たされます。各レコードの同じ位置に同じデーターは入っています。

⑧構造体でリストをつくることができる。
構造体の変数としてポインタを扱うことができます。同じ型の構造体をさし示すことができ、データー同士を数珠つなぎにできるというものです。
使い道がわかりませんが、データー抽出すれば処理は可能ですし、これがわからなくてC言語学習を中断するほどではありません。

ということで工夫によって同じ処理はできますし、構造体で折するようなことではありません。

C言語解読