- ベストアンサー
プログラミング(数学的) 初心者です
今年、大学の情報科学科に入学した一年生です。 大学の授業で初めてプログラミング(C言語)を学んでいるところです。 その授業というのが、いくつもの課題が提示され実際にパソコンでプログラミングするというものなのです。 基本中の基本はなんとか理解でき書けるんですが、数学のような応用問題(素数がどうのや行列など)のC言語ではどういう思考回路を持てばよいのか分りません… 数学みたいに基本的な思考方法を覚えた方が良いのでしょうか? 見れば分るのですが自分ではなかなか思いつかないようなことばかりなので 例えばfor文自体の意味は分るのですが、一般的にどういう表現のときに用いるのかが分らないのです。 何か良い本などがあれば教えてください。 回答よろしくお願いします<m(__)m>
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
★コンパイラについて >自宅のパソコンで実際にC言語を扱い、 >コンパイルができて実行結果を表示できるソフトのようなものはないでしょうか? ↑ これはコンパイラが無いので用意したいとうことですよね。 それなら次のリンクを参考にして下さい。 http://oshiete1.goo.ne.jp/qa3025770.html→『最低限必要なものは何でしょうか?』 ここに無料コンパイラ、サイト、本などを紹介しています。 >品質が良ければ有料でも構いません ↑ なら学割で買える『アカデミック版』のコンパイラをお店で購入することもありです。 上記の無料コンパイラには Windows GUI の リソースエディタが付属していません。 でも、最初は C 言語のお勉強用で用意するので無料コンパイラでも十分です。 お金は『良い本』、『分かりやすい参考書』に使うべきと思います。 また、C 言語の解説本を買うときに著者が異なる本を数冊(2~3)用意すると良いです。 理由は1つの本の解説では説明不足だったり、分からなくても別の解説書の説明で 理解できたとか、解説漏れも防げると思います。ただし、入門用の本を複数買うより 入門用、中級用、問題集という感じでレベルや内容が異なるものにします。 そうしないと同じような入門書を複数買う意味がありません。 >柴田望洋さんの本もしっかりと読んでみる事にします。 ↑ このシリーズの本を買うなら次の本はどうでしょうか? (1)http://www.amazon.co.jp/dp/4797329955/→『新版 明解C言語 実践編』 (2)http://www.amazon.co.jp/dp/4797327901/→『解きながら学ぶC言語』 (3)http://www.amazon.co.jp/dp/4797331186/→『図解C言語 ポインタの極意』 (4)http://www.amazon.co.jp/dp/4797331631/→『新版 C言語によるアルゴリズムとデータ構造』 ・(1)、(2)は今回購入しても良さそうな本と思います。 (3)は C 言語で一番ポイントとなる(挫折しやすい?)部分を重点的にまとめられた本です。 目次を見るかぎりではかなりお勧めします。構造体、共用体なども説明されているようです。 ・(4)は今後、授業で必ず出てくる『アルゴリズム』についての本です。 授業や教科書だけでは説明不足だと思った場合は購入も考えてみて下さい。 最後に: ・コンパイラは無料コンパイラを1つ用意します。 このときフリーで出回っている総合環境をダウンロードして使えばコンパイルが楽になります。 http://www.forest.impress.co.jp/article/2007/02/07/cwohajimeyou2.html→『C言語を始めよう!』 http://www.vector.co.jp/soft/win95/prog/se180695.html→『BCC Developer』 http://www.vector.co.jp/soft/win95/prog/se141451.html→『CPad for Borland C++Compiler』 http://www.vector.co.jp/soft/win95/prog/se326602.html→『Visual Windows for BC++』 使いやすいのをどうぞ。 ・あと無料コンパイラの『Borland C++ Compiler 5.5』はリンク先が変わりました。 新しいリンク先は下の『参考URL』をどうぞ。 ・以上。
その他の回答 (5)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★回答者No.1です。 >なるほど、アルゴリズムですか… >確か自分の学科では二年生になったら必修科目でデータ構造とアルゴリズムがあったはずです。 >ちょっと先取りして見てみることにします ↑ この考えはお勧めですね。 授業などでアルゴリズムを習っても完全には理解できずに進んで行ったりしますので。 その結果、アルゴリズム嫌いとなり、コンピュータ数学嫌い、数学嫌いとなったりします。 >数学的センスとプログラミングのセンスって違うものなのですか… ↑ まだ良く分からないでしょうね。 少なくも数学とは違います。 これは数学では 10÷3×3=10 となりますが、プログラミングで整数の場合は 9 となります。 また、数学上では無限の数を扱えますが、プログラミングでは有限の数しか扱えません。 つまり、計算できる数の大きさ(小ささ)に上限があるのです。 これを考慮してアルゴリズムがどうとか、for 文でどう記述するとかの考え方が出てきます。 ここの概念が最初の難関なのです。 >全く新しく学ぶ分野ならとにかく慣れろって感じですかね ↑ そうだね。習うより慣れろ!ってことになります。 私はソフトウェアの前に電子回路を趣味で4.5年やりました。 その後にパソコン関係のソフトに移りましたが、電子回路の思考からソフトウェアの思考の 移行がなかなか出来ませんでした。そして最終的に感じたのは電子回路の思考とソフトウェアの 思考は全く違うという感じでした。電子回路では設計するときに部品の値を数学の計算式で求め 誤差を考慮して部品の値を決めます。ソフトウェアでは整数での計算を上手く利用して誤差が 出ないようにしたり、0 という数がかなり重要になります。 また、ソフトウェアの方は数列を良く使いますが、算術関数 sin、cos、tan などは科学技術の 計算を処理しないかぎりはあまり使わないです。ゲームなどでは sin などが使われますが一部。 ・こんな感じで慣れるまでは時間がかかるか、人間の数学からコンピュータ数学の概念を新しく 作った方が良いです。全く別の分野として。 >for文の中にどういう文をどういう順番に入れれば良いのか、というような感じで迷うことが多いです。 ↑ これはある程度プログラミングしないとどの順番が一番良いか分からないと思います。 あとプログラミングの経験者のソースを見て研究することですね。 見やすい、見づらい、分かりやすい、分かりにくいなどいろいろとね。 >うちの教科書が「明解C言語(入門編)」柴田望洋 ソフトバンク >なのですが、先輩方の評判があまり良くないのでちょっと敬遠してたのですが… ↑ これは先輩の評価であって、あなたの評価ではないはず。 例え評判が悪くても自分には分かりやすい本なら『宝』です。 また、逆に自分に読んで分かりやすいものを後輩に勧めたら分かりにくかったという意見が 帰ってくるかもしれません。なので自分で読んでみて評価して下さい。 私も『柴田望洋』さんの本を持っています。ただし、10年以上前のポインタの本です。 『柴田望洋』さんのホームページを下の『参考URL』に載せておきます。 ・以上。
お礼
さらにまた丁寧な回答をありがとうございます。 プログラミングを全く新しい概念として学んでいこうと思います。 柴田望洋さんの本もしっかりと読んでみる事にします。 あと、このあとにも同じ質問を載っけるとおもうのですが、 できればもっとプログラミングに慣れていきたいので 自宅のパソコンで実際にC言語を扱い、 コンパイルができて実行結果を表示できるソフトのようなものはないでしょうか? 品質が良ければ有料でも構いません 再度の質問ですが、よろしくお願いします<m(__)m>
- fatbowler
- ベストアンサー率48% (26/54)
現場のSEの立場からアドバイス差し上げます。 >数学のような応用問題(素数がどうのや行列など)のC言語ではどういう思考回路を持てばよいのか分りません… 数学とC言語は無関係です。 私自身は数学を苦にしませんが、現場の経験しか持たないプログラマには、たとえベテランでも そういった問題ができない人も多いと思いますよ。 思考回路という話でしたら、どういう順番でどういった処理を行えば、求められている処理が 実現できるのかを先に考えて、完全に理解してからプログラミングに入るよう心掛けてください。 フローチャートをマスターするのが王道でしょう。 アルゴリズムの勉強は確かに有意義なのですが、初心者が手を出すと行き詰って、プログラミングが キライになってしまうのがオチなので、ある程度自信が付いてから勉強した方がいいと思います。 数学の勉強でも、微分・積分を教わるのは、y=2xとかの関数を覚えてから何年も経った後ですし。 最後に、ANo.3で紹介されている 「明解C言語(入門編)」柴田望洋 ソフトバンク は、シリーズの「実践編」とともに部下の教育用に買い求めましたが、かなり良い本です。 是非オススメします。
補足
回答ありがとうございます。 確かに思考回路というよりは処理の順番ですね。 for文の中にどういう文をどういう順番に入れれば良いのか、というような感じで迷うことが多いです。 うちの教科書が「明解C言語(入門編)」柴田望洋 ソフトバンク なのですが、先輩方の評判があまり良くないのでちょっと敬遠してたのですが…
- gyrocompas
- ベストアンサー率23% (24/104)
数学的センスとプログラミングのセンスは 異質なものです。 数学を学ぶのと、プログラミングを学ぶのは 分けて考えたほうが良いでしょう。 例えば、微分方程式を解く場合は コンピュータの世界では数値計算で求めるわけであり 近似値を求めるわけです。 必要十分な解を求めるわけではありません。 またプログラムのアルゴリズムというのは、論理の流れではなく 操作の流れです、プログラムのアルゴリズムは結果を出すものでは あるけれど、結果を保証するものではありません この点、数学のアルゴリズムとは異なります。 (わかるかな~) とにかくプログラムの勉強は、いろいろ自分でプログラムを 作って、自分で動かしてみることですな。 超初心者向きでは、ありますが 以下の本がよろしいかと 「明解C言語(入門編)」柴田望洋 ソフトバンク 多数の小さいサンプルが掲載されており どのサンプルもPCに打ち込めば動くということが ひじょうに良いですな。 まあ、最初のうちは、小難しいことは 考えずに、こう書けば、こう動く とうい感じで、英語の例文でも 覚えるような気分で、気楽に 数をこなしてみるのがよろしいかと。
お礼
数学的センスとプログラミングのセンスって違うものなのですか… おっしゃてることはなんとなく分る気がします(笑) 全く新しく学ぶ分野ならとにかく慣れろって感じですかね 頑張ってみます! 回答ありがとうございました!
- uyama33
- ベストアンサー率30% (137/450)
数学用の関数の本を読みましょう。 Numerical Recipes in C や、 C言語 数学関数ハンドブック (技術評論社) 図書館にあると思います。 先生に聞いてみてください。
お礼
回答ありがとうぞざいます。 C言語の数学関数の本があるんですか! ぜひ探してみます!
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス >基本中の基本はなんとか理解でき書けるんですが、数学のような応用問題(素数がどうのや行列など)の >C言語ではどういう思考回路を持てばよいのか分りません… ↑ ・これは『アルゴリズム』の事を言っているのですよね。 >例えばfor文自体の意味は分るのですが、一般的にどういう表現のときに用いるのかが分らないのです。 >何か良い本などがあれば教えてください。 ↑ ・アルゴリズムの勉強をすれば for 文も使いこなせるようになります。 下のリンクで本(サイト)を紹介しているので参考にして下さい。 (1)http://oshiete1.goo.ne.jp/qa2914917.html→『データ構造とアルゴリズム』 (2)http://oshiete1.goo.ne.jp/qa3082805.html→『アルゴリズム関連の奨めサイトは?』 >数学みたいに基本的な思考方法を覚えた方が良いのでしょうか? ↑ ・これは『アルゴリズム』を覚える方が良いということですね。 ソートにはソートで有名な方法が多数あり、それぞれ特徴があります。 その特徴などを把握してどのソートがよいか決めます。 データの種類や性質によってもソートの使い分けをします。 ・数学的、論理的、人間ならどう考えるかなどをそのまま if、for、while 文を使って記述すれば 良いことになります。→なれないと駄目ですが…。 ・例えばトランプゲームでシャッフルはどうやりますか? このようなゲームを作るときには絶対にカードをシャッフルさせる処理(関数)が必要になってきます。 また、ソート処理の良し悪しを検証するためにもデータをシャッフルさせる処理が必要にもなります。 >その授業というのが、いくつもの課題が提示され実際にパソコンでプログラミングするというものなのです。 ↑ ・サンプル・プログラムだけでは上達しないため何でもよいので1つの便利なソフト(ツール)を 自分の為に作成してみて下さい。コマンドライン型、ウインドウ型、常駐型などいろいろあります。 アルゴリズムを覚え、研究し、改良してコンピュータ数学をこれから学んで下さい。 ・下の『参考URL』もどうぞ。 ・以上。
お礼
回答ありがとうございます。 なるほど、アルゴリズムですか… 確か自分の学科では二年生になったら必修科目でデータ構造とアルゴリズムがあったはずです。 ちょっと先取りして見てみることにします
お礼
ここまで丁寧な回答だとちょっと申し訳ない気がします(笑) 本当にありがとうございました。 紹介してくださったもので自分に合うものを吟味したいと思います。 プログラミングは学校の授業でというよりは個人的にとても興味があるので、本気で学んでいこうと思います。