C言語による制御系、組込み系のお仕事について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
メロンパン

C言語による制御系、組込み系のお仕事について

#1

投稿記事 by メロンパン » 13年前

度々お世話になります。メロンパンです。
本当に真剣に悩んでいることがあります。できれば経験者の方のご回答をお願いいたします。

内容:今までC言語で仕事を探し続けておりますが、C++,C#,Java,PHPなどといった、
新しい言語に対応できる方を探している企業が多く、純粋にCだけのお仕事は、制御系や組込み系のお仕事が多く見られます。
しかし、制御系、組込み系の意味、仕事内容がわからず、ただ名前だけでこの業界に入ることをためらっております。
そこで、もしよろしければ、制御系、組込み系の開発環境や、仕事内容について教えていただけないでしょうか?
お手数ですが、どうか宜しくお願い致します。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#2

投稿記事 by softya(ソフト屋) » 13年前

元ゲームプログラマなので私の認識だと制御系・組込み系は、マイコンやパソコンを使い何らかの機器を制御するソフトウェアを作成する仕事です。
組み込み系はマイコン、制御系はパソコンやマイコンと言う印象がありますが、実際のところは曖昧だと思います。

制御系とは…エアコン、テレビ、携帯電話といった家電や、工業用ロボット、自動車等、あらゆる工業製品は製品の中に組込まれたソフトウェアの命令に沿って動いていますが、このシステムを制御系と呼びます。
「プログラマ(制御系)とは? - 仕事がわかる職種ライブラリー『ラブショク』」 ← 引用元
http://www.jinzai-bank.net/c/loveshoku/ ... BDICTNO=10
これを見る限り制御系は組込み系を内包しているとしか思えません。

で、組込み系をより狭いジャンルとして考えるとマイコンを使って家電製品や自動車、携帯電話に組み込むソフトウェアを作ると考えてください。
で制御系は、より幅広く工場の生産ラインをパソコンで制御する部分も含めるといった感じです。

組込み系などで、具体的にどんな仕事するか分からなければ聞いてください。

[追記]
> 制御系、組込み系の開発環境や、仕事内容について教えていただけないでしょうか?

制御系あれば、WindowsでVC++やLinuxでgccなど色々考えられます。
組込み系となる千差万別で、マイコン毎に開発環境は違うと思ってください。gccが使える環境もありますが、OSがLinuxとは限りません。

[さらに追記]
仕事内容は、ハードウェアを制御するプログラムを作るということで、割り込み制御やタイマー制御、リアルタイム制御など一般WindowsやDOSアプリでは扱わない知識を必要とします。
ハードウェアは専門家が作ってくれますが、説明を理解したりデバッグのためにもハードウェアの関係の知識に詳しいことに越したことはありません。

マイコンの一種であるPICとAVRマイコンの例をご紹介します。
「電子工作室 PIC24F応用製作例紹介」
http://www.picfun.com/app24Fframe.html
「AVRマイコンで学ぶコンピュータの仕組み」
http://siva.cc.hirosaki-u.ac.jp/usr/koy ... /text/avr/

あと組込み系のサイトも紹介。
「組み込みソフト -- Tech-On!」
http://techon.nikkeibp.co.jp/embedded/
「組み込み開発フォーラム - @IT MONOist」
http://monoist.atmarkit.co.jp/mn/subtop/embedded/
「組み込みネット - 組み込みシステム開発にたずさわるエンジニアの方々や,ビジネス・パーソンの方々を支援するWebサイト / CQ出版株式会社」
http://www.kumikomi.net/
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
バグ
記事: 130
登録日時: 14年前
住所: 愛媛県
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#3

投稿記事 by バグ » 13年前

開発環境や開発に使用する言語は会社ごとに・・・というよりは、むしろお客様によって変わりますね。

個人的には、C言語だけを深く使える人よりも、色々な言語を浅く使える人の方が重宝されるように思います。これは、「C言語以外のお仕事はしません!!できません!!」と突っぱねるのではなく、他の言語も勉強する姿勢があるかどうかという意味です。

もちろん、様々な言語をパーフェクトに使いこなせればそれにこしたことはありませんけどね。

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#4

投稿記事 by メロンパン » 13年前

softya様、メロンパンです。
ご回答どうもありがとうございました。

よくよく考えるとCは機械語に近い言語ですから、ハードウェアと密接な関係があるんですね。
今は、Cに引き続いてVC++で世にも便利な開発環境を用いてプログラムを勉強しております。
制御系、組込み系の文章を拝見し、おおよその環境は写真で見たことがありますが、
実際にそれに取り組もうとなるとどうしたら良いのか、機材が必要かどうか未知の世界でした。

添付されておりましたURLを開けてみました。非常に興味深いホームページを見て、
確か小さい頃はこういうハンダ付けとかが好きだったと思い返しては、非常にレベルが高いなと、
感心してしまいました。学生時代に電子工作をしていた人がこんなことをやっていたなと。

話が脱線してすみません。制御系や組込み系の概要と、目的にするものの対象がよくわかりました。
どうもいつもありがとうございます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#5

