検索結果 62 件

by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 実行速度を速くしたいです。
返信数: 9
閲覧数: 1156

Re: 実行速度を速くしたいです。

>>かずまさん
返信ありがとうございます。
こんな方法があるんですね…!
私の計算機(Ubuntu/gcc4.7.3)では10分で実行が終わりました。(約2/3になりました!)
windowsではやっていませんが、前のプログラムが大体同じ速さで実行されたので、今回も同じくらいではないかなと思います。

此方の方が速いので、参考にさせて頂きます…!
また、わからないところがあったら質問させていただきます。
ありがとうございましたm(_ _)m
by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 実行速度を速くしたいです。
返信数: 9
閲覧数: 1156

Re: 実行速度を速くしたいです。

ほんとに何度もすみません。
ファイル出力処理を加えて作成してみたところ、15分くらいで実行できました。
これくらいなら許容範囲かなと思います。

みなさまのおかげで解決することができました。ありがとうございました。
by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 実行速度を速くしたいです。
返信数: 9
閲覧数: 1156

Re: 実行速度を速くしたいです。

何度もすみません、今実行完了しました! だいたい11~2分くらいかかりましたが、いままで1時間以上かけても終わらなかったのでうれしいです。ありがとうございます。 これに関連して質問があるのですが(新スレッドを立てたほうがよいでしょうか…) 上のプログラムにファイル出力(Unの値を出力する)を付けたいのですが、以前より重くなってしまうのではないかと思っています。 具体的には、Unの値がある一定値以下の場合(if文)、テキストファイルに出力する。という処理を行いたいです。 ですが、プログラムを組む段階で何度か実行結果を確認したいので、1時間2時間もかかるプログラムにするのはどうしても避けたいです。...
by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 実行速度を速くしたいです。
返信数: 9
閲覧数: 1156

Re: 実行速度を速くしたいです。

>>h2so5さん 返信ありがとうございます。 10000000ごとの出力処理を削り、-O2オプションを使ってみました。 10分前くらいに実行し始め、現在実行中です。 前のスレッドのプログラムの実行がだいたい3~5分くらいかかっていたので、かなりかかりそうです。 >>softya(ソフト屋)さん 返信ありがとうございます。 そうなんですか…参考になりました。 これ以上速くするには、計算機の性能によることになるのでしょうか。 >>かずまさん 返信ありがとうございます。 +c がありませんが、これで一様乱数になるんでしょうか? これについてなんですが、上で示した漸化式は、たしかに一様乱数を求めるた...
by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 実行速度を速くしたいです。
返信数: 9
閲覧数: 1156

実行速度を速くしたいです。

前回のスレッドに答えてくださってありがとうございました。 前回のスレッドに関連した質問なので、こちら(↓)を見てくださるとうれしいです。省略してしまいすみません。 http://dixq.net/forum/viewtopic.php?f=3&t=14938 上のスレッドでは、漸化式Xn+1 = (a*Xn+c)modM a=1103515245、c=12345、M=2^31 を用いて乱数を計算していましたが、現在は M=5^13,a=2^39として Xn=a*Xn(mod M) という漸化式を用いてプログラムを作成しています。 それ以外に以前と違うのは、long long int型では桁が足...
by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 一様乱数の周期を求めるプログラムについて。
返信数: 6
閲覧数: 1370

Re: 一様乱数の周期を求めるプログラムについて。

>> 新々月さん
返信ありがとうございます。
動作確認もありがとうございます…!
もう一度しばらく待ってみたところ、ちゃんと止まりました。

どうやら、だめだったのはdouble型を使っていたからだったようです。
(以前は明らかにMをどれだけ過ぎても一向に止まらなかったので…)

ちゃんと確認せずに続けてしまってすみません。
h2so5さん、新々月さん、お手数をおかけしてすみませんでした。
ほんとうにありがとうございますm(_ _)m
by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 一様乱数の周期を求めるプログラムについて。
返信数: 6
閲覧数: 1370

Re: 一様乱数の周期を求めるプログラムについて。

>>h2so5さん
返信ありがとうございます。
以下の2つの環境で実行してみました。
Windowsでは、Cygwinを使っています。
どちらも、停止しませんでした。
Windows7/gcc3.4.4/Cygwin
Ubuntu/gcc4.7.3

