スレを勃てるまでもな ..
[2ch|▼Menu]
297:デフォルトの名無しさん
09/05/24 22:03:43
どうかなぁ。並列化考えたらmemcpyは不利な気がした。

298:デフォルトの名無しさん
09/05/24 22:09:07
どのデーター量なら>>295が一番早い

299:デフォルトの名無しさん
09/05/24 22:14:08
d 一個一個交換する方法でやってみます

こんな風にしてたんだけど何故か変な値になっちゃうんだよね。
memcpy(B,A[i],sizeof(float)*(n+1));
memcpy(A[i],A[i+j],sizeof(float)*(n+1));
memcpy(A[i+j],B,sizeof(float)*(n+1));

300:デフォルトの名無しさん
09/05/24 22:15:50
A[4][n+1]; B[n+1];としてね

301:デフォルトの名無しさん
09/05/24 22:16:02
クラスの2次元配列を用いるにはどう宣言すればよいでしょうか
具体的には、
class Complex {
public:
double re;//実部
double im;//虚数部
};
という複素数のクラスを用いて行列を作成したいのですが、メインで
#define SIZE 5
int main(){
Complex **comp_mat;
comp_mat = new Complex[SIZE][SIZE];
}
のようにしますと(*)[5]型は**型に変換できませんとエラーが出ます。

どのようにすればいいのかわからないので1次元で宣言して以下のように
アクセスしていました。(comp + i * SIZE + j )の記述がわかりにくいので
簡単にしたいのですが、よろしくお願いします
int main(){
int i , j ;
Complex *comp_mat ;
comp_mat = new Complex[SIZE*SIZE] ;
//compを(-1 , -1)の値で埋める
for( i = 0 ; i < SIZE ; i++ ){
for( j = 0 ; j < SIZE ; j++){
(comp + i * SIZE + j ) ->re = -1.0 ;
(comp + i * SIZE + j ) ->im = -1.0 ;
}
}
・・・・省略・・・・
}

302:デフォルトの名無しさん
09/05/24 22:20:57
>>291
ありがとうございます

303:デフォルトの名無しさん
09/05/24 22:42:23
>>293
std::swap(A[2],A[4])はどう?

304:デフォルトの名無しさん
09/05/24 22:52:58
C++で
fout << "Hello World" << endl ;
などでファイル書き込みができますが、
foutで複数ファイルへの書き込みを区別するにはどうすればいいのでしょうか

FILE *f_eng_p , *f_jpn_p ;
fprintf( f_p , "Hello World ") ;
fprintf( f_s_p , "こんにちは 世界") ;
のようにファイルポインタを2つ宣言してfprintfで行うのでしょうが、
fprintfは記述がめんどくさいのでどなたか知恵をお貸しください

305:デフォルトの名無しさん
09/05/24 22:54:40
すみません、上の f_p と f_s_p は以下の間違いです
FILE *f_eng_p , *f_jpn_p ;
fprintf( f_eng_p , "Hello World ") ;
fprintf( f_jpn_p , "こんにちは 世界") ;

306:294
09/05/24 23:04:25
>>303
配列へのポインタだから無理だろ。
だから>>294を提唱するぜ。

307:デフォルトの名無しさん
09/05/24 23:04:51
>>304
出力ストリームを複数持てばいいだけじゃないの?

308:デフォルトの名無しさん
09/05/24 23:15:46
>>303
それだとエラーでちゃいます。swap(A[2][x],A[4][x])の方法で上手くうごきました。
あと、すみませんがもう一つ質問お願いします。

void func(二次元配列を受け取る){
  処理
}

int main(){
  float A[x][y];
  A[0〜x][0〜y]に値を代入;
  func(?);
  return 0;
}

ここで関数funcはA[4][5]でもA[99][99]でもどんな大きさの二次元配列でも
受け取れるようにしたいんですが、関数funcの宣言の引数と、main関数内で
関数funcに渡す引数はどのようにすればいいですか?

309:デフォルトの名無しさん
09/05/24 23:29:22
それは無理なので
std::vector< std::vector< float > >
使っとけ

310:デフォルトの名無しさん
09/05/24 23:33:40
void func(float *a, int m, int n){
 処理
}

int main(){
  float A[x][y];
  A[0〜x][0〜y]に値を代入;
  func((float*)A, x, y);
  return 0;
}


311:デフォルトの名無しさん
09/05/24 23:34:59
ありがとうございます。無理なんですね。どうりで調べてもA[][5]とかしか出てこないわけだ
C言語でしたいのでA[]にしてA[y*x+y]でアクセスすることにします。

312:デフォルトの名無しさん
09/05/24 23:45:01
>>311
前にも同じような質問が出ていましたが、最近のCの規格では

void func (int m, int n, float a[m][n]) { 処理 }

といった書き方ができますよ。mとnは呼び出し側で決められます。

【初心者歓迎】C/C++室 Ver.65【環境依存OK】
スレリンク(tech板)
>>836 あたりからの書き込みにも情報があります。

313:デフォルトの名無しさん
09/05/24 23:57:32
>>312
これは知らなかった。でも、VS2008でやってみたらエラー出て無理だった

314:デフォルトの名無しさん
09/05/24 23:59:01
マイクロソフトはC99シカトしてます。

315:デフォルトの名無しさん
09/05/25 00:04:33
0Xどうするんだろうね。

でも、C++/CLIはもはやC++なのかどうなのかも怪しいw

316:デフォルトの名無しさん
09/05/25 00:19:10
>>314
VS2010でauto、decltype、λ式、右辺値参照、static_assertは取り敢えず入れる
予定だそうだ

それ以上のC++0x対応は今の所未定

317:デフォルトの名無しさん
09/05/25 00:29:27
C++ なんだから配列には vector 使おうよとか
配列の配列をポインタのポインタに置き換えられないことは
大概の教科書で懇切丁寧に説明しているはずなのでもう一度教科書読んでねとか
全力でマクロは避けろ( C++ Coding standards )とか
なぜに FILE 構造体?とか

いろいろ思った^^

318:デフォルトの名無しさん
09/05/25 00:37:58
>>317
その辺りはD&Eを読んでもらえば歴史的経緯がよくわかる

Cは一人、いや二人の人間が独善で作った言語だが
C++はコミュニティに属する数多くの人の意見を元に作られてる