投稿記事 by softya(ソフト屋) » 13年前

言語という意味なら、VBやJavaは制御系や組込み系でも使われますね。
あとマイコンの性能アップに伴ってC++も今後増えてくるかも知れません。
なので、今後C言語だけで済むとは私も思いません。

[追記]
組込み系の雑誌をご紹介しておきます。

「Interface」
http://interface.cqpub.co.jp/
「バック・ナンバ|Interface」
http://www.kumikomi.net/interface/contents/back_num.php

バックナンバーを見てもらうと分かるのですが組み込みで使うC#も既に存在しています。
今後どうされたいのか?とかありますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#6

投稿記事 by メロンパン » 13年前

バグ様、メロンパンです。
お返事どうもありがとうございます。
その通りだと思いました。今はVisualStudioでVC++を勉強しております。
それと同時に、フリーソフトでHTMLを始めております。(意味があるかどうかわかりませんが)
あとは、VisualBasicまでは覚えたいと思っています。ご回答どうもありがとうございました。

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#7

投稿記事 by メロンパン » 13年前

バックナンバーを見てもらうと分かるのですが組み込みで使うC#も既に存在しています。
今後どうされたいのか?とかありますか?


今後はウェブ業界で、PHPを駆使して色々な便利なサイトを作りたいと考えています。
エンターテイメント系のサイトでなく、実用的なサイトを構築したいというのが希望です。
ただ、まだやりたいことが一つに絞れないので、確実なことは言えませんが、
今はCしか知らないから、組み込みという考えはありません。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#8

投稿記事 by ISLe » 13年前

いままでC言語はどんな処理系を使ってきたのでしょうか。

ARM純正のC/C++コンパイラで日本語がまともに通らないので苦労したことがあります。
いまは国際化が進んで、パソコンで一般的に使える処理系ではその手の問題はほとんどなくなってしまいました。
そういう苦労を現場で初めて味わうことになるとしたら恐ろしいことですね。

(追記)
#組み込み系の質問じゃなかったのかな。

既にご存知でしょうけれど、PHPの仕事をするならサーバーサイドの知識も必要ですよ。
最後に編集したユーザー ISLe on 2011年7月05日(火) 18:00 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#9

投稿記事 by softya(ソフト屋) » 13年前

メロンパン さんが書きました:今後はウェブ業界で、PHPを駆使して色々な便利なサイトを作りたいと考えています。
エンターテイメント系のサイトでなく、実用的なサイトを構築したいというのが希望です。
ただ、まだやりたいことが一つに絞れないので、確実なことは言えませんが、
今はCしか知らないから、組み込みという考えはありません。
では組み込み業界の勉強をしたいということでは無いのですね?
すっかり勘違いしてました。

PHPでサーバー系アプリを作るのが目的なら、HTML、HTML5、CSS、javascript、データベースのSQL言語は必須だと思います。
実際にPHPで動的WEBサイトを構築してみるのが、一番勉強になるでしょうね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#10

投稿記事 by softya(ソフト屋) » 13年前

ISLe さんが書きました:いままでC言語はどんな処理系を使ってきたのでしょうか。

ARM純正のC/C++コンパイラで日本語がまともに通らないので苦労したことがあります。
いまは国際化が進んで、パソコンで一般的に使える処理系ではその手の問題はほとんどなくなってしまいました。
そういう苦労を現場で初めて味わうことになるとしたら恐ろしいことですね。
あぁ、有りましたね。
コンパイラによっては、前処理を作ってコメントを消してコンパイルしたり、文字コードを変えて日本語コメントをエラーじゃなくなるように工夫したことが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#11

投稿記事 by メロンパン » 13年前

返信遅くなってしまいすみません、
今までやってきたC言語の内容は割と業務とは関係なく学術系のことをしていたので、
これを生かせるのなら幸いでして是非とも相談させていただきたいのですが、
眠いので明日にお願いします。

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#12

投稿記事 by メロンパン » 13年前

おはようございます。メロンパンです。
C言語では下記のようなコンパクトで素早いプログラムを作成するのが得意でした。

コード:


#include <stdio.h>
#define N 2

int factorial(int n)
{
	if (n > 0)
		return (n * factorial(n-1));
	else 
		return (1);
}

void function(int m)
{
	int i,j;
	if (m > N)
		return;
	for (i = 0; i < factorial(m-i-1); i++)
		for (j = 0; j < (m+1); j++)
		{
			printf("In(%d,%d)\n", j, m);
			function(m+1);
			printf("Del(%d)\n", j);
		}
}

void main(void)
{
	function(0);
}
上記は、ポインタを用いて、一列に数字を全数列挙するためのプログラムの部品です。
自分で作成した作品で、気に入っています。(ご感想を頂けるとありがたいです)

学校では他に、結婚式や求人などであるマッチングの研究をしておりました。
しかし、今はCしか出来ないため、組込み系に入ろうと躊躇していたところであります。
softya様のURLを何度も眺めてみたのですが、やってみたい。と悩んでいる始末であります。
また、仕事探しの旅にでかけますので、返信遅れてしまうかもしれませんが、よろしくお願い致します。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#13