ちなみに、コンパイルは
gcc -o sample sample.c -lm
としています。
by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 一様乱数の周期を求めるプログラムについて。
返信数: 6
閲覧数: 1370

Re: 一様乱数の周期を求めるプログラムについて。

>> h2so5さん
返信ありがとうございます。
確かに、整数値なのにdoubleはいやだなと思っていました。参考に致します…!

h2so5さんの書いて下さったプログラムを、上と同じ環境で実行してみたのですが、やはり周期Mでループを抜けてくれません。(実行速度はかなり速くなりました!)
なにか良い解決法はないでしょうか。。引き続きよろしくおねがいしますm(_ _)m
by いちこ
6年前
フォーラム: C言語何でも質問掲示板
トピック: 一様乱数の周期を求めるプログラムについて。
返信数: 6
閲覧数: 1370

一様乱数の周期を求めるプログラムについて。

一様乱数の周期を求めるプログラムを作成しています。 線形合同法を用い、初期値を1として、次に1が出てきたらループを終え、周期を出力したいです。 (漸化式Xn+1 = (a*Xn+c)modM a=1103515245、c=12345、M=2^31 を用います) プログラムを作成し、実行してみたのですが、ループが最大周期であるはずのMを超えても止まりません。 どこを直せばよいかわからず困っています。 詳しい方がおられましたら、ご教示お願いいたします。 以下に、ソースコード、処理の説明、実行環境を示します。 #include<stdio.h> #include<stdlib.h> #include...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 数値入力の例外処理について。
返信数: 8
閲覧数: 7497

Re: 数値入力の例外処理について。

>>usaoさん
返信ありがとうございます。

なるほどです。丁寧に説明してくださってありがとうございます。
usao さんが書きました: 次回のscanf()で再びこのアルファベットに出くわし→放置→また出くわし…
だから無限ループになってしまうんですね。

もっと勉強します。
みなさんありがとうございました。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 数値入力の例外処理について。
返信数: 8
閲覧数: 7497

Re: 数値入力の例外処理について。

>>かずまさん
返信ありがとうございます。
返信が遅くなってしまい申し訳ありません。
丁寧に教えてくださってありがとうございます。

scanfは空白を読み飛ばした後数字を読み込む、というのは自分でも調べてみて理解することができました。

ですが、
scanf("%*[^\n]");
というのが、なんだかよくわかりません。
この処理がないと、文字を入力したとき無限ループになってしまいますが、それはなぜなのでしょうか。

また、標準入力から値を受け取ったscanfがEOFを返すときは、Ctrl+z が押されたとき、で正しいでしょうか。

至らなくて申し訳ありませんが、よろしければご教示ください。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 数値入力の例外処理について。
返信数: 8
閲覧数: 7497

Re: 数値入力の例外処理について。

>>かずまさん 返信ありがとうございます! 書いていただいたコードを実行してみたら、うまく処理することができました。すごくうれしいです。 ありがとうございます。 >>ただの屍のようださん 返信ありがとうございます! 補足説明うれしいです(><) お二人の返信を参考に、自分なりにコードについて調べてみましたが、よくわからないところがあるので さらに質問させていただきます。 勉強不足で申し訳ありません。 feof(stdin)は、stdinがファイルの終わりがあると0以外、終わりがないと0を返すようですが、 文字入力されたとき、どうして0が返るのでしょうか。 また、11行目の意味は、改行を取り除い...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 数値入力の例外処理について。
返信数: 8
閲覧数: 7497

Re: 数値入力の例外処理について。

補足です。
最初の時点でのコードを下に記します。

コード:

//省略
int a;

while(1){
   printf("0から5までの数値を入力してください。\n");
   scanf("%d",&a);

   if(a<0 || a>5){
      printf("数値が正しくありません。もう一度入力してください。\n");
      coutinue;
   }
   break;
}
//省略
これに文字が入力された場合の例外処理を加えたいです。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 数値入力の例外処理について。
返信数: 8
閲覧数: 7497

数値入力の例外処理について。

こんばんは、いつもお世話になっております。 よろしくおねがいします。 キーボードから入力された0から5までの整数値を受け取り処理を行いたいです。 はじめは、scanf関数で受け取っていましたが、これでは誤って文字入力がなされたときに無限ループになってしまいました。 そこで、getsやgetcharなどの関数を使って例外処理を行おうと思ったのですが、なかなかうまくいきません。 とりあえず、0から9までの整数値と、一文字の文字が入力されるかもしれないと考えて、例外処理を作成したいです。 思いついたのは、gets関数で一文字読み込み、atoi関数で整数値に変換する方法でしたが、atoi関数に文字を入...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。
返信数: 2
閲覧数: 621

