1 名前:デフォルトの名無しさん [2007/11/03(土) 00:20:13 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.43【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1190860744/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
45 名前:nkkn5 [2007/11/03(土) 19:59:53 ] >>38 、39 すいません。 いただいたご提案では うまく行ってなかったみたいです。 charが負のときにisprinntなしで行うと カタカナの範囲も文字として出力されたのですが よく結果を見ていたら出力されておりませんでした。 範囲外のcastは やはり勝手な値になる?ようですね。 double--->intを実験したら、 (100000000000) intの最小値に無理やりcast後の値が なってしまいました。 (実行時エラーにも ならないものなんですねえ)
46 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 20:18:27 ] >>43 んーむ。 根拠は見つけられなかった。 正しくは for (int i = CHAR_MIN; i <= CHAR_MAX; i++) { cout << (isprint((unsigned char)i) ? (char)i : ' '); } と書くべきかもしれんね。 規格上は signed char の範囲外の値を signed char に変換したときの動作は実装依存らしいけど、実際にはそれが問題になったことはないな。 signed char と unsigned char は 1 対 1 で対応してるもんだと考えてる。 >>45 それはたぶんロケールのせい。 setlocale(LC_ALL, ""); を試してみそ。 ムダかもしれんが。
47 名前:nkkn5 [2007/11/03(土) 21:49:17 ] >>38 、39 さん (再) どうやら、うまく行っていなかったのも isprintのせいのようです。 isprintに128以上の数値を渡すと、 0が返ってきます(私の実験です)。 ---実験コード--- for (int i = 0; i <= UCHAR_MAX; i++) { cout << setw(3) << char(i) << ' ' ; cout << setw(3) << (isprint(i) ? char(i) : '-') << ' ' ; cout << setw(3) << isprint(i) << ' ' ; // <--- この部分128以上では0 cout << setw(3) << dec << i << endl; } ---------------- そのため、カタカナがでるような数値になると 私の前のコードではスペースに置き換えられて いたために出力されていないように見えて いたのだしょう。 つづく
48 名前:nkkn5 [2007/11/03(土) 21:50:54 ] つづき (訂正) いたのだしょう--->いたのでしょう なぜカタカナが非表示文字と判断されるのか、?です。 そういう仕様なんでしょうか。 ただ英語圏生まれのため、isprintとしては そういうことになるのかな、とも思っております。 違いますでしょうか。 また、上記のコードを、 setlocale(LC_ALL, ""); 後に実行すると、 ループ自体が128で止まってしまいます。 UCHAR_MAX自体は(表示させてみたところ) 255のまま変わっていないのですがね、、、 (こちらも?ですが、setlocaleは 私にはレベル的に早いかなーという気がします。 私の見ている本には載ってませんし。)
49 名前:nkkn5 [2007/11/03(土) 21:56:37 ] >>40 ,44 そうみたいですね。 先ほどこちらで教えていただきました。 (18です) 17--->18--->19--->23--->36,37 という流れをみていただけるとうれしいです。 結局のところ、今は、私が見ている本の前提である、 charの範囲が0から255ならば 「charの定義域全体に渡って、 ”表示できない文字はisprintを使ってスペースに置き換えながら" 文字と数値を一覧で出す」ことができるが、 charの定義域が-128から127である私の環境の場合、 うまくいく方法は見つかっておりません。 (とくにマイナス部分(カタカナなど)について) ”表示できない文字はisprintを使ってスペースに置き換えながら" ということを行わないのであれば話は簡単なのですが。 17で質問したときにはこんなに大事(オオゴト)になるとは 思っておりませんでした。。。
50 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:37:36 ] 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132 pc11.2ch.net/test/read.cgi/tech/1190261457/ こっちのスレで訊いた方が良いかもしれない。
51 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:48:17 ] 昨日、ドトネトのbitmapで質問にきた者です。 再び、VC++ 2005 EXPRESS で質問です。 msdn2.microsoft.com/en-us/library/ms533895.aspx ↑ここ見て、とりあえず線を引くところから初めてみようと思ったのですが、 外部参照 5 が未解決です。(リンクエラー?)がでます。 これは、ウィンドウズプラットフォームSDKのインストール後の設定になんか不備があるのでしょうか? それとも、ウィンドウズプラットフォームSDKのDLLを手動でリンカに設定するもんなのでしょうか?
52 名前:203 mailto:sage [2007/11/03(土) 22:50:06 ] >>22 なるほど、これでよさげな感じですね。 どうもでした。
53 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:59:14 ] C++でLinuxのTCP/IPネットワークプログラミングをする場合 自分でソケット関連のシステムコールをクラス化して 作るものですか?それとも既存のライブラリがあって、それを 利用するのが今の定石でしょうか? Cでソケットプログラミングはしてるのですが、C++で 同じことをする場合、自作のクラスの作り方の雛形 というか定石がわかりません。大体、形は決まってると 予想しているのですが。
54 名前:デフォルトの名無しさん [2007/11/03(土) 23:02:31 ] CでうごくならC++でうごく
55 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:03:38 ] ソケット用のstreamを作っちゃってる猛者もいたなぁ
56 名前:デフォルトの名無しさん mailto:ああわざとか [2007/11/03(土) 23:05:51 ] >>54 それは現段階では誤解を招くぞ
57 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:09:20 ] 関数の呼び出しを使って、整数xの2倍した値を返す関数を作りたいのですが下のソースでは、値が表示されません。 下記のソースでできるなら、どこが間違っているか、分かる方は教えてください。 この方法自体が間違っているのでしょうか。 #include <stdio.h> int dec(int y){ int z; z=y+1; return(z); } int inc(int y){ int z; z=y+1; return(z); } int mult2(int y){ int i,j; i=y,j=y; while(i>=0){ i=dec(i),j=inc(j); } return(j); } main(){ int i; i=6; printf("%d\n",mult2(i)); }
58 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:10:20 ] >>51 リンカ-入力-追加の依存ファイル にgdiplus.libを追加。 ソースに #pragma comment(lib, "gdiplus") って書いておく方が楽だけど。
59 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:12:34 ] >>57 値が表示されないという事は、 そもそもprintfが機能していないという意味なのだが。 そういう話なのか?
60 名前:デフォルトの名無しさん [2007/11/03(土) 23:14:05 ] int dec(int y){ int z; z=y-1; return(z); } int inc(int y){ int z; z=y+1; return(z); } int mult2(int y){ int i,j; i=y,j=y; while(i>0){ i=dec(i),j=inc(j); }
61 名前:57 mailto:sage [2007/11/03(土) 23:15:34 ] >>59 おそらくprintfだけの話ではなく、それ以前のソースが間違っているのだと思います。 その間違えを指摘してもらいたいです。
62 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:17:21 ] decなのに値が増えてないか? 無限ループじゃないの?
63 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:18:35 ] int dec(int y){ ×int z; z=y+1; ○int z; z=y-1; return(z); }
64 名前:デフォルトの名無しさん [2007/11/03(土) 23:30:54 ] さらに、 60のように while(i>0){ と >=ではなく、>
65 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:45:17 ] >>47-48 cout << setw(3) << char(i) << ' ' ;の行をコメントアウトしたら、 UCHAR_MAX == 255まで結果が出力されたぞ。 >>46 >>48 C++では、std::locale::global(std::locale(""))が Cでのsetlocale(LC_ALL, "")に相当する。 これには<locale>が必要。
66 名前:nkkn [2007/11/04(日) 00:25:05 ] >>65 ありがとうございます。 うまくいったみたいです。 まとめてみます。 ・setlocale(LC_ALL, ""); を設定しないと、 isprintは、カタカナ部分について 0を返してしまう。 なお、 cout << setw(3) << char(i) << ' ' ; はiが129以降でも出力自体はされる。 ・setlocale(LC_ALL, ""); を設定すると、 カタカナ部分についてのisprintの返り値が ちゃんと0以外(私の環境では255)になる。 一方、 cout << setw(3) << char(i) << ' ' ; はiが129以降は、(その出力行自体)なにも 出力されなくなる。 この部分をコメントアウトすれば、 途中で止まらず、カタカナも出力される。 これで合っていますでしょうか。 当初の質問の目的が達成されました! ありがとうございました。
67 名前:nkfを使って日本語ファイルをwstringへ読み込む関数出来たよ [2007/11/04(日) 01:03:45 ] #include <windows.h> #include <string> #include <vector> #include <fstream> using namespace std; void wreadfile(char *inputfile, vector<wstring> &z){ typedef int (__stdcall *FNC)(char*); typedef void (__stdcall *FND)(char* ,char*); locale::global(locale("japanese"));setlocale(LC_ALL,"japanese"); HINSTANCE hd = LoadLibrary("nkf32.DLL"); FNC SetNkfOption=(FNC)GetProcAddress(hd,"SetNkfOption"); FND NkfFileConvert=(FND)GetProcAddress(hd,"NkfFileConvert2"); int n;char *tempdir;n=GetTempPath(1, tempdir); tempdir = new char[n+30];GetTempPath(n, tempdir); char temfile[20]="nihongohenkanyo"; strcat(tempdir, temfile); SetNkfOption("-w16L0 -X -Lu -d"); NkfFileConvert(inputfile,tempdir); fstream fp(tempdir,ios::in | ios::binary ); static wchar_t wbuf[2][1024*1024+20]; int N,flg=0,k;wstring str=L""; while(!fp.eof()){ fp.read((char *)(wbuf[flg]), 1024*1024); for(N=fp.gcount()/2+5; wbuf[flg][N-1]==0; N--); wbuf[flg][N]='\0'; k=0;while(1){ for(n=k; wbuf[flg][n]!='\n'; n++) if(n>=N){str=(wstring)&(wbuf[flg][k]); flg=1-flg; goto end;} wbuf[flg][n]='\0'; z.push_back( str + (wstring)&(wbuf[flg][k]) ); if(k==0)str=L""; k=n+1;}end:}remove(tempdir);}
68 名前:デフォルトの名無しさん [2007/11/04(日) 01:05:57 ] 上のをヘッダファイルに入れて次のようにすれば、vector<wstring>型に1行ずつ入る #include <string> #include <vector> #include "wreadfile.h" using namespace std; main(){ vector<wstring> z; wreadfile("file",z); for(int n=0;n<z.size();n++)wcout<<z[n]<<endl; }
69 名前:57 mailto:sage [2007/11/04(日) 01:24:03 ] >>60 >>62-64 出来ました!ありがとうございました!
70 名前:デフォルトの名無しさん [2007/11/04(日) 04:16:17 ] すみません wcoutって危険( 認識できない文字があると落ちる )と思うので、wcoutを自作したいのですが 自作関数に置き換えられますか?
71 名前:デフォルトの名無しさん [2007/11/04(日) 04:20:46 ] void hyoji (wstring str)とかのほうがいいですかね?
72 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:27:49 ] basic_stringをカスタマイズすれば、できるんじゃね 名前空間に閉じ込めれば、wcoutって名前でそのまま使えるし
73 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:33:21 ] >>70 んなもんは用途に寄るだろ。UTF-8で吐けるんなら問題ねえし、エンコーディングが 仮定できないコンソール出力で、情報を全く失いたくないんなら、出力を フィルターすべきかもな。 boost::iostreamsなんかが使えると思うよ。
74 名前:デフォルトの名無しさん [2007/11/04(日) 14:24:32 ] CでIEの今現在開いているURLを得ることってできますか??
75 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:37:47 ] >>74 ActiveXを使う要領でできるけど道のりは遠い。
76 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:45:15 ] 今更、参照回数計測クラスを自作するのは時間の無駄でしょうか? やはりshared_ptrを使うのが当たり前ですかね?
77 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:10:22 ] >>76 よく分かってるじゃない。
78 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:28:45 ] >>76 「参照回数計測クラスを自作する」ことが目的じゃなければそうすべき。
79 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 18:06:08 ] >>77 >>78 レスどうも。C++の勉強のために一度作って動かして、 あとはライブラリを使用します。 仕事でC++を使うときに皆さんどうしてるのかなと思いまして。
80 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 19:09:26 ] MSDNの↓をC:/1111.bmpに変えて動かしてみたんだが、エラーがでるんだぜ。 なんでなんだぜ Image image(L"Grapes.jpg"); graphics.DrawImage(&image, 60, 10); ↓ Image image(L"C:/1111.bmp"); graphics.DrawImage(&image, 60, 10); あと、線を引いてみよう、文字列を書いてみようも試してみたんだが、画面がマッシロなままなのさ!
81 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:05:55 ] bccでcをやっています。最近OpanGLを始めました そうしたら影を付けるところで止まります。 コンパイルは出来るのに、実行すると止まります。 どうすればいいでしょうか。
82 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:18:04 ] どういう方法で影を付けようとしてるのかわからんから、答えようがない 具体的にどの関数をどういうふうに使ったのか それと、そこで止まるっていうのはどうやって確かめた? 実は他のところで止まってるのかもしれんぞ 「止まる」っていうのも、もう少し具体的に アニメーションしてるのが止まるのか、キーやマウスの反応がなくなることなのか、エラーメッセージが出て強制終了くらうことなのか、OSごと落ちるのか
83 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:20:27 ] つまりソースとエラーメッセージを出せ、と。
84 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:21:26 ] デバッガ…は無理そうだから、printf(MessageBox)デバッグだな。
85 名前:分からないから寝る mailto:sage [2007/11/05(月) 00:44:19 ] ボーランドのturbo c++(forWin95)を見つけたので図書館からTURBO C++ジョイフルプログラミングという本を借りてきたのですが・・・ 一番最初のたった5行の文がコンパイルするとエラーを吐きます main() { printf("C言語で遊ぼう\n"); while(!kbhit()); } 3.4行目共にCall to undefined function なんですがなにが悪いんでしょうか?
86 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:12:11 ] C++ではプロトタイプ宣言のない関数は呼び出せない。 ちゃんと適切なヘッダをインクルードする必要がある。
87 名前:デフォルトの名無しさん [2007/11/05(月) 01:48:19 ] Visual C++ 2005 EE と GCC ではちょっと動作が違うみたいですが、 どちらを使って勉強をすればいいのでしょうか?
88 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:13:05 ] さぁ?
89 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:16:04 ] 変数名の付け方で時々悩むのですが、 みなさん「ハンガリアン記法」ってのを使ってますか?
90 名前:80 mailto:sage [2007/11/05(月) 02:25:10 ] 仕事で強制されたら使うけど、個人的なプログラムでは使わない といっても、java使いなんで、Cだとどうなることやら エラーの原因がトンと分からなかったので、FromFileで読み込めるようなので試してみた。 Image::FromFile(L"1111.bmp"); Image::FromFile(L"C:\\1111.bmp"); Image::FromFile(L"C:/1111.bmp"); ぜんぶ0x00000000(null?)が返ってくる。なんで? 内部で画像の読み込みに失敗して、javaでいうヌルポでも発生してたんかしら?
91 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:30:19 ] >>87 GCCの方が文法に厳しいので勉強するならGCC
92 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:35:18 ] こういう時に注意かな for(int i=0;i<10;i++) cout << i << endl; cout << i << endl; で、いらないテクニックを覚える…と #define for if(1)for
93 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 07:59:41 ] >>89 タイプの方なら自然と使ってる。ってか便利。 システムの方は自然と使わなくなった。
94 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 08:16:02 ] >>92 さすがに、それはVC++でもNET 2003あたりから コンパイル通らないほうがデフォルトになった。 >>93 それをいうならアプリケーションハンガリアンではないのか?
95 名前:デフォルトの名無しさん [2007/11/05(月) 12:21:07 ] index が1000万あるとします indexごとにファイルを読みに行くとします このとき、ファイルを一つにまとめるのと、一つ一つ分けるのと、いくつか束にするのではどれが速度速いですか? ランダムに3個程度のindex値をアクセスすることにします
96 名前:デフォルトの名無しさん [2007/11/05(月) 12:29:25 ] 一ファイル当たり10KB以下として、indexは10万とします このときファイルサイズは最大1Gになります indexは、0から10万の数字で与えられるとします indexごとにファイルの位置を記録しておくか、index名のファイルを10万用意するかですが どっちが良いですか?
97 名前:デフォルトの名無しさん [2007/11/05(月) 13:00:49 ] あまり細かく分けると、クラスタサイズの制限から容量多く使ってしまいますね 10バイトしか記録しなくても512バイト程度使ってしまいますね
98 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 14:31:55 ] Unicode, ShiftJIS, EUC あたりを相互変換できる文字コードライブラリを探しています。 ・言語はCオンリー ・ライセンスがBSD以下のゆるさ ・サイズはなるべく小さめ ・ポータブル の条件に合うよさげなライブラリがあったら教えてください。 よろしくお願いします。
99 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:53:16 ] スレ違いでね?
100 名前:デフォルトの名無しさん [2007/11/05(月) 16:58:31 ] 配列の入力の時に,EOFだと-1入力で終了になりますよね? 改行で入力終了にしたいのですが,どうすればいいですか? 1 1 0 0 1 0 1 1 改行 で入力を終了したいです。 教えてください。よろしくお願いします。 //---- 配列入力 num = 0; do { scanf("%d", &arr[num]); } while ( arr[num++] != EOF ); // 改行は入力の終了 num--; // 有効な入力数
101 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 17:45:46 ] >>100 マルチすんなカス
102 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:23:00 ] >>100 char buf[MAXSIZE]; char *p; fgets(buf, 99, stdin); p = strtok(buf, " "); while(p != NULL) { arr[num++] = atoi(p); p = strtok(NULL, " "); }
103 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:24:02 ] >>100 訂正 char buf[MAXSIZE]; char *p; fgets(buf, MAXSIZE - 1, stdin); p = strtok(buf, " "); while(p != NULL) { arr[num++] = atoi(p); p = strtok(NULL, " "); }
104 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:26:35 ] 他の言語のソースを移植すれば良くね? サイズ小さいライセンスも気にしない
105 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:48:49 ] -Lオプションで指定したディレクトリのうち その中にある特定のディレクトリを参照させないようにするにはどうすればいいですか? たとえば -L/usr/local/lib と指定したもののうち /usr/local/lib/gcc-4.0.4 は参照しないようにする とかいう感じです
106 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:02:23 ] >>95-96 速度は実測が基本。 良い悪いの判断は本人にしかできない。
107 名前:デフォルトの名無しさん [2007/11/05(月) 21:07:59 ] 巨大なファイルのシーク時間と、ファイルのオープンに要する時間は一般的にどっちがかかるんですか? ファイルのオープンの方がコストは多そうですが
108 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:09:47 ] >>107 聞く前に試せよサル
109 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:20:47 ] >>107 聞く前に試せよサル
110 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:44:45 ] >>107 使用するファイルシステムによっても違うしだろうし、ファイルシステム上の断片化などの状態にも依る。 キャッシュに乗ってるかも影響するはず。 試せ。
111 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:21:46 ] C++でAPIを組んでいるのですが ttp://www.katsakuri.sakura.ne.jp/src/up29024.txt.html この項目を入れたら 0x00412984 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00090f44 を読み込み中にアクセス違反が発生しました。 とエラーが出るようになったのですが、どこがおかしいのでしょうか? 作っているプログラムの内容は、チェックボックスにチェックが入っているところにEDITボックスを表示する、と言う感じです。 選択した場所によってはうまく動作することもあります。
112 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:37:59 ] ぶった切り失礼します 文字列をlongに変換するstrtol()という関数ですが 失敗時の返り値が0なのはいいのですが、文字列が"0"だったときの区別のつけ方は 変換不可能な文字列へのポインタの格納先を準備してあげるしかないのでしょうか?
113 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:31:55 ] 自作関数作れば? long mystrtol(char *cary, char **ep) { if(!strcmp(cary,"0")) return 0L; return strtol(cary,ep,10); } こんなのとかさ
114 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:58:10 ] >>113 にツッコミたくてたまらない俺はまだまだ修行が足りないな。
115 名前:デフォルトの名無しさん [2007/11/06(火) 02:16:20 ] >>114 つっこんでやれよ、本人のためにもさ
116 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 02:16:44 ] sscanfとか、StrToIntExとか
117 名前:デフォルトの名無しさん [2007/11/06(火) 02:24:27 ] 893が75キロ VS 105キロの空手家 体重差 30キロの殴り合い映像 video.nifty.com/cs/catalog/video_metadata/catalog_071105039557_1.htm 店でNo4 ホスト VS 黒帯空手家 死闘の映像 video.nifty.com/cs/catalog/video_metadata/catalog_071104039294_1.htm イケメン ホスト VS ブルースリー ボコボコに殴る映像 video.nifty.com/cs/catalog/video_metadata/catalog_071103039028_1.htm 893 VS ブルースリー 対決映像 video.nifty.com/cs/catalog/video_metadata/catalog_071102038922_1.htm
118 名前:デフォルトの名無しさん [2007/11/06(火) 05:27:21 ] 算術命令圧縮って弱点あると思うんですが 例えば0 1の出現率が等しいとするとどのビット列も同じ確率になりますよね? データの並び順を考えないと駄目ではないですか? たとえば0000000000000000000000000000011111111111111111111111111111111などは 繰りかえし数を記録することでかなり圧縮できると思うのですが
119 名前:デフォルトの名無しさん [2007/11/06(火) 05:42:46 ] 算術命令圧縮ではなくて算術圧縮だったよ あと、文書を圧縮するならば前の1、2バイトごとに確率分布表を作って圧縮するといいと思うけど
120 名前:デフォルトの名無しさん [2007/11/06(火) 06:39:22 ] 算術の説明だと、1文字ずつの説明だけだけど、初めから5文字の分布を与えても出来るね 確率1%のものがあれば、2^(-7) = 0.0078125 だから小数点以下7桁程度を与えるのが良いと言うことになる ハフマン圧縮の一般化といえるね
121 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:49:45 ] class BaseClass{ public: int a; BaseClass(){}; ~BaseClass(){}; virtual void Func(){}; }; class SubClass : public BaseClass{ public: int b; void Func(){}; }; int main(){ BaseClass *pointer = new SubClass[2]; for(int i=0; i<2; i++) pointer[i].Func(); delete [] pointer; return 0; } これでエラー起こるの何故
122 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:53:35 ] >BaseClass *pointer = new SubClass[2]; 配列へのポインタはキャストしてはいけない
123 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:58:11 ] >>122 もし上みたいに子クラスのインスタンスの配列を親クラスのポインタに入れて使いたい場合どうしたらいいんですか?
124 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:04:50 ] 親クラスのポインタの配列を作れば良いじゃないか。
125 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:17:58 ] 申し訳ない… 具体的にはどんな書き方に…?
126 名前:125 mailto:sage [2007/11/06(火) 14:22:08 ] 自己解決しました ありがとうございました
127 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 17:52:46 ] そういうのも自己解決って言うのかw
128 名前:デフォルトの名無しさん [2007/11/06(火) 19:06:46 ] ディジタル技術検定の問題集で「二つの正の整数の積を求めるプログラム」の解説をお願いします。 二つの正の整数の積ということなのですが、二つの整数をかけるだけ(a*b)ではいけないのでしょうか? while文の処理がさっぱりわかりません。 よろしくお願いします。 #include <stdio.h> void main(void){ int a,b,prod=0,temp; printf("a="); scanf("%d",&a); printf("b="); scanf("&d",&b); if(a>b){ temp=a; a=b; b=temp; } while(a != 0){ if(a%2 == 1) prod +=b; a=a/2 b=2*b } printf("product of %d * %d = %d", a, b, prod); exit(0); }
129 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:31:10 ] ループ中の計算をシフトとビット演算で置き換えると 乗除の演算なしで掛け算が出来るなぁ…、なんて。
130 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:33:33 ] 燦然と輝くvoid main(void)
131 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:37:32 ] >>128 小学校で習った掛け算の筆算を二進数でやってるようなもんだ
132 名前:128 mailto:sage [2007/11/06(火) 19:40:53 ] >>129 こういうことですか? while(a != 0){ if(a%2 == 1) prod +=b; a=a >> 1 /* a=a/2 */ b=b << 1 /* b=2*b */ }
133 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 20:28:03 ] >>129 そこはコンパイラの最適化に期待ということでは? もっとも、これくらいならC/C++でもシフト使えということは同意。
134 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 22:35:19 ] というか、そこで*を使ってしまうと、 「じゃあ(a*b)でよくね」みたいな話になるから(w
135 名前:デフォルトの名無しさん [2007/11/07(水) 19:47:22 ] class hoge : public base { private: base* m_base; }; これって循環ですか?
136 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:25:07 ] 開発中によく見る記述ですが何か心配なことでも?
137 名前:デフォルトの名無しさん [2007/11/07(水) 20:58:33 ] 循環なら避けたいんですが、 循環ですか? hogeの定義にbaseが必要で でもhogeはbaseを持ってるので なんか循環っぽいなぁと。
138 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:13:18 ] ならお前の避けたい循環の意味をちゃんと書けやタコが
139 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:16:02 ] 知ってる人に聞ければいいです。 そもそも知らない人は 自分が知らないのに人に教えられるわけがないでしょう。
140 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:18:34 ] それじゃ、誰にも答えられないね。
141 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:20:44 ] >>140 全知全能の神光臨。
142 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:29:49 ] 循環じゃないよ
143 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:30:14 ] とりあえず循環参照が起こる可能性は充分すぎるほどに有るわな。 ただ場合によるので、具体的にやりたいことを示してくれないと問題点の指摘は出来ん。
144 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:33:34 ] baseの定義にhogeを必要としてたら循環定義
145 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:35:38 ] 循環ってのは class sage の宣言に class age を使ってて class age の宣言に class sage を使ってる場合。 よって循環ではないべ?