投稿記事 by softya(ソフト屋) » 13年前

>上記は、ポインタを用いて、一列に数字を全数列挙するためのプログラムの部品です。
ポインタが無いのですが?

プロとして今後やっていくなら気になるところは
・if文でやたら{}文を省略するのはミスの原因になるので避けること。
・コメントが皆無。
・i,jなどの変数名が分り易くない。
などが気になります。

あと学校などで学んだ人にありがちなのが
void main(void)
はマイコンならOKですが、一般OSなら
int main(void)
を書くのが正しい書式です。

実際のところ、もっと長いプログラムを見ないと評価できないですね。
数ファイルに分割される物で、C言語の文法が色々出てくるものがよろしいです。

[追記]
そう言えば、何万行規模のプログラムを書かれたことがありますか?
あるいは、今までの経験で何万行ぐらい書いてきたと思いますか?
メロンパンさんの経験の程度をお伺いしたくてお聞きしました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

maru
記事: 150
登録日時: 14年前

Re: C言語による制御系、組込み系のお仕事について

#14

投稿記事 by maru » 13年前

メロンパン さんが書きました:自分で作成した作品で、気に入っています。(ご感想を頂けるとありがたいです)
再帰呼び出しの例で階乗を使っている書籍/文献が見られますが、実際のプログラムで階乗を再帰で計算することはないだろうと思ってました。
数学的には
  n! = factorial(n) = n×factorial(n-1)
なのでスマートですけど、単純に
  n! = 1×2×...×n
で十分に思えます。この程度の演算処理で再起を使って計算するのは、関数呼び出しのコストと見合わないと思います。
まあ、この辺りはセンスと言われればそれまでなんですけどね。
実際の仕事で再帰呼び出しを使用するときには、再帰の深さがどれくらいになるのかを見積もった上で使用する必要があります。
とは言っても、ツリー構造のデータを扱う場合なんかは再帰呼び出しを使わないとやってられないんですが。

あと、factorial は階乗ってわかるんですが、function ってどんな機能なんですか?
softya(ソフト屋)さんも書いていますが、変数名、コメントなど可読性に少し問題があるように思えます。

【追記】
読み替えしたらsoftya(ソフト屋)さんに敬称を付け忘れていました。
お詫びいたします。申し訳ありません。
最後に編集したユーザー maru on 2011年7月06日(水) 20:05 [ 編集 2 回目 ]

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#15

投稿記事 by ISLe » 13年前

関数呼び出しのコスト以前に、組み込み系ではスタックが数KBしかない場合もあるので、無計画に再帰呼び出しするとすぐに暴走しますよね。

maru
記事: 150
登録日時: 14年前

Re: C言語による制御系、組込み系のお仕事について

#16

投稿記事 by maru » 13年前

ISLe さんが書きました:関数呼び出しのコスト以前に、組み込み系ではスタックが数KBしかない場合もあるので、無計画に再帰呼び出しするとすぐに暴走しますよね。
その通りです。だから、「再帰の深さ」って書いてるのに。。。
それ(スタックの消費)を含めて「再帰呼び出し」のコストと書いたつもりが、実際に投稿したのは「関数呼び出し」でした。
orz

【追記】
漢字まで間違えてるし。 修正しました。
「再起」⇒「再帰」

たいちう
記事: 418
登録日時: 14年前

Re: C言語による制御系、組込み系のお仕事について

#17

投稿記事 by たいちう » 13年前

何をするプログラムか書いていないし、ポインタを使っていないことから
コピーミスなのかもしれませんが、決して良いプログラムではないです。

お気に入りのプログラムを批判するのは申し訳ないですが、
少なくとも経験者として中途採用の面接を受けるときに
感心されるようなレベルではないです。
面接の時に要件を聞き、その場で5分で設計とコーディングしたプログラム
というならば感心もされるかもしれませんが。

メロンパンさんの過去の質問も読んでみましたが、
得意なC言語を生かせる仕事に就きたいと考えているならば、
No.12のコードからは実力が伝わってきません。
掲示板で感心されても呆れられても意味はないですが、
就職活動の際の参考にして下さい。

# 身も蓋もない言い方ですが、再就職の際の大きなファクターは
# 年齢だと思います。差し支えなければメロンパンさんの
# お歳を教えて頂けませんか。
# (聞かれてないけど礼儀かもしれないので書くと私は40。
# 31でこの仕事に転職して今日に至ります。)

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#18

投稿記事 by メロンパン » 13年前

どうも御返信ありがとうございました。
>softya様
今まで1000行程のプログラムを書いたのが、最高ステップ数なので、
何万行と言われると、思いつきませんが20万行程書いたと思います。

また、再帰関数は個人的に好きなので、再帰関数を多用すれば、
プログラムのコストも減るだろうと思っていたのですが、勘違いでした。

組込み系のお仕事についてですが、自己分析した結果、ハード寄りのことには、
向いていないので、やはりVC++やJavaやPHPなど、人間に近い言語を覚えて仕事にしたいと思います。
やりたい事とやれることは違うんだなと思いました。
(完)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#19

投稿記事 by softya(ソフト屋) » 13年前

私以外の人にも返事をお願いしますね。

1000行程度と言うと、ちゃんとしたアプリの経験は無いということでしょうか?
ファイル分割の経験もあまり経験がないですよね。
20万行だと200以上はプログラムを作ってきたってことですよね?
これは学校の課題とか、研究のたぐいでしょうか?

>やはりVC++やJavaやPHPなど、人間に近い言語を覚えて仕事にしたいと思います。

組み込みをやるにしても止めるにしてもソースコードの悪い癖は今のうちに出来るだけ取っておいたほうが良いと思いますので、ここで折角いろんな意見が出たのですから最後までやられてはどうでしょうか?
ちょうど回答された人は皆さんプロの方々で、プロとしてやっていくならC言語でもVC++(C++の事?それともMFCの事?)でもJavaやPHPでも可読性の高いコードを要求される世界ですからこの機会を有効に使ってください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#20

投稿記事 by メロンパン » 13年前

>皆様
ご回答本当にありがとうございます。
確かにどう見ても素人でない方々が返信してくださるので、是非いろいろお聞きしたいです。

あと、返信の仕方が不器用で申し訳ありません。
factorial()は、階乗を返す関数で、私の記憶ではn!という関数は知りませんでした。
function()は、関数という意味で、その部品プログラム内での核となる関数を意味しております。

私的には、例のプログラムは芸術作品として1カ月かけて作ったものなので、少し残念でした。
ポインタが出てこない理由は、形式的に手続きを表現するためで、端的に言いますとサンプルのためです。

あと、年齢ですが、20代・・・です。年齢がファクターになっているというのは、ごもっともだと思います。
ただ年を食っているからと、ミスをしたら激怒され、できて当たり前という感じでした。恐ろしいです。

200個程度のプログラムの経験についてですが、すべて手打ちで書いたので、というのは言い訳ですが、
2割は実習のため、8割は研究のために書いてきました。MFCは知りません。なぜなら、テキストエディタで、
1スレッドずつ書いていたためです。申し訳ありませんが、また眠くなってきてしまいましたので、また。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#21

投稿記事 by softya(ソフト屋) » 13年前

メロンパン さんが書きました: 私的には、例のプログラムは芸術作品として1カ月かけて作ったものなので、少し残念でした。
ポインタが出てこない理由は、形式的に手続きを表現するためで、端的に言いますとサンプルのためです。
それは、皆さんが思っていものと出てきたコードが違うからだと思いますよ。
プロとしての書き方ができているか、実行時間のコスト的な考え方はあるかとか、リソースの消費の理解はあるかなどC言語として求められる基礎知識を持っているか重要なポイントだと思います。
就活絡みと成れば、そういう視点で見ざる負えません。
なので、もっと実用アプリのコードを見せて頂きたかったです。
メロンパン さんが書きました: あと、年齢ですが、20代・・・です。年齢がファクターになっているというのは、ごもっともだと思います。
ただ年を食っているからと、ミスをしたら激怒され、できて当たり前という感じでした。恐ろしいです。
少なくても履歴書に何年もC言語を経験していると書かれていたら期待されるレベルは高くなるのが致し方ない所はあります。
メロンパン さんが書きました: 200個程度のプログラムの経験についてですが、すべて手打ちで書いたので、というのは言い訳ですが、
2割は実習のため、8割は研究のために書いてきました。MFCは知りません。なぜなら、テキストエディタで、
1スレッドずつ書いていたためです。申し訳ありませんが、また眠くなってきてしまいましたので、また。
>ぜなら、テキストエディタで、1スレッドずつ書いていたためです。

1スレッドは、マルチスレッドの意味なのでしょうか?
文脈的にいきなりスレッドの話題が出てくるのがよく分からないのですが。
ちなみにMFCは、GUIの為のマイクロソフトのC++ライブラリです。

と言うことは、コンソールアプリ専門で、GUIアプリの経験も無いという事ですね。
お話を伺う限り、C言語のライブラリの作成やドライバなど特殊なものを一切書かれた経験が伺われませんが特定のOS化でコンソール系アプリ専門ということでよろしいですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#22

投稿記事 by メロンパン » 13年前

>ぜなら、テキストエディタで、1スレッドずつ書いていたためです。

1スレッドは、マルチスレッドの意味なのでしょうか?
文脈的にいきなりスレッドの話題が出てくるのがよく分からないのですが。
ちなみにMFCは、GUIの為のマイクロソフトのC++ライブラリです。

と言うことは、コンソールアプリ専門で、GUIアプリの経験も無いという事ですね。
お話を伺う限り、C言語のライブラリの作成やドライバなど特殊なものを一切書かれた経験が伺われませんが特定のOS化でコンソール系アプリ専門ということでよろしいですか?

-----------------------------------------------------------------
おはようございます。メロンパンです。
1スレッドずつ書いていたというのは、sample.cというファイルに縦に長くずらーっと書いていたということです。
つまり、ファイルを分割せず、.c .hともにまとめて1つのファイルに書いていました。

そして、C言語のライブラリの作成、ドライバなどの特殊なものは一切書いたことなく、
Windowsのみのコンソールアプリを専門にしていたということで正解です。

今は、VC++で実際にプログラムを作る練習をしながらツールの使い方を覚えているのが現状です。
しかし、申し訳ないのですが、プログラムをこれ以上見せるわけにはまいりません。かなり長いためです。

とりあえず、ここまで書いておきます。また仕事探しの旅にでかけますので、これにて失礼いたします。
(ITだけでなく他の業界の仕事も探しています。)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#23

投稿記事 by softya(ソフト屋) » 13年前

>今は、VC++で実際にプログラムを作る練習をしながらツールの使い方を覚えているのが現状です。

VC++でC++やWin32APIを勉強している訳ではないのでしょうか?
VisualStudioの使い方って事ですか?

>しかし、申し訳ないのですが、プログラムをこれ以上見せるわけにはまいりません。かなり長いためです。

フリーのアップローダとかを使ってもらうとか、ここのmixc++に登録してファイル添付してもらうとか手はありますよ。

[追記]
過去ログを見なおしてみたのですが、やはり経験年数(2010年の時点で4年と書かれていました)と知識の幅に私としてもギャップを感じてしまいます。
統合環境(VC++やEclipse)、オープンソース、ライブラリ自作(動的・静的)、ファイル分割、マルチスレッドなどの未経験はかなり特殊な環境にいたと言わざる負えませんので、それは自覚してください。
Linux/unix/WindowsOSなどの特殊な知識はどうでしょう。 ファイルの非同期処理、メモリー(共有メモリ)、通信(プロセス間・ネットワーク間)など細かい分野で得意なことはありますか?それを就活でアピールする手もあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

maru
記事: 150
登録日時: 14年前

Re: C言語による制御系、組込み系のお仕事について

#24

投稿記事 by maru » 13年前

メロンパン さんが書きました:factorial()は、階乗を返す関数で、私の記憶ではn!という関数は知りませんでした。
function()は、関数という意味で、その部品プログラム内での核となる関数を意味しております。
n! は関数ではなく、nの階乗を示す数学の記号です。高校の数学でやったと思います。
もう少し厳密にはΠ(パイ)を使って表記しますが、順列や組み合わせの数の公式で階乗の部分に ! が出てくるはずです。

確かに function の意味は関数や機能ですが、Cの関数であることは見ればわかるので function という名前は意味がありません。
どういう機能を行う関数なのかで名前を付けないと意味を持ちません。
factorial(), function() が両方とも f1(), f2() 等の意味を持たない名前なら気にならないのですが、一方は正しく階乗を計算するという機能名称がつかわれているのに、もう一方は機能名称ではないので違和感を感じるのです。
もちろん f1(), f2() のような命名を推奨しているわけではありません。

non
記事: 1097
登録日時: 14年前

Re: C言語による制御系、組込み系のお仕事について

#25

投稿記事 by non » 13年前

function()の関数は何をする関数なのか、プログラムを見てもよくわからないのですが、どなたかわかった方
教えてもらえます?メロンパンさんは忙しそうなので、どなたでも。
non

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#26

投稿記事 by softya(ソフト屋) » 13年前

non さんが書きました:function()の関数は何をする関数なのか、プログラムを見てもよくわからないのですが、どなたかわかった方
教えてもらえます?メロンパンさんは忙しそうなので、どなたでも。
私も意図が分かっておりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#27

投稿記事 by メロンパン » 13年前

みなさん、ご回答ありがとうございました。
ここまで手厚くプログラムの相談をさせて頂いて感謝しております。
ただ、今までの経験上ですが、これ以上レスが続くと、気負いしそうなので、
この書き込みを持って、解決ということにしたいと思います。

例のプログラムですが、これ以上コンパクトには書けないだろうという意図のもとで作ったもので、
どういう動作をするプログラムの部品なのかといいますと、1,2,3という数字があった際に、
1,ときて次に12,21,と進み、123,132,312,321,231,213といった具合に、間に数字を加えていき、
それをすべて表示させるための部品です。(これが核となるfunction()の仕組みになります)

タイトルのとおり、C言語での制御系や組込み系については、保留という形にしておいて、
もっと広い視野でプログラムを勉強していきたいと思うようになりました。
本当にプロフェッショナルな方々のご意見ありがとうございました!

P.S.この掲示板が非常によく出来ていていつも尊敬しております>管理人様
また書き込みさせてください。どうもありがとうございました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#28

投稿記事 by softya(ソフト屋) » 13年前

メロンパン さんが書きました:例のプログラムですが、これ以上コンパクトには書けないだろうという意図のもとで作ったもので、
どういう動作をするプログラムの部品なのかといいますと、1,2,3という数字があった際に、
1,ときて次に12,21,と進み、123,132,312,321,231,213といった具合に、間に数字を加えていき、
それをすべて表示させるための部品です。(これが核となるfunction()の仕組みになります)
その説明と実行結果の繋がりが分からないので、最後にそこだけ教えてください。
In(0,0)
In(0,1)
In(0,2)
Del(0)
In(1,2)
Del(1)
In(2,2)
Del(2)
Del(0)
In(1,1)
In(0,2)
Del(0)
In(1,2)
Del(1)
In(2,2)
Del(2)
Del(1)
Del(0)
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

匿名

Re: C言語による制御系、組込み系のお仕事について

#29

投稿記事 by 匿名 » 13年前

昔のプログラムの感じがします。いかに短くコンパクトに書くかという時代の。
しかし今のPCの性能ですとそんなことは気にせずとにかく人が見ても分かりやすく書くことが重要視されています。
そこの食い違いで得意としてる部分が逆にだめだという風に指摘されたんだなと思います。

かずま

Re: C言語による制御系、組込み系のお仕事について

#30

投稿記事 by かずま » 13年前

メロンパン さんが書きました: 例のプログラムですが、これ以上コンパクトには書けないだろうという意図のもとで作ったもので、
どういう動作をするプログラムの部品なのかといいますと、1,2,3という数字があった際に、
1,ときて次に12,21,と進み、123,132,312,321,231,213といった具合に、間に数字を加えていき、
それをすべて表示させるための部品です。(これが核となるfunction()の仕組みになります)
C しか知らないというのはちょっと困るのでは?
そのプログラムは部品であって、実際にその数字の列は表示していませんよね。
次のプログラムは、C++ ですが、ちゃんと表示をし、十分コンパクトですよ。

コード:

#include <iostream>
#include <algorithm>

#define N  3

int main()
{
    using namespace std;
    int a[N];
    for (int i = 1; i <= N; i++) {
        a[i-1] = i;
        do {
            for (int j = 0; j < i; j++) cout << ' ' << a[j];
            endl(cout);
        } while (next_permutation(a, a+i));
    }
}

メロンパン

Re: C言語による制御系、組込み系のお仕事について

#31

投稿記事 by メロンパン » 13年前

おはようございます。メロンパンです。
Softyaさん、InはInsert,DelはDeleteの意味です。
もし、手書きが出来るようでしたら、#define 2を3にして試してみてください。
なお、1,2,3ではなく、0,1,2に対応しています。不備がありますがあしからず。

匿名さん、どうもありがとうございます。かなりぐっと来る感想でした。
今の時代は可読性を重視する時代なのですね。コメント付けるようにします。

かずまさん、すごいプログラムですね。一瞬見ても、ものすごいコンパクトです。
確かにCだけできるのは困るので、今勉強中です。どうもありがとうございました。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#32

投稿記事 by ISLe » 13年前

せっかくなのでC言語で書いてみました。
next_permutation関数のアルゴリズムは使い回しできそうです。

コード:

#include <stdio.h>

#define N  4

void reverse(int *t, int *e)
{
	--e;
	while (t < e) {
		*t ^= *e ^= *t ^= *e;
		++t;
		--e;
	}
}

int next_permutation(int *t, int *e)
{
	int *p0 = e - 2;
	for (; p0 >= t; --p0) {
		if (*p0 < *(p0+1)) {
			int *p1 = e;
			while (*(--p1) <= *p0);
			*p1 ^= *p0 ^= *p1 ^= *p0;
			reverse(p0+1, e);
			return 1;
		}
	}
	reverse(t, e);
	return 0;
}

int main(void)
{
	int a[N], i, j;
	for (i = 1; i <= N; i++) {
		a[i-1] = i;
		do {
			for (j = 0; j < i; j++) printf(" %d", a[j]);
			puts("");
		} while (next_permutation(a, a+i));
	}
}

たいちう
記事: 418
登録日時: 14年前

Re: C言語による制御系、組込み系のお仕事について

#33

投稿記事 by たいちう » 13年前

まだ現実を見れていないようなので書きます。
メロンパンさんの人生なので目をそむけていても私は構いませんが、
良薬は口に苦しとでも思っていただければ幸いです。


まずC言語ですが、メロンパンさんの中では最も得意なのかもしれませんが、
プロの意見としては、就職活動の武器になるようなレベルではありません。
かずまさんのものと同じ出力(順番は違うかも)をするCのプログラムです。
アルゴリズムが少々得意な人ならばスラスラ書けると思います。

コード:

#include <stdio.h>
#define N 3
#define swap(X,Y) { int temp = X; X = Y; Y = temp; }

void permutation(int* p, int n) {
	int i, limit = p[0];
	if (n == limit) {
		for (i = 1; i <= limit; i++)
			printf(" %d", p[i]);
		printf("\n");
	} else {
		for (i = n; i <= limit; i++) {
			swap(p[n], p[i]);
			permutation(p, n + 1);
			swap(p[n], p[i]);
		}
	}
}

int main() {
	int i, j, buf[N + 1];
	for (i = 1; i <= N; i++) {
		buf[0] = i;
		for (j = 1; j <= i; j++)
			buf[j] = j;
		permutation(buf, 1);
	}
	return 0;
}
ちなみに私が考えたのではなく、10年ほど前にこのアルゴリズムを
何かで読んで頭の片隅に残っていたものです。
それを今再現し、ついでにグローバル変数をなくしました。
所要時間は15分程度。

アルゴリズムについてはここ半世紀の間、
多くの天才たちが取り組み、多大な成果を残しています。
自分で考えることが何よりも大事ですが、
優れたプログラムをもっと多く観賞しましょう。


次にコミュニケーション。コーディングのスキルよりももっと重要です。
このスレッドでも会話が噛み合っていないのに気付いていますか?
softyaさんとのやり取りを例にあげさせてもらいます。

> No. 12 メロンパンさん
> 上記は、ポインタを用いて、一列に数字を全数列挙するためのプログラムの部品です。

> No. 13 softyaさん
> ポインタが無いのですが?

> No. 20 メロンパンさん
> ポインタが出てこない理由は、形式的に手続きを表現するためで、端的に言いますとサンプルのためです。

説明になっていません。
初めからポインタを用いて、とか書かなければ良かったという事でしょうか?

> No. 27 メロンパンさん
> 例のプログラムですが、 ...

> No. 28 softyaさん
> その説明と実行結果の繋がりが分からないので、最後にそこだけ教えてください。

> No. 31 メロンパンさん
> Softyaさん、InはInsert,DelはDeleteの意味です。 ...

この説明も私には理解できません。以前も書きましたが、
私や他の回答者に理解させることが出来ないのは重要ではないです。
面接の相手にコミュニケーションが苦手と思われたら損だと言っているのです。
2・3日後でも2・3週間後でも、時間と元気のある時に読み返してみて下さい。


趣味でする分には好きなようにやれるのですが、
仕事として続けようと思うと大変ですよ。
次々に新しい技術が登場するので、新しい言語を覚える程度は当り前で、
CUIからGUIへ、スタンドアローンからクライアント/サーバーシステムへ、
等というパラダイムシフトがこの先も何度もあるでしょう。
現役でいるためにはずっと勉強が必要です。そうそう、英語も必須です。
それと何よりもコミュニケーション能力。

あ、メロンパンさんは既にプロとしての経験があるのでしたね。
私の愚痴と思って読み流してください。
メロンパンさんにとって、きっと今が人生の重要な岐路なのでしょう。
悔いのない選択ができるように頑張ってください。

# 長々と書いていたら、ISLeさんに先を越されてしまった。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#34

投稿記事 by ISLe » 13年前

順列組み合わせのアルゴリズムは検索すればすぐに見付かると思ったので、先のコードは検索しないで一から考えました。
4桁の数字の順列組み合わせをメモ用紙に書いて、規則性を探し、コードに起こし、若干の試行錯誤、所要時間2時間弱といったところですね。

softyaさんのコメントにもさらっと書かれてました。
コードの書き方とか行数とかも大事ですが、プログラミングを仕事にするというなら、
一本でも多くアプリケーションソフト作りましょう。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#35

投稿記事 by softya(ソフト屋) » 13年前

メロンパン さんが書きました:Softyaさん、InはInsert,DelはDeleteの意味です。
もし、手書きが出来るようでしたら、#define 2を3にして試してみてください。
なお、1,2,3ではなく、0,1,2に対応しています。不備がありますがあしからず。
すいません。インサートだとしも説明としては良く分かりません。
そもそも、一番目の数値と二番目の数値は何を意味するのでしょうか?
これを順列の数字を表示するようにするには、どうすればよいか書いてもらったほうが速いかと思います。
メロンパン さんが書きました: 匿名さん、どうもありがとうございます。かなりぐっと来る感想でした。
今の時代は可読性を重視する時代なのですね。コメント付けるようにします。
他の皆さんの書かれていることも全て可読性にかかわる話です。
コメントだけが可読性ではありません。
究極の可読性の良いコードはコメントすら不要です。
私は自分が信用できないので念のためのコメントを書いちゃいますが。
メロンパン さんが書きました: かずまさん、すごいプログラムですね。一瞬見ても、ものすごいコンパクトです。
確かにCだけできるのは困るので、今勉強中です。どうもありがとうございました。
かずまさんのコードは、STLのnext_permutationに依存してますので依存をやめるとそれなりに大きくなります。
かずまさんの言いたいことは、コンパクトなコードを作るのはライブラリとかを使えば楽にできるわけなので、こだわるポイントが違うんじゃないかと言う所ではないかと思うわけです。
特に就活に関係した話なので、プログラムの構成力、可読性の高いコードを書けること、コスト意識(開発期間・CPUリソース・メモリリソース)があるかなどの方が重要になってくると思うわけです。
それと仕事と成れば色んな開発環境の経験が必要になるわけで、今月はVC++で来月はLinuxでemacsでgcc、其の次はeclipseでgccなんて事もザラにあるってことです。
そういう質問をされても経験がありません。良く分かりませんと言う答えをされると限りなく未経験者に近いと判断されても致し方有りません。
一度仕事を経験されていると言うことですので、更に基準は厳しくなると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

かずま

Re: C言語による制御系、組込み系のお仕事について

#36

投稿記事 by かずま » 13年前

softya(ソフト屋) さんが書きました:
メロンパン さんが書きました:Softyaさん、InはInsert,DelはDeleteの意味です。
もし、手書きが出来るようでしたら、#define 2を3にして試してみてください。
なお、1,2,3ではなく、0,1,2に対応しています。不備がありますがあしからず。
すいません。インサートだとしも説明としては良く分かりません。
そもそも、一番目の数値と二番目の数値は何を意味するのでしょうか?
これを順列の数字を表示するようにするには、どうすればよいか書いてもらったほうが速いかと思います。
メロンパンさんからの返事がないようなので、私が独自の解釈を披露します。
Insert(j, m) は、長さ m の配列の j 盤目の要素に m を挿入するということです。
各要素 a[0], a[1], ..., a[m-1] に値 0, 1, ..., (m-1) が適当に入っているとき、
a[j], a[j+1],..., a[m-1] を一つ後方にずらし、a[j] に m を入れます。
Delete(j) は、a[j] を削除し、それ以降を一つ前にずらします。
どこまでかというと a[j] に入っている値までです。
コードを示します。

コード:


#include <stdio.h>
#define N 2
 
int a[N + 1];

void Insert(int j, int m)
{
    int i;
    for (i = m; i > j; i--) a[i] = a[i-1];
    a[j] = m;
    for (i = 0; i <= m; i++) printf(" %d", a[i]);
    printf("\n");
}

void Delete(int j)
{
    int i;
    int m = a[j];
    for (i = j; i < m; i++) a[i] = a[i+1];
}

int factorial(int n)
{
    if (n > 0)
        return (n * factorial(n-1));
    else 
        return (1);
}
 
void function(int m)
{
    int i,j;
    if (m > N)
        return;
    for (i = 0; i < factorial(m-i-1); i++)
        for (j = 0; j < (m+1); j++)
        {
            Insert(j, m);
            function(m+1);
            Delete(j);
        }
}
 
void main(void)
{
    function(0);
}
実行結果

コード:

 0
 1 0
 2 1 0
 1 2 0
 1 0 2
 0 1
 2 0 1
 0 2 1
 0 1 2
ところが、そのプログラムは N = 0, 1, 2, 3 に対しては正しい結果を表示しますが、
N = 5 以降に対しては同じ数字列を出力するというバグがあります。
for (i = 0; i < factorial(m-i-1); i++) という要らない forループがあるからです。
当然 factorial() という関数も不要です。
main() からたどると分かりますが、最初に factorial(-1) を実行します。
負の階乗って変ですよね。とりあえず 1 を返すのでこれが幸いして結果には影響しません。
factorial(-1), factorial(0), factorial(1) は全部 1 を返すので for ループは 1回しか回りません。
N が 3 の場合、 factorial(2) が呼ばれて 2 を返しますが、i = 0 の 1回目のループが終わって
i = 1 になると、factorial(m-i-1) で factorial(1) が呼ばれて難を免れます。
でも、N が 4 になると for ループを 2 回まわって、同じ文字列が出力されてしまいます。
以上は、私独自の解釈です。間違っているならご指摘ください。

かずま

Re: C言語による制御系、組込み系のお仕事について

#37

投稿記事 by かずま » 13年前

かずま さんが書きました: N = 5 以降に対しては同じ数字列を出力するというバグがあります。
N = 4 以降の間違いです。訂正します。

ついでに言うと、a[1]~a[m-1] を後ろにずらして、a[0] に m を入れた後、
Delete(0) で a[0] を削除し、またその後ろを全部前にずらすのは無駄ですね。
a[0] と a[1] を交換するだけで済みます。つまり、a[0] に入れた m だけを後ろに移動させればよいのです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#38

投稿記事 by softya(ソフト屋) » 13年前

かずまさん、ありがとうございます。
ぜひ、ご本人に解説頂きたかった所ですが、いらっしゃいませんね。

[追記]
メロンパンさんのコードは、どんな時に使うための物なのでしょうね?
ただの順列出力と違う形をとっている以上は意味があるのだと思うのですが、私は残念ながら思いつきません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: C言語による制御系、組込み系のお仕事について

#39

投稿記事 by ISLe » 13年前

再帰呼び出しできるほどメモリがあるなら、あらかじめテーブル作っちゃったほうが良くないですかね。

三郎

Re: C言語による制御系、組込み系のお仕事について

#40

投稿記事 by 三郎 » 13年前

組み込み系の仕事について、、、
組み込み系の関連で困っているユーザーは実に多い(私も)。
殆ど中小零細の企業、、、個人。
それを解決してくれる人(小規模なシステムハウス等)がおられれば助かる。
その場合、プログラムよりも関連した多くの事を知っている人がはるかに有利。
友人にVBのみで飯を食っている人もいます。

閉鎖

“C言語何でも質問掲示板” へ戻る