中心人物は禿だったがもはや禿が一人で作ったC++とは絶対に言えまい

319:デフォルトの名無しさん
09/05/25 00:45:46
>>301
動的二次元配列の作成と削除は
Complex **comp_mat = new Complex *[SIZE];
for ( size_t i = 0; i != SIZE; ++i )
comp_mat[i] = new Complex();
for ( size_t i = 0; i != SIZE; ++i )
delete [] comp_mat[i];
delete [] comp_mat;

でも、C++でこんなことしちゃらめ。

320:デフォルトの名無しさん
09/05/25 00:58:46
>>319
なんでダメなの?
俺はよく使ってるぜ
コンストラクタとデストラクタにぶち込んでおけば十分じゃん

vectorを使う事もあるけど少なくとも速度が最大要求の
科学技術計算では>>319の方法をよく使うぞ

321:デフォルトの名無しさん
09/05/25 01:13:03
速度重視ならクラスで包んじゃダメでしょ。

・・・それはさておき、C++のモダンなスタイルは可読性重視になってるからっていう弱い理由。
もちろん、わかって使う分には問題ないよ。


322:デフォルトの名無しさん
09/05/25 01:19:41
「速度が最大要求」ならクラスはおろか関数呼び出しもNGでしょ^^
なにより new と delete 自体が遅い。
memcpy を使うほうが一般的。
どうしても C++ ライクに書きたいなら、せめて allocator クラス使おうよ。


323:デフォルトの名無しさん
09/05/25 01:22:42
memcpy じゃなくて malloc の間違いでした^^スマンコ

324:デフォルトの名無しさん
09/05/25 01:38:26
そもそも速度優先なら、そんなに頻繁にメモリの確保/解放はしない。
どうしてもって言うのなら、自前でメモリ管理する。

325:デフォルトの名無しさん
09/05/25 01:38:35
>>321-322
いや速度重視ならmallocもそのままでは使わないだろ。自前でプールとかしてさ。

326:デフォルトの名無しさん
09/05/25 01:41:30
だな。つか new 遅すぎ。

327:デフォルトの名無しさん
09/05/25 01:45:08
っていうかC++が速くない
Cより5%遅いが開発の指標だったから

328:デフォルトの名無しさん
09/05/25 01:51:20
OCN規制で携帯でしか書けないのが辛いぜ。

329:デフォルトの名無しさん
09/05/25 01:53:35
支援

330:デフォルトの名無しさん
09/05/25 02:56:08
これlj(x)の分子が0になっちゃうんだけど、これで合ってるの?

331:デフォルトの名無しさん
09/05/25 02:56:25
Wikipedia項目リンク

URL忘れてたこれ

332:デフォルトの名無しさん
09/05/25 06:04:25
なんか一気にレベル低くなってね?

333:デフォルトの名無しさん
09/05/25 09:36:57
※スレを勃てるまでもない低俗なC/C++の質問はここでお願いします

334:デフォルトの名無しさん
09/05/25 19:27:15
C++で文字列を入力し、そこに指定されていた文字が含まれている場合、そうでない場合に分けて処理を行いたいです。
どう書けばいいでしょうか?
文字列はアルファベットなのですが、
指定するすべての文字についてif,elseifで判別するしかないのでしょうか?

335:デフォルトの名無しさん
09/05/25 19:31:35
>>334
そうだよ

336:デフォルトの名無しさん
09/05/25 19:45:53
>>335
ありがとうございます。

もう一つお願いします。

たとえば、
abddみたいな文字列があって、
先頭の1文字づつ判別していきたいです。つまり、
1回目の処理はaについて、
2回目の処理はbについて・・・
のような感じです。
どう考えればいいでしょうか?

337:デフォルトの名無しさん
09/05/25 20:29:58
何をどう判別するのかわからん。
具体的な入力例と、期待される結果を示してくれ。

338:デフォルトの名無しさん
09/05/25 20:45:19
>>337
アルファベットと書きましたが、半角英数すべてで、
accaと入力したとすれば

aが1個存在するので coutで1と出力
cが2個存在するので coutで2と出力
aが1個存在するので coutで1と出力
みたいな感じです。

よろしくお願いします。

339:デフォルトの名無しさん
09/05/25 21:03:30
#include <iostream>
#include <string>
using namespace std;
int main(){
    int n = 0;
    string s;
    cin >> s;
    for(int i=0; i<s.size(); i++){
        n++;
        if(s[i]==s[i+1]) continue;
        cout << n << endl;
        n = 0;
    }
    return 0;
}

340:デフォルトの名無しさん
09/05/25 21:40:58
ファイル操作にはいろいろとエラーチェック用のメソッドが用意されてますが、例外機構をつかわない理由はあるのでしょうか?

341:デフォルトの名無しさん
09/05/25 23:11:06
例外を使いたくない環境ってのが結構あるからかも

342:デフォルトの名無しさん
09/05/26 22:31:02
C言語そのものの質問とはちょっと違うのですが#ifdef,#ifndefに対応する#endifを見つけて、
どれとどれが対応しているかのコメントを追加するようなツールは無いでしょうか?


//////////入力///////////
#if AAA
...
#if BBB
...
#endif
...
#endif

///////////出力///////////
#if AAA
...
#if BBB
...
#endif //BBB
...
#endif // AAA


343:デフォルトの名無しさん
09/05/26 23:16:37
>>342
知らないなぁ。

俺は大抵はコメントを毎回記載しちゃう派だし。
あるいはエディタの機能で対応する#〜に飛んだりするし。

良い課題として作ってみてよ。
そして是非とも公開してくれ!

344:デフォルトの名無しさん
09/05/27 17:04:28
charで配列の要素数を変数にしています。
cinで入力後、この要素数の最大値を調べたいのですがどうしたらいいでしょうか?

345:馬牛
09/05/27 17:14:21
C++です。
a=10,b=3,c=2として、!aかつb>cの戻り値、!aまたはb>cの戻り値はそれぞれどうなりますか?
よろしくです。

346:デフォルトの名無しさん
09/05/27 17:15:56
felse true

347:デフォルトの名無しさん
09/05/27 17:33:15
18時まで引っ張ろうぜw

348:デフォルトの名無しさん
09/05/27 17:44:52
>>345
君は、C++をやる前に離散数学を勉強することをお薦めする。