Re: 呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。

>>beatleさん
返信ありがとうございます。
beatle さんが書きました: main内では &b ですよね?
そのとおりです。ご指摘ありがとうございます。


beatle さんが書きました: 例えば変数名を変えるとかどうですか?
なるほどです。
そちらのほうが同じ変数名なのに*がついていたりついていなかったりで、ぱっと見たときにわかりにくくなるのが
改善されそうです。
そうするようにします。
曖昧な質問でしたが、答えた下さってありがとうございました。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。
返信数: 2
閲覧数: 621

呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。

おはようございます。 初心者です。よろしくおねがいします。 下記のような関係のプログラムを作成しています。 main関数内には、int型の2次元配列a、int型の変数b,cがあります。 main関数内では、関数sub1を呼び出します。 呼び出す際の引数はa,b,cです。 いずれも、sub1内で値を書き換えたいので、アドレスを渡します。 sub1内では、関数sub2を呼び出します。 呼び出す際の引数はa,bです。 ここでも、いずれの値もsub2内でさらに書き換えたいので、アドレスを渡したいです。 //省略 sub1(int (*a)[10],int *b, int *c); sub2(int (...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: プログラムのインクルードについて
返信数: 7
閲覧数: 1233

Re: プログラムのインクルードについて

>>へにっくすさん
返信ありがとうございます。
別々にコンパイルしていました(><)
へにっくすさんのおっしゃる通りにしてみたら、きちんとコンパイルすることができました。
ありがとうございます。

>>3D_3Dさん
返信ありがとうございます。
もっと勉強します(><)
無事、コンパイルすることができました。
付き合っていただいてありがとうございました。
打ち間違いも気を付けるようにします(><)

お二方ともありがとうございました。
無事改善することができたので、解決とさせていただきます。
精進します。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: プログラムのインクルードについて
返信数: 7
閲覧数: 1233

Re: プログラムのインクルードについて

>>3D_3Dさん 返信ありがとうございます。 言われてみればそうですね、書き換えておきます(><) すみませんが、関数の実体とは何のことでしょうか… たとえばsub1.cは #include <stdio.h> #include <stdlib.h> #include "a.h" #include "b.h" #include "c.h" boid sub1(int a[10][10],int b) { //省略 } というようになっています。すべて同じディレクトリ内にあります。 知識不足ですみません。 開発環境は、 OS:Windows7 コンパイラ:Borland C++ Compile...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: プログラムのインクルードについて
返信数: 7
閲覧数: 1233

Re: プログラムのインクルードについて

>>3D_3Dさん 返信ありがとうございます。 a.h , c.hは以下のように #ifndef A_H #define A_H void A(int a[10][10]); #endif sub1.h , sub2.h , b.h は以下のように書いてみました。 void sub1(int a[10][10],int b); このような書き方でいいでしょうか。 また、これらのヘッダファイルをインクルードするようプログラムを変更してコンパイルしたところ、 main.c以外では 「外部シンボル'_main'が未解決」 main.cでは 「外部シンボル'_sub1'が未解決」 「外部シンボル'_s...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: プログラムのインクルードについて
返信数: 7
閲覧数: 1233

プログラムのインクルードについて

おはようございます。 プログラム初心者です。よろしくおねがいします。 現在、6つのC言語プログラム(main.c, sub1.c, sub2.c, a.c, b.c, c.c)を作成し、画像のような関係でインクルードして使いたいと思っています。 http://ai-chi.img.jugem.jp/20130707_330422.png ですが、main.cをコンパイルしたところ 'a'の宣言が複数見つかった ひとつ前の'a'の定義位置 'a'の宣言が複数見つかった ひとつ前の'a'の定義位置 'c'の宣言が複数見つかった ひとつ前の'c'の定義位置 というエラーが表示されました。 a.cは3...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 関数に関数名を渡す際の記述の仕方について教えてください。
返信数: 6
閲覧数: 555

Re: 関数に関数名を渡す際の記述の仕方について教えてください。

>>みけCATさん
返信ありがとうございます。
言われてみるとそうですね(><)
ご指摘ありがとうございます!

>>涼雅さん
返信ありがとうございます。
なるほどです!
解説してくださってありがとうございます(><)

解決しました!お二方ともありがとうございました!
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 関数に関数名を渡す際の記述の仕方について教えてください。
返信数: 6
閲覧数: 555

Re: 関数に関数名を渡す際の記述の仕方について教えてください。

みけCATさんのアドバイスを参考にもう一度考えなおしたところ、 次のようなプログラムを作成することができました。 実行は成功しました、ありがとうございます(><) #include <stdio.h> int plus(int); void func(int *,int,char *); int main(void) { int i; int x[5]={0,1,2,3,4}; func(x,5,plus); for(i=0; i<5; i++){ printf("x[%d]=%d\n",i,x[i]); } return 0; } int plus(int a) { return a+10;...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 関数に関数名を渡す際の記述の仕方について教えてください。
返信数: 6
閲覧数: 555

Re: 関数に関数名を渡す際の記述の仕方について教えてください。

>>みけCATさん
返信ありがとうございます。
int(*compar)(const void *x, const void *y)
のところですよね。
ありがとうございます、少し考えてきます!
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 関数に関数名を渡す際の記述の仕方について教えてください。
返信数: 6
閲覧数: 555

関数に関数名を渡す際の記述の仕方について教えてください。

こんばんは、プログラミングで困っています。 初心者です。 アドバイスおねがいします。 関数の引数として別の関数の名前をわたしたとき、引数をうけとる関数はどのように記述すればよいのでしょうか。 プログラム全体の動作は簡単で、メイン関数内の配列xに格納された値にそれぞれ10を足して出力させます。 メイン関数で関数funcを呼び出す際、引数として関数plusの名前をわたします。 ※メイン関数はこのままで、関数plusとfuncだけを改善したいです。 関数のポインタについて調べていたのですが、よくわからなかったので質問させていただきます。 下は、自分なりに作ったプログラムです。 特に「*****」の部...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムと、処理速度について。
返信数: 7
閲覧数: 1439

Re: 画像処理プログラムと、処理速度について。

>>softyaさん
返信ありがとうございます。

たくさんのアドバイスをありがとうございます!
参考にさせていただきます…!
またわからないことがあったとき、よろしくおねがいします。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムと、処理速度について。
返信数: 7
閲覧数: 1439

Re: 画像処理プログラムと、処理速度について。

これでこのトピックは解決済みとさせていただきます。
softyaさん、ありがとうございました。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムと、処理速度について。
返信数: 7
閲覧数: 1439

Re: 画像処理プログラムと、処理速度について。

>>softyaさん
返信ありがとうございます。
そうなんですか!
てっきりstackのほうが速いものなのだと思い込んでおりました。気をつけます。

2つ前の返信も、詳しくしてくださってありがとうございます。
gettimeofdayはマイクロ秒の精度ですが、プログラムを実行して速度を測ったときのばらつきは大きかったです。
やはり、結果が欲しいなら厳密にしなければいけませんね。
標準偏差もとってみようと思います。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムと、処理速度について。
返信数: 7
閲覧数: 1439

Re: 画像処理プログラムと、処理速度について。

>>softyaさん
返信ありがとうございます。
なるほどです。
今使っているのはUnixなのですが、1ミリ秒くらいの差は、いつもあるとは考えないほうがよさそうですね。
ということは、今、できるだけ速いプログラムを作りたいと思っているのですが
この処理の場合、どちらの方法で読み込んでも、メモリの領域がstackでもstaticでも大差ないということ、ですよね(><;)

ただ、一般にはstaticよりもstackのほうが、アクセス速度は速いということでいいのでしょうか。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムと、処理速度について。
返信数: 7
閲覧数: 1439

画像処理プログラムと、処理速度について。

こんにちは。 本日もよろしくおねがいします。 今、1600*1600画素のRAW画像を読み込み、補正を行って書き出すプログラムを作成しています。 画像を読み込む配列の宣言、読み込み、処理、書き出しの速度の合計を測定しているのですが、疑問に思うことがあります。 1画素ずつ読み込んで、書き出す方式は、とても処理速度が遅かったので… 1600*1600画素の画像を、1600*1600個要素を持つ配列に、1枚いっきに読み込む方法の方が 1600画素を、1600個要素を持つ配列に、1600回読み込む方法よりも、処理速度が速いと予想していたのですが gettimeofday関数を用いて、速度の測定を行った...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
返信数: 10
閲覧数: 866

Re: 画像処理プログラムの、処理の改善点を教えて下さい。

>>h2so5さん
返信ありがとうございます!
良かったです(^-^)
丁寧に答えてくださって有難うございました。

では、次からはsoftyaさんがおっしゃっていたようなことを考えなければいけないですね。勉強したいと思います。
これで、このトピックは解決済みということにさせていただきます。
有難うございました!
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
返信数: 10
閲覧数: 866

Re: 画像処理プログラムの、処理の改善点を教えて下さい。

>>h2so5さん 返信ありがとうございます。 なるほどです! それならば1600*1600回も計算しなくてもいいですね! 実際にプログラムを作成してみました。 実行結果は正しかったですし、処理速度もかなり上がりましたが、h2so5さんが考えておられる処理と一致しているかどうか確認していただけるとうれしいです。 for(i=0; i<256; i++){ if(i>max) table[i]=255; else if(i<min) table[i]=0; else{ table[i]=(char)((255*sqrt(i-min))/c); } } fread(buf,1,1600*1600,...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
返信数: 10
閲覧数: 866

Re: 画像処理プログラムの、処理の改善点を教えて下さい。

>>softyaさん
返信ありがとうございます。
非同期アクセスですか…なるほどです。
座学としては習ったことがあるのですが、実際にプログラムを組んだことがまだないので、理解できるまでにとても時間がかかると思いますが、挑戦してみたいと思います。
ただ、現時点では、上のような処理を考えるので手一杯でしたので、もう少し整理してから、非同期アクセスの処理方法について勉強します。
せっかくアドバイスを下さったのに申し訳ございません。
精進いたします。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
返信数: 10
閲覧数: 866

Re: 画像処理プログラムの、処理の改善点を教えて下さい。

>>h2so5さん 返信ありがとうございます! 無事黒飛びを直すことができました…! 1番始めの質問の補足なのですが… 上の処理(1枚読み込んで、1枚書き出す)と、下の処理(1画素読み込んで、1画素書き出す)との処理速度がほとんど変わりません。 1枚いっきに読み込み書き出す方が、処理速度は早いと思っていたのですが、これはなぜなのでしょうか。 上のプログラムの方で改善できる点を教えていただけるとうれしいです。 よろしくおねがいします。 ※a,bはunsigned char型の変数です。 for(i=0; i<1600*1600; i++){ a=fgetc(fp); if(a>max) b=25...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
返信数: 10
閲覧数: 866

Re: 画像処理プログラムの、処理の改善点を教えて下さい。

>>h2so5さん
返信ありがとうございます。
確かにそうですね。

int型のcを宣言し、
はじめにc=sqrt(max-min); としておいてから、cに置き換えてみました。

コード:

      buf2[i]=(char)((255*sqrt(buf[i]-min))/c); //補正
少し実行速度が上がりました!
ありがとうございます(^-^)

しかし、今までの補正の式で一番白く表示されていたところが、黒飛びしてしまいました。
試しにcを、unsigned int型で宣言してみたのですが、変わりません。
原因が分からないのですが、よろしければ教えていただけるとうれしいです。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
返信数: 10
閲覧数: 866

画像処理プログラムの、処理の改善点を教えて下さい。

こんにちは。 本日もよろしくお願いします。 1600x1600画素のraw画像をfread()関数で読み込み、1画素ずつ処理を行ってから、fwrite()関数で書き出します。 処理速度をあげたいと思い、1回で1600x1600画素読み込んでいるのですが、1画素ずつ読み込んで適宜処理を行った場合とプログラムスピードが変わりません。 改善できる点を教えていただきたいです。 よろしくおねがいします。 ※ソースコード全体は長いので、割愛します。知りたい部分がありましたら、ご指摘いただけるとうれしいです。 下のコードは、画像を読み込んで、処理をして書き出す部分です。 buf,buf2は1600x1600...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: gettimeofdayを使ったプログラムスピードの測定について。
返信数: 3
閲覧数: 8416

Re: gettimeofdayを使ったプログラムスピードの測定について。

>>boxさん
返信ありがとうございます。
成程です…!
私は二つを足すと、時刻の値が2倍になってしまうと思っていたのですが、勘違いをしていたようです。
マイクロ秒は、紀元からの経過時間のマイクロ秒でなく、秒と秒の間のマイクロ秒なんですね。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: gettimeofdayを使ったプログラムスピードの測定について。
返信数: 3
閲覧数: 8416

gettimeofdayを使ったプログラムスピードの測定について。

宜しくお願いします。 double get_dtime(void) { struct timeval tv; gettimeofday(&tv, NULL); //ミリ秒を計算 return ((double)(tv.tv_sec)*1000 + (double)(tv.tv_usec)*0.001); //★ } プログラムスピードを計る際、↑のような関数を作成して使用するとよいと調べたのですが、★の行で何をしているのかわかりません。 tv_secは秒、tv_usecはマイクロ秒だと思うのですが、なぜこのような計算をして、ミリ秒が返るのでしょうか…。 特に、足し算の部分で何をしているのかわか...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>beatleさん
返信ありがとうございます。

勉強したい気持ちはおおいにあります。
しかしまずはもう少し自分で考えてから、質問させていただきます。
気にかけてくださってありがとうございます。

いろいろ考えてくださってありがとうございました。
精進します!
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>asdさん
返信ありがとうございます!
どうやら、RGBへの各バンドの対応がおかしかったようです…。
「.rgb」の画像のフォーマットどおりに組んだつもりだったのですが…今、フォーマットについて調べ直しているところです。
気にかけてくださってありがとうございます。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>beatleさん 返信ありがとうございます! おっしゃるとおり、下のように確認してみました。 for(i=0;i<1600*1600;i++) { buf[i*3]=255; buf[i*3+1]=0; buf[i*3+2]=0; } そうすると、どうやらGRBの順番に対応しているようでした…!! 「.rgb」の画像のフォーマットを調べてみるとRGBの順番だとあったのでとても不思議ですが、とにかくGRBの順番に変えると、トゥルースカラーの画像を表示させることができました! 長い間ご指摘くださってありがとうございました >< フォーマットの方の原因を調べてきます。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>beatleさん 返信ありがとうございます。 閲覧アプリには「ImageMagick」を使用しています。 RGBの順番は間違っていないはずです。 今のコードは下のようになっています。 アドバイスだけでもよいので、どなたかお願い致します。 #include<stdio.h> #include<stdlib.h> int main(void) { static unsigned char buf_1[800*800], buf_2[800*800], buf_3[800*800] ,buf[800*800*3]; FILE *file_1,*file; int i; float max,min...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>beatleさん
返信ありがとうございます。

それについても確認しましたが、正しいはずです。
3つの画像は衛星画像で、sample1はバンド1、sample2はバンド2、sample3はバンド3の画像です。
トゥルーカラーに合成したいので、Rにはバンド3、Gにはバンド2、Bにはバンド1を割り当てました。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>beatleさん
返信ありがとうございます。
それについては、
まず補正を行う前に合成を行うと、正しいはずの出力画像よりも青っぽい感じで出力されてしまいました。

また、伸張化を行ったあとのGRAY画像は、明暗のくっきりした画像になっていました。

これにより、原画像ファイルのデータが壊れているかもしれないと思い、新しく画像を取ってきたのですが、実行結果は変わりませんでした。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>beatleさん
返信ありがとうございます。
すみません、やってみました。

maxとminをfloat型で宣言し、
例えば

コード:

buf2[i]=(char)((255.0/(max-min))*((float)buf[i]-min))
のように変えてみたのですが、出力画像に変化はありませんでした。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>beatleさん
返信ありがとうございます。

なるほどです…ではfloat型で宣言して計算するのがよいのでしょうか…><;;
また、buf[]自体はcharですが、計算後代入するのは、文字型に明示的にキャストしてからのほうがよいでしょうか?
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

Re: グレースケールのRAW画像を、RGB合成するプログラムについて。

>>ホヅミさん 返信ありがとうございます。 失礼しました。 ソースコードを下に記します。 >>asdさん RAW画像は、衛星画像です。 先ほど新しい事実が発覚したのですが… ><;; 以前、同じプログラムを作成した方のものも実行してみたのですが、以前はきちんとカラー画像が作成できていたプログラムとまったく同じものを使用しても、色みのおかしい画像ができてしまいました。 PCが違うのですが、これは原因のうちに入るのでしょうか。 キャストですか…あまり問題はないと思ったのですが、どうでしょうか。 プログラムを確認していただけるとうれしいです。 よろしくお願いします。 #include<stdio.h...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
返信数: 20
閲覧数: 2984

グレースケールのRAW画像を、RGB合成するプログラムについて。

現在、3枚のグレースケールRAW画像を読み込み、「ヒストグラム伸張化」を行ってから、RGB合成を行う画像処理プログラムを作成しています。 そこで、合成したカラー画像が、どうしても紫がかった色になってしまい困っています。 3枚の原画像それぞれに、ヒストグラム伸張化の処理を行うのですが… この処理では、画像の輝度値の最大レベルmaxと最小レベルminを設定し a' = (a-min)*255/(max-min) という式で、輝度値aをa'に補正しています。 この処理を行うと、ヒストグラムが無理やり引き延ばされて、ある輝度値と、次の輝度値とに間ができてしまいます。(伝わりにくければすみません) 3枚...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
返信数: 4
閲覧数: 1408

Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

>>h2so5さん、見てくださったみなさまどうもありがとうございました。
ご迷惑をおかけしてしまい申し訳ありません。
今後はもっとよく考えてからスレッドを立てるようにします><
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
返信数: 4
閲覧数: 1408

Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

どうやらいろいろな場所が間違っていたようです。 見てくださった皆さんには、ご迷惑をおかけしました。 すみません。 下のように改善しましたところ、無事実行することができました。 #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fp1,*fp2,*fphist1,*fphist2; static unsigned char buf[1600*1600]; //入力画像 static unsigned char buf2[1600*1600]; //出力画像 int i,j; //ループ変数 int c; //ヒストグラム伸張化...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
返信数: 4
閲覧数: 1408

Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

>>h2so5さん
返信、ご指摘ありがとうございます!
41行目は改善します。すみません><

どこで止まるのかも調べてみようと思います。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
返信数: 4
閲覧数: 1408

raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

まだ初心者ですが、よろしくおねがいします。 raw画像を読み込み、ヒストグラムを伸張化して画像を出力するプログラムを作成しています。 コンパイルは通ったのですが、実行をすると、前回と同じく「問題が発生したため、プログラムが正しく動作しなくなりました。」と表示され、実行が止まってしまいました。 プログラムが重たいのでしょうが、これをどのようにしたら改善できるのかわかりません。 アドバイスを頂けるとうれしいです。 よろしくご教示ください。 #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fp1,*fp2,*fphist1,*f...
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: RAWファイルを読み込み、書き出すプログラム
返信数: 5
閲覧数: 5227

Re: RAWファイルを読み込み、書き出すプログラム

解決にチェックを入れるのを忘れておりました。
みなさん本当にありがとうございました。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: RAWファイルを読み込み、書き出すプログラム
返信数: 5
閲覧数: 5227

Re: RAWファイルを読み込み、書き出すプログラム

>>涼雅さん
返信ありがとうございます。
デバッガとブレークポイントはまだ一度も使ったことがなく、とても疎いので、今すぐに把握することはできません><
せっかく指摘していただいたのに申し訳ありません。今後、使用を試みようと思います。

>>ジンセイさん
返信ありがとうございます。
書き換えてみたことろ、ちゃんとファイルを生成することができました!
ありがとうございます!

>>tamanekoさん
返信ありがとうございます。
2500KBくらいになると思います。
by いちこ
7年前
フォーラム: C言語何でも質問掲示板
トピック: RAWファイルを読み込み、書き出すプログラム
返信数: 5
閲覧数: 5227

RAWファイルを読み込み、書き出すプログラム

初心者ですが、宜しくお願いします。 ただ今、既存のRAWファイルを読み込み、書き出すだけのプログラムを作成しています。 コンパイルは通ったのですが、実行をすると、「問題が発生したため、プログラムが正しく動作しなくなりました。このプログラムを閉じてください。」と警告が出てきて、プログラムが止まってしまいます。 どこを改善すればよいのかわかりません。 勉強不足で申し訳ありませんが、ご教示いただけるとうれしいです。 宜しくお願いします。 #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fp1,*fp2; unsigned cha...
by いちこ
8年前
フォーラム: C言語何でも質問掲示板
トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
返信数: 15
閲覧数: 1325

Re: 自作関数と再帰呼び出しを使ったプログラムについて。

>かずまさん 返信ありがとうございます。 なぜ、段数を 1増やして、元に戻すところで、2減らしているのですか? すみません、おかしいですね。直しました。 for (k = 0; k <= j; k++) { では、j 回ではなく、(j+1) 回ループを実行します。 わたしも自分で気になっていたところなので、自分なりに直してみました。 問題には、「0から100までのランダムな値」とあるのに、そのそのプログラムでは 0から 999 までのランダムな値になっています。  すみません!問題の記述のほうがミスです。 正しくは「0から1000までのランダムな値」です。ごめんなさい。 たくさん指摘してくださ...
by いちこ
8年前
フォーラム: C言語何でも質問掲示板
トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
返信数: 15
閲覧数: 1325

Re: 自作関数と再帰呼び出しを使ったプログラムについて。

>boxさん 返信ありがとうございます。 ありがとうございます。同じ質問ですね。 参考にさせていただきます。 >beatleさん 返信ありがとうございます。 なぜ2になってしまうのかようやくわかりました。 ですが、このように変更してみたのですが、微妙に違うかんじになってしまいます。 すこし考えてきます。 何か決定的な勘違いをしているようなら教えてくださるとありがたいです。 #include <stdio.h> #include <stdlib.h> #include <time.h> void result(int); int tree[100]; int N; int i,j; int ma...
by いちこ
8年前
フォーラム: C言語何でも質問掲示板
トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
返信数: 15
閲覧数: 1325

Re: 自作関数と再帰呼び出しを使ったプログラムについて。

>かずまさん 返信ありがとうございます。 だんだんと理解できてきたような気がします! かずまさんのご説明を参考にプログラムをつくりかえてみました。 void result(int i) { int j=0; int k; if(i<N){ j++; result(2*i+1); //子ども1(tree[2*i+1])以下を出力(再帰!) for(k=0;k<=j;k++){ printf("\t"); } printf("%d\n",tree[i]); //自分(tree[i])を出力 result(2*i+2); //子ども2(tree[2*i+1])以下を出力(再帰!) j--; } el...
by いちこ
8年前
フォーラム: C言語何でも質問掲示板
トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
返信数: 15
閲覧数: 1325

Re: 自作関数と再帰呼び出しを使ったプログラムについて。

>boxさん 返信ありがとうございます。 なるほどです。 自分→親→次というながれはなんとなく理解できたのですが、 1)最初の引数の値が2番目の引数の値以上であれば、何もしない。これが、再帰から抜け出す条件。 こちらの部分がよくわかりませんでした。わたしは、初めに再帰を抜け出すのはこの問題でいう15(添え字7)のときかと思ったのですが、どうでしょう。至らなくてすみません。 また、みなさんの返信をもとに、処理の流れをかんがえてみました。 http://awakening03.img.jugem.jp/20120709_2522164.jpg このような流れでいいのでしょうか。 プログラムに落とす...
by いちこ
8年前
フォーラム: C言語何でも質問掲示板
トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
返信数: 15
閲覧数: 1325

Re: 自作関数と再帰呼び出しを使ったプログラムについて。

>boxさん
返信ありがとうございます。
ookamiさんもおっしゃるとおり、木構造が関係しているのは形だけなのですね。
たしかに法則がありそうです。
しかし、表示順は[7][3][8][1]...となると思うので、苦戦している次第であります。

>h2so5さん
返信ありがとうございます。
なるほどです!たしかにそうですね。
それでは添え字+2を加算した値が、Nより大きいか否かで判断すればよいでしょうか。
すこし考えてきます。
by いちこ
8年前
フォーラム: C言語何でも質問掲示板
トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
返信数: 15
閲覧数: 1325

Re: 自作関数と再帰呼び出しを使ったプログラムについて。

>h2co5さん
返信ありがとうございます。
現在の添え字に、現在の添え字+1を加算した値が、Nより大きいか否かで判断できるのではないかと思ったのですが、どうでしょうか。

>ookamiさん
返信ありがとうございます。
確かにわたしもどうかと思ったのですが、再帰呼び出しのところの練習課題として出された問題のひとつなのです。ごめんなさい。

詳細検索ページへ移動する