スレを勃てるまでもな ..
[2ch|▼Menu]
705:デフォルトの名無しさん
07/11/01 23:48:41
めんどくせーから、64bitOSにしちゃえよ

706:デフォルトの名無しさん
07/11/01 23:49:57
めんどくせーから、諦めちゃえよ

707:デフォルトの名無しさん
07/11/01 23:51:50
めんどくせーからDBにしとけ

708:デフォルトの名無しさん
07/11/01 23:56:27
>>703
> 横方向に層も必要で
おいおい、必要な情報は一度に開示しとけよ。

709:デフォルトの名無しさん
07/11/01 23:59:58
>>708
はい、すみません。

縦方向の層/横方向の層 でスライス作って計算するのが一番速そうですね。
始めは15GBの3次元の塊から、層を2次元配列で確保していくつもりでしたが

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

710:デフォルトの名無しさん
07/11/02 00:43:29
> (Aが1)、かつ(Bが2)以外に処理を実行するっていう場合どう記述したらいいんですか?

どーみても、
if ( (A==1) && (B!=2)) {
処理
}
だろ。

それとも日本語が不自由なのか?

711:デフォルトの名無しさん
07/11/02 00:45:03
668の例を見てそう言えるお前のほうが不自由

712:デフォルトの名無しさん
07/11/02 00:45:12
うは亀レス
日本語が不自由なんですね

713:デフォルトの名無しさん
07/11/02 00:45:41
もうその話題終わったよ

714:デフォルトの名無しさん
07/11/03 01:41:40
実体のまだないData型のpDataAというクラスが、ポインタで関数DataA_Setupにわたってきます。
DataA_Setupの中で、実体化(new)して、いろいろ値をつめます。
次に、このpDataAを、別の処理関数DataA_Modifyにわたして中身を書き換えるのですが、
DataA_Modifyのインタフェースが、Data型の参照を受けているのです。

int DataA_Setup(Data* pDataA)
{
pDataA = new Data();
// pDataAにいろいろ値をセット

    DataA_modify(ここが、Data型の参照になっている);



715:デフォルトの名無しさん
07/11/03 01:45:14
>>714の続き
で、DataA_modifyにpDataAを渡すには、どのように変換すればいいのでしょう。

Data rDataA = &pDataA;

とすると、
error: conversion from `Data**' to non-scalar type `Data' requested

とエラーが出ました。

716:デフォルトの名無しさん
07/11/03 01:48:22
*pDataA でいいんではないの

717:デフォルトの名無しさん
07/11/03 01:51:06
ありがとうございます。

DataA_modify( *pDataA );

で通りますか?

718:デフォルトの名無しさん
07/11/03 02:35:35
ゲームに制限時間を付けたいんですが、どうすればいいのか
わかりません。


719:デフォルトの名無しさん
07/11/03 04:52:32
>>714
> 実体のまだないData型のpDataAというクラスが

「クラス」???
基本的なことを理解していないっぽいな。

> ポインタで関数DataA_Setupにわたってきます。

実体がないのに、どうしてポインタが渡せるんだ?

そして案の定、

> int DataA_Setup(Data* pDataA)
> {
> pDataA = new Data();

なんていう変なことをしている。

引数の型はData*ではなくData**か、Data*&にしないと。
pDataAに何を代入したって、DataA_Setupの呼び出し側には伝わらないぞ。

> Data rDataA = &pDataA;

わかってなさすぎ。

720:デフォルトの名無しさん
07/11/03 08:39:58
>>718
あなたがどんなゲームをどのように作っているのか判らないので「こうしなさい」などとおこがましいことは言えません。

721:デフォルトの名無しさん
07/11/03 16:40:26
>>714
>>719のとおりだなあ。
とりあえずC++ Primerと初心者本を買って理解することをお勧めする。

722:デフォルトの名無しさん
07/11/04 16:35:46
二次元配列で
foo[たて][よこ]
を走査したいのですが
どんなループが一般的にやられてますか?

723:デフォルトの名無しさん
07/11/04 16:39:32
ふつう

for(y = 0;y < たて;y++){
for(x=0;x < よこ:x++){
}
}

724:デフォルトの名無しさん
07/11/04 16:40:09
二重ループ

725:デフォルトの名無しさん
07/11/04 16:58:20
>>723-724
ありがとうございます。

あとすいません、言葉足りなくて
foo[][]を

行だけ取り出して、計算→次の行へ。
列だけ取り出して、計算→次の列へ

ということです。



726:デフォルトの名無しさん
07/11/04 17:01:18
>>725
for(y = 0;y < 列;y++){
for(x=0;x < 行:x++){
}
}

for(y = 0;y < 行;y++){
for(x=0;x < 列:x++){
}
}


727:デフォルトの名無しさん
07/11/04 17:05:07
…そうだ。そうですね
なんか変に考えすぎてました。

ありがとうございます

728:デフォルトの名無しさん
07/11/14 02:03:47
if(条件1){処理1}
else if(条件2){処理2}
else if(条件3){処理3}
else if(条件4){処理4}
else{処理5}

という処理をやりたいのですが、ネストは3までと決められているので、このままの形では書けません
なんとかスマートにネストを減らしたいのですがどうするのがいいのでしょうか
今は仕方なくこんな風に書いてるんですが、不格好だし面倒くさいし…

int flg;
if(条件1){flg=1}else{DoNothing();}
if(条件2){flg=2}else{DoNothing();}
if(条件3){flg=3}else{DoNothing();}
if(条件4){flg=4}else{DoNothing();}
if(条件5){flg=5}else{DoNothing();}
switch(flg)
{
 case 1:処理1;break;
 case 2:処理2;break;
 case 3:処理3;break;
 case 4:処理4;break;
 case 5:処理5;break;
 default:DoImpossible();break;
}

729:デフォルトの名無しさん
07/11/14 02:07:49
ごめんなさい
条件の方のflg=*にセミコロン忘れました

730:デフォルトの名無しさん
07/11/14 02:17:22
>>728
ネストが3ということだが、一番はじめに提示したソースはネストは1じゃないか?
普通かどうかしらんが、俺の感覚でネストが深くなるといわれると
if ( XXX ) {
if ( YYY ) {
if ( ZZZ ) {
}
}
}
ということだと思うんだが?

731:デフォルトの名無しさん
07/11/14 02:20:14
一応、回避策(?)も提示してみる。
int Check( void ) {
if ( 条件1 ) return 1;
if ( 条件2 ) return 2;
if ( 条件3 ) return 3;
if ( 条件4 ) return 4;
if ( 条件5 ) return 5;
return -1;
}
/**/
switch( Check( ) ) {
case 1://以下略
}

732:デフォルトの名無しさん
07/11/14 02:22:28
else if{〜}はelse{if{〜}}のことなので、最初のソースのネストは5なんです
正直納得いかないんですが、コードチェッカがそう言って怒るので仕方ありません

733:デフォルトの名無しさん
07/11/14 02:28:20
>>731
結局条件を数値に直してswitchしかないんですかね
elseは必ず書くことになってるので正直あまり変わらない気がします。ごめんなさい

734:デフォルトの名無しさん
07/11/14 02:33:01
そのコードチェッカーは必ず、例外なく、何があっても、守らなければいけないもの?
可読性や汎用性やテスト容易性まで犠牲にしてまで守る利点はあるの?
っていっても、守らなきゃならない状況ってのはあるんだろうけど・・・
関数分割をなるたけして、厳しい部分はswitchに落とすしかないかな?

735:デフォルトの名無しさん
07/11/14 02:40:00
>>733
elseはcase -1:でよくね?-1じゃなくてもなんでもいいけど。
条件の内容次第ではうまくいく場合もあるよ。
例えば、文字列比較によって関数呼び出しを行うなら・・・
typedef sturct {
const char * str;
void ( * func )( void );
} T_HOGE;
const T_HOGE Hoge[ 3 ] = {
{ "right", Func1 },
{ "center", Func2 },
{ "left", Func3 },
};
for ( cnt = 0; cnt < 3; cnt++ ) {
if ( strcmp( Hoge[ cnt ].str, input ) == 0 ) {
Hoge[ cnt ].func( );
}
}
条件が複雑になれば厳しくなるけど・・・

736:デフォルトの名無しさん
07/11/14 02:41:57
bool notYet = true;
if (notYet && condition1) {process1; notYet = false;}
if (notYet && condition2) {process2; notYet = false;}
if (notYet && condition3) {process3; notYet = false;}
...

737:1/2
07/11/14 05:31:15
#include <utility>
#include <vector>
#include <iostream>
#include <functional>

struct func_holder : public std::unary_function<void,void> {
  typedef result_type (*func_type)(argument_type);
  func_holder( func_type f ) : m_func(f) {};
  result_type operator()(argument_type) const { return (*m_func)(); }
private: func_type m_func;
};
struct pred_holder : public std::unary_function<int, bool> {
  typedef result_type (*func_type)(argument_type);
  pred_holder( func_type f ) : m_func(f) {};
  result_type operator()(argument_type a) const { return (*m_func)(a); }
private: func_type m_func;
};
template< class Pred, class Func >
struct dispatcher
 : public std::unary_function<typename Pred::argument_type, void> {
  typedef std::pair<Pred, Func> pair;
  typedef std::vector<pair> vector;

  void add(pair const& p) { v.push_back(p); }
  void operator()(argument_type a) {
    for (vector::iterator i = v.begin(); i < v.end(); ++i) {
      if ( i->first(a) ) { i->second();break; }
    }
  }
private: vector v;
};

738:2/2
07/11/14 05:34:32
void out1() {
  std::cout << "out1!\n";
}
void out2() {
  std::cout << "out2!\n";
}
bool pred1(int i) {
  return i > 0;
}
bool pred2(int i) {
  return i == 0;
}
int main() {
  dispatcher<pred_holder, func_holder> dis;
  dis.add( std::make_pair(&pred1, &out1) );
  dis.add( std::make_pair(&pred2, &out2) );
  dis(0);
}

.*_holderで指定する関数の方を変えてやったり、predのargumentとして状態を保持した構造体を渡すようにすれば
もっと複雑な条件でも使えるかもしれない
boostを使えば使い勝手が良くて読みやすいのが作れる?

739:デフォルトの名無しさん
07/11/14 16:11:34
>>734
必ず守らなければならないとしたときの利点:
  お前のように、ごちゃごちゃ文句言う奴に対応する時間を取らなくて済む

740:デフォルトの名無しさん
07/11/14 16:18:34
>>739
必ず守らなければならないとしないときの利点:
  お前のように、ごちゃごちゃ文句言う奴に対応する時間を取らなくて済む

741:738
07/11/14 17:59:11
よく考えるまでもなく激しく車輪の再発明してる気になるなぁ(それ以前にC++)
これと同じようなものが「boostにあるよ」とか「lokiにあるよ」とか「俺が作ったよ」とかあれば
是非情報をおながいします

あとこういうのって、デザパタ用語で責任の連鎖パターンっていうんですか?

742:デフォルトの名無しさん
07/11/14 21:50:49
コンソール上で動かすプログラムを作っています。
画面消去の方法で『ESC [2J』と解説されてるサイトが多いのですが、
XPではエスケープ・シーケンスが使えないようなのです。
他に画面消去に使えるような命令はないでしょうか?
コンソール画面上をスペースで塗り潰す以外の方法は無いのでしょうか。

743:デフォルトの名無しさん
07/11/14 21:51:38
プログラムを書くというのは、特殊化だと思う。
だから、汎用に書くのは間違い。

可読性を損なわないようにベタっと書くべき。

744:デフォルトの名無しさん
07/11/14 21:55:55
DRY原則は守ってね

745:デフォルトの名無しさん
07/11/14 22:09:17
>>742
Win32APIスレで質問すべし。

746:デフォルトの名無しさん
07/11/14 22:13:36
APIじゃなくてもclsでよくね?

747:デフォルトの名無しさん
07/11/14 22:18:55
そこでPDCursesですよ
単にコンソールIOのシステムコールをCursesのインターフェースでラップしただけだけど
そのまま使うよりは使いやすいような使いにくいような

748:デフォルトの名無しさん
07/11/14 22:25:05
血圧が高くて疲労感が取れません。

749:デフォルトの名無しさん
07/11/15 03:23:46
A.cpp
CSample *Sample = 〜〜〜


B.cpp
Sample->Loop();

という風にしたいんですが
どうにかしてB.cppでSampleオブジェクトを使う方法はありませんか

750:デフォルトの名無しさん
07/11/15 04:30:17
>>749
グローバル変数


751:デフォルトの名無しさん
07/11/15 04:45:48
windowsでC言語の開発環境を整えようと思いbcpadをダウンロードしようとしたのですが、
ベクターでダウンロードできなくなっており、自身で探してみたのですが、ダウンロードできるサイトが見つかりません。
ご存知の方がいらっしゃいましたら教えてください。

752:デフォルトの名無しさん
07/11/15 10:28:55
>>751
シェアウェアにするとかなんとか書いてるから
フリーのVC++2005expとSDKでやれば?
ANSIIの関数で複数の関数が
警告で「安全性がなんたらかんたら・・・」って警告
でるけど、別に関数の使い方間違ってなかったら
問題無いし、C言語の開発環境としては
VC++2005で十分気軽に使えるでしょ

753:デフォルトの名無しさん
07/11/15 21:04:22
配列の要素数をsizeof演算子で得ることができるということは理解できるのですが
配列のポインタから、そのポインタが指す配列の要素数を得ることはできるのでしょうか?

754:デフォルトの名無しさん
07/11/15 21:22:21
>>753
できない。

755:753
07/11/16 02:27:16
ありがとうござました

756:デフォルトの名無しさん
07/11/16 19:26:34
WikibookのMore C++ Idiomsって更新されてるの?
10項目ぐらい聞いたことも無い名称が出ててとても気になるんだけど・・・

757:デフォルトの名無しさん
07/11/16 19:29:58
更新履歴みればいいじゃない

758:デフォルトの名無しさん
07/11/17 19:50:02
コンストラクタなんですが

クラス名::クラス名() : クラス変数名(値){
// 以下コード
}

みたいな宣言をされているのですが、「:」以降の文法の意味が分からないのですが・・・。
クラス変数の型は、インクルードしている他のクラスです。

759:デフォルトの名無しさん
07/11/17 19:52:17
初期化してるだけ
class A{
 int a;
 A();
};
A::A(): a(1) {
}
の場合、Aのメンバ変数aは1で初期化される

760:デフォルトの名無しさん
07/11/17 20:02:35
なるほどです。
手持ちの本では載っていなかったので。
ありがとうございます。


761:デフォルトの名無しさん
07/11/18 00:07:18
その本が入門書であるなら窓から投げ捨てたほうがいい。

762:デフォルトの名無しさん
07/11/18 03:02:02
未だにこんなコード載せてる本がたまにあるから困る
間違いだからなこれ
A::A(){
 a=1;
}

763:デフォルトの名無しさん
07/11/18 07:34:46
int a=1 ;
ってのも間違いで、
int a(1) ;
にしろってか?

764:デフォルトの名無しさん
07/11/18 07:40:24
どこが?

765:デフォルトの名無しさん
07/11/18 07:54:07
>>762
間違いってほどでもないな。効率が悪いってだけで。

効率の悪さよりも保守性のために、
あえて初期化リストを使わないという選択もあるよ。

多数のコンストラクタがある場合、
同じ初期化リストをコピペすることになる。

コンストラクタ内で代入するのであれば、
共通した代入をprivateなメンバ関数にできる。

766:デフォルトの名無しさん
07/11/18 08:00:24
>>765
それはクラス設計が悪い

同じように初期化するメンバで1つクラスにして、それを継承すべし

767:デフォルトの名無しさん
07/11/18 08:53:40
>>763
その2つは同値な表記
A::A():a(1){}とA::A(){a=1}は意味が違う
まあint型くらいなら大して変わらんけどさ

768:デフォルトの名無しさん
07/11/18 10:02:10
>>766
アンチパターン

769:デフォルトの名無しさん
07/11/18 11:01:06
>>766
継承はやりすぎ
包含で十分

770:デフォルトの名無しさん
07/11/18 11:02:24
>>767
意味が違うのなら、どちらが正しいかなんて言えないよな

771:デフォルトの名無しさん
07/11/18 11:04:58
クラスだとコンストラクタとコピー代入演算子が違う意味を持っているから初期化子に馴れておいた方がいい。
さらにstatic/constが絡んでくると初期化子の方が合理的だと思えるようになるよ。

772:デフォルトの名無しさん
07/11/18 11:14:04
説明がド下手

773:デフォルトの名無しさん
07/11/18 11:52:42
C++での質問です

EA001 80
EA002 60
EA003 100
EA004 0
EA005 50

みたいな感じに学籍番号と整数値が与えられているテキストファイルを読み込んで、
整数値をソートして行ごとに並べ替えるプログラムを作りたいのですが
どのようにテキストファイルを読み込めばいいのか教えてください。

774:デフォルトの名無しさん
07/11/18 11:56:49
#include <fstream>

std::fstream f("ファイルのパス.txtxtxtxt", std::ios::in | std::ios::binary);

void *buff new char[適当な数];

f.read((char*)buff, 読み込むサイズ);

775:デフォルトの名無しさん
07/11/18 11:59:31
>>774
バイナリで読み込む必要ない
あとソートはSTLのmapとかsetだと読み込めばソート完了する

776:デフォルトの名無しさん
07/11/18 15:32:20
Visual C++ 2005 Express Edition で、PCのイベントログをとってくるには
どうしたらいいんですか?

777:デフォルトの名無しさん
07/11/18 15:59:26
>>776
Win32API質問スレへどうぞ。

778:デフォルトの名無しさん
07/11/18 16:01:51
>>776
Win32APIのReadEventLogを使う。

WMIあたりにもっと便利なのがあると思うが、
その質問の仕方を見ていると使いこなせるか疑問。

779:デフォルトの名無しさん
07/11/18 19:28:29
>>777-778
すみません。ありがとうございます。
おっしゃる通り、C言語すら知らないド素人です。
Win32APIとやら・・・Cの基礎を知ってないと駄目なほどのものを使わないと
できませんか・・・Windowsのイベントログだから考えてみればそうですよね・・
ありがとうございました。

780:デフォルトの名無しさん
07/11/18 22:11:53
Cの基礎を知らないでVisual C++でまともなプログラムを作るのはそもそも無理だろWin32APIがどうこういう前に

781:デフォルトの名無しさん
07/11/19 11:13:10
>>779
とやらって…。Win32APIは別にCの基礎じゃない。

782:デフォルトの名無しさん
07/11/19 23:49:41
>>781
日本語読めない人ですか?
779は Win32API = Cの基礎を知ってないと駄目なほどのもの って言ってるんであって
Win32API = Cの基礎 だなんて一言も言ってないだろ。

783:デフォルトの名無しさん
07/11/20 00:15:24
そんな必死にならなくてもいいのに

784:デフォルトの名無しさん
07/11/20 00:17:31
と言う事にしたいのですね:-)

785:デフォルトの名無しさん
07/11/20 01:44:13
いいえ、事実です。

786:デフォルトの名無しさん
07/11/20 02:25:22
1,2、たくさんとしか数えられないから、三行以上の書き込みが必死に見えるらしい。

787:デフォルトの名無しさん
07/11/20 12:34:12
>>782
Win32APIがCの基礎を知ってないと駄目なほどのもの?
笑わせてくれるぜ。

788:デフォルトの名無しさん
07/11/20 13:19:02
Win32APIがCの基礎を知ってないと駄目なほどのものって言ってるのは782じゃなくて779だろ。
782は781の読み違いを指摘してるだけ(煽ってるともいう)なのに、なんで782に絡むんだよw

789:デフォルトの名無しさん
07/11/20 13:23:47
そんなことよりみんなで乱交パーティしようぜ

790:デフォルトの名無しさん
07/11/20 13:29:54
そんなどうでもい話で盛り上がってんなよ

791:デフォルトの名無しさん
07/11/20 13:42:43
新しいネタもないし別にいいんじゃね?
どうしても話題変えたかったらなんか質問でもしなよ

792:デフォルトの名無しさん
07/11/20 15:18:08
C++で、stringに入力した文字列をint型に変換する方法が分かりません。
atoi()を使うとエラーが出てしまいます。

793:デフォルトの名無しさん
07/11/20 15:19:08
string s="123456";

cout << atoi(s.c_str());

794:デフォルトの名無しさん
07/11/20 15:29:00
string s="123456";
int i;
istringstream(s) >> i;

795:デフォルトの名無しさん
07/11/20 15:39:01
代入演算子で、整数変数に浮動小数点をかけ算するとき、ワーニング出ないようにするにはどうすればいいの。
int value=10;
value *= 0.5;


796:デフォルトの名無しさん
07/11/20 15:45:22
整数演算に直す。
value /= 2;

797:デフォルトの名無しさん
07/11/20 16:15:33
WindowsAPI使えば、スタンバイとか自分の好きな風にカスタマイズできますか?

PCのスタンバイ設定が気に入らないので。

798:デフォルトの名無しさん
07/11/20 16:16:42
レジストリだろう

799:デフォルトの名無しさん
07/11/21 08:51:30
double型・float型っていくらの整数まで厳密に保持できると保証されてるんでしょうか?
(桁が上がっていくと1の位を保持できなくなるわけですよね)
具体的にはunsigned intの最大値までそれぞれ保証しているのか知りたいのです。

800:デフォルトの名無しさん
07/11/21 09:29:21
>>799
それぞれの仮数部のビット数を調べればいい。
結論から言えば、一般的にdoubleは53bit、floatは24bitとなる。
従って、一般的な4バイト整数と較べた場合、floatは精度が足りないと言うことになる。

801:デフォルトの名無しさん
07/11/21 12:50:50
>>800
なるほど、納得です!
ありがとうございました。

802:デフォルトの名無しさん
07/11/21 22:31:20
保障はされてなかった気がする

803:デフォルトの名無しさん
07/11/22 01:15:33
質問です。
今自分はCからFORTRANにする事をしていて、
wgtinit(w,s1,inival,flag) /*initialize random weight matrix*/

drawrest(xps+50,50,200,200,yellow)

line(xp,250,xp,yp,white,0,0)
といのがCのプログラムの中で出てきたのですが、これはどういう意味で、
これをFORTRANで表現するにはどうしたらいいのでしょうか?


804:デフォルトの名無しさん
07/11/22 01:24:43
>>803
我々はエスパーじゃない。

805:デフォルトの名無しさん
07/11/22 01:27:41
>>803
お前みたいなのを雇うなんて会社の程度が知れてるな

806:デフォルトの名無しさん
07/11/22 01:39:29
>>803
>といのがCのプログラムの中で出てきたのですが、これはどういう意味で、
>これをFORTRANで表現するにはどうしたらいいのでしょうか?
それを調べるのがあんたの仕事だ。
調べずとも明らかなことだけなら猫にでもやらせればすむことだからな。

807:デフォルトの名無しさん
07/11/22 01:44:40
すみません超初心者なんですが質問いいでしょうか

1、ネットで見つけたあるサンプルをVisual C++ 2005 Express Editionというソフトで開くと
「古いバージョンのソフトで作ってあるから新しいソフトに書き直す」
というような内容のメッセージがでたのでOK、開けました

2、ビルドして実行しようとすると
”ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?”
というメッセージが出たのでOK

3、”プログラム’・・・.exe’を開始できません。指定したファイルが見つかりません。’
というメッセージが出てきて実行できません。

これってVisualC++2005だとこのソースはビルドできなくて結局使えないってことですか?
ゲームを作ろうとしたのにいきなり詰まってて困ってます。

808:デフォルトの名無しさん
07/11/22 01:47:35
>>807
2.の時点で間違っている。
ビルドエラーが発生してるのに実行しようとしているため。
ちゃんとビルドできるようにして来い。
わかんなかったらソースとエラー書いてくれ。
もしくは、そのサンプルがあるURLを書いてくれ。

809:デフォルトの名無しさん
07/11/22 02:02:47
CUIでのゲームプログラムを作ろうと思ってるんですが、
保存したデータ内容の編集はCの標準ライブラリのみで出来るのでしょうか。
追記は出来ても一部分のみ書き換えや削除等の方法が分からなくて。

810:809
07/11/22 02:04:00
説明不足でした。
ファイル処理の話です。

811:デフォルトの名無しさん
07/11/22 02:06:36
C以外でやった方が楽だし早いんじゃね?

812:デフォルトの名無しさん
07/11/22 02:08:50
>>809
ファイルの途中への挿入や削除は標準関数ではできない。
サイズが変わらないなら、方法はある。

813:デフォルトの名無しさん
07/11/22 02:09:58
>>811
仰るとおりですが、まだ授業でCの勉強しかしてなくて。
javaも独学で勉強してるもののいまいちピンと来ないんですよ…。

814:デフォルトの名無しさん
07/11/22 02:12:26
>>812
書き換えや削除するとサイズが変わってしまうのでは?

もし宜しければ参考のためにご教示願えますか。

815:デフォルトの名無しさん
07/11/22 02:12:50
テキスト操作したいならPerlとかPHPでいいんでない?
CとかJavaよりよっぽど楽に扱えるし、新しく勉強するに
してももそれほど時間かからないと思うよ

816:デフォルトの名無しさん
07/11/22 02:18:22
ファイルがそこまで大きくないなら起動時に一気にすべて読み込み、終了時に新規に出力しなおすとかじゃだめ?

817:デフォルトの名無しさん
07/11/22 02:18:59
// >>814
// for Example.
#include <stdio.h>
int main()
{
FILE * fp = fopen("foo", "w");
fprintf(fp, "a\nb\nc\n");
fclose(fp);

fp = fopen("foo", "r+");
fscanf(fp, "%*s");
fprintf(fp, "B\n");
fclose(fp);
return 0;
}

818:デフォルトの名無しさん
07/11/22 02:29:42
>>815
暇潰しにする程度なので、新たに勉強する気力がなくて…。
基本的に学校のPCでしてるので環境がないのもあるんですが。

>>816
その方法が一番確実そうですね。
内容はユーザ情報とスコアランキングくらいなので。

>>817
無知で申し訳ないんですが、%*sってどういう意味でしょうか。
*はワイルドカードって事ですか?
あと試しにコンパイル実行してみましたが特に変化が分からなかったです…。

819:デフォルトの名無しさん
07/11/22 05:37:26
>>803
> wgtinit(w,s1,inival,flag) /*initialize random weight matrix*/

wgtinit関数に引数w, s1, inival, flagを渡して呼び出す、という意味。
セミコロンがあるはずだが、写し忘れか?
こういうのはキーボードでタイプし直したりせず、コピペしような。

> drawrest(xps+50,50,200,200,yellow)
> line(xp,250,xp,yp,white,0,0)

この2つも同様に、drawrestやlineという名前の関数を呼び出している。

820:デフォルトの名無しさん
07/11/22 05:38:12
>>807
ダイアログに表示されたメッセージの内容を理解せずにYesやOkを押すような人は、
プログラムを書くのに向いてない。やめたほうがいい。

821:デフォルトの名無しさん
07/11/22 05:40:51
>>818
気力がなかったら、暇潰しで頭を使うようなことをせず、酒でも飲んで寝てたらどうよ。

> 無知で申し訳ないんですが、%*sってどういう意味でしょうか。

読み飛ばす・・・だったような。
こういうのは覚えておくものではなく、都度scanfのリファレンスで確認刷るものだよ。

822:デフォルトの名無しさん
07/11/22 07:14:43
>>818
知らないことは調べるだけの話。
それをする気がないのは「無知」ではなく「無気力」。
刻苦を厭う怠惰は人を虎に変えてしまうのだよ。

823:デフォルトの名無しさん
07/11/22 07:51:59
怠惰には、
無気力な怠惰 = メンドクサイから、何もやらない
と、
前向きな怠惰 = メンドクサイことをしなくても良いように努力・工夫する
がある。


824:デフォルトの名無しさん
07/11/22 19:50:07
本当に怠惰な人間ならこんな便所の落書きに長文書いていつ来るとも知れぬ無責任な名無しの回答を待つ前に
さっさとグーグル先生でも聞いて済ますと思う

825:デフォルトの名無しさん
07/11/22 21:19:04
*は代入抑止文字ですか。
変数に格納されないって事ですね。

ご迷惑おかけしました。

826:807
07/11/22 21:43:11
すみません。実行できました
VBではよくプログラムをしてるんですがCの勝手がわからなくって。
まだよく分からないのですが、
SDKとかDXライブラリとかの設定をしてなかったから見たいです
出力に
DxLib.exe': 'なんとかかんとか' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
等など沢山でているのは大丈夫でしょうか?

827:デフォルトの名無しさん
07/11/22 21:51:04
>>826
「何が」大丈夫なのか否かを知りたいの?

828:デフォルトの名無しさん
07/11/22 22:38:53
>>827
すみません
プログラムが変な動作をしたりしないのか、とか
バグじゃないのか、とか

プログラムに問題があるというメッセージなのか、それとも
これらのメッセージが出ているのは普通で問題はないのか
そういう意味です
なんだかVBと全然違うんですね

829:デフォルトの名無しさん
07/11/22 22:44:39
>>828
> プログラムが変な動作をしたりしないのか

基本的には、しない

> バグじゃないのか

基本的には、バグではない

> プログラムに問題があるというメッセージなのか

基本的には、違う

> これらのメッセージが出ているのは普通で問題はないのか

基本的には、普通で問題ない

デバッグのための情報がないので、シンボルデバッグできないぞ、というメッセージ。

830:デフォルトの名無しさん
07/11/22 22:45:37
自分が作ったクラスを入れるlistをsortするため、operator<を定義してるんですが詰まっています。

class Data{
  int x;
  int y;
public:
  Data(int a = 0, int b = 0){ x = a, y = b };
  int getx(){ return x; };
  bool operator<(const Data&);
};

bool Data::operator<(const Data& obj){
  return x < obj.getx();
}

const Dataのobjからgetx()を呼び出しているせいか(?)、以下のコンパイルエラーが出ます。
passing `const Data' as `this' argument of `int Data::getx()' discards qualifiers
getx()はxを変更しないのに、objをconstにしたらダメなのでしょうか?

831:デフォルトの名無しさん
07/11/22 22:55:52
>>830
int getx() const { return x;}

832:デフォルトの名無しさん
07/11/22 23:04:43
>>831
ありがとうございます。
const int getx()は試したんですけどねぇ。
この辺ややこしくなってるので勉強し直します。

833:デフォルトの名無しさん
07/11/22 23:58:10
>>829
本当に親切に答えてくださってどうもありがとうございます。
凄く助かったし安心しました。
これからもっと精進して頑張ってゲームを作ります。

834:デフォルトの名無しさん
07/11/23 05:31:13
8bit以外のchar型の処理環境ってどんなのがあるの?

835:デフォルトの名無しさん
07/11/23 15:12:38
#include <iostream>
using namespace std;

class Base
{
public:
static int m_iVal;
void SetValue(int val) { m_iVal = val; }
void Show() { cout << "m_iVal: " << m_iVal << endl; }
};
class Hoge1 : public Base{ };
class Hoge2 : public Base{ };

int Base::m_iVal = 0;

void main()
{
Hoge1 hoge1;
Hoge2 hoge2;

hoge1.SetValue( 100 );
hoge2.Show();
}

このプログラムで hoge2.m_iVal = 100 となるんですが よかったでしょうかね?
確認のためですけど


836:デフォルトの名無しさん
07/11/23 15:48:08
>>834
Wikipedia項目リンク

837:デフォルトの名無しさん
07/11/23 15:48:32
良い。

838:デフォルトの名無しさん
07/11/23 15:55:53
charは少なくとも8ビットじゃなかったか?

あーsizeofが1になることが定義されてるだけだっけか

839:デフォルトの名無しさん
07/11/23 15:58:11
RISCだと、longからcharまで全部32bitってのがあるんじゃね?

840:デフォルトの名無しさん
07/11/23 16:15:40
確かに規格上 char ≦ short ≦ int ≦ long だから全部同じサイズでも許されるな

841:デフォルトの名無しさん
07/11/23 17:00:18
>>838
char は1バイト、1バイトが何ビットかって? そんなこと、好きに決めて良いよ

842:デフォルトの名無しさん
07/11/23 17:09:35
>>838
少なくとも8ビットだよ。

843:デフォルトの名無しさん
07/11/23 17:31:57
初心者ですが、質問です。

#include <stdio.h>

int main (void)
{
int i = 1000, j = 40, k = 3000;
printf ("iが%dで、\njが%dで、\nkが%dです。\n",i,j,k);
return 0;
}

こう書いた場合はエラーにならないのに、こうする↓と、
printf ("iが%dで、\n
jが%dで、\n
kが%dです。\n",i,j,k);

構文エラー : ')' が、識別子 'jが' の前に必要です。
と言われて、コンパイルでエラーになってしまいます。
C言語では、;を文末をみなすため、どこに改行を入れてもいいと聞いていたのですが、
入れる位置が決まっているのでしょうか?環境は Visual C++ 2005 Express Edition です。

844:デフォルトの名無しさん
07/11/23 17:38:55
printf ("iが%dで、\n"
"jが%dで、\n"
"kが%dです。\n",i,j,k);

845:デフォルトの名無しさん
07/11/23 17:45:07
>>844
実行されました!
printfの""の中だと改行するには一度"で終わらせてあげないといけないんですね。
ありがとうございました。

846:デフォルトの名無しさん
07/11/23 18:08:01
>>845
printfに限らず、文字列は1行ごとに""で終ってないといけない。

847:デフォルトの名無しさん
07/11/23 18:14:05
プログラムの初心者ですがSQLを書いていますが、C言語と似てると
思いますので、わかる範囲で答えて頂けると助かります

以下のようなプログラムを書いたのですが、パソコンに複数のメールが
送られてきます。 メール送ったら終了のように直したいのですが、
どのようにしたら良いでしょうか


if ((fasterLWMAnow > slowerLWMAnow) && (fasterLWMAprevious < slowerLWMAprevious) && (fasterLWMAafter > slowerLWMAafter)) {
CrossUp[i] = Low[i] - Range*0.5;
Alert(Symbol(), " hit ");
SendMail("Mail Alert", Symbol()+" hitdesu ");


848:デフォルトの名無しさん
07/11/23 18:22:20
>>847
―これは、新しい釣りですね…。

849:デフォルトの名無しさん
07/11/23 18:26:58
>>847
100どんだけぇを軽く超えてるよ

850:デフォルトの名無しさん
07/11/23 18:32:18
すいません。まじめに質問したつもりですが、何がいけなかったでしょうか?

851:デフォルトの名無しさん
07/11/23 19:05:38
>>846
分かりやすく教えていただき、ありがとうございました!

852:デフォルトの名無しさん
07/11/23 19:18:01
>>847
そうなっていたんですか!
疑問が解決してすっきりしました、ありがとうございます!!

853:デフォルトの名無しさん
07/11/23 20:01:54
C++ってCと比べてどれだけ遅いのですか?

854:デフォルトの名無しさん
07/11/23 20:05:15
午後のこーだの作者曰く話しにならんぐらいとのこと

855:デフォルトの名無しさん
07/11/23 20:11:12
そりゃ
午後は
アセンブラァばりばり

856:デフォルトの名無しさん
07/11/23 20:40:08
ただし、一般的には機能を使おうとすればそれに応じてオーバーヘッドがかかるようになる。
Cと全く同じコードを書けば、Cと全く同じ速度にはなる。

まずはアセンブリ出力を見比べてみたり、実測することから始めようか。

857:デフォルトの名無しさん
07/11/23 22:02:16
>>853
昔は、コンパイラが生成するコードがC++の場合は遅く、
同じことをするにしてもCで書いたほうが速かったのだろう。

C++で書いたコードを、手作業でCに変換しても、
速度的には大して変化しないと思うよ。

すべてのクラスにvtableを持たせるようなことをしなければ、ね。

858:デフォルトの名無しさん
07/11/23 22:09:20
Cの範囲で書いていたら、C++としてコンパイルしても、生成されるコードは同じだよ。昔から。

859:デフォルトの名無しさん
07/11/23 22:28:17
一歩C++の領域に踏み入ると劇的に変わるけどね
デストラクタ一つで激変

860:デフォルトの名無しさん
07/11/23 22:30:12
C++ は参照とかインライン関数とかテンプレートとか駆使したら、
C と同じ速度でより安全なプログラムが書けると思う。

861:デフォルトの名無しさん
07/11/23 22:32:01
std::sortは比較操作がインライン展開できるから、
qsortよりも速くなりやすいなんてのは有名だよね。

862:デフォルトの名無しさん
07/11/23 22:35:56
そうそう。
まあ、qsort をマクロ化すれば C でも速いの書けるんだろうけど。

863:デフォルトの名無しさん
07/11/23 22:36:29
C++は例外に備えないといけないので
Cと同じコードを吐ける場面は少ない

864:デフォルトの名無しさん
07/11/23 22:37:14
テンプレートとか、STLとかどのくらい手間掛けているか不明なやつ使うと鈍くなる
charやintを直接あやつる範囲ではアセンブラに匹敵する

865:デフォルトの名無しさん
07/11/23 22:40:22
アセンブリ言語っつっても、
速いコード書くノウハウ無かったら
コンパイラの最適化の方が速かったりするもんな。

866:デフォルトの名無しさん
07/11/23 22:59:52
とりあえず初心者が動かせる3Dライブラリを開発しますか

867:デフォルトの名無しさん
07/11/23 23:08:38
>>859
それは、
不必要にデストラクタをvirtualにする
という愚をやらかしているだけだろ。

>>863
それはどこの何というコンパイラ?

例外をthrowする、throwされたものをcatchする、それにはコストは要するが、
例外中立なコードにはオーバーヘッドかからないと思うが。

868:デフォルトの名無しさん
07/11/23 23:10:33
catchしなくても例外が通り抜けるときにデストラクタを呼ばないといけない
さっきg++で試してみた
virtualかどうかは関係ない

869:デフォルトの名無しさん
07/11/23 23:10:35
デストラクタから virtual を外すのは
どうしても必要な時だけにするのが無難だべ。

870:デフォルトの名無しさん
07/11/23 23:17:58
逆だろ? 仮想関数を使う必要がある時だけ付けるよな。

871:デフォルトの名無しさん
07/11/23 23:19:40
馬鹿が飛びつくつまらない話が出てきちゃった

872:デフォルトの名無しさん
07/11/23 23:22:00
あとから仮想関数が必要になった時に付け忘れても知らんべ。

873:デフォルトの名無しさん
07/11/23 23:24:00
JavaやC#みたいに継承禁止ができたら、安心してvirtualをはずせるけど。

874:デフォルトの名無しさん
07/11/23 23:24:09
使われ方によって、virtualをつける必要があったりなかったりするC++は糞言語。

875:デフォルトの名無しさん
07/11/23 23:29:11
final/sealed 欲しいよなあ。
Final ですってコメントつけて非仮想デストラクタにすることはあるけど、
コメントだけじゃ心もとないよな。

876:デフォルトの名無しさん
07/11/23 23:31:57
クラス設計時点で継承の有無はわかるだろ。
あとから必要になったら、その時点で必要な修正を行えばいいと思うが。

877:デフォルトの名無しさん
07/11/23 23:33:10
C++しか知らないと、そういう物の考え方するんだ

878:デフォルトの名無しさん
07/11/23 23:33:54
うん

879:デフォルトの名無しさん
07/11/23 23:35:06
そういう意味で言うと、後から必要になったときでも修正の必要がないように、
デストラクタは必ずvirtualで、っていうのも、あながち間違った選択ではないと思える。

880:デフォルトの名無しさん
07/11/23 23:35:29
一体誰がどう使うクラスの設計してるんだ?

881:デフォルトの名無しさん
07/11/23 23:36:14
とりあえず virtual を付けとけば、
どういう変更が必要になろうが何の心配も要らない。
virtual を付けてないと、後の変更でバグを発生させる可能性がある。
その変更を行うのが自分とは限らないわけで、
どっかのバカが変な事をするかもしれない。
そう考えると、デストラクタを非仮想にするのは、
よほど非仮想にするメリットがある場合じゃないと怖くてできない。

882:デフォルトの名無しさん
07/11/23 23:37:33
C++って、そういう本質的でないところにも気を使わせるのが、糞言語たる所以だね。

883:デフォルトの名無しさん
07/11/23 23:38:31
速度やデータサイズは本質的な問題だよ。

884:デフォルトの名無しさん
07/11/23 23:39:30
じゃ、Javaなんてとてもじゃないが使えないってわけだ。

885:デフォルトの名無しさん
07/11/23 23:39:57
そこが本質的な問題になることがあるから。

886:デフォルトの名無しさん
07/11/23 23:41:02
速度やデータサイズを気にする必要があれば
Java なんてとてもじゃないが使えないってわけだよ。
気にする必要がないなら使えばいい。

887:デフォルトの名無しさん
07/11/23 23:42:07
道具は選んで使うべきだ

888:デフォルトの名無しさん
07/11/23 23:42:50
Cで書けばいいのに(^^

889:デフォルトの名無しさん
07/11/24 00:13:35
>>868
> catchしなくても例外が通り抜けるときにデストラクタを呼ばないといけない

当たり前だろ。

正常にreturnする時にもデストラクタは呼ばれるのだから、
それは、例外のオーバーヘッドとは言わないだろう。

>>869
それなら、virtual なんて書かずとも全てがvirtual で、
nonvirtual などと書いたものだけがvirtual でなくなる、
そういう言語仕様になるだろうに。

890:デフォルトの名無しさん
07/11/24 00:15:24
>>889
色々とお話しにならない。

891:デフォルトの名無しさん
07/11/24 00:19:11
>>872
それをもってして、C++は実行時オーバーヘッドが大きな言語だと言われてもなぁ。

>>873
継承できないようにするハックはあるけど、まぁ、オススメしないわな。
もっと別の方法で、管理すべきだろうな。

>>874
使い方によって、だろ。

キャストしたポインタでdeleteするような使い方をする側が、
デストラクタがvirtualであることを確認し、そうでなければ、
継承するのではなくメンバに持つように実装すべきなんだ。

892:デフォルトの名無しさん
07/11/24 00:21:26
>>890
具体的に

893:デフォルトの名無しさん
07/11/24 00:21:33
>>891
> それをもってして、C++は実行時オーバーヘッドが大きな言語だと言われてもなぁ。
別にそんなこと言っとらんわ。

894:デフォルトの名無しさん
07/11/24 00:22:58
>>891
> 継承できないようにするハックはあるけど、まぁ、オススメしないわな。
何か特殊なクラスを継承して、結局仮想関数が必要だったような気がする。

895:デフォルトの名無しさん
07/11/24 00:25:12
C++が糞言語であることには、誰も異論はないだろう。

使っている道具を糞だと言っているだけで、
それを使う人間が糞だと言っているわけでもないのに。

C++が糞言語だと言われて顔を真っ赤にするのは、
Stroustrupだけで、いいんじゃないか。

896:デフォルトの名無しさん
07/11/24 00:26:07
>>893
話の流れを無視した独り言だったのか。

897:デフォルトの名無しさん
07/11/24 00:26:23
>>889
下記の f と h のコンパイル結果を比べてみるといい

struct S { ~S(); };

int g();

int f()
{
S s;
g();
return 0;
}

int h()
{
S s;
return 0;
}

898:デフォルトの名無しさん
07/11/24 00:28:39
そういう言語仕様になるだろうにとか言われても、
今実際にそうなってないんだから、そういう事言っても無駄だよな・・・。

899:デフォルトの名無しさん
07/11/24 00:32:50
>>894
URLリンク(article.gmane.org)
これかな。

それなりのコンパイラなら、
vtableは作られるが、使われないので、リンカによって削除されるだろう。

900:デフォルトの名無しさん
07/11/24 00:35:05
>>898
そういう言語仕様になっていない
ということは、
というのが言語仕様を決めた人達は、
基本的にvirtual で例外的にvirtualではなくする
というポリシーではなかった、ということだね。

互換性のために、そういうポリシーだという可能性もあるが。

901:デフォルトの名無しさん
07/11/24 00:36:20
>>899
あ、別に仮想関数は要らんかったか。

902:デフォルトの名無しさん
07/11/24 00:37:39
>>900
デストラクタはデフォで virtual な方がいいけど、
他の関数は virtual がデフォである場合も nonvirtual がデフォである場合も
一長一短なので何とも言えない。

903:デフォルトの名無しさん
07/11/24 00:46:09
>900

Stroustrupに聞いてみ、と言おうと思ったら、本人のページに書いてあったわ。
URLリンク(www.research.att.com)

「多くのクラスは、基底クラスとして使われるように設計されないから」だって。
基底クラスは、「基底クラス」と意識して最初から設計しろ、ってことか。


904:デフォルトの名無しさん
07/11/24 00:47:20
仮想関数が1つでもあれば自動的にデストラクタもデフォで仮想関数になってくれればいいのにね。

905:デフォルトの名無しさん
07/11/24 00:55:29
>>904
virtualなメンバ関数があるからといって、virtualなデストラクタが必要とは限らないしなぁ。
結局、どのようにdeleteするのかは、そのクラスを使う人が決めることだから。

使う人が決めることなのに、作る人が決めないといけないのは変だがね・・・。

906:デフォルトの名無しさん
07/11/24 01:18:27
>>897
何が言いたいのか理解した。

~S()の呼び出しコードがhでは1個なのに対して、fでは2個になるってことか。
たしかにコードサイズは肥大するが、正常系のルートの実行速度には影響しないだろう。

ちなみに、
struct S { ~S(); };
というのは、
struct S { ~S() throw() ; };
とすべきだろうな。
デストラクタで例外をthrowしちゃいかんよ。

実行速度のために例外を(部分的に)使わないという選択もC++では可能だぞ。
int g() ;

int g() throw() ;
とすれば、f()やh()内では例外のためのコードが生成されない。

907:デフォルトの名無しさん
07/11/24 01:21:06
結局、C++は遅い と言っている人は、
Cと同じことをするコードをC++で書いて遅いと言っているのではなく、
Cよりも複雑なことをするコードをC++で書いて遅いと言っているわけだ。


908:デフォルトの名無しさん
07/11/24 01:30:37
>>907
少なくとも自分はそう言ってる
で、Cよりも複雑なことをしないのは難しい
まあ、Cとしてコンパイルできるコードを書けばいいだけだけど

909:デフォルトの名無しさん
07/11/24 01:42:10
stlとか複雑な機能を簡単にするやつを使うとCで書いた方が速い
たとえばstringなどは確保したときにサイズは確保されない もし文字列の最大長が分かっていればchar[]で取っておいた方が速い

910:デフォルトの名無しさん
07/11/24 01:43:35
> int g() throw() ;
> とすれば、f()やh()内では例外のためのコードが生成されない。

そうするとg()側でコストが掛かる
g 内のコードが例外を投げないことが明確なときはコストはないけど
例外指定を書けないCのライブラリを呼んでたりするとお手上げ

例外関連のコストを避けるのは難しいね、ということでした

911:デフォルトの名無しさん
07/11/24 01:45:25
>>909
そもそもクラスである意義を忘れないで下さい。

912:デフォルトの名無しさん
07/11/24 01:46:51
実際はアセンブラもCもC++もたいして変わらないが、まれにCよりアセンブラのほうが速く、まれにC++よりCのほうが速い
まれが重なると細かい手入れが出来るアセンブラが良くなる

913:デフォルトの名無しさん
07/11/24 01:52:57
>>908
そうか・・・

>>909
STLの使い方が悪いと、そうなるね。

そのstringの例だと、
固定長の文字列のクラスを作ったらどうよ。

>>910
え? Cのライブラリは自動的に throw() として扱われるっしょ。
CのライブラリがC++の例外をthrowすることなんて、できないんだから。


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

4721日前に更新/260 KB
担当:undef