>>347
どこの誤爆だ

349:デフォルトの名無しさん
09/05/27 17:46:29
スレリンク(tech板:346番)
これだろ

350:デフォルトの名無しさん
09/05/27 18:03:03
https通信をOSによらずに行いたいと思っているのだが、手の込んだことするのは
面倒になりcurl.exeを呼び出すことで解決することにした。
先頭の10KBとかは読めないと思っていたら対応していた。

351:デフォルトの名無しさん
09/05/27 21:26:13
main{

func1();

}


func1{
char array[100];
array[1] = 10;

func2();

}

func2{

char sum[10];

sum[0] = array[1];
}

このようにプログラムする場合、func2にてarray[1]をセットする場合、
グローバル宣言するしかないのでしょうか?

できれば、main内でfunc1が終了した時点でarrayで使用していた変数を消滅させたいのです。
メモリ使用量を少なくする意味で

352:デフォルトの名無しさん
09/05/27 21:29:16
func2(array[1] );

353:デフォルトの名無しさん
09/05/27 21:31:49
>>350
何のことを言っているのだい?
curl.exeはWindows専用ではないのかい?

354:デフォルトの名無しさん
09/05/27 21:36:15
>>352

func1{
char array[100];
array[1] = 10;
array[2] = 5;

func2();

}
func2{

char sum[10];

sum[0] = array[1];
sum[1] = array[2];
}

こうだった場合は、func2();
の中は何になるのでしょうか?

355:デフォルトの名無しさん
09/05/27 21:39:11
>>354
参考書とにらめっこしてこい。 コードの書き方からしてお前は根本的に理解できていない。

356:デフォルトの名無しさん
09/05/27 21:48:55
すみませんお願いします

357:デフォルトの名無しさん
09/05/27 21:50:33
353
SYSTEMの中身を対応するのに変える MACでもUNIXでもあるはず
curl.hの使い方がわかればいいんだけど、メモリやファイルに読み書きするのに
専用の関数を用意しなければならず難しかった。
それなら直接exeを動かしたら簡明と思った。

358:デフォルトの名無しさん
09/05/27 21:51:13
func2(array);

359:353
09/05/27 22:57:24
>>357
UNIX系でも〜.exeって名前なの?


360:デフォルトの名無しさん
09/05/27 22:59:06
>>354
お前ふざけてんの?
何言ってるの?
スレタイ読めよ、ここはC/C++の質問部屋だぞ!!
そんな謎の言語は知りません!


361:デフォルトの名無しさん
09/05/28 02:25:31
質問します。

Windows環境で、とあるC++用ライブラリ hoge.lib があります。
このライブラリには、関数を呼び出すためのヘッダファイル hoge.h が用意されていますが、
実際のソースは提供されていないものとします。
また、ライブラリ内部だけで使われている関数は、hoge.h には記述されていないようです。

さて、このライブラリには名前空間は設定されていません。
そのままでは使いにくいので、Hoge::〜 という名前でライブラリの関数を呼び出せたら便利だと思いました。

この状況(*.h と *.lib のみ)で、ライブラリの関数に名前空間をセットすることは可能でしょうか?


362:デフォルトの名無しさん
09/05/28 06:25:28
>>361
君がhoge_ns.hとかいうヘッダを自作して、
hoge_ns.hでは
namespace Hoge
{
inline int bar(int x)
{
return bar(x);//hoge.hの。
}

//...etc
}
のようにラップしたらだめかな?

363:デフォルトの名無しさん
09/05/28 06:30:49
c/c++で仕事している人たちに質問です。
基本情報技術者試験って、最低限必要な資格ですか?

364:デフォルトの名無しさん
09/05/28 07:01:46
5000円程度で取れるんだから、とっとけ。

365:デフォルトの名無しさん
09/05/28 07:09:15
生産性と資格には関連はないだろ。
未経験なら持っていたら考慮されるとか一時金や給料がすこしだけ良くなるとかだろう。

366:デフォルトの名無しさん
09/05/28 07:18:18
>362
ありがとうございます。
諦める決心がつきそうです。

367:デフォルトの名無しさん
09/05/28 07:29:43
webページを解析したいのですが、HTMLを整形済みXMLに変換するライブラリはありますか

368:デフォルトの名無しさん
09/05/28 07:57:22
自己解決しました。 
HTMLのパーサーがあるみたいでそっちのします。

369:デフォルトの名無しさん
09/05/28 10:06:12
くわしく

370:デフォルトの名無しさん
09/05/28 10:32:40
>>366
C用のライブラリだったら
namespace hoge {
extern "C" {
#include "hoge.h"
}
}
である程度ごまかせるんだけどな。

それにusing hoge::hogedata_t
とか#pragma comment(lib)とかも使って。

371:デフォルトの名無しさん
09/05/28 17:29:11
fstream& getLogFile() {
static fstream logFile;
return logFile;
}
として、非局所的なオブジェクトのコンストラクタ内でもログを取れる用にしたんですけど、
logFileの破壊と非局所的なオブジェクトの破壊はどちらが先に起こるか決まってるんですか?
非局所オブジェクトの破壊時にもログをとるのに使えるのか知りたいので。

372:デフォルトの名無しさん
09/05/28 19:02:56
フーリエ級数展開をするプログラム を作ったんだけど異常値しか出ないのでどこが悪いか教えてください
↓のプログラムの場合はf(x)=x [xが0-5] , 0 [xが5-10] で波長が10でループするような式
//最初にxの値を入力してから
hani_suu = 2;//範囲の数
hani[0]=0.0; hani[1]=5.0; hani[2]=10.0; //(0〜5),(5〜10)という意味

double temp=0,temp_cos,temp_sin;

for(int j=0;j<hani_suu ;j++)//以下a0の計算
for(double i = hani[j];i<hani[j+1];i+=0.1)temp += 0.1 * kansuu(i,j);//積分計算   ※kansuu(i,j)はjが0のときf(x)=x,1のときf(x)=0を返す

for(int n=1;n<50;n++)//以下an,bnの計算 
{
temp_cos=0; temp_sin=0;

for(int j=0;j<hani_suu;j++)
for(double i = hani[j];i<hani[j+1];i+=0.1) //積分計算
{
temp_sin+= 0.1 * kansuu(i,j)*sin((2.0*PI*i*n)/10);
temp_cos+= 0.1 * kansuu(i,j)*cos((2.0*PI*i*n)/10);
}

cos_v[n] = temp_cos; //an
sin_v[n] = temp_sin;//bn
}

temp = temp/2.0; //以下a0+Σ(ancos+bnsin)
for(int n=1;n<50;n++)
temp = temp + cos_v[n] * cos((2.0* PI * n * x )/10) + sin_v[n] * sin((2.0* PI * n * x )/10);
//最終的なtempが答え
見にくいですがお願いします

373:デフォルトの名無しさん
09/05/28 19:05:24
勉強用に、シンプルな多倍長加算を作ってるのですが
もっとシンプルに出来ますでしょうか
効率は意識していません

string add(string l,string r){
int carry=0;
stringstream ss;
if(l.size()>r.size()){swap(l,r);}
reverse(l.begin(),l.end());
reverse(r.begin(),r.end());
int i=0;
for(;i<l.size();++i){
unsigned int tmp=(l[i]-'0')+(r[i]-'0')+carry;
if(tmp/10){carry=1;}else{carry=0;}
tmp%=10;
ss<<tmp;
}
for(int j=i;j<r.size();++j){
unsigned int tmp=r[i]-'0'+carry;
if(tmp/10){carry=1;}else{carry=0;}
tmp%=10;
ss<<tmp;
}
if(carry){ss<<'1';}
string ret=ss.str();
reverse(ret.begin(),ret.end());
return ret;
}

374:デフォルトの名無しさん
09/05/28 19:40:36
>>372
感覚で読むとfor ( ; i<hani[j+1]; )が臭うコードに見える。

>>373
C++は、よくわからないが、やりたいことはなんとなく伝わる。
for()は、二つに分ける必要があったのかな。
似たようなことをしているから、for()のなかで、if()するようなコードが浮かびそう。
引数を参照にしたり、const char *foo = bar.c_str()で添字アクセスとか
ただの高速化だけど。

375:デフォルトの名無しさん
09/05/28 20:17:36
ヘッダファイルでプログラムソースファイルを分割することができますが
ヘッダファイルも分割する方法があったら教えて下さい

376:デフォルトの名無しさん
09/05/28 20:20:20
ヘッダファイルはいくらでも分割できます。

377:デフォルトの名無しさん
09/05/28 20:38:31
VC++2008を使ってるのですが
自動修復情報の保存ってのが左下にでてしょっちゅう重いです
なんですかこれ

378:デフォルトの名無しさん
09/05/28 20:59:40
事故解決
URLリンク(blog.goo.ne.jp)

379:デフォルトの名無しさん
09/05/28 21:38:47
実際の数学みたいにxを数字にせずxとして計算するにはどうしたらいいですか?
例えば2x*3x=6x^2みたいな感じで計算して、あとで6x^2のxに色々な数字を代入
できるようにしたいんですが

380:デフォルトの名無しさん
09/05/28 21:54:57
関数電卓のソースを探して見てみよう!

381:デフォルトの名無しさん
09/05/28 22:08:34
ある関数内でnewして得たアドレスを返り値にして
それを外で受け取ったらそのまま、受け取らなかったらdeleteする
みたいな記述はどうやったらできますか?

382:デフォルトの名無しさん
09/05/28 22:39:54
>>381
受け取らなかったらとは、どういう状態?

383:デフォルトの名無しさん
09/05/28 22:50:55
>>382
pHoge = allocHoge(); // OK

allocHoge(); // 自動でdelete したい!

384:デフォルトの名無しさん
09/05/28 23:01:55
>>383
生のポインタじゃムリじゃね?
スマートポインタを使うとか。

385:デフォルトの名無しさん
09/05/29 00:23:19
wrap_allocHoge( void* p )的なものを外側に作って
p==NULLならそのまま削除
p!=NULLなら入れて返すとか


386:デフォルトの名無しさん
09/05/29 00:34:41
>>383
C++なら>>385に引数無しの関数をオーバーロードするのもアリだと思う

387:372
09/05/29 04:19:06
>>372では
for(double i = hani[j];i<hani[j+1];i+=0.1)temp += 0.1 * kansuu(i,j);//積分計算 
こんな風に小さい範囲を刻んで積分計算してるんですが
もっと精度を上げたり計算量を少なくするためにはどんな方法がありますか?

388:デフォルトの名無しさん
09/05/29 05:51:59
>>387
完全にスレ違いだろ。
数学スレに行ってくれ。

389:デフォルトの名無しさん
09/05/29 07:16:23
RPGの戦闘部分を作っています。
FFみたいなアクティブタイムバトル(パラメータのすばやさに毎秒1ずつ足して行き、規定値になったら行動)
というものですが、勝利判定はどこでどういう風にすればよいでしょうか?

行動が終わった時に、goto文で戦闘部分の処理を抜け出すのが一般的でしょうか?

390:デフォルトの名無しさん
09/05/29 07:24:55
goto文が一般的じゃない。break使え

391:デフォルトの名無しさん
09/05/29 07:48:35
>>390
ありがとうございます。危うく道を踏み外すところでした

392:デフォルトの名無しさん
09/05/29 19:50:28
STLにupper_boundとlower_boundってありますが
lower:指定した値"以上"の値が最初に現れる位置を返す
upper:指定した値"より大きい"の値が最初に現れる位置を返す
となっていて、どちらも指定した値以上の値が帰ってきます。

そうではなくて、指定した値を超えない最大の値を得たい場合
アルゴリズムを組み合わせたりして
それを簡単に行うような方法ってありますでしょうか

具体的に言うと
1 7 10という列に対して
upper/lower_boundに値2を与えると
どちらも7が帰ってきますが、
1が帰ってくるアルゴリズムはありますか

393:デフォルトの名無しさん
09/05/29 20:06:26
デクリメントすれば?

394:392
09/05/29 20:24:57
自己解決しました
find_if(v.begin(),v.end(),bind2nd(less<int>(),n));

395:392
09/05/29 20:38:47
すみません、解決していませんでした
デクリメントってこういうことでしょうか
vector<int>::iterator it = lower_bound(v.begin(),v.end(),n);
--it; //ここ(*)
int lower = *it;

確かにこれで期待した動作はするのですが
ちょっと気になるのは
(*)の箇所でイテレータが範囲外、例えばitが最初の要素だったりした場合
どう範囲チェックすれば良いのでしょうか
if(it)やif(it!=NULL)などは型チェックが通りませんし

396:デフォルトの名無しさん
09/05/29 21:07:16
begin()でもrend()でも使えばいいじゃない

397:デフォルトの名無しさん
09/05/29 21:43:34
includeファイルが増えてくると面倒なので
include_iroiro.h----------
#include "foo.h"
#include "bar.h"



#include "hoge.h"
----------------------
のように、よく使うものを全部includeするヘッダを使ってます
この場合includeしたcppで実際には使わなかったクラスなども無意味にコンパイルされるんでしょうか?

398:デフォルトの名無しさん
09/05/29 21:46:39
.h ということならYES


399:デフォルトの名無しさん
09/05/29 21:55:46
そうなんですか・・・ショック!

400:デフォルトの名無しさん
09/05/29 22:05:33
プリコンパイルヘッダを使えばいい

401:デフォルトの名無しさん
09/05/29 22:11:28
450 step -1 until 1 do
ってどういう意味ですか?

402:デフォルトの名無しさん
09/05/29 22:15:57
450が1なるまで-1しながらdo以下の処理を繰り返す??

403:デフォルトの名無しさん
09/05/29 22:23:14
while(条件){
cin >> x1 >> x2;
(以下if文)

のように記述して、ループさせています。
EOFでwhileのループを終了させたいとき条件はどう書いたらいいのでしょうか?

よろしくおねがいします。

404:デフォルトの名無しさん
09/05/29 22:24:33
>>402
ありがとうございます。
ということは、「1が53になるまで+1しながらdo以下の処理を繰り返す」っていうのは、
1 step +1 until 53 do
であってますか?

405:デフォルトの名無しさん
09/05/29 22:43:57
それC/C++じゃないじゃん。スレ違い

406:デフォルトの名無しさん
09/05/29 22:55:58
>>401
どこの言語だ。
最近スレ違いがおおいな。

407:デフォルトの名無しさん
09/05/30 10:46:34
VS2005proです
#pragma region
〜処理を記述〜
#pragma endregion
このおまじないは、どういう意味を持つのですか?教えてくださいエロイ人

408:デフォルトの名無しさん
09/05/30 10:48:14
>>407
折りたたみ機能

409:デフォルトの名無しさん
09/05/30 10:53:12
>>408thx
syntaxには関係ないものか、あまり役に立たない機能だな

410:デフォルトの名無しさん
09/05/30 11:24:58
templateを展開した後のコードを生成するようなフリーソフトってなんかいい感じのありますか?

411:デフォルトの名無しさん
09/05/30 11:39:14
すいません、質問です。
アマゾンで古本を販売していて
販売価格を簡単に改定できるソフトを探しています。
改定ソフトは.netフレームワークでプログラムが作られてるようなのですが
プログラミングの知識がまったくない素人が売ってるのを購入せず
同じようなものを作るにはどれぐらいの時間がかかりそうですか?

プログラム自体はアマゾンサイトから価格データを集めるのがメインで
それほど難しくなさそうに見えるのですが。(素人なので直感です)

価格改定ソフトの一例です
URLリンク(6plan.net)

やっぱりめちゃくちゃ難しいんですかね?

412:デフォルトの名無しさん
09/05/30 12:01:41
>>411
とりあえず君のプログラミングスキルを教えてくれ。
ここはC/C++スレだからC/C++のスキルに関しても。


413:デフォルトの名無しさん
09/05/30 12:06:15
>>412
すいません、プログラミング知識はゼロです。

コンピュータ用語がわかる程度
良く言ってシスアドレベルだと思います。

414:デフォルトの名無しさん
09/05/30 12:08:47
>>413
0からだと果てしなく険しいと思う。
少なくともC/C++でやるなら相当苦労しそうだ。

他の人の意見も聞きたいところだけど、
やるにしてもせめて初心者にやさしい超高級言語で挑戦したとして
果たして何ヶ月かかるだろうか。。。

415:デフォルトの名無しさん
09/05/30 12:15:27
プログラムの取得にかかる時間は個人差がある。
独学ならなおさら。

半年で5つの言語を習得してプログラミング言語自体を作ってしまう高校生もいれば、
いくら頑張っても途中で挫折する人間も大勢いる。

416:デフォルトの名無しさん
09/05/30 12:18:48
>>415
>半年で5つの言語を習得してプログラミング言語自体を作ってしまう高校生もいれば、
だれ?

417:デフォルトの名無しさん
09/05/30 12:44:48
>>411
業務時間内に作ろうと思ってるならやめた方がいい
よほどの天才じゃない限り買った方が安い

418:デフォルトの名無しさん
09/05/30 12:52:16
>>415-417

レスありがとうございます。
それほど難しいものなんですか。
おとなしく製品を購入することにします。

ちなみにシスアド程度の素人がプログラムを楽しもうと
思う場合、ExcelとかのVBAなら比較的簡単に習得できるものなんですか?
あくまでも趣味程度しか時間はさけませんので。

419:デフォルトの名無しさん
09/05/30 13:16:37
極端な例を出して話をはぐらかすやつって馬鹿なの?

420:デフォルトの名無しさん
09/05/30 15:04:51
char x1,x2;としてこれをwhileで繰り返し、if文でx1==x2の判定をしながら、
文字列のランレングス符号化をしたいです。
どう書けばいいでしょうか?

421:デフォルトの名無しさん
09/05/30 18:59:17
グローバル変数と性的変数ってどっちのほうがメモリ容量多く使うのでしょうか?
また、staticを何個も書くのはまずいですか?

422:デフォルトの名無しさん
09/05/30 19:00:00
静的変数の間違いでした。

423:デフォルトの名無しさん
09/05/30 19:25:54
>>421
たいていの場合、グローバル変数とstatic変数は同じ扱いになる
static変数を何個も書くこと自体は問題ない。
性能面、安全面で自動変数より劣ることはあるかもしれない。

424:デフォルトの名無しさん
09/05/30 19:32:11
グローバル変数のほうが、シンボル情報がオブジェクトファイルに含まれるので
.objなり.oなりが大きくなる

と全然意味の無いことを言ってみる

425:デフォルトの名無しさん
09/05/30 19:43:53
ヘッダーファイルの値をいくら変えても反映されません。
どうやらパソコンを起動してから最初に実行した時の値が以後ずっと使われているようです。
PCを変えて実行してみましたが、同じ不具合が発生しています。
原因がわかるかたいませんか?

426:デフォルトの名無しさん
09/05/30 19:53:43
日本語でおk

427:デフォルトの名無しさん
09/05/30 20:02:01
説明しようにも不具合の原因がわからなすぎて、上手く説明できません。

ソースファイルの更新はしっかり反映されるのに、ヘッダーファイルの更新は最初の一度しか反映されないのです。

428:デフォルトの名無しさん
09/05/30 20:05:58
その.hをincludeした.cで printfしてみれ
それでも反映されないのなら、コンパイラのバグじゃね

429:デフォルトの名無しさん
09/05/30 20:14:43
どうやら値事態はしっかり反映されているようです。
しかし、その値と変数を比較する部分が正しく動作しません。
友人と全く同じプログラムですが、実行結果が違います。(アカウントは違います。)

430:デフォルトの名無しさん
09/05/30 20:20:44
ヘッダーを書き換えた後にそれをインクルードしているソースはコンパイルしなおしているよな?
一応OSと環境(VC++とかgccとか)よろ

431:デフォルトの名無しさん
09/05/30 20:20:56
学校の課題は先生に訊きなさい

432:デフォルトの名無しさん
09/05/30 20:24:59
複数あるソースファイルのうち、その比較部分があるファイルにprintf文をつけたところ、値の比較が正しく行われるようになりました…。
当然、友人らはこのソースファイルには手をつけなくても正しく動作しています。
全くもって理解不能です。

433:デフォルトの名無しさん
09/05/30 20:32:11
こんな言葉がある
『プログラムは思ったとおりに動かない。書いたとおりに動くのだ』

434:デフォルトの名無しさん
09/05/30 20:37:43
printf文をつけることで関係無い部分が正しく動くようになったのですよ。
理解不能(^q^)

435:デフォルトの名無しさん
09/05/30 20:41:57
>>430の言ってることが答えな気がする
printf文を加えたソースファイルをコンパイルしなおしたことでヘッダファイルの変更が反映されたと

436:デフォルトの名無しさん
09/05/30 20:47:47
>>435
別のソースファイルにつけたときは正しく比較部分が正しく動かなかったです。
(ヘッダーで設定した数値は正しく表示された)

日本語が不自由ですみません。

437:デフォルトの名無しさん
09/05/30 20:58:48
そんなときにはソリューションのクリーン→ビルド

438:デフォルトの名無しさん
09/05/30 21:11:50
>>436
いやだから、別のソースファイルの時は今回直したソースファイルをコンパイルしなおしていないんじゃないか?ってこと

439:デフォルトの名無しさん
09/05/30 22:44:16
とりあえず環境、ヘッダとかのファイル名と実行したコマンドを書け。

440:デフォルトの名無しさん
09/05/30 23:53:16
C言語の質問です。お願いします。
{
int i;
char ch;
scanf("%d", &i);
printf("%dです。\n", i);
scanf("%c", &ch);
printf("%cです。\n", ch);
return 0;
}
というプログラムを実行し例えば4と打つと
4
4です。

です。
と表示されてしまいます。
何故、scanf("%c", &ch)は無視されるのでしょうか?
4
4です。
s
sです。
と言った具合に表示させたいです。

441:デフォルトの名無しさん
09/05/30 23:59:06
URLリンク(www.google.co.jp)

442:デフォルトの名無しさん
09/05/31 00:01:12
virtualってつけれるところは全部つけとけばおkなんですか?

443:デフォルトの名無しさん
09/05/31 00:12:38
>>440
4の次に入力された改行文字が、2回めのscanfで読み込まれるから。
scanf("%d%*c", &i);
のようにして、改行文字を1回めのscanfで読み込ませればいい。

444:デフォルトの名無しさん
09/05/31 00:21:25
>>441
>>443
ありがとうございました。
おかげさまで解決しました。

445:デフォルトの名無しさん
09/05/31 00:25:31
>>442
副作用としては、
・オーバーライドするつもりのない関数を間違ってオーバーライドする可能性がある
・多分、メモリ使用量が幾分増える
ってのがある。

446:デフォルトの名無しさん
09/05/31 03:57:21
Cの乱数をsrandとtimeを使って毎回違うようにするのは
わかったのですが、二つの乱数をほぼ同時に出す場合、どうすれば
その二つの乱数をバラバラにする事ができますか?

具体的には戦闘ゲームなのですが、
コチラの攻撃が1~30までで、相手も1~30までの値で
攻撃してくるときに、1~30までの値を返す関数を
srandで初期化してrand()%30+1の値を返すという風に作りました。
しかし、自分の攻撃値も上の関数でけっていし、それにほぼ同時
(すぐ次の行で)相手の攻撃値も決定しているのですが、そうすると
どうしても自分の攻撃値と相手の攻撃値が同じになってしまいます。
時間がほぼ同時ぐらいのタイミングで処理するとどうしても
このようになってしまうと思うのですが、どのようにすれば別々の値に
できるでしょうか?よろしくおねがいします。

447:デフォルトの名無しさん
09/05/31 04:04:51
srandで初期化するのは、プログラム中1回だけでいい。

面倒なら、srand呼ばないようにすればとりあえずランダムな値は取れる。

448:デフォルトの名無しさん
09/05/31 04:16:45
同じだったらもう一回randすればいいんじゃないの

449:デフォルトの名無しさん
09/05/31 04:30:35
乱数シードに IP アドレスとかプロセス ID とかを加算
てか同じプロセス内のコードか??? なら初期化は一回だけであとは rand を呼べばいい

450:デフォルトの名無しさん
09/05/31 05:18:53
質問なのですがお願いします。
c++、bccを使用しています。

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;

と二つの配列を作って、こんぱいる実行したら

「_             」

とうまく入力待ちになりました。しかし、

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;
array[1000][1000][5];

では、


 c:\bcc\test>      」

と表示されて、たぶん実行終了した状態になるのですが、
原因を教えてくださいませんでしょうか?おれがうんこなのでしょうか?

451:450
09/05/31 05:20:12
全力で間違えました。

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;
int array[1000][1000][5];

でうまくいかないのでしあt

452:デフォルトの名無しさん
09/05/31 05:23:32
領域確保しすぎてスタックオーバーフロー?
配列をグローバルにしてみよう

453:デフォルトの名無しさん
09/05/31 05:24:01
>>451
>int array[1000][1000][5];

これ単純に大きさを計算したら1000×1000×5×4=約19MBとなって
スタックのデフォルトの大きさ1MBを超えるから異常終了する

スタックを大きくするかstaticを付けてBSSに配置するかだな

454:デフォルトの名無しさん
09/05/31 06:35:37
Visual Studio 2005 Proですが
array<String^>^ getFilterName_St();
Bitmap^ sample_grab();
Bitmap^ sample_grab2(Bitmap^ bmp);
こういう書き方って、.NET対応CLIの実装ですよね、NativeなC/C++では使えないコードですよね。


455:デフォルトの名無しさん
09/05/31 08:37:19
うん

456:デフォルトの名無しさん
09/05/31 09:06:28
>>455Thx分かりました。
.NETのCLIって、C/C++のコードも混在することができるんですね、templateや関数オブジェクトがすらすら書けない俺には無用なものですね。

457:450
09/05/31 11:42:01
ありがとうございました。
mainの外に追い出したところ、何とか起動しました。
途中で強制終了されたけど。。。なんかでかい配列を扱うのはすごく大変ですね。

ありがとうございました!

458:デフォルトの名無しさん
09/05/31 13:25:55
ある動的配列の要素全てが0以下である
をループを抜ける条件としたいのですが、何か良い方法はありますか?

今はforで要素全てを判定させて、全て0以下なら
変数aを1、このaが1ならループを抜けるとしています

459:デフォルトの名無しさん
09/05/31 13:47:38
O(n)未満の方法はないんじゃないかな
なのでその方法がベスト
もし、STLに関数型言語のforallやexistsのようなものがあれば
記述的に楽は出来るだろうが
やる計算的には>>458の方法と同じになるし

460:デフォルトの名無しさん
09/05/31 13:49:41
Pstade.Ovenライブラリを使って

oven::forall(xs, _1 <= 0)
を終了条件にすればいい

ただしxsは対象である動的配列の型で、かつ
xsの型がsingle pass rangeのコンセプトを満たす必要がある
vectorやlistはこのコンセプトを満たす

461:デフォルトの名無しさん
09/05/31 13:52:40
>>458
それでいいんじゃないの?

あまりにも大量のデータを頻繁にチェックするというのなら、
配列に書き込む時点で値が0以下かどうかチェックするという方法もあるけど。
(配列への書き込みが大量に発生するようだと、これも効率的でなくなるが)

462:デフォルトの名無しさん
09/05/31 13:58:53
while( !isAllNegative(array, size) ) 〜;

isAllNegative(int *array, int size){
    for(int i = 0; i < size; ++i)
        if(array[i] >= 0)
            return false;

    return true;
}

463:デフォルトの名無しさん
09/05/31 14:00:15
ああ、そのほうが良いな。アホだった
あと、そのプログラム、条件>=じゃなくて>にしないと

464:458
09/05/31 14:31:22
ありがとうございます!
全部試してみますね

465:デフォルトの名無しさん
09/05/31 16:34:51
他人の作ったクラスを継承するのって危険ですかね?

466:デフォルトの名無しさん
09/05/31 16:37:52
継承する想定で設計しているならそうでもないんじゃないの。
まぁ作った奴のスキルがどれだけ信用できるかだが。

467:デフォルトの名無しさん
09/05/31 16:56:40
自分で定義したクラスでも意識してないと
Liscov Sutstitution Principleは簡単にぶっ壊れるのになにをかいわんやだ

468:デフォルトの名無しさん
09/05/31 17:06:56
プライベート継承しただけで壊れるんだっけ

469:デフォルトの名無しさん
09/05/31 17:09:19
女でプログラマは何割くらいいますか?

470:デフォルトの名無しさん
09/05/31 17:32:53
一割いないね。

471:デフォルトの名無しさん
09/05/31 17:42:00
トンクス 

472:デフォルトの名無しさん
09/05/31 17:42:25
女でプログラマで美人で性格いい人は何割ぐらいいますか?

473:デフォルトの名無しさん
09/05/31 18:55:38
本当に人口の半分は女なのか疑わしくなってくる

474:デフォルトの名無しさん
09/05/31 18:59:10
女優遇社会だからな。酷い男社会とは別の贅沢な環境で生活してるんだよ。

475:デフォルトの名無しさん
09/05/31 19:06:42
主夫になりたい

476:デフォルトの名無しさん
09/05/31 19:18:18
前にも質問したんですが、メモリをファイルに見せかける方法か、
ramディスクを動的に生成する方法ありますか。

477:デフォルトの名無しさん
09/05/31 19:21:25
DOSコマンドでファイルへ出力するものを直接メモリに入れたいのですが。無理でしょうか。
標準出力ではなく、ファイルへの出力の場合です。

478:デフォルトの名無しさん
09/05/31 20:06:40
mmapとか、MapViewOfFileとか、その辺を調べるといいかも。

ただし俺だったら出力関数にファイルに出力するかメモリに書き込むかを
指定するフラグをつけるけどな。

479:デフォルトの名無しさん
09/05/31 20:08:14
>>476
メモリマップドファイルというのがある
それ専用のWindowsAPIがあるから、他でもOSレベルのAPIがあるんじゃね

480:デフォルトの名無しさん
09/05/31 20:12:08
ファイルをメモリのように扱うのではなく、
メモリをファイルのようにしたいのですが。
メモリを借りてきて、Zドライブを作るとかです。
普通のドライブのようにアクセスする方法はないですか

481:デフォルトの名無しさん
09/05/31 20:14:51
えっ

482:デフォルトの名無しさん
09/05/31 20:14:55
---hoge.h---
class Hoge{
public:
メンバ関数;
private:
void *mMember;
};
-----------
--hoge.cpp--
namespace{
struct Member{hoge hg}; //コンストラクタでmMember = (void *) new Member; アクセスは(Member *)mMember
privateメンバ関数の代わりの関数;
}
メンバ関数;
-----------
めんどくさそうだけど、カプセル化にこだわるならこんな感じのほうがいいんでしょうか?

483:デフォルトの名無しさん
09/05/31 20:18:54
>>480
RAMディスク Windows
とかでぐぐれ。

484:デフォルトの名無しさん
09/05/31 20:21:30
>>482
こだわるならそんな感じだけど、そこまでこだわる必要があるケースは稀。

485:デフォルトの名無しさん
09/05/31 20:21:33
RAMディスクをプログラムが動いているときだけ生成して、終了したら解放する方法はないですか?
既存のDOS EXEで、出力がファイルのやつを直接メモリに格納して高速化したいです。

486:デフォルトの名無しさん
09/05/31 20:25:52
RAMディスクつくるソフトを制御して
起動時にRAMディスク作らせて、終了時にRAMディスク開放させればいいのでは?

487:デフォルトの名無しさん
09/05/31 20:29:44
汎用性がある方法はないですか
ソフトをインストールしてもらわないと出来ません

488:デフォルトの名無しさん
09/05/31 20:40:26
単に、バーチャルなファイルシステムをかますだけでしょ。作った方が早い

489:デフォルトの名無しさん
09/05/31 20:43:05
USBカメラから画像を取り込みたいんですが、よくあるUSBカメラを使うソフト
とかってどうやってるんでしょうか?

490:デフォルトの名無しさん
09/05/31 20:58:48
既存のDOS EXEって何よ?

491:デフォルトの名無しさん
09/05/31 21:14:14
>>489
USBカメラがそうなっているかは分からんが、TWAINという共通化インターフェースがある

492:デフォルトの名無しさん
09/05/31 21:19:51
カプセル化という物を勉強したのですが、一度しか使わない計算でも
関数を定義して別ファイルに値を渡し、戻り値をmainに渡すようにしたほうがよいのでしょうか?


493:デフォルトの名無しさん
09/05/31 21:22:02
ありがとうございます。TWAIN初めてききました
直接カメラのドライバをたたいてるのかと思ってたけど、こんな便利なのがあったんですね

494:デフォルトの名無しさん
09/05/31 21:34:23
>>492
必要に従いカプセル化する。何でもかんでもカプセルにして密閉化すると。
オブジェクト指向原理主義者になるw

495:デフォルトの名無しさん
09/05/31 21:39:04
>>492
突き詰めると決着が付かないような議題
個人的にはほんの数行(最大4行ぐらい)で、そこでしか計算しないんだったら埋め込む
ただ
>関数を定義して別ファイルに値を渡し、戻り値をmainに渡す
が何を言ってるのかがわからなくて心配

496:デフォルトの名無しさん
09/05/31 21:51:10
>>492
それはカプセル化というよりはリファクタリングに関係してるように思う
俺の場合、ある処理を2回行うようになった時点で関数化する
逆に1回しか使う場所がないのに無駄に抽象化した関数は定義しないようにしている
C++の抽象化能力では、これは常に出来ないのは若干悩みの種

カプセル化は、ライブラリのように
他人もそのコードを使うケースで意識すればよいと思う

497:デフォルトの名無しさん
09/05/31 21:54:50
>>477
出力ファイル名にCONを指定して標準出力へ出せるようにならない?
それで動くなら、あとはリダイレクトできるでしょ。

498:デフォルトの名無しさん
09/05/31 22:01:18
>>494-496
ありがとうございます
一人だから問題ないのですが、逆に指摘してくれる人がいないのが難点です


499:デフォルトの名無しさん
09/06/01 00:08:32
スタイルの問題で答えはないと思うけど、マクロってインデントするべきかな?

#ifndef CLASS
 namespace Name
 {
  class Class
  {
  public:
   foo bar();
   #ifdef _DEBUG
    hoge fuga();
   #endif
  }
 }
#endif

#ifndef CLASS
namespace Name
{
 class Class
 {
 public:
  foo bar();
#ifdef _DEBUG
  hoge fuga();
#endif
 }
}
#endif

悩む・・・

500:デフォルトの名無しさん
09/06/01 00:26:03
#ifndef CLASS
なんたらかんたら
# ifdef _DEBUG
なんたらかんたら
# endif /* _DEBUG */
なんたらかんたら
#endif /* CLASS */
とやるのが普通かな。

プリプロセッサディレクティブは、行の先頭を#で始めなければならない。
規格のどのセクションだったかもう覚えてないけど。

フリーソフトウェアのソースを読んで勉強したら良いかもしれない。

501:デフォルトの名無しさん
09/06/01 00:53:26
そう?
手元のANSI C言語辞典には#の前に空白類があってもよいと書いてあるけど。
もちろんそんな書き方誰もしないということは同意だ。

502:デフォルトの名無しさん
09/06/01 00:59:31
#if foo
 #if bar
  #include <momo.h>
 #else
  #include <taro.h>
 #endif
#endif

のような例はよくみかける。 

503:デフォルトの名無しさん
09/06/01 01:25:41
自分は普段はこう書くな。

#if foo
# if bar
# include <momo.h>
# else
# include <taro.h>
# endif
#endif

行頭に#があったほうが見た目わかりやすいと思う。




504:503
09/06/01 01:27:01
#if foo
# if bar
#  include <momo.h>
# else
#  include <taro.h>
# endif
#endif

こうな。


505:デフォルトの名無しさん
09/06/01 01:36:32
Windows98のメモ帳でのプログラムの実行の仕方を教えて下さい
因みに入力したのはC言語のprintf何たらの簡単なプログラムです


506:デフォルトの名無しさん
09/06/01 01:41:44
書いたコードをここに貼り付けて、右下のボタンを押せ。
URLリンク(codepad.org)


507:デフォルトの名無しさん
09/06/01 05:53:03
>>502
俺もそう書くわ。
特に多いのが
#ifndef __BORLANDC__
 高度な処理;
#else
 低度な処理;
#endif
みたいにコンパイラで処理を分けたりとか、あとはデバッグの時かな。


508:デフォルトの名無しさん
09/06/01 06:27:58
1.下の多重ループで「A」は何行何列に表示されるか.
for(j=1;j<=2;j++) {
for(k=1;k<=3;k++) {
printf("A");
}
printf("\n");
  }
2.下の多重ループで「A」は何行何列に表示されるか.
for(j=1;j<=5;j++) {
for(k=1;k<=4;k++) printf("A");
printf("\n");
  }

1は2行3列で2は4行5列ですか?



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5394日前に更新/231 KB
担当:undef