[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 07/15 20:46 / Filesize : 200 KB / Number-of Response : 834
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.35【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 21:36:23 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.34【環境依存OK】
pc10.2ch.net/test/read.cgi/tech/1169039760/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

136 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 22:18:53 ]
HeapAlloc/FreeだってOSに返さないで次のHeapAlloc呼出に再利用するぞ。
HeapDestroyでは流石にOSへ返すが。

137 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 22:35:45 ]
Linux、UNIXあるいはMacで、OSの名称やバージョン情報を取得するにはどの関数を使えば良いですか?
例えば、FreeBSD 6.0、Vine Linux 4.0などです。
WindowsはGetVersionExなどで出来ました。

138 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 22:38:59 ]
man 3 uname

139 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:02:10 ]
OSはlinuxです。C/C++勉強してます。
ディレクトリの中のファイルの日付を取得したいのですが、
opendirとreaddir関数使いました。
struct dirent {
ino_t d_ino; /* "inode number" of entry */
off_t d_off; /* offset of disk directory entry */
unsigned short d_reclen; /* length of this record */
char d_name[1]; /* name of file */
};
この中に日付無いのですが、どうしたらよろしいでしょうか。
よろしくお願いします。

140 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:12:23 ]
>>139
つ[stat()]

141 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:37:57 ]
>>140
レスありがとうございます。
d_nameを元にファイルのpath指定して、
stat()実行して、struct statを取得する感じですか。
なんか大変な感じします。(汗

142 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:55:57 ]
>>141
つ[popen("/bin/ls -l", "r")]

143 名前:デフォルトの名無しさん [2007/02/25(日) 00:48:23 ]
unsignedはどういう場合に使うべきなんでしょうか?
例えばループのカンターなんかは符号付きを使用すると思いますが、
実際の所は符号なしの方が意味的にはあっていると思います。
ビットシフトしたいとき、くらいしか思いつかないんですが、他にどんな使い道がありますか。

144 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 01:07:48 ]
>>143
typedef unsigned char BYTE;
size_tもunsignedだな
ループカウンタとかunsigned付けるの面倒だよね。
size_tがunsignedだからもっと使っているはずだけど面倒。
負にならないもの全てunsignedとか面倒だからやらないんじゃない。
unsigned intならファイルサイズとか4Gまで表現できるけど面倒だからintで計算。
2GB以上はこのプログラム動きません。
たとえlong longとかあっても面倒だからunsigned long longでファイルサイズを表そうとも思わない。
俺の場合はね。



145 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 01:36:52 ]
>>142
レスありがとうございます。

FILE *p;
p = popen("/bin/ls -l", "r");
ネットで検索したところ、
こういう使い方すると、出力をファイルのように
扱うことが出来るみたいですね。
一行ずつ読み込んで、スペースで区切ると日付も取得できそうです。
コマンド実行->標準出力取得 って、やり方知らなかったので
大変勉強になりました。
でも、時間の型を考えるとやっぱり、今回は、stat()関数使用してみます。
ありがとうございました。

146 名前:デフォルトの名無しさん [2007/02/25(日) 17:45:57 ]
質問です。
CのソースからC++のソースを呼び出したいのです。

具体的には、
既にかなりの規模になってしまった拡張子.cのプログラムソースがありまして、
どうしても欲しい機能がC++で書かれているので、インクルードしたんですが、当然Cのソースからそれらを読むとコンパイルエラーになってしまいました。

hoge.cppと言うファイルにC++関連のプログラムを書き、何とかその関数をc側から読み出したいのですが
インクルードすると、エラーが出ますし、どのようにすれば良いのでしょうか?

尚環境はVC++.NET 2003です。

よろしくお願いします。


147 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 17:55:14 ]
EXTERN_C

148 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 17:58:33 ]
>>147
レスありがとうございます。
extern "C"
をつけた関数の中から、C++固有の機能(クラスなど)へのアクセスが出来ないのですが…
具体的には、error LNK2019: 未解決の外部シンボル とエラーが出ます。


149 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:00:08 ]
ヘルプ

150 名前:デフォルトの名無しさん [2007/02/25(日) 18:02:01 ]
ユーザーが入力した日時 (日付と時刻) を
設定ファイルに記録しておこうと思うのですが、
どういう形式で記録するのが一般的ですか?
asctime 関数のような 「Sun Feb 03 11:38:58 2002」 のような形式は
気持ち悪いので採用したくないです。

