質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

9回答

1899閲覧

アルゴリズムを理解する方法

Sukabo

総合スコア31

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/08/05 12:32

プログラミングの勉強をしていて、サンプルコードを読んでもイマイチ何が起こっているのかわからない時があります。

私は、処理を順に追っていき、具体的に変数がどう変わるのかなどを紙に書いて理解しようとしています。

皆さんは難解なコードを理解するためにどういったことをしますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答9

0

OpenCVの関数をCで再現するコードが本に載っていて、その説明がほとんど無かったので

画像処理系など、専門的な分野のコードの場合、そもそも専門分野の方の知識がなければ、「自然言語で説明されてすら内容を理解できない」ことも十分考えられます。

「バックグラウンドの理解を先に深めてからコードに取り組む」か、「所与のコードはブラックボックスとして使うのに専念する」かの2つに1つです。

投稿2019/08/06 05:05

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sukabo

2019/08/06 07:30

ご回答ありがとうございます。 入門書ですし、アルゴリズムは説明があったのですがコードには説明がなかったので困っていました。
guest

0

ベストアンサー

せっかくコンピューターがあるんですから使いましょう。変数をウォッチしながらステップ実行してください。

#追記
これ低評価した人、パソコン使えないんじゃないですか?

サンプルコードを読んでもイマイチ何が起こっているのかわからない時があります。

変数をウォッチリストに入れてステップ実行するのは極めて有効な手段ですし、熟練したエンジニアなら常日頃から慣れ親しんでいる方法です。

つまり、そこにあるコードのアルゴリズムの詳細を把握するために、その道のプロ(バイトに毛の生えたようななんちゃってプロではなく)が使っている方法です。

投稿2019/08/05 13:22

編集2019/08/06 01:37
Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sukabo

2019/08/06 04:51

ご回答ありがとうございます。 参考にさせていただきます。
guest

0

どういったことをしますか?

「サンプルコード」なら,「それが何のサンプルなのか?」という話があるでしょうから,まずその「何の」の部分の話側の概念を理解することに努めます.

つまり,コードを読まなきゃならない場合,
いきなり変数レベルでどうの…とコード解読を始めるのではなく,まずそのコードの出所に訊くなりします.

  • 人から出てきたコードならその人から何らかの情報が得られることが期待できますし,
  • 本に載っていたサンプルコードならその本に説明なりがあるでしょう.
  • アルゴリズムの名前がわかっているなら,まずそのアルゴリズムに関して調べます.

まずどうにかして概念というか大まかな話でも把握してからでないと,各変数の値の移り変わりをいくら追ったところで,処理の意味のレベルで把握するのは極めて難しいと思いますので.

投稿2019/08/06 02:07

fana

総合スコア11632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2019/08/06 02:09

「そんな当たり前の話を聞きたいわけじゃねぇんだよ」等の場合には,そういった理由を【コメントにて明記した上で】低評価を連打して頂きたく.
Sukabo

2019/08/06 04:43

ご回答ありがとうございます。 OpenCVの関数をCで再現するコードが本に載っていて、その説明がほとんど無かったので、このような場合にみなさんはどうするのだろうと疑問に思い、質問させていただきました。 やはりこのような場合は地道に変数を見ていくといったことが大事ですかね…
fana

2019/08/06 04:56

その「OpenCVの関数」が何をやる関数なのか?をまずは知ることから,という話ですね. 比較的簡単な処理であれば「その処理なら,まぁ,これこれこういうことをやるんじゃねーかな」とか「この処理はこういうことに備えとかないとまずいんじゃないかな」だとか想定もできるでしょう. 他の方が「意図」という素晴らしい単語を用いていますが,それを想像できているか否かによって,解読難易度は全然違うのではないかと思います.
Sukabo

2019/08/06 07:33

ありがとうございます。 改めて関数の意図を意識することに気を付けていきます。
guest

0

こんにちは。

C++のテンプレート・メタ・プログラミング(TMP)を除けば、地道な努力です。

読んでいる最中に出てきた文やライブラリのクラス、関数の意味を調べ、各変数の意味を把握します。
それでも良く理解できない時は、自分でコンピュータになったつもりでプログラムを実行します。
変数の内容は、時系列で紙に書きましょう。あまりに多量の変数を扱うと とても読めないので、なるべく対象を最小限に限定(例えば、ソートならソート対象の要素数は3くらいから始める)

なお、TMPは熟練者の手にもあまるので初心者のころは断念した方がよいと思います。


【大蛇足ですが】
「テンプレート・メタ・プログラミング」で検索して、まさかの「ちょまど」さんの解説がでてきてびっくりです。そして、記事の最後からリンクされている「中3女子」の人はTMP界の神か悪魔です。

投稿2019/08/05 13:25

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sukabo

2019/08/06 04:46

ご回答ありがとうございます。 紙に書き出すのは有効な手段なのですね。
guest

0

何やってるのか調べるには、コンピュータのつもりになって動きを追いかけるというのは、古来よりの定番手法です。
技術が進歩して開発ツール内からデバッガによるステップ実行ができるようになったことで手間は省けていますが、本質は同じ。
※昔はデバッガを使うためには専用のハードウェアが必要だったんですよ

ただ、これで分かるのは動きであって、それの意図までは教えてくれません。意図は読み解くしかないのです。
たとえは悪いですが、殺人事件で手口が分かったところで、「なぜ犯行に至ったのか?」は分からないのと同じです。

投稿2019/08/06 02:03

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sukabo

2019/08/06 04:44

ご回答ありがとうございます。 意図を読み解く、ということもやはり大事ですよね。意識していきたいと思います。
guest

0

「アルゴリズム」が探索やソートなどの「アルゴリズム」であるのなら、

まずそのサンプルコードを記述している言語に対する理解が、十全にできていないと困ります。そうでないととても追いきれないからです。「このポインタのポインタのポインタ何やってるの?」みたいな。

「アルゴリズム」の勉強は言語の勉強が済んでからにしてください。

投稿2019/08/05 13:23

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sukabo

2019/08/06 04:48

ご回答ありがとうございます。 言語の習得も努力していきたいと思います。
guest

0

ひたすら、処理を順に追っていき、変数がどう変わるのかをみて理解することです

投稿2019/08/05 12:34

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sukabo

2019/08/06 04:53

ご回答ありがとうございます。 やはり順に見ていくのが有効なのですね。
guest

0

自分の手を動かして、何回も簡単なコードを作成して実行します。
知らない関数等は一つずつ調べます。

書籍等のサンプルコードが理解できないときは、ネット検索して自分がわかりやすい説明のものを捜します。
同じアルゴリズムのいくつかのコードを見ていると少しずつ理解が進むかと思います。

投稿2019/08/05 13:15

meg_

総合スコア10577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sukabo

2019/08/06 04:52

ご回答ありがとうございます。 アルゴリズムに名前があれば検索してみようと思います。
guest

0

大きなシステムも複数の関数をよびだして、システムとして成り立ってます。
アルゴリズムを理解するなら、なにかご自分で何かをしたら結果として
hogehogeするみたいなシステム仕様書を作成し
hogehogeをするにはどういった関数群をつくってあげないといけない
というアプローチですすめるとよいです。
当然システム、または機能の実装なので
hogehogeを実行する前に各々の関数が正常に動作するか
関数の単体テストも必須です。そういった積み重ねで
アルゴリズムを理解できるとおもいます

投稿2019/08/06 05:02

nanami12

総合スコア1015

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sukabo

2019/08/06 07:31

ご回答ありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問