スレを勃てるまでもないC/C++の質問はここで 6

このエントリーをはてなブックマークに追加
1 ◆wJkgNpeM0Y
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
http://pc11.2ch.net/test/read.cgi/tech/1230516307/
2デフォルトの名無しさん:2009/01/10(土) 15:07:21
いちおつ
3デフォルトの名無しさん:2009/01/10(土) 15:11:30
カコログってなんか意味あるの?
4デフォルトの名無しさん:2009/01/10(土) 15:40:33
意味があるかという問いかけをする者には何の意味もない
意味を見出す者だけがその存在を享受できる
5デフォルトの名無しさん:2009/01/10(土) 15:54:39
レスの最後に # をつけるのって何か意味あるの?
6デフォルトの名無しさん:2009/01/10(土) 15:56:52
# 別に最後とは限らないが……
意味を見出せない人には意味がない。
7デフォルトの名無しさん:2009/01/10(土) 16:21:32
レスの中に # をつけるのって何か意味あるの?
8デフォルトの名無しさん:2009/01/10(土) 16:29:09
あるよ。気取れる。
9デフォルトの名無しさん:2009/01/10(土) 16:30:30
今までVSでコンソールのプログラムを作っていたのですが、GUIアプリを作りたくなりました。
どういった環境でつくればいいでしょうか?
10デフォルトの名無しさん:2009/01/10(土) 16:32:08
> 意味を見出せない
勝手に自分基準の意味を付けられても、他人には通じないんだが・・・
ナンバーサインはナンバーサイン。何でつけたの?意味もなく
気分でつけるのはどうかと。んじゃ俺は・・・

♣でも付けようかしらん♪
11デフォルトの名無しさん:2009/01/10(土) 16:39:24
>>9
VSで作れば良いんじゃないの?
12デフォルトの名無しさん:2009/01/10(土) 16:39:34
まさか、わざわざ「ナンバーサイン」と言う御仁が本来の意味を知らないとも思えないのだが。
# 知らないならぐぐれとしか。
13デフォルトの名無しさん:2009/01/10(土) 16:41:04
>>11
expresseditionですが、できますか?.netってやつをつかうんですか?
14デフォルトの名無しさん:2009/01/10(土) 16:43:10
>>12
しかし、#ひとつであぼーんで切るわけでもなし、やくたいないことこのうえない。
15デフォルトの名無しさん:2009/01/10(土) 16:43:28
>>13
ちゃんとしたの買えば?
16デフォルトの名無しさん:2009/01/10(土) 16:46:20
>>15
買わないとできないのですか?
17デフォルトの名無しさん:2009/01/10(土) 16:49:47
>>9
VC++、VSでも導入しておくがよろし
€ スレタイからして、スレ違いかもしれないが
18デフォルトの名無しさん:2009/01/10(土) 16:50:19
>>16
いちおうできるよ
19デフォルトの名無しさん:2009/01/10(土) 16:51:02
>>16
expressはwindows.hとか入ってないんじゃね?
gccやg++でも出来るけど、ここで聞いているくらいの人物だとどうだろ。
20デフォルトの名無しさん:2009/01/10(土) 16:51:53
ATLとかMFCが使えないんですよね?
何か不都合がありますか?
21デフォルトの名無しさん:2009/01/10(土) 16:52:34
>>20
ATLとかMFCを使おうと思わなければ問題は無い
22デフォルトの名無しさん:2009/01/10(土) 16:52:35
>>19
入ってるぞ
23デフォルトの名無しさん:2009/01/10(土) 16:53:06
>>19
2005は入ってなかったけど2008で最初からはいるようになったよ
24デフォルトの名無しさん:2009/01/10(土) 17:38:43
えへ、乙
25デフォルトの名無しさん:2009/01/10(土) 18:01:46
stdio.h は standard ioの略ですよね
そういった省略前のものが載ってる書籍、或いはサイトってありませんか?
26デフォルトの名無しさん:2009/01/10(土) 18:22:31
略語には違いないけど、あまり気にするものじゃないと思うが・・・

Solarisならこういうのがあるよ
http://docs.sun.com/app/docs/doc/816-5173/6mbb8adq6?a=expand

27デフォルトの名無しさん:2009/01/10(土) 18:48:17
C++を始めたいです、お勧めの環境を教えて下さい。
マニュアル本についても知りたいです。
28デフォルトの名無しさん:2009/01/10(土) 20:47:34
auto_ptr や shared_ptr を使うためのヘッダって<memory>でOK?
29デフォルトの名無しさん:2009/01/10(土) 21:18:58
関数のデフォルト値って宣言のところに書いておかないと駄目なの?
定義のところに書いて使おうとすると。「関数に 1 個の引数を指定できません」
ってエラーが出てきてコンパイルできません。
いつも宣言ではfunc(int,int)みたいな感じで書いてるから変数書かないといけないの不便に感じる
30デフォルトの名無しさん:2009/01/10(土) 21:30:47
>>14
ム板にいながら。。
31デフォルトの名無しさん:2009/01/11(日) 03:06:29
>>28
いや違う
shared_ptrはboostだから
32デフォルトの名無しさん:2009/01/11(日) 03:18:07
>>28
あっているよ。

>>31
今はstd::tr1::shared_ptrという存在があって、それが<memory>に入っている(ことがある)。
ただし、ものによっては<tr1/memory>ということがある。

なお、<boost/tr1/memory.hpp>なら環境を識別して正しいヘッダをインクルードしてくれるほか、
持っていない処理系ではboost::shared_ptrのtypedefで対応という親切設計。
だったら、Boostを入れたならboost::shared_ptrを使えばいいという気もしてくるけど。
33デフォルトの名無しさん:2009/01/11(日) 07:41:12
>>31-32
サンクス
boost入れてなくてVC++2008だと<memory>で宣言、定義されていたです
34デフォルトの名無しさん:2009/01/11(日) 09:57:35
>>29
定義の方に書いたって、他のコンパイル単位には伝わらない。
だからこそ宣言を別ファイルにしてるわけで。
35デフォルトの名無しさん:2009/01/11(日) 11:07:23
>>34
それは、「関数呼び出しの仕組み」がある程度わかっている人にはわかるけど
初心者はそこまで考えが回らないのよ。
デフォルト引数の仕組みが「呼び出し側で不足する引数を補うものだ」とね。

つまり、わからないから
呼び出される側で「引数がない時には補う処理」をしている、と思いがちなわけ。
なにしろデフォルト引数を含む関数は呼び出される側だから。

そういう発想を持っているということを前提にすると
>>34の内容では意図が伝わらないし理解が深まるわけでもないのよ。
36デフォルトの名無しさん:2009/01/11(日) 11:15:48
あ、そうそう。

>>29
宣言で
void func(int, int = 100);
と宣言できるよ。
37デフォルトの名無しさん:2009/01/11(日) 13:51:47
はじめまして、今Cを色々勉強してるんですけど。
実行すると以下の文章がでてくるんですが
何を言われているのか意味が分からないので
良ければ教えてください・・・

7 [main] kak 2444 _cygtls::handle_exceptions: Error while dumping state (p
robably corrupted stack)
Segmentation fault (core dumped)

と出てくるんですが、コンパイルではエラーがでずに、実行するとコレが出る状況です
ググっても、参考書で調べても全く分からないのでよければ教えてください。
38デフォルトの名無しさん:2009/01/11(日) 13:58:00
スタック食いつぶしてる。でかい配列とってるとか?
39デフォルトの名無しさん:2009/01/11(日) 13:58:25
>>37
ソース挙げろ
4037:2009/01/11(日) 14:17:33
#include<stdio.h>

typedef unsigned long int ulint;

typedef struct{
ulint TANS[10];//*p//下の足し算して返す結果
ulint AA[10];//*s
ulint BB[10];//*t
}FANS;

void tas(FANS* ,FANS* ,FANS*);

int main(void){
ulint a = 0xf6736fd6; //a=4134760406
ulint b = 0xdb6db6db; //b=3681400539
ulint c = 0;
ulint A[1]={0},B[1]={0},C[4]={0};
int i,j,k,l;
i=j=k=l=0;
int *p,*s,*t;
FANS F={{0},{0},{0}};

for(;;){
A[i] = a & 0xffff;
B[i] = b & 0xffff;
a = a >> 16;
b = b >> 16;
if(i==1)break;
i = i + 1;
}
4137:2009/01/11(日) 14:18:37
i = 0;

for(;;){
for(;;){
*s = k;
c = A[i] * B[j];
*s = c & 0xffff;
printf("AA[%d]>%x\n",k,*s);
c = c >> 16;
k = k + 1;
*s = c & 0xffff;
printf("AA[%d]>%x\n",k,*s);
tas(&F,&F,&F);
*t = *p;
for(l=0;l>5;l++){
*s = l;
*s = C[l];
}
i = i + 1;
if(i==2)break;
}
i = 0;
k = k - 1;
j = j + 1;
if(j==2)break;
}
4237:2009/01/11(日) 14:19:44
i=8;
*p = i;
for(;;){
printf("%x",*p);
if(i==0)break;
i = i - 1;
}
return 0;
}

//足し算:関数
void tas(FANS *s, FANS *t, FANS *p){

ulint SUM[10]={0},KETA[10]={0};
int m;
m=0;

for(;;){
SUM[m] = s -> AA[m] + t -> BB[m] + KETA[m];
p -> TANS[m] = SUM[m] & 0xffff;
KETA[m+1] = SUM[m] >> 16;
if(m==4)
break;
m = m + 1;
}

}

こんな感じです。
知識が乏しいのですが今ある知識で32bit×32bitをやろうとしてます
43デフォルトの名無しさん:2009/01/11(日) 14:21:58
>>40
アップローダつかうとか、考えられないだろうか・・・
4437:2009/01/11(日) 14:22:51
>>43
すみません・・・次からそうします。
45デフォルトの名無しさん:2009/01/11(日) 14:27:10
>>40
ポインタのsが初期化されてないのに、*sに代入されてないか?

あと、
for(l=0;l>5;l++){
これは、一回も回らないよな。
46デフォルトの名無しさん:2009/01/11(日) 14:29:07
int *p,*s,*t;
の実態がない?
47デフォルトの名無しさん:2009/01/11(日) 14:31:45
>>45さん
int *p,*s,*t;
FANS F={{0},{0},{0}};
これじゃポインタの中身pstを初期化できてないんですか???

>>46
int *p,*s,*t;
コレを構造体でmainとしたの関数で使いたかったんですが。
配列に入れて配列の足し算をしたくて、こう書いてみたんですが・・・
48デフォルトの名無しさん:2009/01/11(日) 14:32:11
>*t = *p;
これ?
49デフォルトの名無しさん:2009/01/11(日) 14:34:32
>>48さん
*t=*pで下のTANSの中身をAAに入れようと思ってそうやったんですが・・・
50デフォルトの名無しさん:2009/01/11(日) 14:36:33
>>47
ulint *p,*s,*t;
FANS F={{0},{0},{0}};
p = F.TANS;
s = F.AA;
t = F.BB;

とかしとけばいいかな?
51デフォルトの名無しさん:2009/01/11(日) 14:40:26
>>50さん
それでやってみると、エラーでなくワーニングで
assignment from incompatible pointer type
assignment from incompatible pointer type
assignment from incompatible pointer type
とでて、ポインタのタイプがおかしいって言われちゃいました・・・
52デフォルトの名無しさん:2009/01/11(日) 14:41:02
ウォーニング
53デフォルトの名無しさん:2009/01/11(日) 14:45:29
>>49
こんなかね
>int *p,*s,*t;

int pe,*p=&pe,se,*s=&se,te,*t=&te;
54デフォルトの名無しさん:2009/01/11(日) 14:47:06
そもそも、ポインタである必要があるのか・・・
55デフォルトの名無しさん:2009/01/11(日) 14:47:45
>>51
http://codepad.org/NuAqZ3xB

とくに警告とかでないけど?
56デフォルトの名無しさん:2009/01/11(日) 14:50:34
>>53さん
これで、tasの関数に飛ばすときはpe,se,teを飛ばせばいいってことですか??

>>54さん
最終的に無限桁にしたのでポインタと構造体がいいと進められたんです。

>>55さん
Cygwinだからでしょうか・・・
57デフォルトの名無しさん:2009/01/11(日) 14:50:44
>>55
>ulint *p,*s,*t;
こっちの型を差し替えてないんだろ
58デフォルトの名無しさん:2009/01/11(日) 14:51:55
>>56
ポインタの型をint*からulint*に直した?
59デフォルトの名無しさん:2009/01/11(日) 14:53:01
そもそも、tasに引数が3つもあるのが意味不明。
tas(&F,&F,&F);としてしか呼び出してないし。
60デフォルトの名無しさん:2009/01/11(日) 14:56:29
>>58さん
大分回るようになりました!!
けどやはりAA[2]まで進んだ後でとまりました・・・

>>59さん
tas(&F,&F,&F)でTANS、AA、BBをtasの関数に飛ばすってイメージだったんですが・・・
61デフォルトの名無しさん:2009/01/11(日) 14:58:21
>>56
> >>53さん
> これで、tasの関数に飛ばすときはpe,se,teを飛ばせばいいってことですか??
tasとp,s,tは関係ないじゃん
62デフォルトの名無しさん:2009/01/11(日) 15:01:03
ユーザがfor文と配列使って異なる数字を標準入力して出来た数列が出来たとき
奇数番目の合計をAに、偶数番目の合計をBに入れるっていうプログラム作りたいのですがどうすればいいのでしょうか…

とりあえず、
#include<stdio.h>
main()
{
int n,i,a[i]=100000;
scanf("%d",&n);
for(i=0;i<=n;i=i++)
{
printf("i番目");scanf("%d",&a[i]);
puts("\n")
} まで出来たのですが、同じ数字があったときにやり直しさせるのと、iが奇数番号の数の合計とiが偶数番号の時の合計を代入させるのがわからないです。
だれか、そこを教えてくれないでしょうか。
63デフォルトの名無しさん:2009/01/11(日) 15:06:50
>>62
int n,i,a[i]=100000;

怖ぇ・・・たぶん
int n,i,a[100000];
って書きたかったに違いない
64デフォルトの名無しさん:2009/01/11(日) 15:12:51
>>61さん
*p,*s,*t=TANS,AA,BBってリンクしてるイメージだったんですが違うんですか?
ポインタと構造体の関係が本当に分からなくて・・・すみません・・・
65デフォルトの名無しさん:2009/01/11(日) 15:12:55
#include <stdio.h>

#define TBL_SIZE 100000

int main()
{
  int tbl[TBL_SIZE];
  int i, n;
  
  printf("入力する回数>");
  scanf("%d", &n);
  
  for (i = 0; i < n; i++) {
    printf("%d番目", i);
    scanf("%d", &tbl[i]);
  }
  
  return 0;
}

こんな感じだろ?
66デフォルトの名無しさん:2009/01/11(日) 15:16:37
>>64
ちがうな。
そもそも、何をしてるプログラムだかさっぱりわからないが。
67デフォルトの名無しさん:2009/01/11(日) 15:19:36
>>66さん
プログラムは32bit×32bit=64bitをするために
配列をつかって筆算みたいなやり方で答えを出そうとしてます。

AA+BB=TANSにしてBB=TNASでまたAA+BB=TNASを繰り返そうという考えです。
68デフォルトの名無しさん:2009/01/11(日) 15:35:04
69デフォルトの名無しさん:2009/01/11(日) 15:41:07
>>68さん
ちょwwwもろ回答がwwwww
参考にしながら頑張ってみます、一応今ある知識だけで組んでみたいんで。
ありがとうございます!
70デフォルトの名無しさん:2009/01/11(日) 15:43:07
>>65
  for (i = 0; i < n; i++) {
    printf("%d番目", i);
    scanf("%d", &tbl[i]);
  }
の部分を
int jを定義しておいて
  for (i = 0; i < n; i++) {
    printf("%d番目", i);
    scanf("%d", &tbl[i]);
    for(j=0; j < i; j++ ){
      if( tbl[i] == tbl[j] ){
        printf("重複させんな氏ね\n");
        i--;break;
      }
    }
  }
にすればいいか
71sage:2009/01/11(日) 16:29:32
>>70
ありがとうございます
あとはiが奇数時に配列に入れた数の和と、iが偶数の時に入れた数の和を比べて、多い方をAに入れ、Bに小さい方を入れるってしたいのですが
for文使っても、iが偶数の時と奇数の時に分けられないので困ってます。
なんか最初から間違いがあったみたいですがw
本題これでして…
72デフォルトの名無しさん:2009/01/11(日) 16:41:05
>>71
・宿題ならこちらへ
C/C++の宿題を片付けます 121代目
http://pc11.2ch.net/test/read.cgi/tech/1230678123/
・sageはメール欄に
・i%2でiを2で割った余りという意味。0と1で場合分けすれば偶奇判定できる
73デフォルトの名無しさん:2009/01/11(日) 16:51:39
Cの規格書が高いからpdfを手書きで写しているのですが、「写本」という文字をシードにして乱数を生成する高速な方法を教えてください。
74デフォルトの名無しさん:2009/01/11(日) 16:53:02
pdfを見ている状況なら、保存すればいいじゃん。
# pdfとしてが無理ならキャプチャしてもいいし。
75デフォルトの名無しさん:2009/01/11(日) 17:19:16
>>73
char s[] = "写本";
とかやって、s[0]からs[3]までの値をシードにして、ってこと?
76デフォルトの名無しさん:2009/01/11(日) 22:42:12
>>72
むしろそこの自然数が書かれたカードがうんたらゲームを自分で作ろうとしてて
部分的な質問を投げるようになったんだと思う。
宿題スレは丸投げ用だと思うからこっちでもいいんじゃないのかな
77デフォルトの名無しさん:2009/01/11(日) 22:44:15
誰か>>73をお願いします。
78デフォルトの名無しさん:2009/01/11(日) 23:17:25
>>77
75以上の答えはないだろ
79デフォルトの名無しさん:2009/01/11(日) 23:27:12
ありがとうございました。
何とか間に合いそうです。
80デフォルトの名無しさん:2009/01/12(月) 02:24:40
まだナンバーサイン野郎は意味も無く、不適切なナンバーサインの使い方をしているの?
♠はトランプのスーツの中で最強ですけど
8171:2009/01/12(月) 02:37:44
本当すいません…ここしか頼るとこなくて…
とりあえず71さんのヒント使って作ってみたのですが

とりあえずint gを定義して
for(g=0;g<0;g++){
if(g%2=0){
x=x+a[g];
else{
y=y+a[g];
}
}

if(x<y){
printf("先手の点数=%d\n",x);
printf("後手の点数=%d\n",y);
else{
printf("先手の点数=%d\n",y);
printf("後手の点数=%d\n",x);
}
}
printf("先手の勝ち");

てなったんですけど、でもこれじゃあ、勝ち負けと先手が勝ちって表示されるのが連動してなくてなんか不安なんですよね…
あとは引き分けの時に、数列の端と端を比べて大きい方をとるってやつが今模索中でございまして、ヒントくれればいいなと
82デフォルトの名無しさん:2009/01/12(月) 12:54:16
他言語経験者でC++を学んでいます。
コピーコンストラクタに関する質問です。

いわゆる深いコピーをする際に、privateフィールドを
直接参照できるようなんですが、これは何か特別なルールなんでしょうか。

private:
 int num;
......

MyClass::MyClass(const MyClass& other)
 num = other.num;
.......

ちなみに、学習に利用している本はロベールC++でページは302です。
よろしくお願いします。
83デフォルトの名無しさん:2009/01/12(月) 12:58:26
MyClass のメンバだから、
MyClass のメンバ関数からは参照できる。
84デフォルトの名無しさん:2009/01/12(月) 13:04:49
ああ、なるほど。
別オブジェクトでも、同一クラスのメンバは参照できるんですね。

クラス外に定義した関数では同じことができなかったので疑問を持っていました。
ありがとうございます。
85デフォルトの名無しさん:2009/01/12(月) 13:11:54
昨日多倍長系で質問した者です。

考えながらやっているんですが、mainで入った数字が関数で微妙に入れ違っていて
原因が分からないのですが、どなたか教えてくださいませんでしょうか・・・

http://codepad.org/XgqEjsWE

後、未だにスタックが食いつぶされている?
実行結果で配列がどうのこうので分からない状況です・・・
よろしければ教えてください、お願いします。
86デフォルトの名無しさん:2009/01/12(月) 13:14:51
>>85
Cの入門書を一から読むべきレベル
87デフォルトの名無しさん:2009/01/12(月) 13:20:59
>>86さん
一応知人に借りた本とグーグル先生には聞いてみているんですが・・・
いまいち理解できていないんです・・・
88デフォルトの名無しさん:2009/01/12(月) 13:25:55
クソースすぎる
for文を無限ループ風に使うな
多倍長演算なんて100年早い
89デフォルトの名無しさん:2009/01/12(月) 13:27:41
>>87
配列がおかしい
90デフォルトの名無しさん:2009/01/12(月) 13:29:23
>>88さん
一応、加減乗除の加減までは解決したんですが・・・
for(i=0;i>4;i++){
とかでちゃんと回す回数指定したほうがいいのでしょうか・・・
91デフォルトの名無しさん:2009/01/12(月) 13:30:09
>>89さん
配列がおかしい?
最初の宣言がすでにおかしいってことですか?
92デフォルトの名無しさん:2009/01/12(月) 13:34:15
>>90
タイプミスかどうかも疑わしい
93デフォルトの名無しさん:2009/01/12(月) 13:37:32
>>92さん
タイプミスです・・・
for(i=0;i<4;i++){
でした。
94デフォルトの名無しさん:2009/01/12(月) 13:42:11
for(;;){
 *s = l;
 *s = C[l];
 l = l + 1;
 if(l==4)break;
}
この部分とかlは初期化されてないから値は上がりっぱなしだし
そもそも代入文に何の意味もないからこの部分は初期化バグ抜きでも*s = C[3];と等価だ

もう一度言う、顔洗って出直せ
95デフォルトの名無しさん:2009/01/12(月) 13:53:45
>>94さん
はい、勉強しなおしてきます。
ただ、ポインタと構造体が全く分からなくて。
mainではAA[0]とAA[1]に思い通りに値が入れられているのに
下の関数に飛んだときにはAA[0]の値がAA[1]になっているんです・・・

*s=l;
*s=C[l];
は、メモを忘れてしまったので何がしたいかすら自分でも分かりません・・・

ただ、このAA[0]とAA[1]の部分が謎でしょうがないです・・・
96デフォルトの名無しさん:2009/01/12(月) 14:15:01
>>81
・前半
そのfor文は一回も回らない
数の比較は=じゃなくて==
{}のネストがおかしい

for(g=0;g<n;g++){
if(g%2==0){
x += a[g];
}else{
y += a[g];
}
}
こんな感じでしょ?

・後半
a[0]を入力した人(=偶数の入力をした人)が常に先手じゃないの?

printf("先手の点数=%d\n",x);
printf("後手の点数=%d\n",y);
if(x>=y){
printf("先手の勝ち");
}else{
printf("先手の勝ち");
}

それから数列の端と端ってどこのこと?a[n-1]とa[n-2]?
97デフォルトの名無しさん:2009/01/12(月) 14:16:30
>>96
まちがえた、どっちも"先手の勝ち"になってる
if(x>=y){
printf("先手の勝ち");
}else{
printf("後手の勝ち");
}
98デフォルトの名無しさん:2009/01/12(月) 15:05:19
>>95
マルチなの? 馬鹿なの? それとも同じ宿題を二人でやってるの?
http://codepad.org/XgqEjsWE
http://codepad.org/rnSOFLEU
99デフォルトの名無しさん:2009/01/12(月) 15:34:09
>>98さん
同じ人物ですよ?、一応昨日も来たって書いてあるんですが・・・
100デフォルトの名無しさん:2009/01/12(月) 15:36:47
>>99
http://pc11.2ch.net/test/read.cgi/tech/1231499251/
んじゃ、現在進行形でこのスレに書いているのもあんたか。
只のマルチの馬鹿だったのね。
101デフォルトの名無しさん:2009/01/12(月) 16:53:04
暗黙の型変換が良く解らなくて困ってます><、詳しいサイト教えてください。
(bool)(_bool^_int&2)とか(int)^(_short^_char>> 15)とかそんな感じのが知りたいです。
102デフォルトの名無しさん:2009/01/12(月) 16:54:37
(int)^(_short^_char>> 15)じゃ無くて(int)~(_short^_char>> 15)みたいなでした
103デフォルトの名無しさん:2009/01/12(月) 17:05:45
>>101
ttp://www.jisc.go.jp/app/pager?id=10499
ここに詳しいpdfがあるよ
104デフォルトの名無しさん:2009/01/12(月) 17:20:34
ファイルが見つかりません。
File not found.

との事ですけど・・・?登録とか必要なの?
105デフォルトの名無しさん:2009/01/12(月) 17:24:40
じゃあ

ttp://www.jisc.go.jp/

C++の規格は確かX 3014だから検索すればでてくるよ
106デフォルトの名無しさん:2009/01/12(月) 17:34:17
見つかりました。ありがと〜
107デフォルトの名無しさん:2009/01/12(月) 17:58:59
キーボードで入力した文字列を表示させるというプログラムなんですが、↓で実行してもできません。
配列を使う方法ならできるんですが、ポインタを使った方法が知りたいんです。
これのどこが悪いのか教えてください。

#include <stdio.h>
int main(void){
char* str;
scanf("%s",str);
printf("%s",str);
return 0;
}
108デフォルトの名無しさん:2009/01/12(月) 18:11:21
>>107
文字列を格納する十分な大きさのメモリ領域を確保しなきゃだめだぴょん
109デフォルトの名無しさん:2009/01/12(月) 18:12:37
>>107
大体、初期化されていないポインタはどこを指しているか未定義だぴょん
110デフォルトの名無しさん:2009/01/12(月) 18:15:27
>>108
ありがとうございます。
でも、それは何故でしょうか?
scanfの時点で入力した文字列はメモリに記憶されたわけだから、それ以上メモリ領域を確保する必要が
無いように思うんですが・・・
111デフォルトの名無しさん:2009/01/12(月) 18:18:12
>>110
ごめんね、書き方が微妙だったぴょん

>>109を見てもらえれば分かると思うけど、strは初期化されていないから、アクセス違反が起こり得るんだ
その証拠に、これを実行すると「不正な処理」とか「セグメントエラー」とかならない?
112デフォルトの名無しさん:2009/01/12(月) 18:29:30
>>111
実行しても何も表示されませんでした。
今調べたんですが、初期化されてないっていうのは、>>109ということですよね?
mallocで領域を確保しなきゃいけないってことでおkですか?
113デフォルトの名無しさん:2009/01/12(月) 18:51:27
>>112
そうそう、mallocを知っているなら話が早いぴょん
114デフォルトの名無しさん:2009/01/12(月) 18:52:29
あ、それから、
> scanfの時点で入力した文字列はメモリに記憶されたわけだから
この辺、もう少し勉強してみる必要があるんだぴょん
115デフォルトの名無しさん:2009/01/12(月) 19:20:40
#include <stdio.h>
int main(void){
char str[100];
scanf("%s",str);
printf("%s",str);
return 0;
}

配列でもいいよ。
116デフォルトの名無しさん:2009/01/12(月) 19:21:16
>>115
>配列を使う方法ならできるんですが、ポインタを使った方法が知りたいんです。
117デフォルトの名無しさん:2009/01/12(月) 19:24:25
>>116
よく読んでなかったよ。

#include <stdio.h>
int main(void){
char buf[100];
char* str = buf;
scanf("%s",str);
printf("%s",str);
return 0;
}

こうか。
118デフォルトの名無しさん:2009/01/12(月) 19:39:07
>>117みたいな奴をみると、文法と文脈は別物だと実感する
119デフォルトの名無しさん:2009/01/12(月) 19:44:15
H8 に対して RS-232C を利用し *.srec ファイルを送るプログラムを作成しています。
「*.srec ファイルを送る」部分以外は正常に作動しています。
※アスキーモードです。

@ ifstream で *.srec を開く
A WriteFile で 送る

という単純なやり方では、うまくいきませんでした。
1行ずつ送るということも試してみましたが、やはりダメでした。

いわゆる、TeraTerm 等の Send file... に価するプログラムを作ろうとしています。

どなたか RS-232C 通信、ファイル送信等に知識をお持ちの方がおりましたら、
御指南頂けますでしょうか?
120デフォルトの名無しさん:2009/01/12(月) 19:45:07
ざっと書いた該当部分のソースです。
以下のような16進数の内容をそのまま送っています。
S00B00006A73702E73726563CC
S2144000007A0700FFFF1001006B200040007001F0EF
S214400010640047025D007A00005000087A010050F4
S2144000201EC01AA2010069827A10000000041F90C8
S21440003045F27A00004066B07A01004066B87A021F
 ・
 ・
 ・
std::ifstream fin;
fin.open("*.srec", std::ios::in);
if(!fin) {
std::cout << "FILE Open Error!\n" << std::endl;
return 1;
}
DWORD nWritten;
int i = 0;
char line[128];

while(!fin.eof()) {

fin.getline(line, sizeof(line));
int now = sizeof(line + 1);
line[now] = 10;
std::cout << line;

WriteFile(hCom, &line, sizeof(line), &nWritten, 0);
}
char cEof[1];
cEof[0] = 26;
WriteFile(hCom, &cEof, 1, &nWritten, 0);
121デフォルトの名無しさん:2009/01/12(月) 19:51:51
>>119
hComのオープンにはちゃんと成功しているか?
WriteFile()の第二引数は&いらない
122デフォルトの名無しさん:2009/01/12(月) 20:00:40
>121
はい。成功しています。
その他にも文字のみの通信(コマンドの送信も含む)が有り、その部分は正常に動いています。
ファイル送信のモードを追加しようとしてつまずいています。

&無しで大丈夫ですね。すみません。この部分については、結果は同じでした。
123デフォルトの名無しさん:2009/01/12(月) 20:08:20
>>118
ポインタを使うって条件だけで、malloc()使うとは言ってないじゃん。
124デフォルトの名無しさん:2009/01/12(月) 20:08:21
>>117
わざわざ丁寧にありがとうございました。
scanfの件、了解しました。もうちょい勉強してみます。
125デフォルトの名無しさん:2009/01/12(月) 20:09:51
>>123
だから、「文脈」
コミュニケーションが苦手だと苦労するぞ
126デフォルトの名無しさん:2009/01/12(月) 20:13:26
>>123
おっと、ボロが出たね
条件は「ポインタを使う」だけではないぞ

>配列を使う方法ならできるんですが、ポインタを使った方法が知りたいんです。
この文の意図するところ(必ずしも明文化できない)が「条件」

もし>>117=>>123なら、>>123の発言は>>117が「配列を使う方法」に該当しないことを意味する
127デフォルトの名無しさん:2009/01/12(月) 20:38:36
呼び出しスタックについて教えてください
128デフォルトの名無しさん:2009/01/12(月) 21:08:30
128=2^7
129デフォルトの名無しさん:2009/01/12(月) 21:26:21
>>122
sizeof(line)がおかしいような?
130デフォルトの名無しさん:2009/01/12(月) 21:39:38
>>126
>>配列を使う方法ならできるんですが、ポインタを使った方法が知りたいんです。

いや、ポインタの使い方が分かればいいんだろ?
>>117でもいいじゃん。
131デフォルトの名無しさん:2009/01/12(月) 22:13:40
これは痛い
132デフォルトの名無しさん:2009/01/12(月) 22:17:42
>>107を読んで>>130程度の情報しか引き出せない無能か
133デフォルトの名無しさん:2009/01/12(月) 22:21:00
「ポインタを使いたい」→「malloc()だな」
のほうがエスパーすぎるんじゃね? ふつーに。
134デフォルトの名無しさん:2009/01/12(月) 22:22:16
>>133
ヒント:mallocを提示したのは質問者
135デフォルトの名無しさん:2009/01/12(月) 22:23:16
よっしゃ、エスパー認定されたぜ
136デフォルトの名無しさん:2009/01/12(月) 22:23:31
>>134
それは読んでなかったわ。
へんなところ引用しないで、そこを引用すればいいのに。
137デフォルトの名無しさん:2009/01/12(月) 22:25:23
>>133=>>130
もうあきらめたら?


108 :デフォルトの名無しさん:2009/01/12(月) 18:11:21
>>107
文字列を格納する十分な大きさのメモリ領域を確保しなきゃだめだぴょん


109 :デフォルトの名無しさん:2009/01/12(月) 18:12:37
>>107
大体、初期化されていないポインタはどこを指しているか未定義だぴょん


これが回答者の直接の回答。
お前が勝手に「確保=malloc」だと思い込んでいるだけ
138デフォルトの名無しさん:2009/01/12(月) 22:26:12
>>136
ろくに状況を理解できないならレスすんなよクズ
139デフォルトの名無しさん:2009/01/12(月) 22:27:04
すいません質問です。
for(i=x[0];i<=x[1];i++){
for(j=y[0]-chousei;j<=y[0]+chousei;j++){
r_img[i][j]=r;
g_img[i][j]=g;
b_img[i][j]=b;
}
for(j=y[1]-chousei;j<=y[1]+chousei;j++){
r_img[i][j]=r;
g_img[i][j]=g;
b_img[i][j]=b;
}
}
for(j=y[0];j<=y[1];j++){
for(i=x[0]-chousei;i<=x[0]+chousei;j++){
r_img[i][j]=r;
g_img[i][j]=g;
b_img[i][j]=b;
}
for(i=x[1]-chousei;i<=x[1]+chousei;i++){
r_img[i][j]=r;
g_img[i][j]=g;
b_img[i][j]=b;
}
}
だいたいこんな感じのプログラム(一部)を書いているのですが、
下の二個を囲っている/* */を取ってしまうとその場で計算が終わってしまうのか、
「続行するには何かキーを押してください」と表示されてしまうんです。
出力は他に設定してあるんですが、それでも終わってしまうんです。
環境はVS2005の学生版です。
140デフォルトの名無しさん:2009/01/12(月) 22:27:21
136 :デフォルトの名無しさん:2009/01/12(月) 22:23:31
>>134
それは読んでなかったわ。
へんなところ引用しないで、そこを引用すればいいのに。


こいつは往生際が悪いなww
141デフォルトの名無しさん:2009/01/12(月) 22:28:34
>>139
どこが該当箇所?
142デフォルトの名無しさん:2009/01/12(月) 22:31:07
>>138
自分のツッコミの頭の悪さ棚にあげてなに言ってるんだよ。

おれはツッコミに反論してただけだろ。
ツッコミに沿った反論しかしないから、ツッコミが見当違いだったら、
反論だってスジから外れるのはあたりまえ。
143デフォルトの名無しさん:2009/01/12(月) 22:42:20
>>142
は?wwwwwついに頭おかしくなったか?wwwwww
144デフォルトの名無しさん:2009/01/12(月) 22:44:20
>>142
ほう、じゃあお前は質問をろくに読まずに回答することを肯定するんだな
145デフォルトの名無しさん:2009/01/12(月) 22:48:52
142 :デフォルトの名無しさん:2009/01/12(月) 22:31:07
>>138
自分のツッコミの頭の悪さ棚にあげてなに言ってるんだよ。

おれはツッコミに反論してただけだろ。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ツッコミに沿った反論しかしないから、ツッコミが見当違いだったら、
反論だってスジから外れるのはあたりまえ。


はて、お前は質問者に答えていたのでは?ww
146デフォルトの名無しさん:2009/01/12(月) 22:50:47
>>143
おまえ、マジ頭わるそうだな。

>>144
見当違いなツッコミを指摘するのと、それと、どう関係するんだ。
147デフォルトの名無しさん:2009/01/12(月) 22:51:24
>>145
アンカー先の書き込みに反論してるだろ。
148デフォルトの名無しさん:2009/01/12(月) 22:52:19
>>146
見当違いな答えを書いたお前を棚にあげて何言ってんだ。
上から順番にレスを見直せ。
お前が質問を読んでないのが原因なのは明白。
149デフォルトの名無しさん:2009/01/12(月) 22:53:16
これから>>146の全レス大会が始まります
150デフォルトの名無しさん:2009/01/12(月) 22:53:22
さすがにこの争っている二人、キモイな。頭がおかしいと
第三者に見られていることに気づけよ。お前らがやっているのは
質問に対するレスじゃなくて、詰らない言い争い。
周りの見えない視野の狭い奴って、実社会でも迷惑だよな。
151デフォルトの名無しさん:2009/01/12(月) 22:55:31
゚ | ・  | .+o    _    o。 |  *。 |
 *o ゚ |+ | ・゚ _二ー-゙ヽ/_ +・  o |*
 o○+ |  |i -= ´      ` ミ、 ゚| o ○。
・+     ・ l /,         ヽ ・|*゚ + |
゚ |i    | + / i |ー|-|i | i l . i | |!     |
o。!    |! ゚o !|{ヽ{`━' |i iト、 l |   | *  ゚ |
  。*゚  l ・ ゚ |ソ_` "" リ!ノ /|  |o  ゚。・ ゚
 *o゚ |!   | 。 ヽ'-   ノi| {  +   *|
。 | ・   o  ゚l  ゚+ ` イ  jハ l  *゚・ +゚ ||
 |o   |・゚ ,.‐- .._ -‐}!    ヽ!  |  ゚   |
* ゚  l| /    、  i  }  \   o.+ | ・
 |l + ゚o i     ` -、{! /_   \  ○・ |o゚
 o○ |  | ヽ.     ヾ´    ̄  `ヽ  *。
・| + ゚ o }  }                ヽ O。
 O。 |  | リ、  ..:::        ..   l 。
 o+ |!*。| / `ー::::       , ヘ:::::..  | *
 |・   | ゚・ |/   /  :::... ..   /:::/ | ::..... { |
    _|\∧∧∧MMMM∧∧∧/|_
    >                  <
  /\  ──┐| | \     ヽ|  |ヽ  ム ヒ | |
  /  \    /      /  | ̄| ̄ 月 ヒ | |
      \ _ノ    _/   / | ノ \ ノ L_い o o
    >                  <
152デフォルトの名無しさん:2009/01/12(月) 22:55:32
別にこんなところで誰に見られていようがwwww
153デフォルトの名無しさん:2009/01/12(月) 22:55:39
C言語についての質問してもよろしいでしょうか?
154デフォルトの名無しさん:2009/01/12(月) 22:56:25
150 :デフォルトの名無しさん:2009/01/12(月) 22:53:22
さすがにこの争っている二人、キモイな。頭がおかしいと
第三者に見られていることに気づけよ。お前らがやっているのは
質問に対するレスじゃなくて、詰らない言い争い。
周りの見えない視野の狭い奴って、実社会でも迷惑だよな。


お前もこいつらの仲間入りってか
155デフォルトの名無しさん:2009/01/12(月) 22:58:52
もうどうでもいいんだが
156デフォルトの名無しさん:2009/01/12(月) 23:02:29
>>153
まともな回答が得られるかは分からんよw
157 ◆KiE.EJHwuY :2009/01/12(月) 23:03:13
レベルが低いかもしれませんが・・・

#include <stdio.h>
void rev(char *);
int main()
{
char string[64];
printf("文字列を入力してください --- ");
gets(string);
printf("入力された文字列は「%s」です\n", string);
rev(string);
printf("逆順に並び替えると「%s」になります\n", string);
return 0;
}
void rev(char *str)
{
char c, *p;

p = str + strlen(str) - 1;

while (str < p) {
c = *str;
*str++ = *p;
*p-- = c;
}
return;
}

これのrev関数の中でどういうふうになっているのか教えてもらえないでしょうか。
環境はVisual C++ 2008で、C言語です。
158デフォルトの名無しさん:2009/01/12(月) 23:07:26
>>157
p = str + strlen(str) - 1;
まずこれは分かるか?
159 ◆KiE.EJHwuY :2009/01/12(月) 23:09:10
入力された文字列のそれぞれの文字を数値化して考えて、それに文字列の長さをたして1を引いているんでしょうか?
正直よくわからないです。
160デフォルトの名無しさん:2009/01/12(月) 23:09:27
whileのなかは
c = *str;
*str = *p;
*p = c;
str++;p--;
と書いた方がわかりやすいね

pはstrlenの行でstrの末端を指すようになってる
strとpを両端から入れ替えていってる
whileの停止条件はstrとpが交差?するまで
161デフォルトの名無しさん:2009/01/12(月) 23:10:38
>>141
すいませんでした。
ちょっと書き込むには長いので、ソースの一部をアップロードしました。
コメントアウトありはこちら。DLパスは 2ch です
http://www1.axfc.net/uploader/He/so/181802
コメントアウトなしはこちらです。こちらもパスは同じです
http://www1.axfc.net/uploader/He/so/181803

hanteiという変数に1から6までの変数を入れて、
それを元にifで判別してr_img[i][j]などにfor文で計算した値を入れているのですが、
コメントアウトした部分をコメントアウトなしにすると>>139で言ったようなエラー?
が起こってしまうんです。

ちなみにfor文ではなくswitchにしても同じでコメントアウトした部分を消すなり
してbreak;しないとまた似たようなエラーが起こってしまうんです。
162デフォルトの名無しさん:2009/01/12(月) 23:12:00
>>160
そのwhileのなかでのことをもう少し詳しく教えてもらえないでしょうか・・・
説明不足でしたが、仰るとおり文字列を反転させるプログラムです
163161:2009/01/12(月) 23:14:43
>ちなみにfor文ではなくswitchにしても同じでコメントアウトした部分を消すなり
>してbreak;しないとまた似たようなエラーが起こってしまうんです。
とありますが、正確には

ちなみにif文ではなくswitchにしても同じでコメントアウトした部分を消すなり
してbreak;しないとまた似たようなエラーが起こってしまうんです。

でした。
すいません。
164デフォルトの名無しさん:2009/01/12(月) 23:17:38
>>162
例として、次の6文字を考える。
[S][A][M][P][L][E]

まず、端っこ同士を交換する
[E][A][M][P][L][S]

次に端っこから一つ内側を交換する
[E][L][M][P][A][S]

もう一つ内側も
[E][L][P][M][A][S]

とすると、並びが逆順になる、というのはOK?
165 ◆KiE.EJHwuY :2009/01/12(月) 23:17:47
ごめんなさい
>>162は僕です
166 ◆KiE.EJHwuY :2009/01/12(月) 23:18:26
>>164
おけです
167デフォルトの名無しさん:2009/01/12(月) 23:20:18
>>166
これを実現するにはポインタの操作が必要。
で、それが>>160の人が書いたやつなんだけど、これ、理解できる?
168デフォルトの名無しさん:2009/01/12(月) 23:21:23
あぁ、ごめん、>>160が分かんないから困ってるのか
169 ◆KiE.EJHwuY :2009/01/12(月) 23:24:18
>>167
まずcにstrのアドレスを代入して、
strのアドレスにpのアドレスを代入して、
pのアドレスにcを代入して、
strの配列の要素の一つ先に移って、
pの配列?の一つ先に戻ってるってことでしょうか…?
なんとなくですが
170デフォルトの名無しさん:2009/01/12(月) 23:26:14
>>169
アドレスではないよ、内容そのもの。

c = *str;
*str = *p;
*p = c;

最初、strは文字列の最初([0]とする)を指す。
pは文字列の最後(例えば[5]とする)を指す。
cっていうのは「交換」に必要な適当なハコ。

[c] = [0];
[0] = [5];
[5] = [c];

↑まず、このようにすると[0]と[5]が交換できる。おk?
171デフォルトの名無しさん:2009/01/12(月) 23:27:39
あ、>>170の[0]とかは配列の[]とは無関係。
単純に、ハコの中身を入れ替えてると考えて。
172 ◆KiE.EJHwuY :2009/01/12(月) 23:29:33
>>170
あぁわかりました!
ところでp = str + strlen(str) - 1;
つまりどういうことでしょう?
173デフォルトの名無しさん:2009/01/12(月) 23:34:03
>>172
>入力された文字列のそれぞれの文字を数値化して考えて、それに文字列の長さをたして1を引いているんでしょうか?
これが君の答えだよね?

数値化って惜しいんだけど、この場合返ってくる数値は「文字数」ね。
「最初」と「最後尾」を交換するためには、「最後尾」のアドレスが必要。
だから、それを計算してpに代入している。おk?
174デフォルトの名無しさん:2009/01/12(月) 23:36:15
>>172
あ、数値化ってアドレスのことか。なら間違ってはいないのかな

つまり、
p=(strの先頭)+(文字列の長さ)−1
なんで-1するかというと、「文字列の1文字目」って配列で考えるとstr[0]でしょ?
175デフォルトの名無しさん:2009/01/12(月) 23:36:49
さすがに答えているこいつの発言の仕方がきめぇw
構ってチャンタイプだろ?
176デフォルトの名無しさん:2009/01/12(月) 23:38:35
>>175
で?
177 ◆KiE.EJHwuY :2009/01/12(月) 23:38:47
>>173
つまりたとえば"SAMPLE"という文字列だった場合、
p = str + strlen(str) - 1;
の式でstrlen(str) = 6で、
strにはS = 1, A = 2…
となるのでしょうか?
178デフォルトの名無しさん:2009/01/12(月) 23:40:39
>>177
大体合ってる。
ただし、文字列は0から始まる。
179 ◆KiE.EJHwuY :2009/01/12(月) 23:42:15
>>178
あぁそうでした…
ただ>>174を見るとstr=(strの先頭)のみなんでしょうか?
180デフォルトの名無しさん:2009/01/12(月) 23:42:58
>>177
ごめん
>数値化って惜しいんだけど、この場合返ってくる数値は「文字数」ね。
誤解を招くような書き方をしてしまった。
strが文字列を返すわけではないよ。
181 ◆KiE.EJHwuY :2009/01/12(月) 23:48:44
>>180
…どういうことでしょう?
strは単に文字列の最初の文字のアドレス?ってことでしょうか?
182デフォルトの名無しさん:2009/01/12(月) 23:48:59
abcdefg という文字列の場合
str は先頭の a を、pはstrlen(str)の7から1引いてstr[6]に当たる g。
あとは先頭を指しているstrと後ろを指し示しているpのそれぞれのポインタの位置を
順番に真ん中の文字に近づけつつ、入れ替えているわけだが。
183デフォルトの名無しさん:2009/01/12(月) 23:52:18
ポインタstrはアドレス(数値を足すとその分前後にずれる)
*strがアドレスが指す文字

っていうのを誰か説明しないと
184 ◆KiE.EJHwuY :2009/01/12(月) 23:53:12
わかりました!
教えてくださってありがとうございました。
また来るかもしれませんがそのときはよろしくお願いします。
それでは。
185デフォルトの名無しさん:2009/01/13(火) 02:23:05
Cを使うためにはBASICとか学んだほうがいいですか?

大学ではFORTRANとか学べるんですが履修してません・・・
186デフォルトの名無しさん:2009/01/13(火) 02:32:12
全然問題ない。
CとBASICとFORTRANは別物だし、むしろBASICなんて学んでいないほうがいいくらいだ。
187デフォルトの名無しさん:2009/01/13(火) 02:39:31
>>161
r_imgを使ってるところをくまなく注意深く調べれば原因が分かる
188デフォルトの名無しさん:2009/01/13(火) 03:27:01
BASIC って BASIC Ain't Super Intelligent Computer の略?
189デフォルトの名無しさん:2009/01/13(火) 08:17:12
今いるかどうかはわかりませんが、
>>97
ご指摘ありがとうございます。
先手か後手の勝敗は奇数番目と偶数番目を比べて大きい方が勝ちなので、比べてから判断して欲しいのでa[0]取ったほうが勝ちというわけじゃないです
190デフォルトの名無しさん:2009/01/13(火) 14:50:18
>>189
よくわかんない。
n=4の場合
先手:a[0]:1 後手:a[1]:2 先手:a[2]:3 後手:a[3]:4
x=4, y=6
y>xなので後手の勝ち
こんな感じに進むもんだと思ってたんだけど違うの?
191デフォルトの名無しさん:2009/01/13(火) 15:24:25
四則演算のアプリを作るんですが、設計ツールって何がありますか?
というかこれはC言語以外で作る手立てというのはあるのでしょうか?
192デフォルトの名無しさん:2009/01/13(火) 15:33:27
>>191
確かBisonというのが演算子の優先順位を認識できるとどこかで読んだ。
設計ツールについては思い当たるものがない。
せいぜいVisioくらいしか思いつかない。
193デフォルトの名無しさん:2009/01/13(火) 17:20:26
これをビルドするとエラーが出てしまうんですが、どこが間違えているのでしょうか??
問題: 文字列配列 a[] に含まれる文字'A','B','C'が、それぞれ何文字だけ含まれているかをカウントするプログラムを作成
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char a[]="ABBBCBBBBCCAABBCCC"; // この文字列配列 a[]を調査せよ
char *ptr;
int i, j, count[3]={0}; // count[i] はすべて 0 で初期化
printf("%s\n", a);
ptr = a; // 配列aの先頭アドレスをポインタ ptr にコピー
j=0;
while (*ptr != '\0'){ // ポインタ ptr の指し示す配列中の文字が「ナル文字」でない間
j++;
if((i = 0; i < j; i++) == 'A') count[0]++;
if(("str=%s \t ptr= %s \t str2=%s \n", str, ptr, ptr2) == 'B') count[1]++;
if((i = 0; i < j; i++) == 'C') count[2]++;
ptr++;
}
printf("入力した文字列は %d 文字です\n",j);
printf(" Aの個数 = %d \n",count[0]);
printf(" Bの個数 = %d \n",count[1]);
printf(" Cの個数 = %d \n",count[2]);
return (0);
}
194デフォルトの名無しさん:2009/01/13(火) 17:22:36
ifの使い方がおかしい。
195デフォルトの名無しさん:2009/01/13(火) 17:25:05
もうひとつお願いします><
次のプログラムにおいて
int ######; // 変数、ポインタの宣言

########## // int型変数 e に「値」 30 を代入
########## // 変数e の「アドレス」を ポインタpointer_e に代入
######### // ポインタpointer_e が指し示すアドレスのメモリ内の「値」を 変数gに代入り
と処理したいとする。
各変数を適切に宣言し(#####を埋めよ)、e, pointer_e, g のアドレスと値の両方をprintf("### の[データ or アドレス]\n",###) 文により表示させるプログラムを完成させて実行せよ。

#include <stdio.h>

int main(void)
{
int hennsuu; // 変数、ポインタの宣言
int e = 30; // int型変数 e に「値」 30 を代入
int e = pointer_e // 変数e の「アドレス」を ポインタ pointer_e に代入
char buffer[30]; // ポインタ pointer_e が指し示すアドレスのメモリ内の「値」を 変数gに代入
printf("eのデータ =%d\n", data.e);
printf("eのアドレス=&d\n", address.e);
printf("ポインタpointer_e のデータ =%d\n", data.pointer_e);
printf("ポインタpointer_e のアドレス=%d\n", data.pointer_e);
printf("gのデータ =%d\n", data g);
printf("gのアドレス=%d\n", address g);
return (0);
}
196デフォルトの名無しさん:2009/01/13(火) 17:25:47
>>194
どういう回答をすればいいでしょうか><?
馬鹿ですいません
197デフォルトの名無しさん:2009/01/13(火) 17:28:38
>>196
for(i = 0; i < j; i++) if(str[i]== 'A') count[0]++;
for(i = 0; i < j; i++) if(str[i]== 'B') count[1]++;
for(i = 0; i < j; i++) if(str[i]== 'C') count[2]++;
198デフォルトの名無しさん:2009/01/13(火) 17:30:11
>>197
ありがとうございます

ほかに問題はありませんでしょうか??
199デフォルトの名無しさん:2009/01/13(火) 17:32:19
>>198
文字列の長さ調べてるところが、いまいちな?
200デフォルトの名無しさん:2009/01/13(火) 17:41:04
>>199
いまいちわかりませんでした
申し訳ないのですが模範解答を張っていただけないでしょうか??
201デフォルトの名無しさん:2009/01/13(火) 17:45:36
なぜ宿題スレに行かない
202デフォルトの名無しさん:2009/01/13(火) 18:21:39
ロベール先生はなぜC++教室を作ろうと思ったんですか?
203デフォルトの名無しさん:2009/01/13(火) 18:44:49
>>200
while (*ptr++ != '\0'){ // ポインタ ptr の指し示す配列中の文字が「ナル文字」でない間
もしくは
j=strlen(a);
もしくは
j=sizeof(a);
かな?
204デフォルトの名無しさん:2009/01/13(火) 18:54:41
std::tr1::function を勉強中なんだけど関数オブジェクトが絡むとエラーが出てしまいます

class CSamp;
typedef std::tr1::function<int(const CSamp&)> pFunc;

class CSamp{
pFunc pfunc;
public:
CSamp(pFunc pf) : pfunc(pf){}
};

//関数オブジェクト
struct stFunc{
int operator()(const CSamp& samp){
return 1;
}
};

これで
CSamp samp1(stFunc());
とすると
warning C4930: 'CSamp samp2(stFunc (__cdecl *)(void))':
プロトタイプされている関数が呼び出されませんでした (変数の定義が意図されていますか?)
という警告が出てしまいます。どこが問題なのでしょうか?
205デフォルトの名無しさん:2009/01/13(火) 19:45:43
>>190
でも、それだと
2.9.1.5
って来たときは先手が偶数番目を取って勝ち、
3.2.4.1
なら先手は奇数番目を取って勝ちにならなきゃいけないので常に初めをとらなきゃいけない訳ではないんですよ
206デフォルトの名無しさん:2009/01/13(火) 22:54:37
メモリアドレスを表記するときに最後にHをつけるのでしょうか?0000000Hみたいに

また、0E00アドレスの一つ前は 0F00でしょうか?
1000つ先は1DFFであってますか?
207デフォルトの名無しさん:2009/01/13(火) 22:59:43
Hを付けるのは一般に十六進法であると示すため。
メモリアドレスは十六進法で表す習わし。

0E00hの1つ手前は0DFF。1000が十六進での値なら、1E00。
これくらい、Windowsの電卓でも叩け。
208デフォルトの名無しさん:2009/01/13(火) 23:16:55
>>207
ありがとうございます。
でもHのほかに0xをつけて示す場合もあるみたいなのがどう違うのでしょうか?
両方とも16進数って意味ですよね
209デフォルトの名無しさん:2009/01/13(火) 23:20:15
>>208
後置のhはインテル系のアセンブラでの表記、前置の0xはCなどの言語での表記。
この他にも、前置の$や前置の&H、後置の(16)など、色々ある。
210デフォルトの名無しさん:2009/01/13(火) 23:26:18
継承を使用してvectorクラスにfindメソッドを追加してくれ
コンストラクタもどうやって書いたらいいんだ?
タノム
211デフォルトの名無しさん:2009/01/13(火) 23:28:37
>>210
<algorithm>のfind()では何かご不満でも?
212デフォルトの名無しさん:2009/01/13(火) 23:30:07
>>210
STLのコンテナは継承するもんじゃないだろ。
213デフォルトの名無しさん:2009/01/13(火) 23:32:40
int main(int argc, char *argv[])
{
vector<int> t;
t.push_back(0);
t.push_back(1);
t.push_back(2);
t.push_back(3);

int c = find(t.begin(), t.end(), 2);

return 0;
}

こんな使い方をしたいのです。
実際は、intじゃなくて他のクラスにしたいんだけど
214デフォルトの名無しさん:2009/01/13(火) 23:33:40
>>213
他のクラスでも==で比較できればfindできる。
==で比較できなくてもfind_ifがある。
215デフォルトの名無しさん:2009/01/13(火) 23:33:40
訂正
int main(int argc, char *argv[])
{
vector<int> t;
t.push_back(0);
t.push_back(1);
t.push_back(2);
t.push_back(3);

int c = t.find(t.begin(), t.end(), 2);

return 0;
}
216デフォルトの名無しさん:2009/01/13(火) 23:35:10
で、cには何が入ってほしいの?
もし、t[2]に所望の要素が入っているからc = 2になってほしいという具合であれば、
int c = std::find(t.begin(), t.end(), 2) - t.begin();とすればいい。
217デフォルトの名無しさん:2009/01/13(火) 23:35:34
>>215
>211
218デフォルトの名無しさん:2009/01/13(火) 23:36:58
STLコンテナを継承するクラスなんて作るなってばっちゃんが言ってた
219デフォルトの名無しさん:2009/01/13(火) 23:37:27
tのvectorに、2のインスタンスが含まれていたら、
それが帰ってきてほしい。
いまんとこ、forでループして探してるんだけど
ながったらしくて

ごめんなさい
220デフォルトの名無しさん:2009/01/13(火) 23:38:14
vectorにfindが無いなんて不思議じゃん
221デフォルトの名無しさん:2009/01/13(火) 23:38:34
test = array[0]<<16;
test |= array[1]<<8;
test |= array[2]:

すみませんこれはどういうことでしょうか?
222デフォルトの名無しさん:2009/01/13(火) 23:39:23
>>219>>220
>211
223デフォルトの名無しさん:2009/01/13(火) 23:40:38
>>219
見つからなかったらどうしてほしいの?
必ず見つかるなら、int c = *find(t.begin(), t.end(), 2);でいいのだが。やる意味はともかく。
224デフォルトの名無しさん:2009/01/13(火) 23:40:54
>>221
そういうことです。何が判らないのか判らないので謝られても困ります。
225デフォルトの名無しさん:2009/01/13(火) 23:44:47

見つからなかった場合は、-1返すとかそのへんは
後で実装するんで、いいんですけど
構文が分からないのです。

誤ったのは、教えていただくのにこちらはなんもできないので
すみませんって思ったんです。

>>216
int main(int argc, char *argv[])
{
vector<int> t;
t.push_back(0);
t.push_back(1);
t.push_back(2);
t.push_back(3);
int c = std::find(t.begin(), t.end(), 2) - t.begin();

return 0;
}

↑こういうことでしょうか?あってますか?
コンパイル通らなかったです。
main.cpp: In function 'int main(int, char**)':
main.cpp:32: error: no matching function for call to 'find(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int)'

linuxなんですけど。
226デフォルトの名無しさん:2009/01/13(火) 23:52:43
>>225
<algorithm>インクルードした?
227デフォルトの名無しさん:2009/01/13(火) 23:53:55
>>225
>誤ったのは、教えていただくのにこちらはなんもできないので
藪から棒になんだ?

>コンパイル通らなかったです。
gccでコンパイルしているなら、コマンドをg++にして味噌。
228デフォルトの名無しさん:2009/01/13(火) 23:56:02
げ、ゴメン。
大変失礼。

うまくいきました。なんで、 - t.begin()(イテレータの減算)
で取得できるのかわからないので、そこは勉強します。
ありがとうございました。
229デフォルトの名無しさん:2009/01/13(火) 23:58:18
>>227
なんか恐縮でw

コンパイラは、g++使ってます。ありがとうございます。
230デフォルトの名無しさん:2009/01/13(火) 23:59:15
t[0] == 2だったらc == 0だけど大丈夫?
231デフォルトの名無しさん:2009/01/14(水) 00:02:21
どっちかと言うと、std::distance(t.begin(), std::find(t.begin(), t.end(), 2))だと思うがまぁいいや。
232デフォルトの名無しさん:2009/01/14(水) 00:03:36
>>230
え?なんか理解できませんが、そうなんですか。
試してみたらそうみたいですね。

意味不明ですが、勉強します。
えーなんでだ・・・
233デフォルトの名無しさん:2009/01/14(水) 00:06:39
>>207
0E00Hの0x1000先は1E00Hとのことでしたが
これは1バイト限定の話でしょうか?
仮に全て2バイトが入るとすると
メモリアクセス単位は0E00 0E02 0E04と1000先まであるけど実際は500個しか
メモリに値をおけないということですよね
234デフォルトの名無しさん:2009/01/14(水) 00:09:10
ちなみに、もっと具体的に書くと
こんなメソッドが、いっぱいあるんだが、
find使ったらもっと、スマートに書けるんじゃないかと
思って、調べてました。
まぁそれだけですが。

void hogeclass::clear(unsigned int id)
{
vector<huga *>::iterator it = list.begin();
for (int i = 0; it != list.end(); i++, it++)
{ if (list[i]->get_id() == id) { list.erase(it); break; }
}
}
235デフォルトの名無しさん:2009/01/14(水) 00:12:25
>>234
そんな間抜けなプログラム、一体全体どこの阿呆が書いたんだ?
ループ制御変数にインデックスカウンタとイテレータを両方とも使うのなんて初めて見たよ。
236デフォルトの名無しさん:2009/01/14(水) 00:15:21
int j = 0;

while( ( j = getchar() ) != '\n') {
printf("%d\n", j );
}

C言語で↑の様に書いて、数値を入力して出力させたら入力した数値と出力される数値が異なるんですが、
何故異なるのか解りません。

誰かご教示お願いします。

例:6 と入力→54 と出力される。
237デフォルトの名無しさん:2009/01/14(水) 00:16:11
>>236
getchar()は文字コードを返す。
238デフォルトの名無しさん:2009/01/14(水) 00:17:45
>>237
なるほど…
即答ありがとうございます!
239デフォルトの名無しさん:2009/01/14(水) 00:42:37
os : Linux ubuntu8.10
compiler : gcc

c++でカレントディレクトリの情報を取得するには
どうすればいいですか?
240デフォルトの名無しさん:2009/01/14(水) 00:54:05
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
241デフォルトの名無しさん:2009/01/14(水) 01:07:50
>>232
>>216のは、探している要素が[n]にあったら、nを返すという動作。
242デフォルトの名無しさん:2009/01/14(水) 01:41:07
>>232
std::find()が返すのは見つかった要素を指すイテレータ。
まぁ慣れないうちはポインタみたいなものと思えば。
目的の要素のポインタから先頭要素を指すポインタを引けばindexになる
243デフォルトの名無しさん:2009/01/14(水) 07:28:23
とあるメモリたとえば0x0001に文字列 chr というものを入れたとします。
そしたら、メモリから見るとこのメモリにはどのように記述というか表されているのでしょうか?
二進数で0101010とか もしくは16進数でいれられてるのでしょうか?
2バイトの整数でも同じでしょうか
244デフォルトの名無しさん:2009/01/14(水) 07:32:27
>>243
コンデンサに電荷がたまってる
245デフォルトの名無しさん:2009/01/14(水) 07:52:57
>>243
寧ろ聞きたい。二進数で入るのと16進数で入るのとでは何が違うと思うのかね。
246デフォルトの名無しさん:2009/01/14(水) 07:56:38
>>245
どっちかしか解釈できないかとおもいまして
機械語だと二進数になるみたいに
247デフォルトの名無しさん:2009/01/14(水) 08:00:10
>>246
例えば10(16)は16(10)であり10000(2)であるわけで。
勿論それは、100(4)でもあるし、20(8)でもある。
つまり、何進数であろうともそれがその数値であることには変わらないのだが。
# 中学校辺りから数学をやり直すべきじゃないか?w
248デフォルトの名無しさん:2009/01/14(水) 09:20:20
>>243
日本語でおk
249デフォルトの名無しさん:2009/01/14(水) 09:43:36
まりさのぺにっぺにっでにっしんさせようとすると
insert error
not founc 404
found anal OK?
とでるんですがどうしたらいいんでしょうか?
250デフォルトの名無しさん:2009/01/14(水) 09:55:37
英語を勉強するといいよ
251デフォルトの名無しさん:2009/01/14(水) 10:09:22
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ こいつ まピョーん☆
 彡、   |∪|  /
/ __  ヽノ /
(___)   
252デフォルトの名無しさん:2009/01/14(水) 10:10:31
Human *human = new Marisa

human->push_back();
human->pop();
human->push_back();
human->pop();
human->push_back();
human->pop();
human->push_back();
human->pop();
human->push_back();
human->pop();

ってコンパイル通したら
Oh!! YES!!
an an an an an...
ってコンパイラがいかれちゃったんですけど
どうすればいいんですか?
253デフォルトの名無しさん:2009/01/14(水) 10:16:39
X * x = new X;
X * x = new X();

Xというクラスがあったとして両者は同じこと?
254デフォルトの名無しさん:2009/01/14(水) 10:21:42
>>253
やってみればわかる
255デフォルトの名無しさん:2009/01/14(水) 10:27:30
そこで Marisa->SetSex( Man );
Marisa->Sex( Marisa );
ってコンパイルしたら
compiling....
....
....
....
( ゚д゚ )ポカーン
とでるんですけど・・・
256デフォルトの名無しさん:2009/01/14(水) 10:43:53
>>255
よくみろよ警告でてるぞw
warrning : Marisa has HIV.
257デフォルトの名無しさん:2009/01/14(水) 11:06:09
>>256
#pramga warrning ( disable : Marisa )
258デフォルトの名無しさん:2009/01/14(水) 11:41:46
bool ∀ = 1;
int T = 0;
while( T∀T )
printf( "帰れません\n" );
259デフォルトの名無しさん:2009/01/14(水) 21:00:19
16進数で61 は 文字列abになりますか?
pingすると 61 62 63 64... というデータが取得できそれらはab cd ef となっているのですが
これは何がおこっているのでしょうか?

というか、例えば charで文字列 string を配列に保存した場合
機械語にされたらというか、メモリ上ではどのような値で存在しているのでしょうか?
また、その値を見たら文字列stringだとわかるのでしょうか?
260デフォルトの名無しさん:2009/01/14(水) 21:19:43
>>259
0x61 は a です。
メモリにはアスキーコードが格納されます。
メモリの値だけを見た時、それが数字としての0x61なのか、文字のaなのかを知る術はありません。
261デフォルトの名無しさん:2009/01/14(水) 21:28:43
>>260
なんでこんな知るすべのない方式にしたのでしょうか?
0x61は16進数の61でもあるし、aにもなりうるということですよね
262デフォルトの名無しさん:2009/01/14(水) 21:32:53
>>261
そんな汎用性の無いものが使えるか
263デフォルトの名無しさん:2009/01/14(水) 21:33:30
>>メモリの値だけを見た時、それが数字としての0x61なのか、文字のaなのかを知る術はありません。]
では、メモリをそれをどうやって文字なのか数字なのか解釈しているのでしょうか?
264デフォルトの名無しさん:2009/01/14(水) 21:37:13
解釈してるのはお前だろうが。

0x61をみたときに、体重97Kgとみるか、バスト97cmとみるか、解釈しだい
265デフォルトの名無しさん:2009/01/14(水) 21:38:35
ASCIIこーどだと思い込んで読めば, ASCIIこーどになるんだよっ!
266デフォルトの名無しさん:2009/01/14(水) 21:40:31
つまり10進数になおして97とみるか、文字コードになおしてaとみるかは自分次第ってことですよね
267デフォルトの名無しさん:2009/01/14(水) 21:42:40
>>263
読む側が適当に解釈してます。
というよりも、実際はメモリの値だけを見てどうにかしようとすることが稀ですね。
大抵は型を保持している変数を経由してアクセスしますから。

キャストといって、あえて本来とは異なる型で読むこともあります。
268デフォルトの名無しさん:2009/01/14(水) 23:32:24
test = array[0]<<24;
test |= array[1]<<16;
test |= array[2]<<8;
test |= array[3]:

arrayは1byteの型としておきます

これでtestは何バイト型になるのでしょうか?
269デフォルトの名無しさん:2009/01/14(水) 23:34:53
testを宣言した時の型で決まる
それは演算しても変わらんよ
270デフォルトの名無しさん:2009/01/14(水) 23:35:11
test の宣言次第だろ・・・。
271デフォルトの名無しさん:2009/01/14(水) 23:44:36
例えばテストを2byteで宣言したならビットシフトして入りきらない部分は切れてなくなるということですよね
4byte以上で宣言すればなくならないことかな
272デフォルトの名無しさん:2009/01/14(水) 23:49:11
array[0] が int に汎整数昇格してから計算されるので、
int が 2 バイトの環境では array[0] << 16 や array[0] << 24 が未定義動作になる。

array[2] << 8 はどんな環境でも大丈夫だが、
char と int が両方 16 ビットとかいう超特殊な環境なら、上の 8 ビットが死ぬ。
(そもそも char が 8 ビットであることを期待したコードだから関係ないけどね)
273デフォルトの名無しさん:2009/01/15(木) 00:10:21
>>272
test をlongで4バイトにしても
arrayは昇格しないのですよね
intが2バイト環境で解決するほうほうはないでしょうか?
274デフォルトの名無しさん:2009/01/15(木) 00:18:11
すいません質問です。
for(i=x[0];i<=x[1];i++) {
for(j=((y[1]-y[0])/(x[1]-x[0]))*(i-x[0])+y[0]-hutosa;j<=((y[1]-y[0])/(x[1]-x[0]))*(i-x[0])+y[0]+hutosa;j++){
r_img[i][j] = r;
b_img[i][j] = b;
g_img[i][j] = g;
}
}
こんな感じのプログラムで、hutosa*2の太さの斜線を描こうと思ったのですが、
出てきたのはなぜか指定された太さの斜線ではなく普通の横棒でした・・・。
太さだけは指定されたとおりのものが出てきたのですが。

for(i = 0;i< 2048;i++) {
for(j = i*katamuki-3;j<=i*katamuki+3;j++){
if(j>2048) j =0;//2048を超えたら描画しないようにする。エラーが起こるため。
r_img[i][j] = 0;
g_img[i][j] = 0;
b_img[i][j] = 0;
}
}
こんな感じで、傾きだけ指定してからなら太さを指定しても太い斜線が出力できるの
ですが、どうしてでしょうか?
275デフォルトの名無しさん:2009/01/15(木) 00:43:58
xがint型だとエスパー
276デフォルトの名無しさん:2009/01/15(木) 01:00:58
while(1){

処理

}
このような文はいつwhile文が終了するのでしょうか?
組み込み系に多いらしいのですが、終了しないと無限ループして
やたら領域とCpuを食うとおもうのですが
277デフォルトの名無しさん:2009/01/15(木) 01:06:09
「処理」の部分でbreakか何かをやってるんでしょ。
278デフォルトの名無しさん:2009/01/15(木) 01:11:00
ポーリング、スピンロック、ビジーウェイトあたりでググれ
279デフォルトの名無しさん:2009/01/15(木) 01:21:52
>>275
ありがとうございます。
intからdoubleにしたらちゃんと描画されました。
280デフォルトの名無しさん:2009/01/15(木) 01:25:59
>>273
union使うとか?
281デフォルトの名無しさん:2009/01/15(木) 02:13:08
JISX 3010 をテキストに起こした人居ないかな?
検索できなくて面倒なんだけど
282276:2009/01/15(木) 07:01:44
つまり、これはポーリングだとするとずっと処理しっぱなしってことでしょうか?
283デフォルトの名無しさん:2009/01/15(木) 07:06:45
>>273
array[*] を 4 バイトの型にキャストすればいい。
284デフォルトの名無しさん:2009/01/15(木) 07:13:42
>>283
それなら、ビットシフトする必要はなくなるかな?
285デフォルトの名無しさん:2009/01/15(木) 07:24:06
右辺のシフト演算時にキャストってことだろうよ
286デフォルトの名無しさん:2009/01/15(木) 07:25:42
>>284
・バイトオーダに依存する
・CPU によってはアラインメントがズレてて死ぬかもしれない
まあ、環境が許すならいいじゃない?
287デフォルトの名無しさん:2009/01/15(木) 07:26:00
2項演算は片方がlongならlongで行われるから
もしかしたら = array[0] << 8L; でも大丈夫かも
でも責任はもてない
288デフォルトの名無しさん:2009/01/15(木) 07:29:22
<< は特殊な演算子だから_
289デフォルトの名無しさん:2009/01/15(木) 11:04:58
GDI+は、Win95/NT4でも使えるのでしょうか?
290デフォルトの名無しさん:2009/01/15(木) 12:04:13
VC++2008の変換ウィザードで次へのボタンが表示されないんですがどうしたらよいのでしょうか
291デフォルトの名無しさん:2009/01/15(木) 14:00:32
外部関数に引数として2次元配列を指定し、
その外部関数内で配列をいじくるとmain関数内の二次元配列の値も変わってしまうのですが、
どうすればよいのでしょうか。
292デフォルトの名無しさん:2009/01/15(木) 14:09:17
>>291
その配列を複製してしまえばよろしい。
293デフォルトの名無しさん:2009/01/15(木) 14:10:31
そういうものなので、変わってしまって困る場合はコピーを作って渡すか、
外部関数内で配列をいじらないようにする。
294デフォルトの名無しさん:2009/01/15(木) 16:14:40
strtok関数を使って、カンマ区切りのCSVファイルデータを配列に格納したいのですが、調べていて
array[ 0 ] = strtok( file_image, ",\n" );
array[ 1 ] = strtok( NULL, ",\n" );
array[ 2 ] = strtok( NULL, ",\n" );
こういうのがでてきました。しかしここで疑問なのですが、なぜ2回目からNULLなのでしょうか?
指し示すファイルから、指定した文字で分割する関数ですよね?NULLを指定しても意味がないように見えるのです
295デフォルトの名無しさん:2009/01/15(木) 16:30:55
strtok関数のマニュアルを読みなさい
296デフォルトの名無しさん:2009/01/15(木) 18:23:46
>>294
strtok関数が覚えてる
297デフォルトの名無しさん:2009/01/15(木) 18:35:12
>>274
x と y はどのように初期化してるんだい?
その配列を除外すると斜めに引けるんでしょ?
298デフォルトの名無しさん:2009/01/15(木) 19:19:20
実行時に引数を2つとり、指定されたディレクトリから、指定した数だけデータを読み込むプログラムを作っています。
第一引数にディレクトリ名、第二にファイル数です。
このプログラムを改造して指定ディレクトリから、選んでくるファイルをランダムにするようにしたいのですが、
どのようなコーディングになりますでしょうか。(エラー処理は適当です、すいません)

main( int argc, char *argv[] )
{
char *dir; /* ディレクトリ情報を示すためのポインタ */
int num;
int i;
DIR *dp; /* 各エントリの情報を示すための構造体ポインタ */
struct dirent *entry;
struct stat statbuf;

if(argc<2){
dir = getenv("PWD");
}else{
dir = argv[1];
num = atoi(argv[2]);
}

i = 0;
while((entry = readdir(dp)) != NULL && i < num){
if((strcmp(".",entry->d_name) == 0) || (strcmp("..", entry->d_name) == 0)) continue;
fprintf( stdout, "%s\n", entry->d_name );
chdir(dir);
watasi_JK( entry->d_name );//処理
i++;
}
closedir(dp);
}
299デフォルトの名無しさん:2009/01/15(木) 19:23:41
dirent.h使えば何とかなるだろ
多分その環境ならあるだろう
300デフォルトの名無しさん:2009/01/15(木) 19:52:06
>>298
readdir()がNULLを返すまで繰り返さないと、ディレクトリに何個ファイ
ルが存在するかはわからなかった気がする。
簡単にやるには、readdir()ループでファイル名をぜんぶ記録して、総数
がわかってから確率で選んで、実際の処理をする。

301デフォルトの名無しさん:2009/01/15(木) 19:52:30
>>298
うまい方法はないので、一旦全部のファイルを読んで
数とファイル名を覚えておく。そのあと、そこからランダムに選んでいく。

ランダムに選ぶのを厳密にやるのは面倒だけど、そこを気にしては
いないでしょ?
302デフォルトの名無しさん:2009/01/15(木) 20:11:08
>>298
ちなみに、乱数の揺らぎのせいで選出パターンがリストの序盤に偏ったり、
逆に必要数が集まらなかったりするので、厳密にやろうとすれば

1.ファイル情報を全て配列に並べる
2.乱数を使ってソーティングする
3.上から必要な分だけ選ぶ

という流れになる。

ランダムソートのコストが大きいのであれば、ちょっと低めの確率で2〜3回リストを
走査して必要数が集まるようにすれば、それっぽい動きをするでしょう。
303302:2009/01/15(木) 20:14:03
ぬ、書いてる間に書き込みがw
>>301さんの言うように、重複チェックして選ぶ方がシンプルです。
304デフォルトの名無しさん:2009/01/15(木) 20:27:22
>>298
ふっ、この程度のもの、プログラミングを職としていない俺でも
昼食前だぜ
305デフォルトの名無しさん:2009/01/15(木) 20:43:05
C++の本を見ると[a, b)というようなのが出てくるんだけど、これなんですか?
306デフォルトの名無しさん:2009/01/15(木) 20:44:26
>>305
C++ というより数学の記号
開区間と閉区間でぐぐれば分かるんじゃねー
307デフォルトの名無しさん:2009/01/15(木) 20:44:59
ちなみにそれはa 以上、b未満って言う意味だね
308デフォルトの名無しさん:2009/01/15(木) 20:57:05
(a, b) : a < x < b
[a, b] : a <= x <= b
[a, b) : a <= x < b
309デフォルトの名無しさん:2009/01/15(木) 21:16:29
おーそうだったのか!
みんな頭いいな。
310デフォルトの名無しさん:2009/01/15(木) 21:33:45
>>289
http://msdn.microsoft.com/en-us/library/ms533798.aspx
ここを読む限り、NT 4 SP6はいいが95はだめそうだ。
311298:2009/01/15(木) 21:46:06
>>299-304
みんなレスありがとー
ファイル名全部を配列に保持して、インデックスをランダム抽選するのですね
C初で関数名が鮭わかめですがググル先生とがんばってみまう
312デフォルトの名無しさん:2009/01/15(木) 23:35:52
ファイル名を、入る(ふぁいる)だけ記憶するの?
313デフォルトの名無しさん:2009/01/16(金) 17:16:15
すいません下のコードの場合、castの際に + '0' を付けるとどういう意味があるか教えてもらえないでしょうか?

static char name[30];
static int sequence = 0;

name[3] = static_cast<char>(sequence + '0');

314デフォルトの名無しさん:2009/01/16(金) 17:25:50
sequence が十進法で一桁の数字なら、それに '0' を足すことでASCIIコードの数字になる。
例えば sequence = 1 なら、sequence + '0' ==> '1' といった具合に。
315デフォルトの名無しさん:2009/01/16(金) 18:11:05
>>314

ありがとうございます!
単にchar型にキャストするだけじゃ文字には変換されないんですね。
316デフォルトの名無しさん:2009/01/16(金) 20:25:06
std::istream::get()で、終端子の取り扱いをread()のようにするにはどうすれば
いいですか?イテレータで詰まってます。
317デフォルトの名無しさん:2009/01/16(金) 22:30:24
お金が無いので、無料の開発環境で作りたいのですが、
グーグルで「C++ 開発環境 無料」での一番上のサイトで揃えようとしましたが、
デバッカーだけ揃えられませんでした。

デバッカーをダウンロードできる項目と
上記の環境以外で、無料開発環境のオススメを教えて下さい。

お願いします。
318デフォルトの名無しさん:2009/01/16(金) 22:31:40
WindowsならVisual C++ 2008 Express使っておけ。
もっとも、Windowsが無料じゃないというのが手落ちだが。
319デフォルトの名無しさん:2009/01/16(金) 22:38:35
Windows -> Visual C++ 2008 Express
Mac OS X -> XCode(OS に同梱)
Linux -> Eclipse

これでおk
320デフォルトの名無しさん:2009/01/16(金) 22:41:25
Eclipseってデバッガなの?
321デフォルトの名無しさん:2009/01/16(金) 22:46:13
いやIDEだよ
322デフォルトの名無しさん:2009/01/16(金) 22:50:07
だよな。
323デフォルトの名無しさん:2009/01/16(金) 22:52:23
それが何か?
324デフォルトの名無しさん:2009/01/16(金) 22:58:37
いや、べつに。
325デフォルトの名無しさん:2009/01/16(金) 23:00:11
うん。
326デフォルトの名無しさん:2009/01/16(金) 23:02:33
しゃぶれよ
327デフォルトの名無しさん:2009/01/16(金) 23:14:31
bcc も gcc も vc も実質ついてるようなもんだが
328デフォルトの名無しさん:2009/01/16(金) 23:38:48
変な質問かもしれませんが・・・

VisualStudio6.0を使ってC言語の勉強をしています
コンソールアプリケーションで色々書いて動かしているようなレベルなのですが
ファイル名の命名規則のようなものがあったら教えて頂けないでしょうか?

変数や関数の命名規則は色々出てきたのですが、
ファイル名の命名規則のようなものが見つけ切れませんでした
例えばソースファイルならこのような形式の名前のファイルにするとか
大文字だとかそういうルール的なものがあればという意味合いなのですが
もし、そんなルールがないのでしたら一般的な一例を教えて頂ければと思います

変な質問で恐縮ですが、宜しくお願いします
329デフォルトの名無しさん:2009/01/17(土) 00:07:09
source_file.c
SourceFile.c
sourceFile.c
source-file.c
source file.c
ソースファイル.c

好きなの使っとけ。
330デフォルトの名無しさん:2009/01/18(日) 01:09:25
質問させて頂きます。

for(・・・) {
for(・・・) {
switch(・・・) {
case *:
・・・
}
}
}

というようなループ機構で、ループ内でswitch分岐を行っているのですが、
ループ回数がかなり多く、高速化のため分岐を外に出しました。
つまり同じループ機構をいくつか書いて、ループ内でなるべく条件判定を
行わないようにしたのですが、実際このループ部分も結構色々書いてまして、
同じ文を何度も書くと結構な量です。さらにこうなると後の修正も非常に面倒になりますので、
何とか同じ文を何度も書かずに済む方法はないかと思っています。
結果的に分けられたループそれぞれの違いはループ内だけになるのですが、
何かうまい方法はありませんでしょうか?

例えばテンプレートなんかだと、結構似たようなことが出来ますが、
あれは型や値で分けることしか出来ないみたいですね。
ループ前後をマクロ化するというのも考えましたが何か不格好な・・・。
ちなみにループひとつでおよそ50行くらいです。
331デフォルトの名無しさん:2009/01/18(日) 01:34:46
なーんか要領を得ない文章だな

あと条件判定が外出しすることで高速化した、と言ってるようだが
普通、条件判定みたいに一瞬で終わるものを外に出しても
高速化しない。
332デフォルトの名無しさん:2009/01/18(日) 01:39:32
アホは黙ってていいよ
333デフォルトの名無しさん:2009/01/18(日) 02:08:23
コンパイラを信じてinline関数を使うんだ。
334デフォルトの名無しさん:2009/01/18(日) 02:41:35
ループの一番内側の処理だけ変更したいってことだろ?
関数オブジェクトあたりを使うといいんじゃないだろうか
335317:2009/01/18(日) 11:43:59
遅くなりましたが、>>318さん、有難うございます。
早速、試してみます。
336デフォルトの名無しさん:2009/01/18(日) 13:22:37
Visual C++ 2008 Expressをインストールしましたが、
開発環境を立ち上げる事ができません。
どうやって起動すればいいでしょうか?

因みに、
>もっとも、Windowsが無料じゃないというのが手落ちだが。
はどういう意味でしょうか?
337デフォルトの名無しさん:2009/01/18(日) 13:45:37
WindowsというOS自体が無料じゃないと言っているだけだな。
まぁ、バンドル品しか買ってないと気がつきにくい話ではあるが。
338デフォルトの名無しさん:2009/01/18(日) 13:46:23
>>336
困ったものですね
339デフォルトの名無しさん:2009/01/18(日) 15:50:57
>>336
VC++のアイコンがデスクトップにあれば、それをダブルクリックすると起動するよ。
あるいは、デスクトップ左下のスタートアイコンの「すべてのプログラム」からVC++をさがしてクリックすれば起動するはず。
340デフォルトの名無しさん:2009/01/18(日) 18:37:10
#include <iostream>

int main(void)
{
char* str;
str = "string";
std::cout << str << std::endl;

return 0;
}

のようにすると↓の警告が出るのですが,どのように書くのが自然なんでしょうか?

test2.cpp: In function 'int main()':
test2.cpp:6: warning: deprecated conversion from string constant to 'char*'
341デフォルトの名無しさん:2009/01/18(日) 18:38:01
const char* str;
342デフォルトの名無しさん:2009/01/18(日) 18:40:05
const char * str = "string";
343デフォルトの名無しさん:2009/01/18(日) 18:43:54
const char * const str = "string";
344デフォルトの名無しさん:2009/01/18(日) 18:45:18
>>341-343
なるほど分かりました.
Java のように文字列が string 型扱い…ということではなかったんですね
345デフォルトの名無しさん:2009/01/18(日) 18:49:43
うん。文字列リテラルの型はconst charの配列だ。
Cとの互換のためchar*への変換が可能になっている。

まあstring型は別にあるけど、それはともかく。
346デフォルトの名無しさん:2009/01/18(日) 18:55:32
「Cとの互換のため」←ウソ

CもC++も初めからconst charの配列。
互換のためでも何でもなく、変換はそもそも可能。
347デフォルトの名無しさん:2009/01/18(日) 19:02:06
C99でさえcharの配列(ただし書き変えちゃダメ)だよ。
constが無かった時代を引きずっている。
348デフォルトの名無しさん:2009/01/18(日) 19:24:47
>>346
何を血迷ってるんだ。
リテラルを書き換えられた古代の C との互換性のため
ANSI C でしかたなく char* への変換を可能にして、
それとの互換性で C++ でも同様にしてるんじゃないか。
349336:2009/01/18(日) 20:40:24
>>339さん、
なぜか、すべてのプログラムの項目にもVC++の欄は無く、
デスクトップには、リンク先が「F:\vcsetup.exe」の「vcsetup へのショートカット」
というアイコンしか出ませんでした・・・orz
350デフォルトの名無しさん:2009/01/18(日) 21:04:05
それはダウンロードしただけでインストールしていないというオチに見える。
351デフォルトの名無しさん:2009/01/18(日) 22:39:44
#include<stdio.h>

int ave(int x[5]);
int main(void);

int ave(int x[5])
{
return((x[0]+x[1]+x[2]+x[3]+x[4])/5);
}

int main(void)
{
int y[5];

scanf("%d,%d,%d,%d,%d",&y[0],&y[1],&y[2],&y[3],&y[4]);
printf("平均値 %d\n",ave(y[5]));
return(0);
}
でコンパイルすると
17行目の部分で
パラメータ`x`は int*型として定義されているのでintは渡せない(関数main)
とエラーが出るのですが、どのようにすればいいのでしょうか?教えてください。

352デフォルトの名無しさん:2009/01/18(日) 22:43:30
> printf("平均値 %d\n",ave(y[5]));

printf("平均値 %d\n",ave(y));

353デフォルトの名無しさん:2009/01/18(日) 22:44:29
yはint[5]
y[5]はint
354デフォルトの名無しさん:2009/01/18(日) 22:45:18
ave(y)
355デフォルトの名無しさん:2009/01/18(日) 23:10:26
352、353、354さん
ありがとうございました。
356デフォルトの名無しさん:2009/01/19(月) 01:00:25
>>334
関数をテンプレートにして、関数オブジェクトを使えば確かにできそうですね。
しかし実際やってみると本当にインライン展開してくれるのかが不安です・・・
もし展開されてないと呼び出しオーバーヘッドが発生しては意味がないので。
357デフォルトの名無しさん:2009/01/19(月) 01:01:15
案ずるよりも産むがやすし
358デフォルトの名無しさん:2009/01/19(月) 15:10:53
1.多角形の頂点座標を保存するため、int型2次元配列 coor を用いる。
各行はひとつの三角形を示す。1行の各数値は三角形の頂点座標を示している。
例えば、三角形A0A1A3の場合、その行の各列の要素は{x0,y0,x1,y1,x3,y3}となる。
下記をそのまま使え。
int coor[NUM][6] = {{4, 3, 2, 3, 5, 1},
{2, 3, 0, 2, 5, 1},
{0, 2, 5, 1, 3, 0}};

2.マクロNUMで三角形の数を3と定義する。
3.NUM個に三角形面積を保存するため配列triangle_areaを用いる。
4.三角形面積を計算する関数calc_triangle_areaを作成する。
引数は三角形の各頂点座標(整数)、例えば、三角形A0A1A3の場合、引数は(x0, y0, x1, y1, x3, y3)となる。
戻り値は面積(単精度浮動小数点)とする。

実行例% ./a.out
該当多角形の面積は 9.00である。
3 個の三角形の面積は下記のとおりである。
2.00
3.50
3.50
359デフォルトの名無しさん:2009/01/19(月) 15:13:58
そうですか
360デフォルトの名無しさん:2009/01/19(月) 15:32:34
テキストで
a * 3.14 / (4 + b) + e ^ (3c)
などと書かれたテキストを解析して計算させようとおもっているのですが、
こういうのってなんて言うんですか?
(数式処理プログラム…とはちょっと違いますよね)

実現できるライブラリや、開設サイトとかありましたらご教授ください。
361358:2009/01/19(月) 15:33:00
#include<stdio.h>
#include<math.h>
#define NUM 3
main(){
int i;
float s1, s2, s3, triangle_area;

int coor[NUM][6] = {{4, 3, 2, 3, 5, 1},
{2, 3, 0, 2, 5, 1},
{0, 2, 5, 1, 3, 0}};

s1 = fabs((coor[0][2] - coor[0][0])*(coor[0][5] - coor[0][1]) - (coor[0][4] - coor[0][0])*(coor[0][3] - coor[0][1]))/2;
s2 = fabs((coor[1][2] - coor[1][0])*(coor[1][5] - coor[1][1]) - (coor[1][4] - coor[1][0])*(coor[1][3] - coor[1][1]))/2;
s3 = fabs((coor[2][2] - coor[2][0])*(coor[2][5] - coor[2][1]) - (coor[2][4] - coor[2][0])*(coor[2][3] - coor[2][1]))/2;

printf("%d 個の三角形の面積は下記のとおりである。\n", NUM);

printf("%f\n", s1);
printf("%f\n", s2);
printf("%f\n", s3);
triangle_area = s1 + s2 + s3;

printf("該当多角形の面積は%f\n", triangle_area);
return 0;
}
例のとおりに表示するにはどうすればいいのでしょう?
362デフォルトの名無しさん:2009/01/19(月) 15:40:34
printf("該当多角形の面積は%.2fである\n", triangle_area);
printf("%d 個の三角形の面積は下記のとおりである。\n", NUM);
printf("%.2f\n", s1);
printf("%.2f\n", s2);
printf("%.2f\n", s3);

ということ?
363デフォルトの名無しさん:2009/01/19(月) 15:44:38
>>360
yaccとかlexの話かな?
364358:2009/01/19(月) 15:59:17
>>362
そうすると実行例どおりに行くんですが、
問題文に沿ってプログラムを書いたらどうなるんでしょうか?
365デフォルトの名無しさん:2009/01/19(月) 16:03:23
宿題丸投げなら該当スレあるよ。
もともと質問が表示するにはどうしたらいいか?だったからprintfしか書かなかったが。
366デフォルトの名無しさん:2009/01/19(月) 16:48:39
問題文にあわせるとこんな感じ?(改行大杉言われたからつめた)

#include<stdio.h>
#include<math.h>
#define NUM 3
double calc_triangle_area(int x0, int y0, int x1, int y1, int x2, int y2);
int main()
{
int i;
double triangle_area[NUM];
double sum = 0.0;
int coor[NUM][6] = {{4, 3, 2, 3, 5, 1},
{2, 3, 0, 2, 5, 1},
{0, 2, 5, 1, 3, 0}};
for (i = 0; i < NUM; i++) {
triangle_area[i] = calc_triangle_area(coor[i][0], coor[i][1], coor[i][2], coor[i][3], coor[i][4], coor[i][5]);
sum += triangle_area[i];
}

printf("該当多角形の面積は%.2fである\n", sum);
printf("%d 個の三角形の面積は下記のとおりである。\n", NUM);
for (i = 0; i < NUM; i++) {
printf("%.2f\n", triangle_area[i]);
}
return 0;
}
double calc_triangle_area(int x0, int y0, int x1, int y1, int x2, int y2)
{
return fabs((double)((x1 - x0)*(y2 - y0) - (x2 - x0)*(y1 - y0)))/2;
}
367358:2009/01/19(月) 17:11:57
>>366
参考になります、ありがとうございました。
368360:2009/01/19(月) 18:13:53
>>363
うーん、コンパイラコンパイラとはちょっと違うと思います…

上手く説明できてないんですけど、
たとえば、aとbとcという変数があったとき、
それを
a * 3.14 / (4 + b) + e ^ (3c)
とか、
a * log(b) + c
とか、任意の式を文字列で与えて計算できるようにしたい…という感じです。

BearGraph(グラフ描画ソフト)で、式を入れると、それを解析して、
変数に応じたグラフを吐いてくれる…みたいな使い方です。

…とBearGraphのヘルプ見たらなんとかなるんじゃないかと思い、参考文献読みあさったら、
アルゴリズム事典の"式の評価"の所にそれらしきものが載っていました(四則演算のみですが)。

ちょっとこれをいじって関数使えるように挑戦してみますが、
もし既にこんな事ができるライブラリがありましたらご教授願います。
369デフォルトの名無しさん:2009/01/19(月) 19:17:08
>>368
「逆ポーランド記法」で頑張れ。
370デフォルトの名無しさん:2009/01/19(月) 19:18:29
し・・・・・・知らーーーーーーーんッ!!!

そんなのは自分で考えェェ!!!
371デフォルトの名無しさん:2009/01/19(月) 22:02:20
>>368
スタックマシーン
372デフォルトの名無しさん:2009/01/19(月) 22:05:17
>>368
二分木
373360:2009/01/19(月) 22:26:26
>>369
これすごいw 知らなかったw
ちょっとがんばってみるww

>>368-369
一口に式の評価といっても、いろいろあるんですね…
勉強になりました。ありがとうございました。
374デフォルトの名無しさん:2009/01/19(月) 22:31:08
数式位なら、boost::spiritがお手軽。
375デフォルトの名無しさん:2009/01/19(月) 22:31:35
逆ポーランド記法で直接式を書かせる計算機を作るつもりじゃないだろうね?w
まあそれはそれで面白いけど、
計算式を構文解析して内部的に逆ポーランド記法みたいな状態にコンパイルしてから
スタックマシンに計算させるって使い方が普通じゃね。
376デフォルトの名無しさん:2009/01/19(月) 22:45:31
式のパーシングをしたければ再帰降下法でゴリゴリと書いてしまうのがお手軽
たぶんコンパイラの教科書の最初の方(構文解析のところ)に載ってるよ
377デフォルトの名無しさん:2009/01/19(月) 22:50:31
中値記法は記号の間に空白入っても入らなくてもいいけど
逆ポーランド記号は確実に入るから
構文解析が楽なのかね

とこの流れを見てふと思った
378デフォルトの名無しさん:2009/01/19(月) 22:53:26
3 1 2+-
379デフォルトの名無しさん:2009/01/19(月) 22:57:58
逆ポーランド記法はコンパイラの本なら必ず載ってる基本だけど、
この場合はyaccとlexでいいんじゃないかと思う
380デフォルトの名無しさん:2009/01/19(月) 23:01:35
でも自分で構文解析するのも面白いよ。
yacc/lex だとプログラムの組み方にも変な制限かかるしね。
381デフォルトの名無しさん:2009/01/19(月) 23:03:35
lex ってライブラリをリンクしないといけなかった気がする。
公開したい場合は面倒なんだよな。
382デフォルトの名無しさん:2009/01/19(月) 23:34:04
スクリプト言語処理系呼び出せば簡単に計算できるけどね。
cf.
system("awk 'BEGIN {a = 3; b = 4; c = 5; print c * c - a * a - b * b;}'");
383デフォルトの名無しさん:2009/01/19(月) 23:35:53
俺もその手のコマンド作ってるわw
Ruby で計算させるやつ。
384349:2009/01/19(月) 23:50:20
>>350さん、
「Program Files」の「Microsoft Visual Studio 9.0」というフォルダの中に
「Microsoft Visual C++ 2008 Express Edition with SP1 - JPN」や「VC」がありますが、
確かにsetupと書いてあるので、
おそらくインストールされていないでしょうが、
私の使っているパソコンには、Fドライブはありませんですし、
それに至るプロセスが無い以上、どうする事も出来かねます。
385デフォルトの名無しさん:2009/01/20(火) 00:41:38
0〜1000乱数を1000回、発生させたいのですが、
重複しないようにするには、これまで発生した数すべて記憶するほか術はないのでしょうか
386デフォルトの名無しさん:2009/01/20(火) 00:46:43
>>385
記憶っていうか、そういうことをするなら、配列に0〜1000の値を
入れておいて、シャッフルするのがふつーだと思う。
387デフォルトの名無しさん:2009/01/20(火) 00:47:05
>>385
for(i=0;i<=1000;i++)
a[i]=i;

for(i=0;i<適当に;i++)
swap(&a[rand()%1001], &a[rand()%1001]);

こんなんでどうよ?
swap()は適当に実装よろ
388デフォルトの名無しさん:2009/01/20(火) 00:50:37
>>386
即レスありがd
シャッフル同盟について調べてみるお
GO FIGHT

>>387
100回くらい読んだけどわかんないお・・・(^オメガ^;)
swapについて調べてみるお
389デフォルトの名無しさん:2009/01/20(火) 00:52:48
>>386さんの言うシャッフルをコードにしてるだけさね
390デフォルトの名無しさん:2009/01/20(火) 00:54:12
>>388
シャッフルって言うか、スワップっていうか
http://www.tbs.co.jp/loveshuffle/
391387:2009/01/20(火) 01:05:59
インデックスを両方rand()使うとスワップされないところが出てくるな
for(i=0;i<=1000;i++)
swap(&a[i], &a[rand()%(i+1)]);
こっちのがよさげだわ
392デフォルトの名無しさん:2009/01/20(火) 01:15:43
>>385
for(i=0; i<=1000; i++) {
j = rand() % (i + 1);
a[i] = a[j];
a[j] = i;
}
393デフォルトの名無しさん:2009/01/20(火) 01:18:13
すみません、質問させてください
CALLBACK関数のポインタを受け取りたいんですけど、書き方がどうしてもわからずに相当なやんでます。
使ってるのはVC++ .NET、 Cで書いてます。


void CALLBACK print_status(UINT wTimerID, UINT msg, DWORD dwUser,
DWORD dw1, DWORD dw2){
}

void timerset(void CALLBACK (*func)(UINT, UINT, ULONG, ULONG, ULONG),
UINT time_delay, UINT event){
}

main(){
   timerset(print_status, TIME_WAIT, TIME_ONESHOT);
}

エラーログ
C2143: 構文エラー : ')' が '*' の前にありません。
C2143: 構文エラー : ')' が '*' の前にありません。
C2143: 構文エラー : '{' が '*' の前にありません。
C2059: 構文エラー : ')'
C2059: 構文エラー : '型'
C2059: 構文エラー : ')'

括弧がどうとか、ってことなんですけど・・・
394385:2009/01/20(火) 01:21:02
ありがとーなんとかイメージがつかめてきました

>>392
私のa[i]を返して!!!!!!!
395デフォルトの名無しさん:2009/01/20(火) 01:40:07
>>393
俺は関数ポインタを扱うときは(メンバ関数も含め)必ずtypedefするようにしてる。
だからどうやったらエラーが消せるかわからない。
396デフォルトの名無しさん:2009/01/20(火) 01:41:20
>>391の方法はシャッフル前の並びに依存して
シャッフル後の並びに確率的な偏りが生じるから注意
397デフォルトの名無しさん:2009/01/20(火) 01:46:21
生じませんw
398デフォルトの名無しさん:2009/01/20(火) 01:53:45
どっち?
399デフォルトの名無しさん:2009/01/20(火) 01:54:36
>>393
void timerset(void (CALLBACK *func)(UINT, UINT, ULONG, ULONG, ULONG),
UINT time_delay, UINT event)
400デフォルトの名無しさん:2009/01/20(火) 01:55:13
>>393

void timerset(void CALLBACK (*func)(UINT, UINT, ULONG, ULONG, ULONG),UINT time_delay, UINT event)


void timerset(void (CALLBACK *func)(UINT, UINT, ULONG, ULONG, ULONG),UINT time_delay, UINT event)

死ねよw
401デフォルトの名無しさん:2009/01/20(火) 01:56:08
素直にstd::random_shuffle使え。
C++じゃないならあきらめろ。
402デフォルトの名無しさん:2009/01/20(火) 01:57:09
>>398
生じる

まともにやりたきゃ、1から1000のリンクリスト作ってランダムで1個ずつ抜いていけ
403デフォルトの名無しさん:2009/01/20(火) 01:57:26
>>393です

ありがとうございます!
今日の夕方から調べたり試したりしてたので、多分7時間くらいはなやんでましたw

死んできますw
404デフォルトの名無しさん:2009/01/20(火) 01:59:18
>>402
プw
for(i=0;i<=1000;i++)
a[i]=i;
で初期化して
for(i=0;i<=1000;i++)
swap(&a[i], &a[rand()%(i+1)]);
すれば偏りなんてありませんw
405デフォルトの名無しさん:2009/01/20(火) 02:09:13
>>404
試せよカス
406デフォルトの名無しさん:2009/01/20(火) 02:13:38
>>405
お前が試せよ、カスがw
407387:2009/01/20(火) 02:36:52
インクリメントでループしてんのがまずいのかな?
デクリメントループだとFisher-Yatesのアルゴリズムと言われるみたいだな。
根拠となる文献示してもらえると無駄にあれなくて済むから
偏るって言ってる人はキーワードだけでも教えてもらえるとうれしい。
この辺で今日は寝る
408デフォルトの名無しさん:2009/01/20(火) 04:06:38
>>406
カスがカスに向かってカスとは、失礼だろw このクズがw
409デフォルトの名無しさん:2009/01/20(火) 05:38:15
>>388
(^オメガ^;)
410デフォルトの名無しさん:2009/01/20(火) 05:42:58
おめーがな
411デフォルトの名無しさん:2009/01/20(火) 08:03:42
>>404
どう考えても偏ります。本当にありがとうございました。
412デフォルトの名無しさん:2009/01/20(火) 08:35:04
&a[(int)((double)rand()/(double)RAND_MAX*(i+1))]こういうこと?
さっぱりわからん
413デフォルトの名無しさん:2009/01/20(火) 10:17:16
シャッフルに関してはこれで
ttp://d.hatena.ne.jp/bellbind/20081105/
414デフォルトの名無しさん:2009/01/20(火) 10:44:37
>>413
まじでありがとう。
なんとなくわかってきたわ。
415デフォルトの名無しさん:2009/01/20(火) 11:18:27
ifstream data_in(argv[1]); // 入力ファイル

while(data_in.eof()){
416デフォルトの名無しさん:2009/01/20(火) 11:24:12
while(!data_in.eof()){
417デフォルトの名無しさん:2009/01/20(火) 11:25:01
すいません、教えてください

ifstream data_in(argv[1]); // 入力ファイル
int num;

while(!data_in.eof()){
data_in >> num;
       cout << num;
}

return(0);

とするとですね、空っぽのファイルを読み込む場合、
EOFを読む前に一回loopに入ってしまうみたいなんですが、
どうすればloopに入らないようにできるんでしょうか?
あと入力ファイルに文字列が含まれていた場合、止まらなくなったんですが
どういう挙動が起こっているのかも教えてほしいです
418デフォルトの名無しさん:2009/01/20(火) 11:32:07
そりゃあ一回は読まないとeofかどうかわからんからな。
419デフォルトの名無しさん:2009/01/20(火) 11:40:40
eof()やfeof()、或いはferror()もそうだが、
その系統は全て、「前回読んだ結果EOFに達したかどうか」の判定をしているだけ。
while (feof()) {...} みたいなループはおそらく意図通りには動かない。

また、数字を読みたいのに数字以外が入力されたときは
入力エラーということだけを返して
次回の入力はまた同じ位置から始まるので、また同じエラーが繰り返される。
詳しくはscanf+無限ループあたりでぐぐるとよいかも。
420デフォルトの名無しさん:2009/01/20(火) 11:54:54
>>417
while (!data_in.eof()) {
  data_in >> num;
  if (data_in.fail()) break;
  cout << num;
}

- 読み込みに失敗した場合は failbit が立つ
- 一度も読み込んでいない時点ではファイルが空かどうかはわからないので
 その時点では eofbit は立っていない。
 読み込もうとした後に eofbit が立つ(読み込みに失敗するので failbit も立つ)

>>419
C++のストリームの場合は、データを成功裏に読み込んだ後に
ちょうどぴったりEOFに到達した場合は eofbit が立つよ。
今回の場合は意味がないわけではない。

ファイルの中身が
  12345<EOF>
の場合、一度数字を読み込んだ後に eofbit が立つ(failbitは立たない)。

ただ、
  12345<改行><EOF>
の場合は一回読み込んだだけでは eofbit も failbit も立たないけどね。
421デフォルトの名無しさん:2009/01/20(火) 12:02:39
いやそれはscanfでも同じだから
422デフォルトの名無しさん:2009/01/20(火) 12:04:14
いやと言われてもな・・・
423デフォルトの名無しさん:2009/01/20(火) 12:04:49
「前回の読み込みで(読み込みフォーマットと一致している状態で)
次の文字を読み込もうとしてEOFに達した」というのも
「前回の読み込みでEOFに達した」に含まれるでしょ。
424デフォルトの名無しさん:2009/01/20(火) 12:05:19
>> 418-420

みなさんありがとうございます!勉強になりました。
そこそこ高い参考書を買ったんですが、
細かい所までは載ってないんですよね
425デフォルトの名無しさん:2009/01/20(火) 12:13:44
>>422
だから>>420の「C++のストリーム云々」が関係ないっての。
12345<EOF>をscanf("%d")しても読み込めるし、(FILE構造体内の)eofビット立つっての。
426デフォルトの名無しさん:2009/01/20(火) 12:18:31
それと「いや」のどこが関係あるんだか
427デフォルトの名無しさん:2009/01/20(火) 12:23:48
>>420「C++のストリームの場合」
>>421「いや、C++のストリームだけじゃないよ」

どこがおかしいの?
428デフォルトの名無しさん:2009/01/20(火) 12:27:47
おかしいだろ、よく読め
429デフォルトの名無しさん:2009/01/20(火) 12:29:10
>>420はそれ以外でのことを否定してるわけじゃないのに、かみついてるのがおかしいね。
430デフォルトの名無しさん:2009/01/20(火) 12:31:23
なんで?

そもそも、
>ちょうどぴったりEOFに到達した場合は eofbit が立つよ。
自体がおかしいんだから。
「ちょうどぴったりだった」じゃなくて、
「次を読もうとして一致しなかった(EOFだった)」からeofbitが立つのであって
全然>>419の「前回読んだ結果がEOFだったかどうかの結果を示す」の反論になってない。

その上で、わざわざ「C++の場合は意味があるよ」と言ってるが
その程度の「意味があるよ」なら「C++に限らない」というだけ。
431デフォルトの名無しさん:2009/01/20(火) 12:35:10
まさか
「C++の場合はEOFの位置を読もうとトライして失敗した結果じゃなく、
ファイルサイズを知っていて12345<EOF>の<EOF>を読み込もうとはしていない」
と言いたいわけじゃあるまい。
432デフォルトの名無しさん:2009/01/20(火) 12:49:18
つまり、
int n;
cin >> n;
というコードがあるとして、

>>419は、cin >> n; が失敗したかどうかに関係なく
「読み込みのときにEOFに達したら」eof()になるという話なのに
>>420が「cin >> n; が失敗したら」と読み取って
「ちょうどぴったりだと、」という話を始めたんだろ?

だから、「それは(C++のstreamに限らず)一般的なことで、当然である」
ということなんだが。
433デフォルトの名無しさん:2009/01/20(火) 13:48:52
はじめまして。
私は趣味で音声認識をやってみたいと思い手始めにMicrosoftの Speech SDK 5.1 のSimple Dictationを使ってみることにしました。
言語はc++です
使用しているosはwindows2000で環境はmicrosoft visual studio 2005 を使用しています。
しかしこのプログラムをコンパイル使用とすると以下のようなエラーが出ました。


//エラー始め
c:\program files\microsoft speech sdk 5.1\include\sphelper.h(2559) : error C2440: '初期化中' : 'CSpDynamicString' から'SPPHONEID *' に変換できません。
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。
c:\program files\microsoft speech sdk 5.1\include\sphelper.h(2634) : error C2664: 'wcslen' : 1 番目の引数を'SPPHONEID *' から'const wchar_t *' に変換できません。(新しい機能; ヘルプを参照)
指示された型は関連がありません。変換にはreinterpret_cast、C スタイルキャストまたは関数スタイルのキャストが必要です。
ブラウザ情報ファイルを作成しています...
//エラー終わり

googleでreinterpret_castを調べてみたのですが、関数のようなものの使い方がよくわからずに困り果てています。
型の変換をしたらいいということまではわかったのですが…
どなたか解決策を教えていただけないでしょうか??
434デフォルトの名無しさん:2009/01/20(火) 13:55:07
#include<stdio.h>
#include<stdlib.h>
int calc(char, int, int);
main(){
int a, b, result;
char command;
while(1){
printf("5*3 のように入力してください(終了 0#0) ==>");
scanf("%d %c%d", &a,&command,&b);
if(command == '#') exit(0);
result =calc(command, a, b);
printf("%d %c %d = %d\n", a, command, b, result);
}
}

上記をどう直せばコンパイル成功しますか?
1-10.c:5: warning: return type defaults to `int'
/省略/cc96Wza0.o:1-10.c:(.text+0x7f): undefined reference to `_calc'
collect2: ld returned 1 exit status
435デフォルトの名無しさん:2009/01/20(火) 14:00:43
int calc(char, int, int)
{ return 0; }

を付け加えるというのでどうだろう
436デフォルトの名無しさん:2009/01/20(火) 14:16:21
>>435
うまくいきませんでしたが、ありがとうございます。
437デフォルトの名無しさん:2009/01/20(火) 14:36:05
>>433
Speech知らんけどググったらこんなのが
ttp://www.wasamon.net/miyo/Diary%252F2007%252D12.html
438デフォルトの名無しさん:2009/01/20(火) 15:14:36
>437
神きたーー!!
そのまんまコピペでコンパイルできました!!
ありがとうございます!
ほんとにたすかりました
439デフォルトの名無しさん:2009/01/20(火) 18:12:47
コンパでコンパイル、なんちってw
440デフォルトの名無しさん:2009/01/20(火) 18:26:44
山田君 >>439 の座布団と生爪全部取っちゃって。
441デフォルトの名無しさん:2009/01/20(火) 19:45:03
生爪もかよ!
442デフォルトの名無しさん:2009/01/20(火) 20:06:50
http://www2.uploda.org/uporg1949857.cpp

エラー E2451 C:\Documents and Settings\Owner\デスクトップ\bccdev1221\c\windowtest\windowtest.cpp 47: 未定義のシンボル jitama(関数 shooting() )
エラー E2451 C:\Documents and Settings\Owner\デスクトップ\bccdev1221\c\windowtest\windowtest.cpp 48: 未定義のシンボル jikidata(関数 shooting() )

すみません質問してください
何故「未定義のシンボル」エラーが出るのでしょうか?
それと47,48行目でエラーが出ているのに何故49,50行目でエラーが出ていないのかもわかりません。
(if(CheckHitKey(KEY_INPUT_Z) == 1 && jitama.shooting == 0){ が47行目です)
443デフォルトの名無しさん:2009/01/20(火) 20:07:20
してくださいじゃないさせてくださいだorz
444デフォルトの名無しさん:2009/01/20(火) 20:10:22
struct CharaData{
int x;
int y;
int ghandle;
int shooting;
};




struct CharaData jikidata;
struct CharaData jitama;


#include "DxLib.h"
の直後に移動させるといいよ


しかいスコープを全く理解していないんだな
445デフォルトの名無しさん:2009/01/20(火) 20:18:36
動きました!ありがとうございました!
スコープの無い言語から最近C++に移ったもので、おっしゃる通りスコープの概念をまだあまり理解できてないです…
whileの外で宣言していたから大丈夫かと思ったのですが、どうやら違っていたようで…
本当にありがとうございました。
446デフォルトの名無しさん:2009/01/20(火) 20:50:51
C++の勉強始めてくる
447デフォルトの名無しさん:2009/01/20(火) 20:52:46
>>446で気付いたのですがこれc++じゃなくてcですねごめんなさい
買う本間違えました
448デフォルトの名無しさん:2009/01/20(火) 21:41:12
結局>>404は偏らないでおk?
449デフォルトの名無しさん:2009/01/20(火) 21:51:10
>>433
人の代わりにググろうと思ったら、マルチかよ。
http://oshiete1.goo.ne.jp/qa4645590.html
450デフォルトの名無しさん:2009/01/20(火) 21:52:28
では検証のためのプログラムを
451デフォルトの名無しさん:2009/01/20(火) 22:12:00
for(;;){


}
このような文があった場合、いつまでループするのでしょうか?
452デフォルトの名無しさん:2009/01/20(火) 22:12:39
break か return するまで
453デフォルトの名無しさん:2009/01/20(火) 22:13:25
goto で外に出ても終わりはするがおすすめはしない。
454デフォルトの名無しさん:2009/01/20(火) 22:17:35
>>452
ということは、それが前提だとたいてい
for文の中にif文があるということでしょうか?

break return gotoなきfor(;;)は無限ループということですよね
455デフォルトの名無しさん:2009/01/20(火) 22:18:19
例外でもループの外に出るよ
456デフォルトの名無しさん:2009/01/20(火) 22:21:48
すみません、例外とはどのようなときおきるのでしょうか?
457デフォルトの名無しさん:2009/01/20(火) 22:22:51
1/0とかで起きるんじゃなかったっけ?
458デフォルトの名無しさん:2009/01/20(火) 22:30:13
>>448
rand()に依存するため、どの道、何かしら偏りというのは起こる。
思い込みや勝手な持論を展開する奴ほど、厄介。
結果が全て物語っているんだが・・・結果を見ない奴もいるし。
459デフォルトの名無しさん:2009/01/20(火) 22:32:22
>>404
どっかのブログで、その方法は偏りがでるって解説してたな。
(rand()が偏りなくても)
460デフォルトの名無しさん:2009/01/20(火) 22:36:05
>>459
それがどこのブログか、どんな理由で偏りが生じるかがわかればすっきりするんだがな
461デフォルトの名無しさん:2009/01/20(火) 22:36:38
>>457
1/0ってなんでしょうか?
462459:2009/01/20(火) 22:41:35
>>460
今、ググったら>>404でいいみたいだな。
463デフォルトの名無しさん:2009/01/20(火) 22:46:06
>>461
ゼロ除算 これやると死ぬっていう話だったんだけど
ためしにVC2008でコードかいたらコンパイラに突っぱねられたorz
int a, b = 0;
a = 1/b;
とでも書いてみるといい
464デフォルトの名無しさん:2009/01/20(火) 22:52:59
>>458
そういう話じゃないじゃん。
結果って>>413のリンクのことを言っている?
465デフォルトの名無しさん:2009/01/20(火) 22:53:43
>>463
VC独自は置いとけば、

0除算で例外はおきないよ
466デフォルトの名無しさん:2009/01/20(火) 22:54:44
は?
467460:2009/01/20(火) 22:56:24
昇順ループで書いてるのが>>413さんの示してくれたものしか見当たらないのが気になる
他に見かけるのは全部降順ループになってるし
http://www.codinghorror.com/blog/archives/001015.html
この点で差が出てくるのかまだわからん

線形合同法は信用してないしrand()依存の偏りは同意するわ
個人的にここではスルーでいいと思ってたけど
468デフォルトの名無しさん:2009/01/20(火) 22:57:51
0除算で例外起きないね
469デフォルトの名無しさん:2009/01/20(火) 22:58:32
>>464
どんなアルゴリズムでも、rand()に依存するから
何かしら偏りはある
470デフォルトの名無しさん:2009/01/20(火) 22:58:35
>>465,468
まじすか?
ごめん 勘違いだったみたい
471デフォルトの名無しさん:2009/01/20(火) 23:00:38
クヌース先生じゃないですか
472デフォルトの名無しさん:2009/01/20(火) 23:00:47
0~4で3万回回してみたけど、特に出づらいパターンとか無いようだけど?
473デフォルトの名無しさん:2009/01/20(火) 23:04:09
>>469
そういうh(ry
474デフォルトの名無しさん:2009/01/20(火) 23:12:42
>>472
線形合同法で内部で32bitで計算して、上位16bitを返してる
実装だと、下位ビットの周期はたぶん6万くらいだから、
数十万とか数百くらいでためせば偏りがわかるかも。
475デフォルトの名無しさん:2009/01/20(火) 23:16:28
>>458
>>474
はなんで人の話聞かないんだろう・・・・・・
476デフォルトの名無しさん:2009/01/20(火) 23:18:57
>>475
お前が偏りに関して無知なだけ。
477デフォルトの名無しさん:2009/01/20(火) 23:20:32
>>476
rand()の偏りについてはだれも疑問にすら思ってないから安心しろ
478デフォルトの名無しさん:2009/01/20(火) 23:23:15
479デフォルトの名無しさん:2009/01/20(火) 23:23:52
>>476
rand()が理想的な一様分布の乱数と仮定したとき>>404のアルゴリズムに偏りが生じるかどうか答えてもらおうか
これでこの話も終わるだろ
480デフォルトの名無しさん:2009/01/20(火) 23:24:19
>>474
例えば4枚のカードをシャッフルする例で、三万回やれば24パターンが同数出るとでも思っているのか?
481デフォルトの名無しさん:2009/01/20(火) 23:25:49
>>470
VC++ では構造化例外という例外の独自拡張により
0 除算なども構造化例外を投げるよ。
482デフォルトの名無しさん:2009/01/20(火) 23:27:34
rand()を頼っている以上、それに応じた偏りは回避できない。
もしそれ以上追求したいなら、例えば1〜10までの値を扱う場合、
前半に5以下の値をいくつまでと決めるとか、何かしら手を加えなきゃ無理。
いくらあのアルゴリズムで並び替えても、連続する数字が並んでいたら
偏りと言ってしまえば、それまで。それも偶然か、rand()依存は関与してしまう。
483デフォルトの名無しさん:2009/01/20(火) 23:27:41
>>480
ほぼ同数でるんじゃね?
484デフォルトの名無しさん:2009/01/20(火) 23:28:05
整数0除算は例外を発生させるだろう、普通

と思ってたけど、ググると PowerPCは単に0を返すみたいだ。へえ
485デフォルトの名無しさん:2009/01/20(火) 23:32:53
>>483
オマエは実際やってみた方がいい・・・
486デフォルトの名無しさん:2009/01/20(火) 23:33:20
VC++ だと catch(...) や ___except で整数 0 除算をキャッチできる。
独自拡張だけどな。
487デフォルトの名無しさん:2009/01/20(火) 23:40:07
>>485
たった24パターンしかないのに、三万回もやってそんなに偏りはでないだろ。
488デフォルトの名無しさん:2009/01/20(火) 23:40:58
>>479
>>413で終わりにしよう。
489デフォルトの名無しさん:2009/01/20(火) 23:43:00
2次元配列の動的確保がうまくいきません。
http://www.aso.ecei.tohoku.ac.jp/~shun/multi_dim.html
にある様にやっているのですがうまくいきません。
↑の資料は合っていますか?
あと、画像処理で2次元配列の動的確保を行っているんですが
4167×4167のbitmapのメモリ動的確保はメモリくいすぎて
うまくいかないんでしょうか?
・・とおもって3×3のbitmapでやってもうまくいきません。。
490デフォルトの名無しさん:2009/01/20(火) 23:48:29
>>489
資料は合ってると思うけど
君の書いた奴を晒してくれないと
491デフォルトの名無しさん:2009/01/20(火) 23:50:48
0除算すると例外が発生してプロセスが死ぬよ
492デフォルトの名無しさん:2009/01/20(火) 23:51:42
>>489
二次元配列の作り方には主に3つある。
その中の1つが、そのサイトにある方法。
そのサイトにある方法は a[i][j] のように扱う事ができる代わりに、
二次元配列全体が連続領域にならないという欠点があるため、
bitmap を作る際に使う事はできない。

もう1つは一次元配列を二次元配列であるかのように使う方法。
この方法はさらに2つに分けられる。
1つは、a[i][j] のように使う事を諦め、a[i * width + j] のように扱う方法。
もう1つは、a[i * width] のアドレスを全て格納した b を作って b[i][j] のように扱う方法。
前者はメモリを食わない代わりに扱い辛い。
後者はメモリを食う代わりに扱いやすい。
bitmap のように連続領域を必要とする場合はこっちの方法を使う必要がある。

あと、bitmap の場合、幅のバイト数が4の倍数に満たない場合は
詰め物をして4の倍数にする必要もあるので注意な。
493デフォルトの名無しさん:2009/01/20(火) 23:56:17
>>491
シグナル関連の話なのか
構造化例外のことなのか

494デフォルトの名無しさん:2009/01/21(水) 00:01:48
この場で例外ハンドラを例外と呼称しないでよw
495デフォルトの名無しさん:2009/01/21(水) 00:04:14
C++ の try catch以外の、 で
496デフォルトの名無しさん:2009/01/21(水) 02:57:40
>>479
> >>404のアルゴリズムに偏りが生じるかどうか
環境依存。rand()を使用している以上、その仕様に依存する。
確率を調べようにも、結局、コンピュータが内面的に出している乱数も
偏りがあるから仕方が無い。たまたま、使用した環境、タイミング、PCで述べられても困る。
そこまで気にするなら、予めいくつかパターンを用意しておくなり、ハッシュを使え。
あと、例のサイトの落とし穴は、そいつがあの結果をもとに、そう思ったに過ぎない。
意図的に仕組まれていない以上、最初の順番が関与するというなら、その順番を一度
並び替えてから、また並び替えを行えば良いじょのいこ?w
497デフォルトの名無しさん:2009/01/21(水) 02:58:58
498デフォルトの名無しさん:2009/01/21(水) 02:59:32
また、並び替えられた先頭からではなく、たまには中間から、逆から
取り出すのもありだろ?頭を使わないと、結局その場当たり的な結果で
己の思考まで左右されてしまうぞ?もっと客観的に、柔軟に考えろ。
最初からバラバラに並んでいるのなら、シャッフルも必要なかろうw
499デフォルトの名無しさん:2009/01/21(水) 03:00:33
>>497
だからさぁ、言いたいことがあるなら言えよ。宿題スレにしろ、うぜぇんだよガキが
500デフォルトの名無しさん:2009/01/21(水) 03:02:21
501デフォルトの名無しさん:2009/01/21(水) 03:03:43
ちょっと質問なんですが、randの偏りがと言ってるバカは
一人でいいんですよね?
502デフォルトの名無しさん:2009/01/21(水) 03:04:22
あのサイトが言いたいことは分かるが、だからなんだと?
それじゃ、先頭から適当に乱数を入れて、それより前のものと
重複しないものが出るまでやり直すのかね?
落とし穴を言う割には、それじゃ何が偏りが出ないか、まったく説明していないじゃないかw
どの道、rand()を使用する以上、それによって左右されるし、いくら効率が悪くても
上記のやり方でやれば、範囲を広めて、使用する個数を増やしたら、処理に時間が掛かるよ?
そもそも、RAND_MAXの範囲内で10個選ぶなら、大して時間は掛からないけどさ。
使用目的に応じて、何を使うかは人それぞれ。欠点ばかり指摘しているんでは、
事故が起きたら面倒な自動車なんて、乗れませんよ?w
503デフォルトの名無しさん:2009/01/21(水) 03:05:57
全く理解できてないw
504デフォルトの名無しさん:2009/01/21(水) 03:06:01
>>501
おk
505デフォルトの名無しさん:2009/01/21(水) 03:08:35
何度も言うようでくどいが、rand()を使用している以上、何かしらそれに応じて
偏りは出てしまう。あのサイトの説明では、ある要素を順番に並べたものを
入れ替えるのでは、ある要素がn番目に来る確率で説明しているが、それじゃ

ある要素がn番目に来る確率が低かったら、結局それも偏りだろ?w

説明する方も、自分の穴を見落としてんだよ。だったら、シャッフルする回数を
増やせば良いじょのいこぉ〜?
506デフォルトの名無しさん:2009/01/21(水) 03:11:30
>>501
C関係のスレで頭の悪いヤツが暴れてたら、こいつと思って間違いない。
507デフォルトの名無しさん:2009/01/21(水) 03:16:07
>>502
まさか、理解できていないとは・・・
・・・しまった、釣られた!!!
508デフォルトの名無しさん:2009/01/21(水) 03:17:24
とにかく、穴を説明したから偏りがあるとは言っても、では偏りがなくなる
アルゴリズムは?と聞かれて、答えていないなら意味ないだろ。
あれが偏る?そうこともあるが、何か?それで?嫌なら使うなよw
事故りたくないなら、自動車に乗るなよ。被害に遭いたくないなら、
路上に出るなよ、引きこもりかっ!?
人と触れ合うチャンスさえ、なくなるぞ?そうなると面倒だ。
視野が狭くなるからな。頑固になって、自分の間違いや不手際さえ認めない、
のに、相手に対して勝手なことを言う、だから言い返される。
典型的な虐められっ子も、いじめっ子もそういうタイプじゃね?
509デフォルトの名無しさん:2009/01/21(水) 03:20:23
>>508
理解どころか、読まずにレスしてるだろ
510デフォルトの名無しさん:2009/01/21(水) 03:24:52
だからね、いくら確率を述べられても、そういうこともありますね、なんだわ。
不良だから非処女率が高い?それじゃ、不良でなきゃ処女か?違うだろ?
思い込みなんて、他人に言っても無駄だということ。
逆に、その仕組みを理解している人には、だから何?って言われるだけだよ。
嫌ならやるなよ、そういうこと。分かったかね、人間としても未熟の青二才?
511デフォルトの名無しさん:2009/01/21(水) 03:27:42
ねえ、これってコピペか何か?
512デフォルトの名無しさん:2009/01/21(水) 03:29:59
まぁ、あとは使用目的次第。rand()に依存する以上、結局ある場面において、
ある範囲内で選ぶとしたら、その範囲内の何か1つが
頻繁に出てしまうなんてことは良くあること。
513デフォルトの名無しさん:2009/01/21(水) 03:31:32
rand()の話してるのはFisher-Yatesが理解できないバカ一人なんだが、
本人だけがわかってないw
514387=460:2009/01/21(水) 03:48:22
専門外なもので確証ももてなくて、偏るなんて意見にいろいろ悩まされたけれど
まさかこんなのに振り回されてただけだとはorz
俺の時間を返せこんちくしょうw
515デフォルトの名無しさん:2009/01/21(水) 03:54:01
だからよぉ、あの確率だって、実装されている乱数発生ライブラリを使用してのことだろ?
そこから理解していないから、あんな結果に対して、勝手な評価をしてしまうんだよ。
所詮、使用しているのは実装された環境。それに応じて作り変えるのが人間。
何のためにてめぇらはPCにない知能を持ち合わせているんだと?
516デフォルトの名無しさん:2009/01/21(水) 04:19:05
>>514
落ち着いてFisher-Yatesをもう一度見るんだ。
>>391はよくない
517デフォルトの名無しさん:2009/01/21(水) 04:21:14
ってあれえ!俺が>>391を落ち着いて見れていなかった!
すまんこまんこ
518デフォルトの名無しさん:2009/01/21(水) 04:22:33
どんなシャッフルのアルゴリズムを書こうが、擬似乱数ライブラリに依存して
それに応じて偏る。扱い方次第。嫌なら、先頭からではなく、後ろから、
中間から、適当に取り出しゃ良いだろ?頭を使えない奴こそ、変な持論を展開して
出来た気になるから迷惑。お前らが東大に行けない理由は、もう思想の面から
日本では通じないからなんだよ。
519デフォルトの名無しさん:2009/01/21(水) 04:25:27
>>517
rand君以外の発言は、有用なものとちょっとお茶目なミスだろう?
どんと来いだぜ
520デフォルトの名無しさん:2009/01/21(水) 05:47:39
>>413
> 風邪で寝てるあいだ、頭痛な頭でなぜか配列のシャッフルするアルゴリズムのことを思い出し、
こんな頭で考えた奴の意見を信じろと?何を考えているんだね、あんたは?
521デフォルトの名無しさん:2009/01/21(水) 06:31:21
Fisher-Yatesなどの、パターンごとの出現確率が均等になるアルゴリズムを実装したとして、
実際に何回か実験すると、各パターンが現れる回数の揺らぎは中心極限定理に従って
ばらつくんですよね。
522デフォルトの名無しさん:2009/01/21(水) 07:04:01
for (int i = 0; i < array.length; i++) {
int dst = (int) Math.floor(Math.random() * (i + 1));

(i+1)ではなく、(array.length+1)でやってみてはどうだろうか?
にしても、落とし穴も何も、それがどういう並び替えかくらい分かっているだろ。
どれを選ぼうが、最終的には擬似乱数発生ライブラリに依存する以上、
何かしらそれに応じて偏りはある。
523デフォルトの名無しさん:2009/01/21(水) 07:31:50
まだいるよ
524デフォルトの名無しさん:2009/01/21(水) 08:12:51
東大から適当に取り出して ... 官僚

官僚から適当に取り出して ... 天下り・大臣

その結果が、今のこの国の状態。(w
525デフォルトの名無しさん:2009/01/21(水) 08:42:09
簡単に比較できるようアップロードしたよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8700.txt
これで初心者さんも>>522に騙されずに済むね
526デフォルトの名無しさん:2009/01/21(水) 09:01:54
少なくとも風邪の人よりも>>520のほうが
バカなのは信用できるな
527デフォルトの名無しさん:2009/01/21(水) 09:38:14
>>518
擬似乱数っていうものは、ある回数で 「収束してしまう」 から擬似乱数なんですよ?
もちろん、短期的に偏るのは当たり前の話。規則性があったら乱数じゃないし・・・。
問題は、長期的、統計的に偏りが出るかどうか。
528デフォルトの名無しさん:2009/01/21(水) 09:42:28
CPUの使用率を10%に制限してプログラムを起動させるにはどうすればいいんでしょうか
529デフォルトの名無しさん:2009/01/21(水) 09:58:50
10cpu環境で起動すればいいと思います。
530デフォルトの名無しさん:2009/01/21(水) 10:17:20
知りたいのは1CPUでの方法です。
531デフォルトの名無しさん:2009/01/21(水) 10:21:34
板違いだから消えろ糞野郎
532デフォルトの名無しさん:2009/01/21(水) 10:24:04
適当な時にsleep()でも呼べばいいのでは?
もっとも、ほとんどのケースではプロセスの優先度を設定すれば事足りると思いますが。
533デフォルトの名無しさん:2009/01/21(水) 10:26:07
>>528
タイマー割り込みで10回に1回そのプログラムが
動くようにすればよいです。
OSから書く必要あるけど
534デフォルトの名無しさん:2009/01/21(水) 10:52:29
起動時にCPU使用率を指定できるOSを自分で作る。
535デフォルトの名無しさん:2009/01/21(水) 10:57:43
なるほどありがとうございます。タイマーでやってみます。
sleepだとプログラムの量で%に調整するのが難しくてつまってました。
起動中のアプリにCUP使用率制限をかけるソフトはいろいろあるみたいなんですが、
これはアプリにかぶせるように起動させて実行停止を繰り返し制限させてるんでしょうか?そんな関数あるんですか?
536デフォルトの名無しさん:2009/01/21(水) 12:58:28
からかわれてるって気付きなよ。
10%に固定なんて出来るOSは存在しないから自分で作れと言われている。
537デフォルトの名無しさん:2009/01/21(水) 13:33:03
>>532
すいません。プログラムのコード量で調整ではなくて、CPUMAXと使用率の取得で分岐させることで
Sleepでも制限できるようになりました。ありがとうございました。
538デフォルトの名無しさん:2009/01/21(水) 14:37:03
SystemIdleProcessから計算するのもいいかもしれない
539デフォルトの名無しさん:2009/01/21(水) 17:09:55
Visual C++R 2008 Express Edition が使えなくなった・・・どうしよう
540デフォルトの名無しさん:2009/01/21(水) 17:22:00
登録しようとすると
現在 Windows Live ID で技術的な問題が発生しています。後でもう一度やり直してください。
となります・・どうすればいいんでしょう・・・
541デフォルトの名無しさん:2009/01/21(水) 17:23:01
登録しなきゃいいだけ。
542デフォルトの名無しさん:2009/01/21(水) 17:26:25
それじゃあ使えないじゃないかッ!!
僕にC++を諦めろと言いたいのかい・・・・・!?
543デフォルトの名無しさん:2009/01/21(水) 17:30:16
認証サーバに問題あるのかな・・・
Web版じゃなくてISO版ダウンロードしてきてインストールすりゃ認証いらないかもよ、
544デフォルトの名無しさん:2009/01/21(水) 17:32:22
ふむ・・・・つまりISO版をDLすればいいんだね。

やってみる。サンクス
545デフォルトの名無しさん:2009/01/21(水) 17:49:25
ISO版はCDがいるって・・・ガチ?
546デフォルトの名無しさん:2009/01/21(水) 17:58:56
isoをなんだと思ってるんだよ
547デフォルトの名無しさん:2009/01/21(水) 18:10:58
マウントすればいいんだよ。
PowerISOとかDeamonToolsとかあるべ。
548デフォルトの名無しさん:2009/01/21(水) 18:43:17
>>492
bitmapの画像処理をする際に、
二次元配列を動的に使ってはダメなのは初めて知りました。
驚きました。一次元配列では死ぬほど画像処理をやった経験があるので
一次元は大丈夫なんですがアドバイすありがとう。

連続領域じゃないとだめだなんて不便だなぁ・・。
549デフォルトの名無しさん:2009/01/21(水) 20:06:58
>>527
「収束」ってどういう意味で使ってる?
普通の数学ではそういう使い方しないよね。
550デフォルトの名無しさん:2009/01/21(水) 20:09:15
>>548
何をどう読んだら動的に使ってはダメという結論に達するのか理解できない。
551デフォルトの名無しさん:2009/01/21(水) 20:16:39
552デフォルトの名無しさん:2009/01/21(水) 20:26:19
>>551
そういう意味でもなさそうじゃない?
>>527は周期のことを言ってるように見える。
うーん、言いたいことはわかるけどなー。
553デフォルトの名無しさん:2009/01/21(水) 20:36:39
rand君の話はもういい
554デフォルトの名無しさん:2009/01/21(水) 20:37:16
>>552
> >>527は周期のことを言ってるように見える。
目の錯覚
555デフォルトの名無しさん:2009/01/21(水) 20:44:53
1週間前にCを勉強し始めて、やっと文字の表示の仕方覚えた。
「見てわかるC言語入門」って本なんだけど。
次何勉強すればいいの?本では「printfの表示」ってなってるんだけど
556デフォルトの名無しさん:2009/01/21(水) 20:49:39
hairetu[num]++

すみません、これはどういうことでしょうか?

また、
hairetu[2] | =

これもどういう風に足しているのでしょうか? =
557デフォルトの名無しさん:2009/01/21(水) 20:51:10
>>556
1 足す

ビット演算子と代入がセットになったもの
558デフォルトの名無しさん:2009/01/21(水) 21:10:21
>>557
1たすとは配列の要素番号を1たすということでしょうか?

下の方は、配列2の要素の値のビット数+ 右辺にあるビット数を足したものを
配列2に格納するというこでしょうか?


基本的に& や | があったら、ビットの演算子であるとおもえばよろしいのでしょうか?
559デフォルトの名無しさん:2009/01/21(水) 21:29:56
>>555
まず、一冊読み終えろよ。
そしたら、どうレベルの本を図書館で借りて読め。
本を信じるな。
560デフォルトの名無しさん:2009/01/21(水) 21:31:38
>>559 読むだけでいいの?全部理解しなくても?
561デフォルトの名無しさん:2009/01/21(水) 21:36:27
>>560
全部の理解なんて、まだ、ずっと先だ
562デフォルトの名無しさん:2009/01/21(水) 21:39:04
>>558
a++ は a = a + 1 とおなじ
a|=b は a = a | b とおなじ
563デフォルトの名無しさん:2009/01/21(水) 21:41:43
>>561 いや、その読み終える本について。読んだとこ全て理解しなきゃってこと
564デフォルトの名無しさん:2009/01/21(水) 21:50:28
お前は今までに食べたパンの枚数を覚えているのか?
565デフォルトの名無しさん:2009/01/21(水) 21:51:23
>>562
配列の場合はどうなるのでしょうか?
566デフォルトの名無しさん:2009/01/21(水) 21:51:26
うん
567デフォルトの名無しさん:2009/01/21(水) 21:51:47
>>565
死ね
568デフォルトの名無しさん:2009/01/21(水) 21:53:11
1たすとは配列の要素番号を1たすということでしょうか?

下の方は、配列2の要素の値のビット数+ 右辺にあるビット数を足したものを
配列2に格納するというこでしょうか?


基本的に& や | があったら、ビットの演算子であるとおもえばよろしいのでしょうか?
569デフォルトの名無しさん:2009/01/21(水) 21:54:32
>>568
そうです
配列の要素番号が1増えます
570デフォルトの名無しさん:2009/01/21(水) 21:57:40
>>564 ありがと。とりあえず読んでおく。
   でも学校にあるかな・・・・・
571デフォルトの名無しさん:2009/01/21(水) 22:01:59
初心者ですいませんがC#で10万個くらいの配列のデータの正規化をしたいのですが、どのようにすればいいのかまったくわかりません。誰かご教授いただけないでしょうか?
572デフォルトの名無しさん:2009/01/21(水) 22:02:21
hairetu[num]++

すみません、これはどういうことでしょうか?

また、
hairetu[2] | =

これもどういう風に足しているのでしょうか? =


1たすとは配列の要素番号を1たすということでしょうか?

下の方は、配列2の要素の値のビット数+ 右辺にあるビット数を足したものを
配列2に格納するというこでしょうか?


基本的に& や | があったら、ビットの演算子であるとおもえばよろしいのでしょうか?
573デフォルトの名無しさん:2009/01/21(水) 22:03:16
>>571
正規化?
574デフォルトの名無しさん:2009/01/21(水) 22:03:28
すいません
他のスレでも聞こうと思ったら間違えてここに書いてしまいました
575デフォルトの名無しさん:2009/01/21(水) 22:05:40
尻洗いずのことじゃね?
576デフォルトの名無しさん:2009/01/21(水) 22:13:47
>>571
スレ違い
577デフォルトの名無しさん:2009/01/21(水) 22:25:06
>>565
aをhairetu[num]と読み替えればいいとは思えなかった?
他の解釈をしたならその解釈を書いてみて
578デフォルトの名無しさん:2009/01/21(水) 22:30:05
aは配列じゃないから読み変えられないと思いました。
でもそれならhairetu[num++]だと要素数をプラス
hairetu[num]++だと中身をプラスとかポインタプラスのほうがわかりやすいような
579デフォルトの名無しさん:2009/01/21(水) 22:37:05
>>578
前者は要素数は増えない。hairetu[num]の値を評価した後に、numがインクリメントされる
後者は中身がプラスされる。
580デフォルトの名無しさん:2009/01/21(水) 22:37:52
>>578
中身をプラスとポインタをプラスじゃ意味違うじゃねーか
プログラム書いてすぐ判ることをきくなよ。バカじゃねーの?
581デフォルトの名無しさん:2009/01/21(水) 22:40:34
>>580
お前は黙ってろ
582デフォルトの名無しさん:2009/01/21(水) 22:41:30
581 名前:デフォルトの名無しさん 投稿日:2009/01/21(水) 22:40:34
>>580
お前は黙ってろ
583デフォルトの名無しさん:2009/01/21(水) 22:42:11
お前ら全員だまれ
584デフォルトの名無しさん:2009/01/21(水) 22:43:02
>>583 お前もだろ
585デフォルトの名無しさん:2009/01/21(水) 22:46:40
>>579
ということは>>569は違うということでしょうか?

つまり、hairetu[num]++は、hairetu[num]の中の値が+1される?中身が文字だった場合は、次の文字?
hairetu[num++]は、hairetu[num]の中身をみたあと、次呼び出されたらhairetu[num+1]の値を見るというこでしょうか?
586デフォルトの名無しさん:2009/01/21(水) 22:47:23
>>585
>>569であってるよ
587デフォルトの名無しさん:2009/01/21(水) 22:51:19
>>585
おおむねあってる。
>>569は間違い。
>>586は釣り。というか、実際に試してみたらどうだい?という意味を込めてこう書いてるんだろうけど
588デフォルトの名無しさん:2009/01/21(水) 22:54:35
>>587
座学でやってるから、実際にはためせないんです。
589デフォルトの名無しさん:2009/01/21(水) 22:56:18
実際に試せ
590デフォルトの名無しさん:2009/01/21(水) 22:56:19
>>587
ありがとうございます。助かりました。
591デフォルトの名無しさん:2009/01/21(水) 22:57:50
>>589
めんどくさいし。
592デフォルトの名無しさん:2009/01/21(水) 23:00:12
どうせなら前置演算子(++numなど)も知っておいた方がいい。
こっちはインクリメントが先ね。
593デフォルトの名無しさん:2009/01/21(水) 23:00:52
実際に試せとかウゼーっつーの
聞かれたことにだけ答えろカス
594デフォルトの名無しさん:2009/01/21(水) 23:01:15
せっかくだから
hairetu[num] = hairetu[num++];
とかするとどうなるかとかも覚えといたらいいよ
595デフォルトの名無しさん:2009/01/21(水) 23:13:21
double型をインクリメントしてるコードを見たんだけど
仕様的にはアリなの?
596デフォルトの名無しさん:2009/01/21(水) 23:20:30
>>594
それは実際試した結果を当てにしたらダメだろ。

>>595
アリです。
597デフォルトの名無しさん:2009/01/21(水) 23:41:03
Cに限らず、プログラム言語学習するなら実行環境がないと話にならんだろ。
598デフォルトの名無しさん:2009/01/22(木) 01:02:17
添え字が扱えて、途中のデータを削除できるデータ構造はありますか
vectorは可能ですか
599デフォルトの名無しさん:2009/01/22(木) 01:13:10
listでどうぞ
600デフォルトの名無しさん:2009/01/22(木) 01:18:58
可能です
601デフォルトの名無しさん:2009/01/22(木) 05:55:31
Cでライフゲーム作ってみたんだけど、何故かうまくいかない・・・
どこら辺がおかしいのでしょうか?
↓ソースコード
ttp://hante.web.fc2.com/
602デフォルトの名無しさん:2009/01/22(木) 06:19:15
>どこら辺がおかしいのでしょうか?
こんなところでいきなり丸投げするあんたの頭。
603デフォルトの名無しさん:2009/01/22(木) 06:35:22
俺、ライフゲームを作ったことあるけど、何か?
604デフォルトの名無しさん:2009/01/22(木) 08:17:28
>>601
即値が多過ぎる辺りがおかしい
605デフォルトの名無しさん:2009/01/22(木) 15:46:39
>>603
じゃあ教えてやれよ
606デフォルトの名無しさん:2009/01/22(木) 17:26:01
>>605
やれよ?何命令してんだてめぇは?アホじゃね?こんな場所、任意でレスしても良いだろうが
他人から指図されする場所じゃねーよ。答えて欲しけりゃ、金払えや。何でもただの時代じゃねーぞ
現代の貨幣経済は。経済を習え、小僧。
607デフォルトの名無しさん:2009/01/22(木) 17:38:48
すいません、おしえてください。
ライフゲームが私のライフワークなんです。
608デフォルトの名無しさん:2009/01/22(木) 17:40:55
誰でも一回くらいは作ったことあるであろうライフゲームをわざわざ言う>>603がだめなんじゃ
609デフォルトの名無しさん:2009/01/22(木) 17:43:28
>>603がだめ
610デフォルトの名無しさん:2009/01/22(木) 18:29:12
>>608 >>609
こいつらバカじゃね?w んじゃ、お前らが教えてやれよw
611デフォルトの名無しさん:2009/01/22(木) 18:30:55
>>608
> 誰でも一回くらいは作ったことあるであろう
大嘘ぶっこいてやがるな、こいつ。それじゃ、この世の全員に
「あなたはぁ〜、ライフゲームを、ちゅくったこと、ありまちゅか?」って
訊ねてこいよ?w 9割近くの人が「知りません」って言うか、
すごろくのようなボードゲーム?って思うかもw
612デフォルトの名無しさん:2009/01/22(木) 18:38:08
まあその辺は同意するが、>>603がダメなことに変わりはないな。
613デフォルトの名無しさん:2009/01/22(木) 18:39:35
>>601
ざっと見たけどfloatじゃなくてもintでいいのでは
614デフォルトの名無しさん:2009/01/22(木) 18:55:28
>>612-613 (・∀・)
615デフォルトの名無しさん:2009/01/22(木) 19:05:28
1からライアーゲームの作り方教えて。
616デフォルトの名無しさん:2009/01/22(木) 20:31:30
*point ^= 0x003333

*pp^0x0000ffff

すみません、このよう文はどういう意味をあらわしているのでしょうか?
617デフォルトの名無しさん:2009/01/22(木) 21:13:24
x += 3 や、 
int* p; p=&x; printf("%d",*p);
など。
618デフォルトの名無しさん:2009/01/22(木) 21:17:27
^ ←は+という意味になるのでしょうか? | じゃなくて

また、この場合ポインタにアドレスを直接セットしているのでしょうか?
619デフォルトの名無しさん:2009/01/22(木) 21:21:57
x^ = 3 だと、 x = x XOR 3という意味。 排他的論理和。
620デフォルトの名無しさん:2009/01/22(木) 21:24:28
int x=1,*p; p=&x;

*p+=3;
だと、x=4になる。排他的論理和の場合も計算結果が入るだけ。
621デフォルトの名無しさん:2009/01/22(木) 21:26:20
>>611
誰でも、をそのまま取っちゃったか。
プログラム書いてる人ね。>>611はまだ作ったことないのか。割りと面白いものだよ。
同じころにハノイとかも作る人おおいのではないかな
622デフォルトの名無しさん:2009/01/22(木) 21:38:36
x = x xor 3 でxの値が1だとするとxは最終的に何になるのでしょうか?」
x = x or 3 だと 4でいいのですよね?16進数だと違いますが
623デフォルトの名無しさん:2009/01/22(木) 21:40:59
だめだ全くわかってねぇ
| とか & の演算子の意味を知らないのか?
624デフォルトの名無しさん:2009/01/22(木) 21:46:33
失礼します
可変長引数をとる関数で、引数整形部分を別の関数に任せたいのですが
以下の方法は正しいでしょうか?
WindowsXP + bcc5.1 / vc2003 で正常に動作しました
呼び出し元 foo と整形関数 format での fmt のアドレスも同一でした


// fmtで書式を指定しoutへ出力する
// インライン展開されるのでfmtのアドレスは呼び出し元と同じになってスタックを参照できる…はず?
// インラインじゃなくてもconst参照だし安全(アドレスは同一)?
inline void format( char* out, const char*& fmt, ... ){
  va_list arg = va_start(fmt);
  wvsprintf(out, fmt, arg);
  va_end(arg);
}

// 呼び出し元関数
void foo( char* msg, ... ){
  // 引数を整形
  char buffer[256];
  format(buffer, msg);
  ..処理..
}
625デフォルトの名無しさん:2009/01/22(木) 21:48:59
>>623
+ と × ですよね
xor だと?
626デフォルトの名無しさん:2009/01/22(木) 21:49:29
>>622
16進数だと何が変わるのかさっぱりわかりませんが、
1と3の論理和は3ですよ
627デフォルトの名無しさん:2009/01/22(木) 21:51:42
>>625
和を得るには+演算子を用い、積を得るには*演算子を用い、
論理和を得るには|演算子を用い、論理積を得るには&演算子を用います
^は排他的論理和を得たい場合に使用します。
628デフォルトの名無しさん:2009/01/22(木) 22:01:30
>>624
それで大丈夫だと言う保証は何もないな。
629デフォルトの名無しさん:2009/01/22(木) 22:08:56
多重継承つてあるじゃあないですか。
何重まで継承出来んの?

今のデファクトスタンダードのVC++でどのくらい?
630デフォルトの名無しさん:2009/01/22(木) 22:09:09
1と3の排他的論理和だと何になるのでしょうか?
631デフォルトの名無しさん:2009/01/22(木) 22:10:26
1=01
3=11

だから、2=10
異なる数字だと1。同じだと0。
632デフォルトの名無しさん:2009/01/22(木) 22:13:03
>>629
多重継承っていつ使うの?
633デフォルトの名無しさん:2009/01/22(木) 22:13:30
>>629
コンパイラの制限の話か。
やったことはないが、
一文の長さの制限かなにかで制限は受けそうだな。
634デフォルトの名無しさん:2009/01/22(木) 23:24:08
>>632
ATL
635デフォルトの名無しさん:2009/01/23(金) 02:12:47
現在 Microsoft Visual C++ 6.0を使っているのですが、
Win32 applicationで作成するwindowsアプリケーションの種類を
次の3つから選択できますが、どのように違うのですか?

@空のプロジェクト
A単純なWin32アプリケーション
B標準的な"Hello World"アプリケーション

また、Microsoft Visual Studio 2005/2008ではこの3つに
当たるものがあるのでしょうか?
636デフォルトの名無しさん:2009/01/23(金) 04:19:17
例えばwindows上でプログラムを実行するとして
宣言した配列なり関数なりポインタにメモリアドレスを指定するにはどうすればよいのでしょうか?
637デフォルトの名無しさん:2009/01/23(金) 06:56:36
例えば配列ですと

char array[2] のメモリアドレスを指定

638デフォルトの名無しさん:2009/01/23(金) 07:58:57
>>637
Ex. void * ptr = reinterpret_cast<void *>(0x80000000);
639デフォルトの名無しさん:2009/01/23(金) 10:40:35
>>621
> プログラム書いてる人ね。
それでも少ないと思うよ

古くて安っぽいC系の和書はアルゴリズムの練習問題が中盤以降に書かれてることが多いけど
入門者にそういう本をすすめる人は珍しくなった
640デフォルトの名無しさん:2009/01/23(金) 11:47:45
業務レベルで使えるようにと、先日からC言語の勉強を始めました
VBや.NETの経験はあるのですが、C言語は初めてです

勉強がてら、汎用関数のようなものを作ろうと思っているのですが
C言語を使った処理で、よく使われるような関数にはどのようなものがあるのでしょうか?
そういうものをいくつか作って勉強したいと思っているのですが、思いつかず困っております

どなたか師事頂けませんでしょうか?
641デフォルトの名無しさん:2009/01/23(金) 12:15:01
なぜお前の弟子にならねばならんのだ
642デフォルトの名無しさん:2009/01/23(金) 12:16:44
>>640
printf()
643デフォルトの名無しさん:2009/01/23(金) 12:24:36
>>640
VBでいうとこのTrim関数みたいなの作ってみ
644デフォルトの名無しさん:2009/01/23(金) 12:37:19
>>641
wwwまったくだw

>>640
いいから入門書でも買ってきて例題全部終わらせろ。
645デフォルトの名無しさん:2009/01/23(金) 12:40:07
>>641>>644
師事「頂く」だぞ?
646デフォルトの名無しさん:2009/01/23(金) 12:55:49
日本語でおk
647デフォルトの名無しさん:2009/01/23(金) 12:56:40
  , ._., ...
 ‘^^’
648デフォルトの名無しさん:2009/01/23(金) 13:08:41
>>645
「教わって」頂くだぞ?
649デフォルトの名無しさん:2009/01/23(金) 13:14:02
演算子の意味を習いたい>>618が師事すればベストマッチな師弟誕生。
650デフォルトの名無しさん:2009/01/23(金) 13:59:25
指示の誤変換なら認める
651デフォルトの名無しさん:2009/01/23(金) 14:02:32
>>650
「ご命令」頂くでも変
652デフォルトの名無しさん:2009/01/23(金) 14:45:00
「醜い豚であるわたくしにご命令を!」
ちっとも変じゃない。
653デフォルトの名無しさん:2009/01/23(金) 15:19:46
Cのソース解析ツール(フリー)でお勧めがあれば教えてください
654デフォルトの名無しさん:2009/01/23(金) 16:30:27
VS2008重い

そんなことよりC入門のサイトより本のほうが参考になるって本当ですか?
もしそうだとして、一番参考になってわかりやすいC入門のサイトはどこですか?
655デフォルトの名無しさん:2009/01/23(金) 17:36:23
スタートページ消せ
656デフォルトの名無しさん:2009/01/23(金) 19:52:13
メモリ上のデータを、アプリにファイルと見せかける方法ありますか?
657デフォルトの名無しさん:2009/01/23(金) 19:54:56
ファイルをメモリのように扱うメモリマップドファイルの逆です。
char ch[1000]="hage"; をファイルに書き込まずに、ファイルのように扱いたいです。
たとえばデータが50Mなど大きい場合、出力とアプリの入力にかかる時間が短縮できます。
658デフォルトの名無しさん:2009/01/23(金) 20:04:09
もしくは、プログラム実行中に、RAMディスクを確保する方法でもいいです。
659デフォルトの名無しさん:2009/01/23(金) 20:09:30
ファイル名の書かれた文字列の配列10000個をシャッフルしてprintfしたいんですけど
文字列配列を呼び足す順番を書いた添字配列を別途作ってそれをシャッフルするのと
実際、文字列配列をシャッフルするのではどちらが早いですか?
上で実装したのですが、コーディングがへたくそなのか非常に動作がもたつきます

>>385のときはありがとございました
660デフォルトの名無しさん:2009/01/23(金) 20:09:36
ファイルのようにとはどういうレベル?ストリームだったらメモリストリームクラスが使える
661デフォルトの名無しさん:2009/01/23(金) 20:12:09
>>659
添え字配列のほうが速いよ。文字列のポインタを交換するほうが簡単だね。
文字列のコピーはすごく遅い
662デフォルトの名無しさん:2009/01/23(金) 20:30:22
>>660
ファイルを読み込むアプリを騙してメモリから読ませいって言うことです。
動的にRAMファイルが作れれば、メモリマップドファイルを使えばできるのですが。
663デフォルトの名無しさん:2009/01/23(金) 21:03:02
>>661
ありがとごぜますだ
精進しますだ
664デフォルトの名無しさん:2009/01/23(金) 21:08:36
>>657
1 そういうファイルシステムを作る。
2 リモートファイルシステムでごまかす。
3 API乗っ取る。
好きなのをどうぞ。
665デフォルトの名無しさん:2009/01/23(金) 22:00:49
>>662
RAMディスクの代わりなら、Win32APIでファイルを作るときの属性でキャッシュ制御ができる。その中にテンポラリファイル用の属性があってスワップアウトを抑制してRAM(ディスクキャッシュ)にデータをとどまるように努力するオプションがあったと思う。
666デフォルトの名無しさん:2009/01/23(金) 22:09:28
>>657
それもメモリマップドファイルでいいと思う。
現代のOSでは、メモリマップドファイルでないメモリ領域も
どうせページングでディスクに書き出される。
逆に、メモリマップドファイルだって、いたずらにファイルに書き出すわけではない。

メモリマップドファイルとそうでない領域の違いは、ページング時の書き出し先が
どこかのファイルかシステムの用意した領域かの違いでしかないと言っても過言ではない。
667デフォルトの名無しさん:2009/01/23(金) 22:28:14
>>662
ファイルを読み込むアプリをだます為にRAMドライブに読み込むのは誰がやるのか
一旦読んでおいたものをなんども読ませたいってなら動的に云々はいらなさそうに思うし
もうちょっとやりたいことを細かくお願いできますか
668デフォルトの名無しさん:2009/01/23(金) 22:54:12
たとえば、メモリに100Mあるデータを、DLLで圧縮しようとします。
DLLはファイルしか読み込めないとします。
ファイルに書き出してからDLLに渡すよりかは、
メモリをファイルに見せかければ短時間で済みます。
669デフォルトの名無しさん:2009/01/23(金) 23:03:18
もし動的にRAMディスクを生成出来れば、そこにファイルを作って
メモリマップドファイルで関連づけてそこへデータを蓄えれば
メモリをファイルに見せかけられる事になります。 できませんか?
670デフォルトの名無しさん:2009/01/23(金) 23:08:39
なんだその程度か。もっとおもしれー事やろうとしてるのかと期待したのに。
ファイル作っちゃいなよ。想像してるほど速度差無いよ。
671デフォルトの名無しさん:2009/01/23(金) 23:11:20
クリティカルなのは圧縮処理だから無意味だろうけどなぁw
672デフォルトの名無しさん:2009/01/23(金) 23:15:22
>>669
事前にRAMドライブをつくっておいてそこにファイルを作れば?
673デフォルトの名無しさん:2009/01/23(金) 23:19:31
つまり、ディスクキャッシュなんて信用ならんと。
俺の方がうまくやれると。

そう言いたいわけだな。
674デフォルトの名無しさん:2009/01/23(金) 23:22:22
>>669
おとなしくメモリマップドファイルで書き出しちゃいなよ。
すぐに閉じず、とっとと向こうにファイル名を渡してやれば、
ディスクに書き出したものを読み込むなんて無駄なことにはならないから。
675デフォルトの名無しさん:2009/01/23(金) 23:33:43
初めからファイルにデータを蓄えろってことですか?
676デフォルトの名無しさん:2009/01/23(金) 23:41:40
それでいいじゃん。何かまずいの?
677デフォルトの名無しさん:2009/01/23(金) 23:41:44
横レスすまんが、その場合、メモリマップドファイルに書くよりも速く向こうが読み出すとどうなるの?
678デフォルトの名無しさん:2009/01/23(金) 23:42:13
同期取れよ
679デフォルトの名無しさん:2009/01/23(金) 23:45:55
全部書いてから向こうを起動するしかないだろ。これ以上の細工は出来なそうだから。
680デフォルトの名無しさん:2009/01/23(金) 23:47:00
「どうなるの?」

「〜しろ」

会話が成り立っていない。
681デフォルトの名無しさん:2009/01/23(金) 23:48:03
ディスクキャッシュってHDDのキャッシュではないってことかしら?
Server2008ででっかいファイル作ろうとすると処理が終わるまでずーっと0KBのままなんで、何でだろうなあとは思ってた
682デフォルトの名無しさん:2009/01/23(金) 23:50:02
>>681
いや違う。
683デフォルトの名無しさん:2009/01/23(金) 23:52:44
>>677
書き込む前の情報が読み出せる。
684デフォルトの名無しさん:2009/01/23(金) 23:56:16
同期とるためには向こうを制御しなくちゃだよね?
質問主がやろうとしてるのは向こうは既製アプリだから危なくないの?
685デフォルトの名無しさん:2009/01/23(金) 23:57:18
なんか変になった。
既製アプリに読ませようとしてるから同期とる仕組みを提供できないんじゃないの?
と読み替えてorz
686デフォルトの名無しさん:2009/01/24(土) 00:38:11
include <stdio.h>
#include <math.h>
degree(double a,double *c,double *h,double *g);
main()
{double a,x,y,z;
scanf("%lf",&a);
degree(a,&x,&y,&z);
printf("%3.0lf %2.0lf %2.0lf",x,y,z);
}

degree(double a,double *c,double *h,double *g)
{
double b,d,e,f;
b=modf(a,&c);
d=60*b;
f=modf(d,&h);
g=60*f;
}
度数を度分秒に変換するプログラムなのですが、
(14) : error C2440: '関数' : 'double' から 'double *' に変換できません。
(14) : warning C4024: 'modf' : の型が 2 の仮引数および実引数と異なります。
(16) : error C2440: '関数' : 'double' から 'double *' に変換できません。
(16) : warning C4024: 'modf' : の型が 2 の仮引数および実引数と異なります。
(17) : error C2440: '=' : 'double' から 'double *' に変換できません。
と出てきてしまいます。
どうすればよいのでしょうか?
687デフォルトの名無しさん:2009/01/24(土) 00:41:44
b=modf(a,c);
d=60*b;
f=modf(d,h);
g=60*f;
688デフォルトの名無しさん:2009/01/24(土) 00:42:09
いやごめん、これじゃ不味いな
689デフォルトの名無しさん:2009/01/24(土) 00:48:04
double b,d,f;
b=modf(a,c);
d=60*b;
f=modf(d,h);
*g=60*f;
690デフォルトの名無しさん:2009/01/24(土) 00:55:05
>>687-689
ありがとうございます。
modfってmain関数の中だと&つけてたのに自分で作った関数の中だと&つけなくてもいいんですね。
691デフォルトの名無しさん:2009/01/24(土) 01:00:40
>>690
理解としてはすげぇ間違ってる
692デフォルトの名無しさん:2009/01/24(土) 01:21:14
ポインタが全くわかってないな
693デフォルトの名無しさん:2009/01/24(土) 01:24:53
ボイン太なら分かります!
694デフォルトの名無しさん:2009/01/24(土) 01:26:43
おもしろくないよ
695デフォルトの名無しさん:2009/01/24(土) 01:29:54
>>694
ボイン太でググレカス
696デフォルトの名無しさん:2009/01/24(土) 01:42:49
おもしろくないよ
697デフォルトの名無しさん:2009/01/24(土) 01:46:38
>>696
とかなんとか言っちゃって、ググって (・∀・)ニヤニヤ しているくせにw
698デフォルトの名無しさん:2009/01/24(土) 03:23:12
>>697
上位の方、この板が随分引っ掛かるのだが。
699デフォルトの名無しさん:2009/01/24(土) 03:36:22
というかこのスレ以外に有効な結果が見あたらないんだけど
700デフォルトの名無しさん:2009/01/24(土) 03:37:15
>>698
嘘言うなよw AVのタイトルだろ?w
701デフォルトの名無しさん:2009/01/24(土) 03:40:13
>>700
まさかとは思うが、"ボイン太"で検索してないなんて言わないよな。
702デフォルトの名無しさん:2009/01/24(土) 03:41:48
>>701
まさかとは思うが、ググレの意味が分かっていないなんて言わないよな?
確かに、検索しろという意味でもあるが、googleで検索しているか?w
703デフォルトの名無しさん:2009/01/24(土) 03:44:02
>>702
望ましい検索結果を得られず「何でそこで区切っちゃったんだ?」
と思いながら検索結果の中から人力検索してたりする?
704デフォルトの名無しさん:2009/01/24(土) 03:47:15
http://dic.nicovideo.jp/a/%E3%82%B0%E3%82%B0%E3%82%8C
ググれの概要
Googleを使って自分で調べろ、の意味。
705デフォルトの名無しさん:2009/01/24(土) 03:47:56
>>704
先生、ググった際のURLを貼っていただけますか?
706デフォルトの名無しさん:2009/01/24(土) 03:48:46
ググレの意味が分からなかった奴が、この板の中で検索したようですw
707デフォルトの名無しさん:2009/01/24(土) 03:49:34
いいからはやく検索キーワード含めたURL貼れよ
708デフォルトの名無しさん:2009/01/24(土) 03:51:36
つか今ここに何人いるんだよw
ちゃんとググれないのが一人で、それをニヤニヤしながら見てるのが三人くらいか?
709デフォルトの名無しさん:2009/01/24(土) 03:53:19
urlマダー?
710デフォルトの名無しさん:2009/01/24(土) 03:55:51
711デフォルトの名無しさん:2009/01/24(土) 03:57:02
この板でボイン太とか言ってるのは一人だけ。
本人だけが面白いと思ってるが、回りは誰も相手にしてない。
712デフォルトの名無しさん:2009/01/24(土) 04:36:21
ググレがgoogleで検索をすることを知らなかった初心者必死すぎw
713デフォルトの名無しさん:2009/01/24(土) 05:02:00
ある単語をググる時に""で括るという常識を知らなかったのはお前だけw
714デフォルトの名無しさん:2009/01/24(土) 05:25:54
初心者必死だなw 今頃、ググった結果でナニを勃てていることやら?w
715デフォルトの名無しさん:2009/01/24(土) 09:10:36
>>681
ここでいってるキャッシュはOSのディスクキャッシュ。NTのディスクキャッシュは仮想記憶機構の一部である。
716デフォルトの名無しさん:2009/01/24(土) 14:50:25

問題
int 型の引数2つを値で、1つをポインタで受取り、その和を受け取ったポインタに格納する関数 add2 を作成しなさい。
ただし、関数自体は返却値を持たない。
main から add2 関数に 23 と 50 を渡して呼び出し、int 型 ans のアドレスを渡して呼び出し、ans の内容を標準出力に表示しなさい。

イカのソースで上記の問題に答えてると言えるんでしょうか.
どうも日本語能力が弱いんです.

#include<stdio.h>

main(){
int ans;
int a,b;
int *p;
p=&ans;
a=23;
b=50;

add2(a,b,p);
printf("a+b=%d\n",*p);
}

void add2(int x,int y,int *z){
*z=x+y;
return;
}
717デフォルトの名無しさん:2009/01/24(土) 14:56:53
int *pなくして関数の呼び出しをadd2(a, b, &ans)にしたほうがいいんじゃね?
718デフォルトの名無しさん:2009/01/24(土) 15:01:05
どうもありがとです.
ポインタの仕組みはたぶんわかってるつもりなんですが,
日本語的に渡すだの何だので,混乱して自爆するんです.
ありがとでした.
719デフォルトの名無しさん:2009/01/24(土) 15:06:26
プロトタイプ宣言も

ってか動かしてないの?
720デフォルトの名無しさん:2009/01/24(土) 15:09:48
動かしてますよー.
環境はLinuxです.
何でプロトタイプ宣言なくても動くっちゃ動きます.
一応答えも出たんですが,問題の答えになってるかどうか不安だったんです.
721デフォルトの名無しさん:2009/01/24(土) 15:09:59
#include <stdio.h>
void add2(int x, int y, int *z) { *z = x + y; }
int main(void)
{
int ans;
add2(23, 50, &ans);
printf("23+50=%d\n", ans);
return 0;
}

aとかbに数値入れなくてもこれでいいんじゃね?
722デフォルトの名無しさん:2009/01/24(土) 15:10:38
>>716
それで問題には答えてるけど、
a,bを定義する必要性はないね
723デフォルトの名無しさん:2009/01/24(土) 15:12:44
いろいろありがとうです.
いろいろスマートじゃないのは,
生まれつきなんです.んません.
724デフォルトの名無しさん:2009/01/24(土) 15:27:48
>>716
void add2(int i1, int i2, void* pi3){pi3 = (void*)(i1+i2);}
void main(){
 int ans;
 add2(23, 50, (void*)&ans);
 printf("%p\n", (void*)ans);
}

和をポインタに格納するなんてマニアックな問題だな。
725デフォルトの名無しさん:2009/01/24(土) 15:36:10
なんじゃそりゃ
726デフォルトの名無しさん:2009/01/24(土) 15:38:55
>>724
void add2(int i1, int i2, void* pi3) { }
727デフォルトの名無しさん:2009/01/24(土) 16:00:51
>>725
>>716の問題文にはそうしろと書いてある。
728デフォルトの名無しさん:2009/01/24(土) 16:02:32
日本語のあやしい716をそのまま受け取るのはどうかと思うがね
729716:2009/01/24(土) 16:09:29
>>728
確かに私の日本語はアレですけど
問題じたいはコピペなんで,この問題がおかしいんだったら
私に問題出した人も日本語がおかしいということになっちゃいますよ.
730デフォルトの名無しさん:2009/01/24(土) 16:12:04
>>729
>私に問題出した人も日本語がおかしいということになっちゃいますよ.

いや、そのとおりだから。
731デフォルトの名無しさん:2009/01/24(土) 16:13:57
問題文もポインタとかアドレスとかわかってない感じがするな。
732デフォルトの名無しさん:2009/01/24(土) 16:29:46
>int 型の引数2つを値で、1つをポインタで受取り、その和を受け取ったポインタに格納する関数 add2 を作成しなさい。

これが真っ当な日本語だと思えるのなら、自分の頭を疑うべきだ。
733716:2009/01/24(土) 16:31:58
言われてみればそうですね.
日本語が弱すぎるのは自分だと思って損しました…
734デフォルトの名無しさん:2009/01/24(土) 16:33:26
あれだろ。
馬鹿なクライアントの要求から、本当に必要としていることを導き出すSEの採用試験なんだろ。
735デフォルトの名無しさん:2009/01/24(土) 16:38:42
じゃあ何て言えばいいの?
736デフォルトの名無しさん:2009/01/24(土) 16:44:05
二つの整数の和を求める関数を作りなさい。
ただし、結果はポインタ渡しした引数で返し、関数自体は戻り値を持たないものとする。
737デフォルトの名無しさん:2009/01/24(土) 16:47:31
まだだめだな
738デフォルトの名無しさん:2009/01/24(土) 16:49:08
二つの整数の和を求める関数を作りなさい。
ただし、関数は返り値を持ちません
739デフォルトの名無しさん:2009/01/24(土) 16:50:10
>>738
void f(){1+1;}
740デフォルトの名無しさん:2009/01/24(土) 16:53:46
二つの整数の和を求める返り値を持ちません
741デフォルトの名無しさん:2009/01/24(土) 16:59:48
足し算ってあるじゃん、あれちょっと作ってよ。サクッとさ。
で、関数で、結果はポインタ渡しでみたいな。
そんなんでよろしく。明日までね。
742デフォルトの名無しさん:2009/01/24(土) 17:14:36
0点
743デフォルトの名無しさん:2009/01/24(土) 17:16:23
ニュートン法か
744デフォルトの名無しさん:2009/01/24(土) 17:38:04
圧縮・復元で安全と思うのは、パスワードをチェックせずに
どんなパスワードでも復元できるようにして、元に戻せるのは一通りがいいと思う。
745デフォルトの名無しさん:2009/01/24(土) 17:41:42
圧縮は圧縮、パスワードはパスワード、分けて考えた方がいい。
746デフォルトの名無しさん:2009/01/24(土) 17:46:31
効率的にはそうだが、パスワードが一致するかどうかが直ぐチェックできたら
総当たりされてしまう。 どんなパスワードでも復元されれば無理。
747デフォルトの名無しさん:2009/01/24(土) 17:49:57
弖爾乎波
748デフォルトの名無しさん:2009/01/24(土) 17:49:58
日本語でおk
749デフォルトの名無しさん:2009/01/24(土) 19:00:31
>>746
ですよねー。ブルートフォース最強ですよねー
その調子で暗号も解読しまくってくださいね
750デフォルトの名無しさん:2009/01/24(土) 19:02:24
圧縮はセキュリティツールではない。

以上。
751デフォルトの名無しさん:2009/01/24(土) 19:03:52
>>748
てにをは
752デフォルトの名無しさん:2009/01/24(土) 19:11:30
テンプレート関数についての質問です。
いろんな型で同じ処理をできるようテンプレート関数を作りました。
template <typename T> func();
というものです。

機能的には、呼び出すときに、
switch(どの型を使えばよいのかの判断){
case ちゃんちゃら:
func<ちゃんちゃらの時の型>
break;
}
としたいのですが、上はもっとうまく実現できないのでしょうか。
753デフォルトの名無しさん:2009/01/24(土) 19:12:18
ポリモーフィズム
754デフォルトの名無しさん:2009/01/24(土) 19:14:59
↑たとえば、
if( flag==1 ){ func<int>();}
else{ func<double>(); }
とか面倒なんです。
flagに対して,型を返すみたいなものをマクロとか何か使ってうまくできればなぁ、と。
755デフォルトの名無しさん:2009/01/24(土) 19:16:26
>>753
それってperfumeのやつですか?
756デフォルトの名無しさん:2009/01/24(土) 19:17:22
よくわかったね。
757デフォルトの名無しさん:2009/01/24(土) 19:17:43
自分で一々場合わけしてたらテンプレートの意味なくね?
758デフォルトの名無しさん:2009/01/24(土) 19:19:30
ifやswitchの判断はプログラムの実行時の処理。
一方、テンプレートはコンパイル時の処理。
そもそもそこにテンプレートを使うのがふさわしいかどうか考え直したほうがいい。
759デフォルトの名無しさん:2009/01/24(土) 19:21:18
場合分けは機能上必要なんですが、おっしゃるとおりテンプレートの意味が薄れてかっこわるいなぁと思い、質問させていただきました。
場合分けは、ほとんどすべてのテンプレート関数で同じものを使うので、うまく解決したいんですが。
760デフォルトの名無しさん:2009/01/24(土) 19:24:10
>>758
どぉーん。おっしゃるとおりで。
マクロで都合よく解決できないかと思いましたが、あきらめまふ。
761デフォルトの名無しさん:2009/01/24(土) 19:26:03
だから実行時に型によって処理分けたいならクラス作れよ。
762デフォルトの名無しさん:2009/01/24(土) 19:34:14
なんで誰も特殊化の事を言わないのか
763デフォルトの名無しさん:2009/01/24(土) 19:35:39
テンプレートなんて知らないし
764デフォルトの名無しさん:2009/01/24(土) 19:51:34
template <typename T, typename U> T func(U x);
的なのじゃだめなの?
765デフォルトの名無しさん:2009/01/24(土) 19:59:52
int main(int argc, char*argv[]){
  char* name;
strcpy(name, argv[1]);
}


として、argv[1]をhanafudashaffle.cppとしたところエラーが生じました。

char* name で宣言すると、確保できるメモリの限界はどのようになるのでしょうか?
またargv[1]に格納された文字列のサイズを知るにはどうしたら良いでしょうか?
766デフォルトの名無しさん:2009/01/24(土) 20:03:08
>>765
char *name;
じゃ全く確保されてない、コピーするな

長さはstrlen使え
767デフォルトの名無しさん:2009/01/24(土) 20:11:33
>>767
ありがとうございます!!

ポインタ宣言してるだけですし、そりゃそうですよね・・。
ただargv[1]をもっと短い文字列にすると何事もなく動作してくれるんですが、
これは何でなんでしょうか?
768デフォルトの名無しさん:2009/01/24(土) 20:20:16
>>767
たまたまうまく動作しただけ
769デフォルトの名無しさん:2009/01/24(土) 20:20:22
先っぽだけなら許してくれるんだよ
それでもたまに失敗して妊娠するけどな
770デフォルトの名無しさん:2009/01/24(土) 20:30:31
>>768-769

なるほどー。
へんてこなコード書いてもたまたまうまくいってるってこともあるんですね。
771デフォルトの名無しさん:2009/01/24(土) 21:06:05
C言語で小数が出ないように商と余りを出すにはどうすればいいですか?
772デフォルトの名無しさん:2009/01/24(土) 21:10:16
/, %
773デフォルトの名無しさん:2009/01/24(土) 21:24:51
>>772
doubleの数字(整数)を/を使って割ると、商が小数になってしまうのですが・・・
774デフォルトの名無しさん:2009/01/24(土) 21:25:51
>>773
modf

775デフォルトの名無しさん:2009/01/24(土) 21:26:10
割るときだけ整数型にすればいいじゃん。
776デフォルトの名無しさん:2009/01/24(土) 21:26:52
>>774
わざわざそれ使わんでもいいだる
777デフォルトの名無しさん:2009/01/24(土) 21:36:06
doubleの数字(整数)を/を使って割ってでてきた小数点以下の数は
誤差であって、それを四捨五入したものが正しい商だと考えてもいいですか?
778デフォルトの名無しさん:2009/01/24(土) 21:37:30
いいえ
779デフォルトの名無しさん:2009/01/24(土) 21:40:50
なんで四捨五入すんだよアホか
780デフォルトの名無しさん:2009/01/24(土) 21:41:56
質問させていただきます。
ttp://orangeknowledge.jpn.org/tips/sdk005.html
こちらのサイトのサインプルプログラムを呼んでいましたところ、WinMain関数内で
InvalidateRect();
を呼んでいました。この関数の働きについて質問したいのですが、サンプルプログラムは
ClassAを継承したClassABで、クラスAではウィンドウの初期化から表示までを行い、ウィンドウハンドルと
オブジェクトのポインタをSetPropで保存しておくという感じです。
そしてウィンドウプロシージャでGetPropでClassA*のポインタを取得して
virtual ClassA::classWndProcにメッセージを送るという形なのですが。。。

ClassABではvirtual ClassAB::classWndProcをオーバーライドして正式なメンバ関数としての
ウィンドウプロシージャにしています。
上のプログラムでInvalidateRectを呼ばないと、子クラスのプロシージャが呼ばれてしまいますが
( GetPropするときに ClassA* classA = (ClassA*)GetProp(...)としているからでしょうか)なぜInvalidateRect
を呼ぶことで解消されるのかがわからずに質問させていただきました。
無効領域を作る、、、という説明しかなかったので。
よろしくお願いします。
781デフォルトの名無しさん:2009/01/24(土) 21:58:39
>>780
よく分からんが、ウィンドウプロシージャと特定のインスタンスを関連づけたい時は
CreateWindowEx の任意のパラメータに this を渡して
WM_CREATE 時にそれを GWLP_USERDATA に SetWindowLongPtr するのがセオリーだと思うよ。
これだと別に InvalidateRect なんて必要になったことなどない。

LRESULT CALLBACK CBaseWindow::StaticWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
 CBaseWindow* base = NULL;

 if (hwnd != NULL) {
  if (msg == WM_CREATE) {
   LPCREATESTRUCT cs = reinterpret_cast<LPCREATESTRUCT>(lparam);
   base = static_cast<CBaseWindow*>(cs->lpCreateParams);
   SetWindowLongPtr(hwnd, GWPL_USERDATA, (LONG_PTR)cs->lpCreateParams);
   base->Attach(hwnd); // ウィンドウハンドルを CBaseWindow に記憶させる
  } else {
   LONG_PTR self = GetWindowLongPtr(hwnd, GWLP_USERDATA);
   if (self != 0) {
    base = static_cast<CBaseWindow*>((LPVOID)self);
   }
  }
 }

 if (base == NULL) {
  return DefWindowProc(hwnd, msg, wparam, lparam);
 } else {
  return base->WndProc(msg, wparam, lparam);
 }
}
782デフォルトの名無しさん:2009/01/24(土) 22:58:25
>>781
それと同じことはSetProp/GetPropでもできる。
むしろ、ATOM併用ではSetWindowLongPtrより僅かに早いという話を見たこともある(ソース失念御免)。
>>780のページのやり方では、CreateWindowの後でSetPropしているのが良くない。
SetPropでも>>781のようにWM_CREATEあるいはWM_NCCREATEで設定すべき。

より完璧を期すなら、WM_NCCREATEより前にやってくる
WM_MINMAXINFOに対処できるようにしたくなるんだけど、
普通は使わないから、自分だけで使う分にはめったに問題にならないだろう。
783デフォルトの名無しさん:2009/01/24(土) 22:58:54
すまんs/早い/速い
784デフォルトの名無しさん:2009/01/24(土) 23:24:14
ああ、そうか。WM_NCCREATE だった。
GetWindowLongPtr ってそんなに遅いんだ?
785デフォルトの名無しさん:2009/01/24(土) 23:33:40
WM_MINMAXINFOに対処するには
ウィンドウ作成関数で同期を取ればいいんだよね?
786デフォルトの名無しさん:2009/01/24(土) 23:34:07
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 
 そんなことよりyahooきっず「どんな''ジャンボ''が食べたい?」に投票しようぜwwwwwwwww
 ジャンボピーマンを一位にして餓鬼共を泣かせようwwwwwwwwww
 現在1位 yahooの工作開始までに2位のたこ焼きを突き放す

 http://kids.yahoo.co.jp/         _人人人人人_
                        >鶴職人募集中<
                         ̄ Y^Y^^Y^Y^ ̄

 ↓本スレ
 http://takeshima.2ch.net/test/read.cgi/news4vip/1232801214/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
787デフォルトの名無しさん:2009/01/25(日) 00:11:17
>>781,782 さん
なるほど・・・CreateWindowの後でSetPropしてるのがそもそもの原因だったようですね。
thisをCreateWindowEXのPVOIDに渡してWM_NCCREATEの時に結びつけるということでしょうか。
とにかくいろいろと試してみます。ありがとうございました。
788デフォルトの名無しさん:2009/01/25(日) 01:20:29
1を加算する演算で

flag++
flag=flag+1

がありますが、調べたところ、flag++のが高速だと書いてありました
その理由がほしいんですが誰か説明してくれませんか?
そしてどのくらい高速なんでしょうか
789デフォルトの名無しさん:2009/01/25(日) 01:24:30
>>788
そのflagがPOD型なら、今時のコンパイラにとってそれらは全く同じように解釈できる。
だが仮にPOD型ではなくクラスなのであれば、そのクラスの定義によっては差が出るかもしれない。
いずれにしても、速度については観測と実測に基づかない限り云々する意味がない。
790デフォルトの名無しさん:2009/01/25(日) 01:24:38
6文字読み込むのと、11文字読み込むのの違い。

前者の方が約2倍速く読み込める。
791デフォルトの名無しさん:2009/01/25(日) 01:30:02
C++で演算子がオーバーライドされてたら、これだけの情報では比べることは出来ない。

intならば、大抵のCPUは一つの命令で値を+1する命令を持っている。
前者はその命令を使う。後者は、値を読み出す、1を加える、値を書き戻す。
ので、20年前は後者は遅いと言われていた。

今時のコンパイラはどちらでも同じコードを生成するので変わらない。
792デフォルトの名無しさん:2009/01/25(日) 03:08:30
Cの課題中
どうもあってるはずなのに動作がおかしい
手本を走らせてもオープンエラーが出る。

#include <stdio.h>

#define BUFFER_SIZE 200

void main(){
char buffer[BUFFER_SIZE];
FILE *fp;
fp = fopen("test.txt", "r");

// ファイルオープン失敗か?
if ( !fp ){
printf("ファイルオープンエラー\n");
return;
}

// 1行ずつ読み込んで表示する
while( fgets(buffer, BUFFER_SIZE, fp) ){
printf("%s", buffer);
}

// ファイルクローズ
fclose(fp);
return;
}

これはコンパイラ側の設定ミスかなにかですか?
793デフォルトの名無しさん:2009/01/25(日) 03:12:21
test.txtがないってオチじゃねーの?
794デフォルトの名無しさん:2009/01/25(日) 03:13:33
printf("%s", buffer);

の前にperror(0);
入れてみれ
そして結果を報告しろ

多分、カレントディレクトリをお前が勘違いしてるのが原因だろうが
795デフォルトの名無しさん:2009/01/25(日) 03:14:20
fopern("fdsafd", "w");
わからないならを使って場所特定したら?
796デフォルトの名無しさん:2009/01/25(日) 03:19:31
>>794
変化なしです。

EXEがあるディレクトリと同じところにtextをおいています。
797デフォルトの名無しさん:2009/01/25(日) 03:21:16
本当に同じ場所か、fopen()で書き込みファイル作って確認してみた?
798デフォルトの名無しさん:2009/01/25(日) 03:21:31
>>796
完全に、ファイル名を間違ってる感じだな
799デフォルトの名無しさん:2009/01/25(日) 03:26:58
カレントディレクトリでないところにある実行ファイルを動かしているオチですか?
800デフォルトの名無しさん:2009/01/25(日) 03:27:09
ttp://www3.uploda.org/uporg1961735.jpg
exeディレクトリです。

ファイル作ってみます
801デフォルトの名無しさん:2009/01/25(日) 03:58:29
カレントディレクトリが違うって落ちか?
それにしても、拡張子.dってなんだよ。
802デフォルトの名無しさん:2009/01/25(日) 10:18:15
>>800
デバッカーからじゃなくて、 Read_Test.exeのアイコンをダブルクリックして直接実行したらどうなるの?
803デフォルトの名無しさん:2009/01/25(日) 12:18:07
おすすめのC言語入門サイトを教えてください
804デフォルトの名無しさん:2009/01/25(日) 13:36:44
805デフォルトの名無しさん:2009/01/25(日) 13:56:06
fopenとfopen_sではどちらが高速ですか?。


FILE *fpt=fopen("test.raw","wb");

FILE *fpt;
fopen_s(&fpt,"test.raw","wb");


fopen_sでは2行になってしまうので遅くなる気がするんですが
コンパイラはfopen_sを推奨してきます。
806デフォルトの名無しさん:2009/01/25(日) 13:58:29
>fopenとfopen_sではどちらが高速ですか?。

同じ

>コンパイラはfopen_sを推奨してきます。

なら、fopen_sを使おう。


807デフォルトの名無しさん:2009/01/25(日) 13:59:01
速度の問題ではない。
安全性の問題だ。
808デフォルトの名無しさん:2009/01/25(日) 14:00:35
移植性を窓から投げ捨ててセキュリティと利便性を重視するのです
809デフォルトの名無しさん:2009/01/25(日) 14:01:42
本当に移植なんてするの?
810デフォルトの名無しさん:2009/01/25(日) 14:04:00
>2行になってしまうので
それを言うなら、

FILE *fpt=fopen("test.raw","wb");

FILE *fpt;
fpt=fopen("test.raw","wb");
はどうなんだ?
811デフォルトの名無しさん:2009/01/25(日) 14:04:47
FILE *fpt; fopen_s(&fpt,"test.raw","wb");

でいいだろ。
812デフォルトの名無しさん:2009/01/25(日) 14:07:32
_s 関数は標準化狙ってんじゃなかったっけ?
813デフォルトの名無しさん:2009/01/25(日) 14:46:21
どう違うのか教えてください
書き方以外で
814デフォルトの名無しさん:2009/01/25(日) 14:49:17
>>813
こういうの読もう
ttp://msdn.microsoft.com/ja-jp/library/8ef0s5kh(VS.80).aspx
815デフォルトの名無しさん:2009/01/25(日) 15:39:04
>>809
OS間で移植なんかしなくても
移植性が問題になるケースはあるよ
ずいぶん限定的な意味で捉えてないかい
816デフォルトの名無しさん:2009/01/25(日) 15:39:57
>>815
例えば?
817デフォルトの名無しさん:2009/01/25(日) 15:41:50
移植しないのに、移植性が問題になるって、それってホントに移植なの?
818デフォルトの名無しさん:2009/01/25(日) 15:42:19
コンパイラのバージョンが上がっただけでも変わる
819デフォルトの名無しさん:2009/01/25(日) 15:44:12
そんな非互換なバージョンアップを平気でする田舎コンパイラなんて使うなよw
820デフォルトの名無しさん:2009/01/25(日) 15:47:11
VC++の事ですね、わかります。
821デフォルトの名無しさん:2009/01/25(日) 15:48:17
あれは標準が決まったのに互換を引きずったからだろw
822デフォルトの名無しさん:2009/01/25(日) 15:50:14
規格準拠率が変わるだけでコンパイルできなくなることはよくある話。
823デフォルトの名無しさん:2009/01/25(日) 15:51:09
つまり移植性を考えても意味ないってことだな。
824デフォルトの名無しさん:2009/01/25(日) 15:52:16
移植のことは、移植するときに考えればいいよ。どうせ移植なんてしないんだし。
825デフォルトの名無しさん:2009/01/25(日) 15:53:58
そうやって適当にやってて Win98 → Win2k で
ユニコード化関連で大変だった人もいるだろうに。
826デフォルトの名無しさん:2009/01/25(日) 15:54:30
皆が移植性の話をしてるのに一人だけ移植の話をしてる奴がおるな
827デフォルトの名無しさん:2009/01/25(日) 15:56:06
>>825
そんな大事が起きたら移植性を考えていたところで大半作り直しだろ。

明日起きるかどうかも分からない移植のことを考えて今日大変な思いをする必要はない。
828デフォルトの名無しさん:2009/01/25(日) 15:56:49
>>825
どうしていたら、ユニコード化関連で大変にならずに済んだんだ?
829デフォルトの名無しさん:2009/01/25(日) 15:58:03
>>827
移植性を高くするために TCHAR なんてものが用意されてんのに
(しかも使い方が難しいわけではない)、
それを舐めてて使わなかった結果苦しんだのはバカとしか言えないと思うが。
830デフォルトの名無しさん:2009/01/25(日) 15:58:07
>>826
移植をしないのに、移植性の話をするなんて、滑稽だろ
831デフォルトの名無しさん:2009/01/25(日) 15:58:31
>>829
で、TCHARって移植性あるの?
832デフォルトの名無しさん:2009/01/25(日) 16:00:29
結論

移植性を高めるためにTCHARを使いましょう。
833デフォルトの名無しさん:2009/01/25(日) 16:01:56
>>831
ユニコード関連が問題になるのは API を使う時だけなので、
Windows 以外の OS への移植に関しての移植性を語るのはナンセンス。
Windows 内での移植に限れば移植性は高い。
834デフォルトの名無しさん:2009/01/25(日) 16:03:32
>Windows 内での移植に限れば

凄い限っちゃったなww
835デフォルトの名無しさん:2009/01/25(日) 16:04:21
>>830
移植をしない奴は黙ってれば
836デフォルトの名無しさん:2009/01/25(日) 16:04:36
>>834
API を使ったプログラムなんて
どう頑張っても OS 間の移植性なんか無いだろw
837デフォルトの名無しさん:2009/01/25(日) 16:05:06
つまり、移植性に関して、TCHARの例は適切でなかったとw
838デフォルトの名無しさん:2009/01/25(日) 16:05:55
Windows 内での移植の話だっつってんだろ
839デフォルトの名無しさん:2009/01/25(日) 16:06:37
>Windows 内での移植

そんなのテキスト置換でOKだろw
840デフォルトの名無しさん:2009/01/25(日) 16:07:12
これほどまでにバカだったとは
841デフォルトの名無しさん:2009/01/25(日) 16:07:27
OS間の移植性まだー
842デフォルトの名無しさん:2009/01/25(日) 16:08:19
結論

移植することが決まっていなければ、移植性なんて考えなくてもいい
843デフォルトの名無しさん:2009/01/25(日) 16:09:08
こうだろ

移植しないことが決まっていれば、移植性なんて考えなくてもいい
844デフォルトの名無しさん:2009/01/25(日) 16:09:22
wxWidgetsで苦労してるやつはいるけどなw
845デフォルトの名無しさん:2009/01/25(日) 16:09:22
違う
846デフォルトの名無しさん:2009/01/25(日) 16:09:42
64ビット化で苦しめばいい
847デフォルトの名無しさん:2009/01/25(日) 16:09:54
うらわああああああわああww
848デフォルトの名無しさん:2009/01/25(日) 16:10:41
移植性なんて言ってる奴のコードにろくなものは無い。
849デフォルトの名無しさん:2009/01/25(日) 16:11:37
最近やった移植といえばC++→Javaだな
多重継承がちと厄介だった
850デフォルトの名無しさん:2009/01/25(日) 16:12:40
言語間の移植はあまり対策しようがないな。
その言語に特有の機能をできるだけ使わないようにする、
とか、流石にバカらしいし。
851デフォルトの名無しさん:2009/01/25(日) 16:13:16
使えない開発者

移植性を考慮して開発遅延する奴

死ねよw
852デフォルトの名無しさん:2009/01/25(日) 16:14:27
移植性に関する知識が事前に無いから開発遅延なんて必要になる。
確かにそんな奴は使えないな。
853デフォルトの名無しさん:2009/01/25(日) 16:15:19
正直、ファイル関連の標準関数は機能がしょぼいから
細かい制御をするには環境に依存するしかないわな
そういう環境依存が避けられない部分はわかるけど

どうでもいいループカウンタにDWORDとか使うアホは死ねよと
854デフォルトの名無しさん:2009/01/25(日) 16:17:19
警告

勝手に移植性を高めるために使った工数に、対価は支払いません。

移植に対価は払いますが、移植性に対価を支払うことはありません。
855デフォルトの名無しさん:2009/01/25(日) 16:18:14
大規模な移植が発生したら責任追及はされるがな
856デフォルトの名無しさん:2009/01/25(日) 16:20:17
IT土方の分際で、勝手に移植性とか高めるなよw

お前らは要求通りの機能を作ってりゃいいんだよ。
857デフォルトの名無しさん:2009/01/25(日) 16:21:31
とコピペ土方が申しております。
858デフォルトの名無しさん:2009/01/25(日) 16:23:30
見苦しいよね。
859デフォルトの名無しさん:2009/01/25(日) 16:23:36
Fランクが高めたつもりの移植性なんて、実際移植するとき役に立ちませんからww
860デフォルトの名無しさん:2009/01/25(日) 16:24:49
Fランしか身近に居ない環境なのか。
大変だな。心中察するわ。
861デフォルトの名無しさん:2009/01/25(日) 16:25:07
俺も基本的には移植性は考えない。
さっさと作りたい機能付くった方が気持ちいいし。
移植性は必要になってから考える。
862デフォルトの名無しさん:2009/01/25(日) 16:25:53
高学歴は必要がなければ移植性なんて考えません。
863デフォルトの名無しさん:2009/01/25(日) 16:27:51
だからと言って、int a[10];に対してa[10]の読み書きするのやめてください。
864デフォルトの名無しさん:2009/01/25(日) 16:27:51
むしろWinよりUnix系の方が移植性に気を使う
基盤更改でSolarisからHP-UXになりました

とか平気で言われるからな
865デフォルトの名無しさん:2009/01/25(日) 16:28:20
IT土方は移植を考える暇があったら次の就職を考えてろw
866デフォルトの名無しさん:2009/01/25(日) 16:30:01
>>864
「それでは移植にこれだけの工数が必要です」で済む話じゃん。

何故HP-UXが出てくる前に、移植性を考慮する必要があろうか。
867デフォルトの名無しさん:2009/01/25(日) 16:32:25
>>866
その工数が低く見積もれる事に越した事はないだろ

というかSoralisそのまま使えよと意見するのが先だけど
868デフォルトの名無しさん:2009/01/25(日) 16:34:18
あるかどうかも分からない未来のために、今の工数を投資するの?

この御時世、君の会社はそんなに余裕があるの?
869デフォルトの名無しさん:2009/01/25(日) 16:39:01
移植性高いコード書くのに特別な工数なんて必要か?
870デフォルトの名無しさん:2009/01/25(日) 16:39:40
きれいなコード書くと、だいたい移植性も高いよな。
871デフォルトの名無しさん:2009/01/25(日) 16:39:40
必要無いなら、後でやってもいいだろ。
872デフォルトの名無しさん:2009/01/25(日) 16:40:23
>>871
想像力が足りない
873デフォルトの名無しさん:2009/01/25(日) 16:40:52
想像力というより移植性に関する知識が無いんだろ
874デフォルトの名無しさん:2009/01/25(日) 16:41:07
で、結局移植するの?
875デフォルトの名無しさん:2009/01/25(日) 16:41:54
来年ぐらいには・・・
876デフォルトの名無しさん:2009/01/25(日) 16:42:25
IT土方のみなさん

移植するとき、別途お金上げるから

今は移植性考慮しないでwwwwおねがいwwww
877デフォルトの名無しさん:2009/01/25(日) 16:42:26
ベテランが普通にプログラムすりゃ
移植性の高いコードに勝手になるんだよ。
そして、移植性の高いコードはバグも出にくい。
878デフォルトの名無しさん:2009/01/25(日) 16:43:07
移植性真理教
879デフォルトの名無しさん:2009/01/25(日) 18:02:07
>>877
それは激しく同意する

ソフト会社に発注して上がってくるコードを見ると、
ベテランと初心者(たいてい新人)の差は果てしなく大きい。

特に目につくのは、初心者は知識量が少ないくせに全力で頑張った結果、
ぎりぎりで動くプログラムを作ってくる。このギリギリプログラムが、まさに
移植性の無いものなんだよね。動くけど、余裕がないというか

移植性といっても、別にWin→Linuxとかの移植に限らない。
同じアプリの次のエンハンスに使いまわすことも含まれる。ちょっと気を回せば
汎用的になるのに、嫌がらせのごとく特定の状況しか動かないコードは移植性が無い。
880デフォルトの名無しさん:2009/01/25(日) 18:55:50
で、次のエンハンスっていつするの?
881デフォルトの名無しさん:2009/01/25(日) 18:56:54
おかえり、バカ
882デフォルトの名無しさん:2009/01/25(日) 19:03:46
883デフォルトの名無しさん:2009/01/26(月) 01:10:59
質問です
関数ポインタをvoid*のポインタにはいれてはいけないらしいんですが、
クラスとか、構造体、同じものですが関数オブジェクトはvoid *型のポインタに代入してもおk?
884デフォルトの名無しさん:2009/01/26(月) 01:13:55
>>883
そっちは大丈夫。
885デフォルトの名無しさん:2009/01/26(月) 01:16:01
おk。
まあ、あまりvoid*は使いたくはないが。
あと、関数ポインタへのポインタならvoid*に入れられるよ。

ミディアムモデルとかコンパクトモデルとかでググると
関数ポインタを入れらんないのも無理は無いと思うようになるよ。
886デフォルトの名無しさん:2009/01/26(月) 03:37:21
キーボードから1行ずつ入力して、入力した文字列を一括表示させるプログラムをポインタを使って作っているのですが、

assignment makes pointer from integer without a cast
ポインタと整数との比較を行っています

とコンパイラに言われてしまいます
何故、そう言われてしまうのかが解りません
ご教示お願いします。

環境 : Linux
コンパイラ : gcc
887デフォルトの名無しさん:2009/01/26(月) 03:37:41
ソースコード

#include <stdio.h>

int main(void)
{
int i = 0;
int cont[5];
int *cont_ptr[5]; //cont配列のポインタ

cont_ptr[0] = &cont[0];

printf("文字列を入力してください(EOFで終了)\n");

while( ( cont_ptr[i] = getchar() ) != EOF ){
if(cont_ptr[i] == '\n'){ i++; } //改行が入力されたら、次の配列へ
else if(cont_ptr[i] == 5){ cont_ptr[i] = EOF; } //5回入力されたら終了
}

for (i = 0; i == 5; i++){
printf("%d 行目:%s\n",i+1,cont_ptr[i]);
}
return(0);
}
888デフォルトの名無しさん:2009/01/26(月) 04:54:10
全体的にcont_ptrがいらない
889デフォルトの名無しさん:2009/01/26(月) 10:50:43
まずちゃんと動くようにしろ

それと今後質問するときは、エラーメッセージを抜粋しないこと
どの行で発生したのかぐらい書け
890デフォルトの名無しさん:2009/01/26(月) 11:38:34
cont_ptr[i] = getchar()
この辺で出そうに思うけどな
891デフォルトの名無しさん:2009/01/26(月) 11:42:40
>>880
データ量のエクスポーネンシャルで増大していく処理速度に耐えられなくなった時。
892デフォルトの名無しさん:2009/01/26(月) 12:10:08
>>889
動かないから質問してんだろバカ
893デフォルトの名無しさん:2009/01/26(月) 12:13:12
>>887
>int *cont_ptr[5]; //cont配列のポインタ
どう見ても「ポインタの配列」になっている件。
もしかして:
  int (*cont_ptr)[5];
894デフォルトの名無しさん:2009/01/26(月) 12:13:31
>>886
if文の中でメッセージの通りのことをしているから
895886:2009/01/26(月) 14:07:49
886です

>>888が言うとおり配列だけを使えばいいのですが、
ポインタを使わなければいけない課題なのです
課題の質問はスレ違いでしょうか…?

エラーメッセージを書いたモノを上げときます。

文字列を1行ずつ入力して、それを5回繰り返したら入力した文字列を一括表示させるプログラムです。(ポインタ使用が条件)

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8735.txt
896デフォルトの名無しさん:2009/01/26(月) 14:14:50
突っ込みどころが多すぎる。どこから説明すればいいんだ・・・
897デフォルトの名無しさん:2009/01/26(月) 14:17:17
cont_ptr[0] = &cont[0];
cont_ptr[1] = &cont[1];
cont_ptr[2] = &cont[2];
cont_ptr[3] = &cont[3];
cont_ptr[4] = &cont[4];
898デフォルトの名無しさん:2009/01/26(月) 14:17:43
>>886の質問だと、警告の原因だけを聞いていて、さも動作するような雰囲気だから
>>889の言い分もわかるw
899889:2009/01/26(月) 14:44:51
初期化も行数数えるところも結果表示もバグがあるわけで、
警告を消したい以前の問題なんだよね

まあでも今回の場合、警告を調べることがバグつぶしに繋がるので、
頑張るといいかもしれない。

でも >>886 は相当にC言語分かってないので、そのまま提出するのが
正解だと思う。先生も、そういう生徒が多ければなんか対策するでしょう
900デフォルトの名無しさん:2009/01/26(月) 14:58:52
配列の動的なメモリー割り当てに関して質問です。
int main{
int i;
int num=100;
char *array;

for( i = 0; i < num; i ++ ){
 load();//この関数中で、mallocを使ってarray配列を確保しています
 watasiJK();//適当な処理
}
save();
return(0);
}
こんな感じのプログラムでload関数内で動的配列arrayを使っているのですが、
freeは必要でしょうか、もしfreeをするならwatasiJK関数内でfreeすべきでしょうか

同じ関数名arrayで確保を繰り返すことになりますが、メモリ管理はどのような感じになってるのですか
サーバーで走らせるので、他人に迷惑になりそうで・・・
901デフォルトの名無しさん:2009/01/26(月) 15:03:32
変数宣言時に無限大をデフォルト値とする方法はありますか?
float val = 1.0/0;
としておくとwarning: division by zeroがでてしまうし。
(実行は問題ないのですが)
float val = Inf;とかfloat val = inf;とかは全然駄目だし。
ご存知のひとよろしくお願い。
902デフォルトの名無しさん:2009/01/26(月) 15:32:27
>>900
malloc した以上、free する必要はある。
free するタイミングは array が必要でなくなったとき。
load 内だけで使うんだったら load から戻る前に free すべきだし、
load 以降も使うんだったら、その例だと main の中で free すべきかな。
903デフォルトの名無しさん:2009/01/26(月) 15:49:32
>>895
ならまずはポインタを使わずに動作するものを作成してみては?
動作するものができたがポインタの使いどころが見あたらなかったといって提出するのはだめなことじゃない
904デフォルトの名無しさん:2009/01/26(月) 15:54:31
まずは文字列をどこに保存するの?ってとこからだな。
最後のprintfで%s指定してるがchar*やchar[]がどこにもないぜ。
905デフォルトの名無しさん:2009/01/26(月) 15:58:41
>>901
float val = INFINITY;
として、c99指定コンパイルをするか、その警告を出力させないようにするか
906デフォルトの名無しさん:2009/01/26(月) 16:04:10
インポートライブラリ(静的リンク)をつかうヘッダファイルを入力したら
ダイナミックリンク用のヘッダを出力するツールはありませんか?
必要な関数のダイナミック呼び出しを追加するツールです。
907デフォルトの名無しさん:2009/01/26(月) 16:06:39
スタティックライブラリを変換するツールを使っても上手くできないし、常にダイナミックリンクにすれば
コンパイラの依存が無くせるのですが。 どうしたらいいですか?
908デフォルトの名無しさん:2009/01/26(月) 16:07:04
>>901
割るほうに.0つけてみてよとりあえず
909900:2009/01/26(月) 16:19:48
レスありがとうございます
続けて質問すいません、mallocの数だけfreeすべきですか?
それともmain関数の最後にfreeでいいですか
watasiJKはarrayデータを弄る処理です
910デフォルトの名無しさん:2009/01/26(月) 16:21:56
別にfreeしなくてもいいよ
911デフォルトの名無しさん:2009/01/26(月) 16:31:03
>>909
mallocの数だけfreeが必要
912デフォルトの名無しさん:2009/01/26(月) 16:31:06
JKっていうのが?
913906:2009/01/26(月) 16:33:20
なんとかなりませんか
914デフォルトの名無しさん:2009/01/26(月) 16:35:15
意味がわからん。
プロトタイプ宣言を自動で作れないかってこと?
915906:2009/01/26(月) 16:38:54
DLLを使う場合、 hoge.hとhoge.libを読み込みますが、
hoge.libはコンパイラに依存します。 そのため、hoge.hやhoge.libを解析して
必要な関数を動的呼び出しで読み込むようにヘッダに追加するんです。
するとそのヘッダだけで、DLLが使えます。
916デフォルトの名無しさん:2009/01/26(月) 16:40:57
よくわからん。
使いたい関数がDLLにあるならそのヘッダ使えばいいだけじゃないの?
917デフォルトの名無しさん:2009/01/26(月) 16:42:37
よくわからん。
コンパイラごとに切り替えたいなら、たいていそのコンパイラを識別できる何かが#defineされてるからそれ使えば?
918デフォルトの名無しさん:2009/01/26(月) 16:42:56
ああ、LoadLibraryとGetProcAddressのコードを自動生成ってことか。
919906:2009/01/26(月) 16:49:16
> ああ、LoadLibraryとGetProcAddressのコードを自動生成ってことか。

これなんです。 そういうツールかいい方法ありませんか?
920デフォルトの名無しさん:2009/01/26(月) 16:57:33
>>919
P/InvokeだとVS用にそういうアドインがあったからC++でもあるんでないのかな
921デフォルトの名無しさん:2009/01/26(月) 17:05:27
ttp://msdn.microsoft.com/ja-jp/magazine/cc164193.aspx

これか、けっこう近いな。
922886:2009/01/26(月) 18:03:07
886です

もう少しで疑問が解けそうです
助言してくれた方ありがとうございました!
923デフォルトの名無しさん:2009/01/26(月) 19:34:17
C++のnewに関して質問です。

typedef {何か型} type;
void* a = new type;
void* b = new type[1];
上記のコードは同じバイト数を確保すると思うのですが、
パフォーマンス等に差はありますか?

削除時のdeleteとdelete[] を統一したいのです。
924デフォルトの名無しさん:2009/01/26(月) 19:58:23
最適化がどうとかを置いておけば、
new []は確保した領域の大きさを(大抵の方法としては)確保した領域の直前に置き
解放時にそれを読むのでので、ちょっと落ちることにはなる

そんな細かい手間省きたいならスマートポインタつかっときゃいいのに
925923:2009/01/26(月) 20:23:38
>>924
ありがとう 参考になります
動的メモリを管理するラッパー関数を自作したかったのです
自己管理しないと落ち着かない強迫観念・・・
926デフォルトの名無しさん:2009/01/26(月) 20:40:22
ラッパ関数も new 用と new [] 用と2つ用意すればいいのに
927デフォルトの名無しさん:2009/01/26(月) 20:55:19
void swap_ptr(char **x, char **y)
{
char *tmp = *x;
*x = *y;
*y = tmp;
}

int main( )
{
 int num;
 char (*filename)[100];
 int i;

 //配列確保
 filename = (char (*)[100])malloc(i * 100);



 for (i = 0; i < num; ++i)
  swap_ptr(&filename[i], &filename[rand( ) % (i+1)]);
}
928927:2009/01/26(月) 20:57:46
ああああああ、途中で書き込み押してしまった・・・・
以前シャッフルでお世話になったものです。
実装を試みているのですが、なかなかうまくいきません。
strのコピーは遅いとお聞きして、ポインタの配列でswapを行いたいのですが、気づいたことがあればどんなことでもお教え願えませんか
929デフォルトの名無しさん:2009/01/26(月) 21:09:44
できないことをやろうとしてるのに気づかないのか?
930デフォルトの名無しさん:2009/01/26(月) 21:09:46
>>927
なんでそんな馬鹿なことしているの?
char配列の確保とポインタ配列の確保を一回で済ませようなんて横着しないで、
地道に確保して味噌。
931デフォルトの名無しさん:2009/01/26(月) 21:11:21
>>930
お前も勘違いしてないか
確保までは普通のことしてるだろ
932デフォルトの名無しさん:2009/01/26(月) 21:14:57
大丈夫、>930はメモリアロケートと代入をセットで確保と言っているのだろうからw
933デフォルトの名無しさん:2009/01/26(月) 21:15:03
>>930
むしろおまいさんがchar (*)[100]の意味をわかってないんじゃないかと
934デフォルトの名無しさん:2009/01/26(月) 21:15:21
>>931
確保までっていうのは確保を含まない、でいい?
やりたいことはこの方法じゃ実現できないよね
935デフォルトの名無しさん:2009/01/26(月) 21:16:23
えええ、じゃあ俺もりかいできてないっぽ。
>>934スルーしてくだされ><
936927:2009/01/26(月) 21:19:10
レスありがとー

ポインタを使った配列の動的確保は無理ってことですか

配列確保コメ以下はいまいちわかってません
>>933さんが指摘されたところは、まさにさっぱりです

うーん・・・・
937デフォルトの名無しさん:2009/01/26(月) 21:22:03
>>930
ばーかw
938デフォルトの名無しさん:2009/01/26(月) 21:23:49
>>934
確保まで含むよw
まぁ確かにこの方法で質問主の望むことが出来ないが
二次元配列の確保としては正しいだろ

>char配列の確保とポインタ配列の確保を一回で済ませようなんて横着しないで
これは勘違いしてるだろ・・・
939930:2009/01/26(月) 21:27:40
char二次元配列の確保だけじゃポインタの入れ替えなんてできないからそう書いているんだが。
940デフォルトの名無しさん:2009/01/26(月) 21:32:04
二次元配列の確保を行っている処理に対して
>char配列の確保とポインタ配列の確保を一回で
と書いたことを問題視していて、質問主のやりたいことはそっちのけだったみたいだね。
941デフォルトの名無しさん:2009/01/26(月) 21:36:41
>>940
いや、君が質問主のやりたいことをわかってないからそう思うだけ。
942デフォルトの名無しさん:2009/01/26(月) 21:37:23
char *filename[100];
使ったほうで誰かくやってやれよ
943デフォルトの名無しさん:2009/01/26(月) 21:37:30
連続領域で確保しちゃったらやりたいことできないように思ったんだけどそういう訳じゃないの?
944デフォルトの名無しさん:2009/01/26(月) 21:40:43
連続領域で確保しても、別途ポインタ配列を用意すればできるね。
945デフォルトの名無しさん:2009/01/26(月) 21:41:05
むしろ
char (*filename)[100];
を使った方法でやってやれよ
946デフォルトの名無しさん:2009/01/26(月) 21:41:33
>>944
それはずいぶんずれた回答だなあ
947デフォルトの名無しさん:2009/01/26(月) 21:46:02
>>945
だから無理ジャン、文字列を内容コピーは嫌だからポインタの指す先変えたいっつってんだもん
948927:2009/01/26(月) 22:14:42
皆さんの意見を所々参考に一応なんとなくできましたー

void swap_ptr(char **x, char **y)//前と一緒
{
char *tmp = *x;
*x = *y;
*y = tmp;
}

int main( )
{
 int num;
 char **filename;//ポインタのポインタが必要だったのかな・・?
 int i;

 //ポインタ配列確保
 filename = (char **)calloc(num, sizeof(char *));

 while(/*データとってくる*/){
  strcpy(temp, /*シャッフルするデータ群のうち一つ*/);
  filename[i] = (char *)malloc(strlen(temp)+1);
  strcpy(filename[i], temp);
  i++;
 }
srand((unsigned) time(NULL));//これないとダメみたい?
 for (i = 0; i < num; ++i)
  swap_ptr(&filename[i], &filename[rand( ) % (i+1)]);
}
freeはスペースの都合で略しました。すんまそん
こんなかんじです。これでもやっぱり遅いです・・・
気づいた点あれば、ご指摘願えませんか。
949デフォルトの名無しさん:2009/01/26(月) 22:23:00
なんでtemp一旦入れるの。
先にmallocして直接strcpyしたらだめなのか?
950デフォルトの名無しさん:2009/01/26(月) 22:28:30
for文の中の初期条件に当てられている変数を
処理の中でいじっちゃいけないって書いてあるんですがどうしてなのですか?

下のようなことはしてはいけないらしいですが動きはします。

for(n = 1 ; n <= 100 ; n++){
n=n+1;
}
951927:2009/01/26(月) 22:28:32
>>949
データのファイル名の長さが不均一でして・・・・
>filename[i] = (char *)malloc(strlen(temp)+1);
ここは常に最大長の256でいったほうがはやい気もするのですが・・・
私の勘違いな気もしないでもなくて・・・
といっても、多分自力では書けないっす
952デフォルトの名無しさん:2009/01/26(月) 22:32:28
>>950
やっていることが理解できているのなら、別に問題はない。
一体全体何に書いてあったのか知らんが、それを書いた者は初心者への警告の積もりなのか他言語と混同しているか、根本的に間が抜けているのだろう。
953デフォルトの名無しさん:2009/01/26(月) 22:33:38
>>950
何に書いてあったのか、確かに知りたいな。
普通、Cでは0から始めるのに1で始めているところからしても、basic崩れなんじゃないだろか。
954デフォルトの名無しさん:2009/01/26(月) 22:38:32
やっぱりやってもいいのですね。

書いてあったのは授業で使った教科書・・・
調べるとかなり酷評されていますが。
955デフォルトの名無しさん:2009/01/26(月) 22:38:55
文字列シャッフルせずに、その添え字をシャッフルすればいいだろ。
956デフォルトの名無しさん:2009/01/26(月) 22:41:19
char ch[5][4]={"aaa","bbb","ccc","ddd","eee"};
を直接やらず、
int num[5]={0,1,2,3,4};
をやれば結果は同じでかんたんだろ画。
957927:2009/01/26(月) 22:41:23
>>955
先にそれを実装したのですが、ポインタのつなぎかえだけのほうが早い気がしまして・・・
データ数30000でシャッフルしてますが、速度はどちらも同じくらいですね・・・
958デフォルトの名無しさん:2009/01/26(月) 22:50:22
一回乱数を生成するだけで、シャッフル出来る高速アルゴリズム知ってるよ。
教えてやるよ。
959デフォルトの名無しさん:2009/01/26(月) 22:52:33
たった1つの乱数で?!
960デフォルトの名無しさん:2009/01/26(月) 22:53:44
>>958
俺も知りたい
教えて
961デフォルトの名無しさん:2009/01/26(月) 22:54:21
ただしデータ数Nに対して、Nの階乗までの数値が扱えて、その範囲の乱数が生成出来ること
が必要。 3万だと多倍長演算しないと無理だな。
962927:2009/01/26(月) 22:56:49
あうあうあう
963デフォルトの名無しさん:2009/01/26(月) 22:58:01
Fisher-Yatesシャッフルでいいだろ。
964デフォルトの名無しさん:2009/01/26(月) 23:00:53
>>960
AESのCBCに初期値を乱数で1回作って入れて回して出力される系列で混ぜればいい。
965デフォルトの名無しさん:2009/01/26(月) 23:14:16
配列や変数、ポインタに対して決まったメモリを割り当てるにはどうすればよいでしょうか?

int suji[0x55555555]

char array[0xFFFF] */で先頭配列を指定?

とかいったかんじでしょうか?
966958:2009/01/26(月) 23:14:53
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
#define M 5
#define K 120 // K=M!

vector<unsigned char> A(M), B(M), C(M);

void shuffle(int k){
int i,j,N=k;
memcpy(&B[0],&A[0],M);
for(i=M;i>=1;i--) {
int n=N % i; C[M-i]=B[n];
for(j=n;j<i-1;j++) B[j]=B[j+1];
N/=i;}}

main(){
int i,k;
for(i=0; i<M; i++) A[i]=i+1;
for(k=0; k<K; k++) {
shuffle(k);
for(i=0; i<M; i++) printf("%d ",C[i]); printf("\n");
}}
967デフォルトの名無しさん:2009/01/26(月) 23:16:26
>>950
ダメだと言うとすれば、コンパイラが理解しても読む人間がぱっと理解しづらいということかな。
for自体の中身以外でループ変数を書き換えるコードは滅多に見かけないから。
968デフォルトの名無しさん:2009/01/26(月) 23:17:56
>>965
int suji;
&suji = 0x55555555;

char array[10];
&array = 0xffff;
969デフォルトの名無しさん:2009/01/26(月) 23:18:16
>>965
特定のメモリアドレスでなければ困るという意味であれば、
コンパイラやリンカにここに割り当ててくれって指示を出したり、
領域だけ用意してもらって、int* hoge = (int*)0xdead;のように決め打ちしたりする。
970958:2009/01/26(月) 23:19:05
こっちのほうがみやすいか

#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
#define M 5
#define K 120 // K=M!

vector<unsigned char> A(M);

void shuffle(int k){
int i,j,N=k;
vector<unsigned char> B(M);
for(i=0; i<M; i++) B[i]=i+1;
for(i=M;i>=1;i--) {
int n=N % i; A[M-i]=B[n];
for(j=n;j<i-1;j++) B[j]=B[j+1];
N/=i;}}

main(){
int i,k;
for(k=0; k<K; k++) {
shuffle(k);
for(i=0; i<M; i++) printf("%d ",A[i]);
printf("\n"); }}
971デフォルトの名無しさん:2009/01/26(月) 23:19:16
>>950
書いた人が馬鹿だから。
972デフォルトの名無しさん:2009/01/26(月) 23:19:32
>965

int *p;

p = (int *)0x55555555

973958:2009/01/26(月) 23:22:49
数値に対して、順列が一意的にもとまるから、ランダムに入れ替えた物よりも偏りが出ないはず。
974デフォルトの名無しさん:2009/01/26(月) 23:26:36
汎用性低くっw
自信満々に持ち出すならもうちょっときれいなコードくれよ
975デフォルトの名無しさん:2009/01/26(月) 23:32:07
>>973
単にヘボい疑似乱数使ってるのと同値だろ。rand()使った方がよっぽど混ざる。
976デフォルトの名無しさん:2009/01/26(月) 23:32:51
俺の知らない世の中ではO(n*n!)のアルゴリズムを高速っていうの?
977デフォルトの名無しさん:2009/01/26(月) 23:33:02
それよりオーダーで負けてないか?Fisher-Yatesに
978977:2009/01/26(月) 23:33:25
>>976
ごめんかぶった
979デフォルトの名無しさん:2009/01/26(月) 23:34:17
>>958
お前にはがっかりだよ
980デフォルトの名無しさん:2009/01/26(月) 23:40:56
>>976
ボゴソート馬鹿にすんな

あれ?
981958:2009/01/26(月) 23:41:36
これなら汎用性出るか? Aを整数kでシャッフルし結果をBに格納する関数。

#include<stdio.h>
#include<vector>
using namespace std;
typedef vector<int> ret;

void shuffle(ret A, ret &B, int k){
int i,j,N=k,M=A.size();
B.resize(M);
for(i=M;i>=1;i--) {
int n=N % i; B[M-i]=A[n];
for(j=n;j<i-1;j++) A[j]=A[j+1];
N/=i;}}

main(){
ret A(5),B;
A[0]=0; A[1]=3; A[2]=5; A[3]=7; A[4]=9;
shuffle(A,B,5);
for(int i=0; i<5; i++) printf("%d ",B[i]); }
982デフォルトの名無しさん:2009/01/26(月) 23:43:25
すんません,質問です。
DLLの関数を使うときって,そのヘッダーファイルをインクルードするだけじゃなくて,
DLL(の関数)をロードして使いますよね?
でも平方根を取るsqrt()関数とかってmath.hをインクルードするだけで使えちゃいます。
なんでですか?

僕は初めて学んだ言語がJavaなせいか,C++とごちゃまぜにしている可能性が高いです。
おかしな点があったら指摘してください。
Javaだと,スタティックなメソッドだとそのメソッドを持っているクラスファイルをインポートするだけで使えちゃいますよね?
これが僕の中では,math.hのsqrt()関数です。
それで,ロードしなきゃ使えない関数が,Javaで言うところの,非スタティックなメソッドで,
インスタンスを生成しなければ使えないやつです。
このイメージって全然ちがいますか?
983デフォルトの名無しさん:2009/01/26(月) 23:45:59
>>981
汎用性以前に、質の悪い乱数でかきまぜる、遅いアルゴリズムで、何したいの?
984デフォルトの名無しさん:2009/01/26(月) 23:46:34
>>982
cc -ml source.c
985958:2009/01/26(月) 23:50:43
みんな勘違いしてるぞ。 
このアルゴリズムは全ての順列と、自然数を対応される一対一対応になってるんだよ。
与える自然数が異なれば、異なる順列が生成されるんだ。
シャッフルに限れば完璧の性能。
986デフォルトの名無しさん:2009/01/26(月) 23:50:46
>>982
標準ライブラリの関数は特別扱いで、自動的にDLL/LIBなどがリンクされるよう
手はずを整えられていることが多い。
987デフォルトの名無しさん:2009/01/26(月) 23:53:10
O(n*n!)はさすがに勘違いだった。よく見てなかった。
要するに順列でいうk番目を取り出してるわけか
988デフォルトの名無しさん:2009/01/26(月) 23:53:38
>>985
自然数と順列の数では集合としての濃度が違うのだが、わかってる?
989958:2009/01/26(月) 23:56:42
たとえば、配列数が10ならば、その順列数は10の階乗個。
1〜10!と、配列数10のシャッフル全体が一対一対応。
990デフォルトの名無しさん:2009/01/26(月) 23:58:44
で、何個までシャッフルできるの?
991デフォルトの名無しさん:2009/01/26(月) 23:59:42
よく分からんので明日までに議論をまとめといてくれ
992デフォルトの名無しさん:2009/01/27(火) 00:02:30
2^64 = 20! = 大体19桁
つまり20個まで
( ゚д゚)、ペッ
993958:2009/01/27(火) 00:03:26
この辺見て勉強してくれよ


http://72.14.235.132/search?q=cache:YJjSkOc05ZYJ:chausson.eng.kagawa-u.ac.jp/Class/2004/KnowEng1/note/KnowEng1/Chap20.pdf+%22%E9%9A%8E%E4%B9%97%E9%80%B2%E6%95%B0%22+%E5%A4%89%E6%8F%9B&hl=ja&ct=clnk&cd=4
第 2-0 章 順列と組合せの列挙
第04 節 階乗記数法と完全順列の対応
第04-01 節 階乗記数法
第04-02 節 階乗進数と完全順列の対応
994デフォルトの名無しさん:2009/01/27(火) 00:03:35
>>986
なーるほど。じゃ,基本はDLLの関数を使うときは,ちゃんとロードしないとだめ
ってことなんですね。で,標準ライブラリの場合は,暗黙的に勝手にロードしてくれると。
995デフォルトの名無しさん:2009/01/27(火) 00:04:39
見なくてもわかる。必要のない知識ということが。
996デフォルトの名無しさん:2009/01/27(火) 00:04:42
>>958
>for(j=n;j<i-1;j++) A[j]=A[j+1];
センスねーなw
997958:2009/01/27(火) 00:05:04
GMP(多倍長演算)使えば、メモリの許す限り、配列の添え字として扱える数字までいけるだろ。
998デフォルトの名無しさん:2009/01/27(火) 00:06:33
勝手にいってろ。
999デフォルトの名無しさん:2009/01/27(火) 00:07:57
質問者は、DLLと言い切ってるところにむしろ不安があるんだが
1000デフォルトの名無しさん:2009/01/27(火) 00:08:22
ストリーム暗号使った方がよっぽど速い
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。