151 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:02:58 ]
>>148
そりゃC言語にない機能だからクラスを扱えないよ。
C++の方で呼べるようにしてあげないと。

152 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:06:46 ]
>>151
間違えたかも。

>>148
C++の方では
Cから呼べるようにクラスじゃない関数でextern "C"を付けて作る。


Cの方では
extern "C"を付けた宣言をする。
これで呼び出せると思うけど忘れた。


153 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:11:24 ]
>>151
確認したいのですが、extern "C"をつけるのはC++側の関数へですよね?
main.c
#include "hogehoge.h"
int main(void){
int a=0;
func(a);
return 0;
}
hogehoge.cpp
#include <vector.h>
extern "C" void func(int a){
vector<int> v;
}
hogehoge.h
#ifdef __cplusplus
extern "C" {
#endif
void func(int a);
#ifdef __cplusplus
}
#endif

こういう形なんですが・・・。

154 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:18:52 ]
>>150
設定ファイルを直接見る必要が無いなら
timeで拾った値をバイナリで書き込めばいいんじゃないかな。



155 名前:デフォルトの名無しさん [2007/02/25(日) 18:20:35 ]
設定ファイルはテキストファイルと決まってしまっているんです。
見ることはあまりないですけど、たまに見ることもあるものです。

156 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:25:04 ]
>>150
W3C-DTF

157 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:30:34 ]
>150
rfc 3339

158 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:33:33 ]
>>153
これで動くんじゃないの?

159 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:38:48 ]
おいらのところではコンパイル・リンクできたけど?

160 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 18:51:23 ]
>>155
time_tの整数値
yyyymmddhhmmss形式
y/m/d h:m:s形式
好きにしな。

161 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:00:51 ]
>>150
どういう形式にするにしても、strftime関数が使えると思う。

162 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:12:08 ]
>>150
一般的といいつつも日本人向けにしたいっていうことだよね。

163 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 20:11:34 ]
W3C とか RFC の形式を採用してみます。
情報ありがとうございます。

164 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 21:51:02 ]
フォルダ内の全ファイルを列挙するプログラムを教えて下さい



165 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 21:53:35 ]
system("dir");

166 名前:164 mailto:sage [2007/02/25(日) 22:04:00 ]
printfで表示するには?

167 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:06:14 ]
そういえば昔、
system("dir > hoge.txt")して、fopen("hoge.txt","r")...みたいなことを
やってた連中が居た。

168 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:11:16 ]
>>164
環境依存

>質問者は必ず、環境を書きましょう。

169 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:13:08 ]
>>167
十分アリだと思う dir /b ほうがイイと思うが

170 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:15:15 ]
popenの事たまには思い出してあげてください

171 名前:164 mailto:sage [2007/02/25(日) 22:16:58 ]
VisualC/C++
WindowsXP
フォルダ内のファイル名をstd::stringの配列に格納したいのです

172 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:32:34 ]
>>171
FindFirstFile
FindNextFile

あたりでどうかな

173 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:56:24 ]
イベント オブジェクトが現在シグナル状態にあるかどうかを調べるには、
どうしたらいい? WaitForSingleObject を使うの?

174 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:03:35 ]
そう、待機時間を0にすればいいと思う。



175 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:08:32 ]
そうか、ありがと。

176 名前:デフォルトの名無しさん [2007/02/25(日) 23:11:26 ]
>>172
使い方がわかりません

177 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:20:03 ]
>>176
#include<windows.h>
#include<stdio.h>
int func1(void){
    HANDLE    h_find;
    WIN32_FIND_DATA    file_info;
    printf("\n----- func1 -----\n");
    h_find=FindFirstFile("*", &file_info);
    if(h_find==NULL) return 0;
    do{
        printf("%s\n", file_info.cFileName);
    }while(FindNextFile(h_find, &file_info)==TRUE);
    FindClose(h_find);
    return 1;
}
int func2(void){
    FILE    *fp;
    char    filename[FILENAME_MAX];
    printf("\n----- func2 -----\n");
    fp=popen("dir /b", "r");
    if(fp==NULL) return 0;
    while(fgets(filename, sizeof(filename), fp)!=NULL)
        printf("%s", filename);
    fclose(fp);
    return 1;
}
int main(void){
    func1();
    func2();
    return 0;
}

178 名前:デフォルトの名無しさん [2007/02/25(日) 23:21:25 ]
基本的なことで申し訳ないのですが、
クラスのオブジェクトの配列を作るとき、
そのクラスに引数を持つコンストラクタを持たせることは出来ないのですか?

一つ一つコンストラクタ引数を指定する形でも良いので、配列化させたいのですが…
一つ一つ宣言した上でポインタの配列を作った方が手っ取り早いですか?

179 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:33:21 ]
諦めてvectorに収納したら?

180 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:38:28 ]
>>178
引数を持つコンストラクタを持たせることは可能だが、
クラスの配列の初期化時にはデフォルトコンストラクタが呼ばれるので
デフォルトコンストラクタが必須。

どーしてもデフォルトコンストラクタを持たせたくないのなら、
(スマート)ポインタの配列にするしかないな。

181 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:40:35 ]
配置newとかを使ってやる方法は無くもないが、最後の手段。
現在のC++ではどうしようもないから179-180の言うとおりにするしかない。

182 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 00:07:26 ]
>>179
vectorに収納…というのは、どのような使い方ですか?

vector<MyClass> c1(10);
のような使い方だとデフォルトコンストラクタしか呼べませんよね?

183 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 00:09:25 ]
reserveしてからpush_back!push_back!push_back!

184 名前:デフォルトの名無しさん [2007/02/26(月) 00:19:57 ]
>>177
ありがとう

フォルダとかディレクトリまで表示されるけどファイルだけに
するにはどうするの?



185 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 00:22:20 ]
>>184
1. それぞれのファイル属性を調べる
2. dir のオプションを調べる

186 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 00:22:41 ]
>>184
少しは自分で調べろ。

187 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 12:34:03 ]
彼にとって調べるとは人に聞くことだけなのさ

188 名前:デフォルトの名無しさん [2007/02/26(月) 12:52:25 ]
Win32って無くなるの?

189 名前:デフォルトの名無しさん [2007/02/26(月) 13:19:14 ]
たとえば Windows のファイル ハンドルをカプセル化したような
クラスを作った場合、

class File {
private:
    HANDLE  m_handle;
public:
    .....
    HANDLE GetHandle(void) { reeturn m_handle; }
    operator HANDLE(void)  { return m_handle; }
};

この GetHandle や operator HANDLE は const 関数にすべき?

190 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 13:26:32 ]
微妙だな。
MFCのCWndや、ATL::CWindowではconst付けているけど。

191 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 19:36:57 ]
とあるツールのソースがあるんですが、拡張子が.vcprojというファイルがあることから
Visual C++ で作られたと言うことが想像できるんですが、具体的にVisual C++ のどのバージョン
で作られているのかを知るためにはどうやって調べたらいいのでしょうか?僕の持っているVisual C++
ではコンパイルに失敗して困ってます。

192 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 19:41:06 ]
.vcprojファイルをテキストエディタで開くと
VC++のバージョンが書いてあります

193 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 19:46:26 ]
>>192
だっは〜すいません、ありがとうございます!

194 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:51:36 ]
たびたびすみません。。
>ProjectType="Visual C++"
>Version="7.10"
とあったのですが、これは .NETになるんですかね?
Visual Studioの .NETを使うべきですかね、それともVisual Studio2005でしょうか



195 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:56:03 ]
>>194
7.0は2002
7.1は2003
8.0は2005



196 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:57:33 ]
>>195
どもです!!

197 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 21:04:54 ]
>>194
2003を使うのが手っ取り早いですが、2005でも問題ないと思います。

198 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 22:13:12 ]
VC++ で質問です。

class A
{...}

class B: public A
{...}

class C
{
B* b;
vector <A> a;
}

こんな感じのクラスを作成してて
C::a のうちの一つの参照から C::b へポインタをコピーした場合
C::b を B* として適切に扱えるのでしょうか?

199 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 22:16:23 ]
B *b = &a[0]みたいなことなら、出来ないと思うが。
追加したメンバ変数・仮想関数がないというような
限定条件を付ければ、reinterpret_castしても動くだろうけどさ。

200 名前:198 [2007/02/26(月) 22:28:22 ]
ありがとうございます。
上でやりたいことを少し説明します。

まず A が基本フレームと呼ばれるセクタ単位のデータ構造を扱います。
B は基本フレームを拡張したフレームで基本的には仮想ではない関数郡です。
そして C はフレーム集合を保持するクラスです。
C では C::a のうち頻繁に利用するフレームを C::b として利用できたらいいのにと考えています。

今手元に開発環境がないのですが
適切に扱える C::b1 もあったりできない C::b2 があったりして悩んでいます。

ポインタを使わないでよい用法があればよいのですがありますでしょうか。

201 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 22:28:30 ]
>>198
aをstd::vector<boost::shared_ptr<B> >型にでもしておけ。

202 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:02:25 ]
douga.adult-55.com/movie_141/flvplayer.swf

203 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:57:44 ]
>>183
なるほど!
ありがとう!!

204 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 09:41:55 ]
>>200
vector<A*>にしてBにキャストしたい要素はちゃんとBのインスタンスを格納しとけば普通にダウンキャストできると思うんだが
キャストしたくないというならクラス別に配列分けるか、クラスの設計見直すか



205 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:24:13 ]
>>198
俺の想像だけどさ

某ライブラリで
struct Box { int x0,y0,x1,y1; }; が既にあるとする。

値の配列でライブラリから受け取ったり渡したりするから
Box型の配列のまま変えられない。

受け取ったり渡したりするだけならそのままでいいが
頻繁に使う要素は、やはり不便だ。

そこで
struct BoxEx : Box
{
    int GetWidht() { return x1-x0; }
};
みたいに便利なメソッドつきの無理やりキャストしたいって事か。

206 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:30:58 ]
根本的ですが、

for(i = 0; i < 10; i++){
 if(i < 5) a();
 if(i < 7) b();
 if(i < 9) c();
 d();
}

と、

for(i = 0; i < 5; i++) a();
for(i = 0; i < 7; i++) b();
for(i = 0; i < 9; i++) c();
for(i = 0; i < 10; i++) d();

ではどっちが効率的ですか?

207 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:38:01 ]
なんとなく前者の方が効率よさそうな気がするが、
パフォーマンスに関してはとにかく実測(して比較)しろ。それが鉄則だ。

208 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:46:02 ]
そもそもabcdを呼び出す順番が違ってくるけど、それでいいのか。

209 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:47:13 ]
たぶん後者のほうが効率いいと思うが
そんな効率気にする必要があるのか

「これじゃぁ効率悪いよなぁ」と余計なとこまで考えてプログラミングがなかなか進まないのは罠

210 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 22:02:03 ]
ファイルの書き込みについて、なんですが
追加モードで開いて書き込むと、一番最後に追加されます。
”先頭に追加した文字列を作ってから書き込む以外”
先頭に追加する方法はあるでしょうか?
std::ofstream ofs( "hoge.txt", std::ios::app );

seekで先頭にファイルのポインタ先頭にしても
末尾に追加されるみたいなんです。
よろしくお願いします。

211 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 22:06:05 ]
日本語の実装に難があるような気もするが、
要するに、ファイルの先頭行が最新の書き込みであってほしい、という話?

212 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 22:26:29 ]
>>210
先頭に追加?OSレベルでもそういう機能をファイルシステムに
備えている物はないんじゃないか?

213 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 22:35:09 ]
>>210
追加だから最後に追加されるのが正しいでしょ。
先頭に書いたら上書きじゃないのか。

それとも先頭に挿入?
メモリでもファイルでも挿入というのは、
それ以降の全てのデータをずらして書き込み場所を空けてから
書き込むのでちょっと大変なサギョウだ。

214 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 22:50:12 ]
行の先頭4バイトを次(ファイルオフセットには前)の行へのオフセットと決めておいて、
ファイルの先頭だけ特別扱いすれば・・・誰かそんな変態FS作らないかな。



215 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:01:51 ]
>>207-209
確かに…
実測すべきでした。ハイ。
済みませんでした。
やってみます。

216 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:15:00 ]
>>212
>>213
はい。やりたいことは挿入です。
挿入みたいなモードは無いですか。
ログの保存を先頭に挿入して、逆の順番に保存してる
アプリがあったので、どうしてるのかと思いまして。

レスありがとうございました。

217 名前:198 [2007/02/27(火) 23:21:41 ]
>>205
ありがとうございます。
でもちと違うのかな。

198 の
  vector <A> a;

  vector <A*> a;
として
  b = a.at (x);
とすることでやりたいことができました。

218 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:26:58 ]
え?キャスト無かったら、こういうエラーにならない?

> error C2440: '初期化中' : 'A *' から 'B *' に変換できません。
> base から derived へのキャストには、dynamic_cast または static_cast が必要です。

219 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:29:45 ]
>>216
そのログのフォーマットはどんなかんじでしょうか?
タグ(目印)みたいなものがついてないでしょうか?
ログのフォーマットがわかればそのアプリがどんな
実装してるかわかるかもしれんよ

220 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 08:10:06 ]
配列の中身をランダムに入れ替えて別の配列に代入したいのですが、
被らず代入する方法を教えてください。お願いします。

221 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 08:21:50 ]
>>220
手順
要素数を N とするとき
1. そっくりそのまま別の配列にコピーする
2. 配列の 1 番目の要素と x1 番目の要素を交換する (x1 は 1 から N までの一様乱数で求める)
3. 配列の 2 番目の要素と x2 番目の要素を交換する
...
配列の N 番目の要素と xN 番目の要素を交換する

222 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 08:22:47 ]
そのままコピーした後、ランダムに並び替えるのが楽なんじゃないかな

223 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 08:29:55 ]
>>221-222
ありがとうございます。
なるほど、入れ替えた回数が「ランダム」ということになりますね

224 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 08:33:56 ]
>>223 違う

rand() の精度で良ければサンプルはこんな感じ
N 回の入れ替えで全体の順序がランダムになる

#include<stdio.h>
#include<stdlib.h>
#define N 10
void swap(int *a, int *b){
int c;
c=*a;
*a=*b;
*b=c;
}
int main(void){
int a[N], b[N];
int i;

for(i=0;i<N;i++) a[i]=i+1;
for(i=0;i<N;i++) b[i]=a[i];
for(i=0;i<N;i++) swap(&b[i], &b[rand()%N]);
for(i=0;i<N;i++) printf(" %d", b[i]);
printf("\n");
return 0;
}



225 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:53:00 ]
剰余かよ

226 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:27:59 ]
int b[1024];
に様々な+-含めた値が入ってて、そいつをfloat型として無理に渡した関数先で
+- 32768.0の範囲に収まるfloat型にきちんと直したいんですけど
具体的には
void func(float *b){
int o[1024];
for(int i=0; i<1024;i++){
o[i]=b[i]*(1.0 /32768.0);
}
}
int main(void){
func(b);
}
}
こんな感じにしたいんです。
func()の引数がfloatではなくintであれば、この計算で正常に変換出来るんですが
どうしてもfloatで渡す必要があって困っています。
func内でint型の変数を用意してコピーしてやると上手くいきますが、ループ内の計算式で何とかしたいのです。
どうすれば上手くいくのでしょうか?


227 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 19:58:37 ]
すみません。間違えました。。。
void func(float *b){
float o[1024];
for(int i=0; i<1024;i++){
o[i]=b[i]*(1.0 /32768.0);
}
}

です。結果はfloatで出したいのです。

228 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 20:19:57 ]
ようするにint to floatって事?

229 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 22:57:53 ]
>>227
どうしたいのかよく和下欄のだが、
それだと、bの中身とoの中身が全然変わっちまうぞ。

230 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:07:59 ]
すみません。
>>228のとおり、ようするに正しくfloatからintへ変換したいのです。

例えば
int f=-2
printf("%f\n",f);
これで正しく-2が表示出来るようにしたいのです。
この場合fに何か計算式をかければいけそうだとは思うんですが…。

231 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:10:12 ]
浮動小数点数には表現できない数値のいうのがあってだな

232 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:15:17 ]
>>230
その前の話を全て無視して、単にそのprintfの場合だったら、
可変個引数だからキャスト演算子を明示しろということになるが。
printf("%f\n", (float)f);

233 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:17:30 ]
>>230
まて落ち着け。
前の文を見る限りそんな単純な問題でもなさそうだが…
その話なら単純にキャストだ。

とりあえず落ち着けw

234 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:26:40 ]
なんか質問が似てるんだけど
GPGPU
pc11.2ch.net/test/read.cgi/tech/1128780920/377
とは別の人?



235 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:33:32 ]
void func(float *t){
for(int i=0; i<128;i++)
printf("%f\n",t[i]);
}
int main(void){

int t[128];
for(int i=0; i<128; i++){
t[i]=i;
}
func((float *)t);
return 0;
}
これで0〜128が表現できねぇよって話か?
GPUの事はわからんから、intやfloatのサイズの事はわからんからアドバイスは出来ない。

236 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:45:10 ]
>>235
そうです!それです!
GPUじゃなくて、CPUでのやり方が知りたいんです。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<200KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef