C/C++の宿題を片づけます 49代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/08/10(水) 17:10:47あなたが解けないC/C++の宿題を片づけます
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows/Linux/等々
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
[3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【前スレ】
48代目: http://pc8.2ch.net/test/read.cgi/tech/1121471445/
【歴代スレは>>2-13】
0552デフォルトの名無しさん
2005/09/02(金) 01:49:550553デフォルトの名無しさん
2005/09/02(金) 02:03:09添削好きな>531の出番ですよ。
0554デフォルトの名無しさん
2005/09/02(金) 03:36:15→http://www9.plala.or.jp/sgwr-t/c/sec16.html
static jupiter[] = {
→typedefで作った型名を配列定義?
typedef struct {
} SATELITE;
としたら?
i = j = 0 ;
→邪魔。削除。
for(i = 0; i < 4 ; ++i){
→i++ で覚えとけ
double max = jupiter[i].cycle;
→どこで変数定義してんの?そもそもバブルソートにMAXなんて関係ないし。
0555デフォルトの名無しさん
2005/09/02(金) 03:44:26俺は理解できんかった。
0556デフォルトの名無しさん
2005/09/02(金) 03:55:30C++行ったら++iって書かんといかんようになるんだから別にいいじゃん。
0557デフォルトの名無しさん
2005/09/02(金) 04:07:574 C++ でのプログラム
http://jun.artcompsci.org/~makino/kougi/keisan_tenmongakuII/note3/node4.html
14−5.演算子の優先順位と結合規則
http://www9.plala.or.jp/sgwr-t/c/sec14.html#s14-5
0558デフォルトの名無しさん
2005/09/02(金) 04:13:29素朴な疑問なんだが、>556に対して>557でなにを指摘したいんだ?
C++では何故前置にしなくてはいけないか理解できないなら黙ってた方が可愛げがあるってもんだよ。
0559デフォルトの名無しさん
2005/09/02(金) 04:19:04前置でも後置でも良い場合は前置にする習慣があります。
という答えなら何点もらえますか?
0560デフォルトの名無しさん
2005/09/02(金) 04:37:24不定と未定義
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
C言語の自習・学習
http://www.brs.kyushu-u.ac.jp/~hamada/CLang/CLangtitle.htm
0561554
2005/09/02(金) 05:29:40カウンタがいっぱいでよく分かりませんでした。
ところどころにコメント入れてもらえれば読みやすいと思います。
自作関数呼び出し、ループとコメントを抽出してフローチャートになるくらいに。
>>558
C++で後置きのサンプルです。
なぜとか愚問です。シビアな判断が必要なものは避ければいいんです。
0562デフォルトの名無しさん
2005/09/02(金) 05:52:430563デフォルトの名無しさん
2005/09/02(金) 05:55:10どちらでもいい場合には前置を使う癖をつけておいてもいいと思うけどね。
0564デフォルトの名無しさん
2005/09/02(金) 06:34:240565デフォルトの名無しさん
2005/09/02(金) 11:39:150566デフォルトの名無しさん
2005/09/02(金) 13:26:56私はどこを直せばいいのでしょうか?
よろしくお願いいたします
0567デフォルトの名無しさん
2005/09/02(金) 16:35:29顔
0568デフォルトの名無しさん
2005/09/02(金) 16:53:020569デフォルトの名無しさん
2005/09/02(金) 17:01:19ベクトル量子化なんてやったことないけど、
とりあえずソース眺めてる。
以下、コーディング上修正すべき点
・ファイル開いたらちゃんと閉じろ
・メモリ確保したらちゃんと解放しろ
・使わない変数や処理を入れるな。
・main関数長すぎ。もうちょっと機能別に分割しろ。
・ちゃんとコメントつけろ。何やってるのかわからん
暇があったら添削したソース上げるわ。
0570デフォルトの名無しさん
2005/09/02(金) 17:14:40機能ごとの関数分けはまぁいいとして(できればしてくれ)、
せめてコメント付けてくれんか
めっさ読み辛い
0571569
2005/09/02(金) 17:25:41ありえないインデックス値が入ってるような・・・
生成されたコードブックの検証はしたのだろうか
とりあえず、以下について言葉で説明してくれ
・ソース中の配列indexの意味と使われ方
・コードブックに無いベクトルに対しての処理 (ソース中で何をやってるか)
なんとなく、この辺が癌になってる気がする
0572デフォルトの名無しさん
2005/09/02(金) 18:10:11>>570
すみません。
かなり急いでいたため、こうなってしまいました。
>>571
indexについてですが、コードブック中のRGBをあらわしています
コードブックに無いベクトルは一番近い値をコードブックから探してきています。
>生成されたコードブックの検証はしたのだろうか
gcc ----.c
./a.out 処理したいファイル名 コードブック名
でコードブックが現れます。
確認したところおそらくはコードブックは問題ないと思います。
0573デフォルトの名無しさん
2005/09/02(金) 18:15:01読み込まれるRGBをR,G,B別々に考えて、コードブック中のRGBとの差をそれぞれ求めて
その値が一番小さなコードブック中のベクトルの番号で置き換えています。
0574デフォルトの名無しさん
2005/09/02(金) 18:23:57Rに255がはいっちゃってて
直してるつもりでも直らなかったです
0575デフォルトの名無しさん
2005/09/02(金) 18:48:50getval()はαBGRの順で読んでるみたいなので
その順序を直せばOK
0576デフォルトの名無しさん
2005/09/02(金) 19:03:20ありがとうございます
やってみましたがだめでした
ファイルの中身を十進法で見てみると
A B C 255 となっていて 255を一番前にもっていきたくって (255 A B C)
シフトなどを使ってみたのですが自分ではできませんでした。
0577554
2005/09/02(金) 20:38:02ループに影響すると思ってたんだよ。
けど、>>556 の
>++iって書かんといかん
ていう間違いもだめだろ。
あと、>>551 のソースの問題点分かったよ。
そもそもみんな正しい処理を分かってないから、
それぞれどういう目的でそういうコーディングしてるか書かないと、
間違いだと言う判断ができない。
0578デフォルトの名無しさん
2005/09/02(金) 20:49:39RGBαであらわされた画像データを読み込みます
次にRGBαをひとつのベクトルとします。
で、出現頻度の高いRGBαをコードブックに書き出し、出現頻度の高い順に256個
選びました。
次に符号化するために、画像データを読みこんで もし同じ値がコードブックにあれば
その番号をふってやります。なかったら一番近いベクトルを選びます
選び方として それぞれのR、G,Bを引いてから足し合わせその数の一番少ないベクトルが
一番近いベクトルとみなされ、その番号をふってやります
複合化はその逆で、番号を見て、番号のベクトルをふってやります
αは0か255だったので最初省きました。RGBが値を持てば255それ以外は0です。
メモリの関係から省きました。
ですので複合化するときにαを足し加えたつもりです。
で、リトルエディアンだから逆に処理したりしたつもりだったのですが
頭がこんがらがってきて、結果を見てみるとαの位置が逆になったりしていました
わかりづらいとはおもいますがよろしくお願いいたします
0579デフォルトの名無しさん
2005/09/02(金) 20:59:58質問とは関係なくて悪いんだけど、せっかくベクトルで処理してるなら
内積を使って一番近いベクトルを探した方がいいんじゃまいか?
0580デフォルトの名無しさん
2005/09/02(金) 21:02:10最終的な出力データの形式は?
1)入力と同じRGBα形式:32bit
2)コードブック(RGBα:32bit)*256+インデックス値(8bit*画素数)
※コードブックサイズが256のとき
3)その他
0581デフォルトの名無しさん
2005/09/02(金) 21:12:51私のプログラムのやり方があっているかはわかりません。
そっちのほうがいいのかもよくわからないのです。
>>580
最終的な出力データ形式は
本来ならば符号化したデータ (256のコードブックを使っているのならば読み込ませたデータRGBα
の1/4)と、複合化したデータ(コードブックを参照して、複合化するRGBαで)と、コードブックを出力したいのですが
私の作ったプログラムですと符号化したデータはでていません。複合化したデータは出したつもりです。
1)は複合化したものと考えられますよね?
2)は符号化したものとコードブックということですよね?
0582デフォルトの名無しさん
2005/09/02(金) 21:16:190583580
2005/09/02(金) 21:28:47ちゃんと解釈してくれたようなので安心
最終的には量子化圧縮したものを出したいけど
今はまだやってないってことだね。
>実際処理させたいファイルをアップしたほうがいいでしょうか
結果を照合できるからアップした方がいいと思う
0584デフォルトの名無しさん
2005/09/02(金) 21:43:02ありがとうございます
最終的には上に上げた符号化、複合化、コードブックをだしたいのですが
最悪でも複合化したものを出してソフトを使って表示させたいです。
自分のプログラムで表示させると明らかにおかしい画像になりました。
897にあげておきました
よろしくおねがいいたします
0585デフォルトの名無しさん
2005/09/02(金) 22:58:29元データにやたら0x00が含まれてる件について
0586デフォルトの名無しさん
2005/09/02(金) 23:06:48それについては正しいです
0ボクセルが多いのが特徴のデータですので
0587デフォルトの名無しさん
2005/09/03(土) 00:10:53・プログラムの起動法(引数の説明やね)
・プログラムが読み書きするファイルの説明
どういうファイル形式かわからないので、
・元データの形式
・コードブック、符号データの形式(複数あるなら、それぞれ)
説明いれとくと、元データの形式だけど、4バイトYUVだったら、マイナスの表現を2の補数でしてるか、
下駄を履かせて最小値を0にしてるか。(これはユークリッド距離を求めるのに必要)
3バイトYUVだったらバイトの並びと、ビットの配置が必要になる。
入力データがRGBでYUVに変換するんだったら、変換式が必要ね。
コードブックは予想がつくんだけど、念のため。
符号データに関してはバイトをまたがるビット列になるので、その配置がわからんとどうしようもない。
0588デフォルトの名無しさん
2005/09/03(土) 00:50:13プログラムの起動方はどうのような形でもかまいません。
元データの形式はαRGBなのですが、私の環境ではBGRαそれぞれ1バイトで
計4バイトです。
YUVにしてベクトル量子化もしたいのですがまずはRGBでやりたいとおもっております
0589デフォルトの名無しさん
2005/09/03(土) 00:52:020590デフォルトの名無しさん
2005/09/03(土) 00:54:32int main(void)
{
int i;
for(i =0; i < 10; i++){
printf("**********\n" + i)
}
}
このiがどういう作用をしているか教えてください。
0591デフォルトの名無しさん
2005/09/03(土) 00:56:28すみません。わかりました。
できれば符号化と複合化のプログラムを分けてもらいたいです
起動方法は、
./a.out ベクトル量子化したいファイル そのファイルのコードブック 符号化されたデータ
./a.out 符号化されたデータ コードブック 複合化されたデータ
でお願いいたします。
複合化と符号化わけるのがだめというのであれば
./a.out ベクトル量子化したいファイル そのファイルのコードブック 符号化データ 複合化データ
でお願いいたします
0592デフォルトの名無しさん
2005/09/03(土) 01:03:36#include <stdio.h>
int main(void)
{
static char a[10] = {'*','*','*','*','*','*','*','*','*','\n'};
int i;
for(i =0; i < 10; i++)
{
printf(a + i) ;
}
return 0;
}
これと等価だと思えばいい。
0593デフォルトの名無しさん
2005/09/03(土) 01:08:19RGBだけ対象で、コードの種類は256個限定?>591
0594デフォルトの名無しさん
2005/09/03(土) 01:09:350595569
2005/09/03(土) 01:13:31添削するのめんどいので組みなおしてみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/898.txt
とりあえず動作確認はしたが、結果が正しいかどうかまではわからん。
少なくとも、コードブックはちゃんと作れているみたい。
以下補足
・ヒストグラムを構造体のリンクリスト(単方向)にすることでサイズ軽減&高速化
・アルファチャンネルの補正はしていない
・RGBαのバイトオーダーはenumで指定
・ユークリッド距離の計算は適当
・使い方
% [実行ファイル名] [画像ファイル]
出力されるファイル
- histgram.txt: ヒストグラム
- codebook.raw: コードブック
- encode.raw: 符号化データ
- decoderaw: 復号化データ
疲れたのでもう寝ます。あとは任せたノシ
0596デフォルトの名無しさん
2005/09/03(土) 01:14:44RGBだけ対象で問題ありませんが、複合化するときにRGBがすべて0ならαも0
そうでなれけば255をいれるようにしなくてはなりません。
コードの種類は256限定ではなく512、1024もつくれるようにしたいです。
0597デフォルトの名無しさん
2005/09/03(土) 01:16:15ありがとうございます
確認してみます
本当にありがとうございます
0598デフォルトの名無しさん
2005/09/03(土) 01:16:38直す気力が無いのでこのまま寝ます。
0599デフォルトの名無しさん
2005/09/03(土) 01:20:27/tmp/cc666b8D.o: In function `get_color_diff':
/tmp/cc666b8D.o(.text+0x408): undefined reference to
`sqrt'
collect2: ld returned 1 exit status
というメッセージがでてきました
どうしたらよいでしょうか?
0600デフォルトの名無しさん
2005/09/03(土) 01:20:30それだと落ちますが。つーか、スレ違いなんだからレスすんなと。
0602デフォルトの名無しさん
2005/09/03(土) 01:23:48*じゃなくて文字でやってみると効果がわかりやすいかもしれません。
文字じゃなくても違う配列に格納するものを変えてみるとか。
0603デフォルトの名無しさん
2005/09/03(土) 01:24:01ビットの並びを定義しましょう。
0604デフォルトの名無しさん
2005/09/03(土) 01:24:09すいません
数学関数?ですね ありがとうございます
大変助かります
0605デフォルトの名無しさん
2005/09/03(土) 01:30:52ありがとうございます。
ツールを使って画像を見ましたが、私のプログラムに比べて断然よくなておりました
少し木になったのですがエンコードサイズがデコードサイズと同じというのは圧縮という面では
少し違ってる?のかなと感じました。コードブックサイズは256ですので本来ならば
ちょうど1/4になると思いました。
本当にありがとうございます
匿名掲示板ですが本当にありがとうございます
連絡先聞いて御礼したいくらいです。ありがとうございます
0606デフォルトの名無しさん
2005/09/03(土) 01:31:47ビットの並びの定義というのはどういったものなんでしょうか?
無知ですみません。
0607デフォルトの名無しさん
2005/09/03(土) 01:49:51コード列(10進数) 1 3 7 15 31 63 127 255 511
0608デフォルトの名無しさん
2005/09/03(土) 01:57:35>605で終わってるのだから。
0609デフォルトの名無しさん
2005/09/03(土) 02:12:54複合データファイルはバイナリでRGBαそれぞれ一バイトのバイト列になってほしいです
これで答えになっているでしょうか?
0610デフォルトの名無しさん
2005/09/03(土) 02:28:04#define CODEBOOK_SIZE 256
の256を1024などにすればいいとおもうのですが
これを例えば画像の存在しうるベクトル数と同じ数(10000など)にすればまったく同じ画像に
再生されるはずなのですが、明らかに同じ画像に再生されませんでした。
同じベクトルがあればそのインデックスを振り当てるというふうにプログラム内部でなっているのに
色々してもらって本当に感謝しています。
もしよかったらどこを変えたらいいのか教えていただけないでしょうか
0611595
2005/09/03(土) 02:40:27いや、連絡先は勘弁してくれ・・・
コードブックサイズは256*4バイト。
エンコードサイズは画素数*1バイトで、データ部だけ見れば1/4。
データ中にコードブックを持たせると
その分だけサイズが大きくなるが、画像データが大きくなればなるほど
データ中のコードブックサイズの比率が小さくなる。
コードブックをシステム標準パレットみたく、外部固定にできれば
データにコードブックを付ける必要がなくなり、完全に1/4になるね
0612デフォルトの名無しさん
2005/09/03(土) 02:45:17なるほど。ありがとうございます。
610について少々お知恵を拝借させていただけませんか。
0613デフォルトの名無しさん
2005/09/03(土) 03:03:21>>595 のプログラムを512,1024にも対応するだけで終わり?
0614デフォルトの名無しさん
2005/09/03(土) 03:13:30ありがとうございます。
595さんのを512、1024にも対応させたいです。できれば512などのサイズは
あとで簡単に変えられるようにもしできればしていただきたいです。
あと最初にアップした問題にも書いてあるように、
RGBαをYUVα(それぞれ1バイト)にしてベクトル量子化を施すというのと
RGBαをYUVα(Yを8ビット、U,Vを2ビットずつ、αを4ビット、計2バイト)にして
ベクトル量子化をするのをしたいです。
YUVαそれぞれ1バイトできるとはおもうのですが後者(計2バイト)のは少し難しそうです。
これについてもコードブックサイズを256、512、1024などを作りたいです。
長々とすみません
0615595
2005/09/03(土) 03:33:28あー・・・
えっと、今のプログラムだとコードブックのインデックスの範囲が
8bit(0〜255)固定になってるので、define以外にそこも直さないとダメ。
ソースで言うと変数enc_data、enc_data_ptr、あとはfwrite()の第二引数。
fwrite()は各要素ごとに出力するようにしないと対応できないか。
修正方針としては
・ソース内部ではenc_dataの要素を16 or 32bitにする(それを参照するポインタの型も)。
・コマンドライン引数でコードブックサイズを取得し、cb_sizeに格納
文字列の判別は"256"、"512"、"1024"を直接比較でいいんじゃないかと。
・データ出力時に、コードブックサイズに応じて、各インデックス値を
8bit/16bitのいずれかで出力
こんなとこかな。
漏れがあったら誰か指摘よろ。
あと、俺のはエンコード/デコードでプログラム分かれてないんだけど、いいのかな?
>>595をベースにするのは構わんけど、ちゃんと中身を理解してな。
0616デフォルトの名無しさん
2005/09/03(土) 03:37:21ありがとうございます
正直先輩のソースは難しくて理解するのは大変な時間がかかりそうです
提出期限がもう終わってますがなんとかしたいとおもいます
ありがとうございます
0617デフォルトの名無しさん
2005/09/03(土) 03:47:28>あと、俺のはエンコード/デコードでプログラム分かれてないんだけど、いいのかな?
欲を言うと分かれているほうがいいです
0618デフォルトの名無しさん
2005/09/03(土) 03:53:13新しく作り直してください。
細かいことを聴かれても答えません。アナタが作ってください。
気に入らなかったらまた作ってもらいます。
0619595
2005/09/03(土) 04:03:14え、ちょ、おまwwww
って、俺はやらんぞ。>>617か他の暇人よろ。
あと、
つ [後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です]
作った後の仕様変更は結構コストかかるのよ。バグの温床にもなるし。
だから>>613みたいに事前に確認を取るわけ。
0620デフォルトの名無しさん
2005/09/03(土) 04:12:04400行のソースだけれど・・・元のプログラムの理解と修正コード作成で何時間ぐらいかかった?
0621595
2005/09/03(土) 04:36:34乙あり。
(>>569の1時間くらい前から>>595までの時間)−休憩等 = 7時間くらい
以下内訳
・解読 : 2時間
・添削→マンドクサ : 1時間
・組みなおし : 4時間
解読とコード作成はほぼ同時進行でやってたから正確じゃないかも。
0622デフォルトの名無しさん
2005/09/03(土) 04:56:47でも、やっぱ時間かかるよな。ホント、おつかれ。
0623デフォルトの名無しさん
2005/09/03(土) 09:36:28本当にありがとうございました。
がんばってみます
0624デフォルトの名無しさん
2005/09/03(土) 15:17:15ありがとうございまいた。
0625デフォルトの名無しさん
2005/09/03(土) 16:40:09上位256ベクトルを見て〜 といっていましたが一番多いベクトルは0です。
ですが今回は0を除いて上位256にしてみたいのですがどうしたらいいのでしょうか?
付け加えるようですみません。
もしくは下位256にする方法でもかまいません
どうかよろしくお願いいたします
0626デフォルトの名無しさん
2005/09/03(土) 16:55:05申し訳ございません
0627デフォルトの名無しさん
2005/09/03(土) 17:23:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/899.c
0628デフォルトの名無しさん
2005/09/03(土) 17:31:22ライブラリの指定は最後にしないと駄目だよ。
0629デフォルトの名無しさん
2005/09/03(土) 19:54:23[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/900.txt
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2005年8月31日17:00まで] 過ぎても提出できます。
[5] その他の制限: 何度も申し訳ありません。ベクトル量子化を依頼したものです
0630デフォルトの名無しさん
2005/09/03(土) 20:42:44符号化データを
[位置][RGBα][位置][RGBα]・・・としたいのはわかったけど
それだと0がほとんど無い画像を符号化したときに
サイズが2倍になるわけだが、>>629はそこまで考えてる?
あと、データの持ち方として、
struct ENCODE_DATA{
unsigned int index;
unsigned int voxel;
}
みたいな構造体で配列を作って、この構造体のサイズを使って
処理させたほうがすっきりしてわかりやすいと思う。
量子化するときは、構造体のvoxelメンバにアクセスさせるようにすれば、
わざわざデータを分割しなくてもいいんじゃないかな
と。思うわけだが、まあ参考程度に。今から直すのめんどいだろうし。
0631デフォルトの名無しさん
2005/09/03(土) 20:56:39[位置][RGBα][位置][RGBα]・・・
わかっていただいてありがとうございます
このような例を入れたほうがわかりやすいですね。参考になります
で、これは0が多いものい対して行っております。
0がほとんどなければサイズが二倍になるのはわかっております
今、インデックス情報とRGBαを合成させようとおもっておりますがどうもセグメンテーション違反が
でて苦戦しております
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/901.txt
これは ./a.out インデックス情報のみのでーた ボクセルのみのでーた 合体させたデータ
にしているつもりです
どうしてもわかりません・
0632デフォルトの名無しさん
2005/09/03(土) 21:10:55アウトバッファのメモリ確保の値を倍することで解決いたしました
ですが、インデックス情報とボクセルを合体させたものを複合化したいのですが
どうしても複合化できません。サイズが逆に小さくなってしまう・・・
0633デフォルトの名無しさん
2005/09/03(土) 21:42:24595さんのソースで実行させてみると近いベクトルをとってきてほしいのに
明らかに違うものをとってきてしまうという上体になっています
ユークリッド距離のところは適当とおっしゃられていたのでそこらへんが
原因かなと考えておりますが、
0634デフォルトの名無しさん
2005/09/03(土) 22:15:37>>595のソース自体は問題ないような気がする。
0635デフォルトの名無しさん
2005/09/03(土) 22:22:53無い場合は一番近いベクトルを選ぶところを、一番近いものではなく
コードブックで一番上にあるベクトルにおきかえているようなきがします
(画像ツールで見た結果)
624でいったのは、コードブックサイズを増やせば完全に復元されるといういみで
例えばコードブックサイズが256なら一致する256ボクセル以外は0であらわされていました。
(0がコードブックで一番多い代表ベクトル)
なのでおそらくコードブックの中のベクトルで一致しなかったら
コードブックの一番上のベクトルに置き換えられているようです
どうやって直せばいいのでしょうか・・・やってはいるんですがどうも595さんのが
私には難しすぎて。・・・
0636デフォルトの名無しさん
2005/09/03(土) 23:45:35情報系の学科?
これ、宿題じゃなくて、ゼミの課題?
0637デフォルトの名無しさん
2005/09/04(日) 00:13:39関数の中に関数って書けるんですね。勉強になります。
0638デフォルトの名無しさん
2005/09/04(日) 00:18:38関数内での関数定義は規格に無い。一部の処理系の拡張機能。
そしてgccのいくつかのバージョンはこの拡張にバグがある。
基本的には使うな。
0639デフォルトの名無しさん
2005/09/04(日) 00:29:56位置の値が取る範囲は何?
0640デフォルトの名無しさん
2005/09/04(日) 01:11:26・位置がとりうる範囲を確認する
・位置を表すのに必要なバイト数を求める(=nバイトとする)
・1バイト出力する捨てプログラムを書く
・nバイト出力する捨てプログラムを書く
・nバイトとボクセルだかベクトル量子化データだかを組で出力するプログラムを書く
・1バイト入力する捨てプログラムを書く
・nバイト入力する捨てプログラムを書く
・nバイトとボクセルだかベクトル量子化データだかを組で入力するプログラムを書く
0641595 ◆AOMdbQiVo.
2005/09/04(日) 02:50:48距離の比較のところにバグがあったorz
595.c 344行目
----------------
/* 一致するノードが見つからない場合、最も近いものを探す */
if(!found){
double min_dist = 0;
int min_index = 0;
/*ユークリッド距離算出*/
min_dist = get_color_diff(color, codebook[0]);
/*** ↓がi=iになってて、ループの中に入ってなかった。ごめん ***/
for(i = 1; i< cb_size; i++){
/*ユークリッド距離算出*/
double tmp_dist = get_color_diff(color, codebook[i]);
if(min_dist > tmp_dist){/* 最短距離 */
min_dist = tmp_dist;
min_index = i;
}
}
*enc_data_ptr = (UINT8)min_index;
enc_data_ptr++;
}
----------------
0642デフォルトの名無しさん
2005/09/04(日) 05:03:00[2] 問題文(含コード&リンク):ログファイルに現在の日付、時間を出力したい。
現在の年・月・日・時・分・秒・ミリ秒を求め、ファイルに出力せよ
[3] 環境
[3.1] OS: HP-UX
[3.2] コンパイラ名とバージョン: gcc、バージョンはちょっと分からないです
[3.3] 言語: C
[4] 期限: 9月5日12:00まで
[5] その他の制限: 特になしです
2005/09/04/05:01:30:40 yyyy/mm/dd/hh:mm:ss:msms (ms:ミリ秒)
上記のようなフォーマットで出力したいとおもっています。
gettimeofday()関数をつかってミリ秒の取得はできたのですが
%dや%fなどの書式指定子で表示できないのです。
どうにかして表示したいので、知恵をお貸しください。
0643デフォルトの名無しさん
2005/09/04(日) 05:19:080644デフォルトの名無しさん
2005/09/04(日) 05:27:29ミリ秒で取得するから時、分、秒、ミリ秒は計算するんでしょ?
あと、日付と時間はそれぞれ取得すると思うけど。
0645デフォルトの名無しさん
2005/09/04(日) 05:47:160646デフォルトの名無しさん
2005/09/04(日) 05:54:590647デフォルトの名無しさん
2005/09/04(日) 06:07:02[2] 問題文(含コード&リンク):
問題1
memsetのような関数を高速化する方法のひとつに、バイト単位ではな
くワード単位で書き込みを実行する手法がある。このほうがハードウェ
アに合うだろうし、ループのオーバーヘッドも1/4ないし1/8に減少
する可能性がある。これの問題点は、ターゲットがワード境界上にな
い場合や長さがワードサイズの倍数でない場合に、さまざまな末端処
理を実行しなければならなくなる点だ。この最適化を実行するmemset
を記述せよ。その性能を、既存のライブラリバージョンや単純なバイ
ト単位でのループと比較せよ。
問題2
memsetのテスト機構を作成せよ。
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 特になしです
[5] その他の制限: 特になしです
0648デフォルトの名無しさん
2005/09/04(日) 08:35:380649デフォルトの名無しさん
2005/09/04(日) 08:51:510650デフォルトの名無しさん
2005/09/04(日) 11:47:19こんな感じでいいの?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/902.c
0651650
2005/09/04(日) 12:11:14やはり処理系提供の関数は速いな。
memset 120
my_memset 230
my_memset_simple_loop 921
0652デフォルトの名無しさん
2005/09/04(日) 12:21:43solarisでやってみた。たぶんHPも同じだと思うけど。
こんなんか?間違ってたらごめん
#include <stdio.h>
#include <sys/time.h>
int main(){
struct timeval time;
struct tm *t;
gettimeofday(&time, NULL);
t = localtime(&time.tv_sec);
printf("%04d/%02d/%02d/%02d:%02d:%02d:%02d\n",
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec, time.tv_usec/10000);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています