スレを勃てるまでもないC/C++の質問はここで 6
レス数が1000を超えています。これ以上書き込みはできません。
過去ログ
スレを勃てるまでもない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/
0002デフォルトの名無しさん
2009/01/10(土) 15:07:210003デフォルトの名無しさん
2009/01/10(土) 15:11:300004デフォルトの名無しさん
2009/01/10(土) 15:40:33意味を見出す者だけがその存在を享受できる
0005デフォルトの名無しさん
2009/01/10(土) 15:54:390006デフォルトの名無しさん
2009/01/10(土) 15:56:52意味を見出せない人には意味がない。
0007デフォルトの名無しさん
2009/01/10(土) 16:21:320008デフォルトの名無しさん
2009/01/10(土) 16:29:090009デフォルトの名無しさん
2009/01/10(土) 16:30:30どういった環境でつくればいいでしょうか?
0010デフォルトの名無しさん
2009/01/10(土) 16:32:08勝手に自分基準の意味を付けられても、他人には通じないんだが・・・
ナンバーサインはナンバーサイン。何でつけたの?意味もなく
気分でつけるのはどうかと。んじゃ俺は・・・
♣でも付けようかしらん♪
0011デフォルトの名無しさん
2009/01/10(土) 16:39:24VSで作れば良いんじゃないの?
0012デフォルトの名無しさん
2009/01/10(土) 16:39:34# 知らないならぐぐれとしか。
0013デフォルトの名無しさん
2009/01/10(土) 16:41:04expresseditionですが、できますか?.netってやつをつかうんですか?
0014デフォルトの名無しさん
2009/01/10(土) 16:43:10しかし、#ひとつであぼーんで切るわけでもなし、やくたいないことこのうえない。
0015デフォルトの名無しさん
2009/01/10(土) 16:43:28ちゃんとしたの買えば?
0016デフォルトの名無しさん
2009/01/10(土) 16:46:20買わないとできないのですか?
0017デフォルトの名無しさん
2009/01/10(土) 16:49:47VC++、VSでも導入しておくがよろし
€ スレタイからして、スレ違いかもしれないが
0018デフォルトの名無しさん
2009/01/10(土) 16:50:19いちおうできるよ
0019デフォルトの名無しさん
2009/01/10(土) 16:51:02expressはwindows.hとか入ってないんじゃね?
gccやg++でも出来るけど、ここで聞いているくらいの人物だとどうだろ。
0020デフォルトの名無しさん
2009/01/10(土) 16:51:53何か不都合がありますか?
0021デフォルトの名無しさん
2009/01/10(土) 16:52:34ATLとかMFCを使おうと思わなければ問題は無い
0022デフォルトの名無しさん
2009/01/10(土) 16:52:35入ってるぞ
0023デフォルトの名無しさん
2009/01/10(土) 16:53:062005は入ってなかったけど2008で最初からはいるようになったよ
0024デフォルトの名無しさん
2009/01/10(土) 17:38:430025デフォルトの名無しさん
2009/01/10(土) 18:01:46そういった省略前のものが載ってる書籍、或いはサイトってありませんか?
0026デフォルトの名無しさん
2009/01/10(土) 18:22:31Solarisならこういうのがあるよ
http://docs.sun.com/app/docs/doc/816-5173/6mbb8adq6?a=expand
0027デフォルトの名無しさん
2009/01/10(土) 18:48:17マニュアル本についても知りたいです。
0028デフォルトの名無しさん
2009/01/10(土) 20:47:340029デフォルトの名無しさん
2009/01/10(土) 21:18:58定義のところに書いて使おうとすると。「関数に 1 個の引数を指定できません」
ってエラーが出てきてコンパイルできません。
いつも宣言ではfunc(int,int)みたいな感じで書いてるから変数書かないといけないの不便に感じる
0030デフォルトの名無しさん
2009/01/10(土) 21:30:47ム板にいながら。。
0031デフォルトの名無しさん
2009/01/11(日) 03:06:29いや違う
shared_ptrはboostだから
0032デフォルトの名無しさん
2009/01/11(日) 03:18:07あっているよ。
>>31
今はstd::tr1::shared_ptrという存在があって、それが<memory>に入っている(ことがある)。
ただし、ものによっては<tr1/memory>ということがある。
なお、<boost/tr1/memory.hpp>なら環境を識別して正しいヘッダをインクルードしてくれるほか、
持っていない処理系ではboost::shared_ptrのtypedefで対応という親切設計。
だったら、Boostを入れたならboost::shared_ptrを使えばいいという気もしてくるけど。
0033デフォルトの名無しさん
2009/01/11(日) 07:41:12サンクス
boost入れてなくてVC++2008だと<memory>で宣言、定義されていたです
0034デフォルトの名無しさん
2009/01/11(日) 09:57:35定義の方に書いたって、他のコンパイル単位には伝わらない。
だからこそ宣言を別ファイルにしてるわけで。
0035デフォルトの名無しさん
2009/01/11(日) 11:07:23それは、「関数呼び出しの仕組み」がある程度わかっている人にはわかるけど
初心者はそこまで考えが回らないのよ。
デフォルト引数の仕組みが「呼び出し側で不足する引数を補うものだ」とね。
つまり、わからないから
呼び出される側で「引数がない時には補う処理」をしている、と思いがちなわけ。
なにしろデフォルト引数を含む関数は呼び出される側だから。
そういう発想を持っているということを前提にすると
>>34の内容では意図が伝わらないし理解が深まるわけでもないのよ。
0036デフォルトの名無しさん
2009/01/11(日) 11:15:48>>29
宣言で
void func(int, int = 100);
と宣言できるよ。
0037デフォルトの名無しさん
2009/01/11(日) 13:51:47実行すると以下の文章がでてくるんですが
何を言われているのか意味が分からないので
良ければ教えてください・・・
7 [main] kak 2444 _cygtls::handle_exceptions: Error while dumping state (p
robably corrupted stack)
Segmentation fault (core dumped)
と出てくるんですが、コンパイルではエラーがでずに、実行するとコレが出る状況です
ググっても、参考書で調べても全く分からないのでよければ教えてください。
0038デフォルトの名無しさん
2009/01/11(日) 13:58:000039デフォルトの名無しさん
2009/01/11(日) 13:58:25ソース挙げろ
004037
2009/01/11(日) 14:17:33typedef 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;
}
004137
2009/01/11(日) 14:18:37for(;;){
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;
}
004237
2009/01/11(日) 14:19:44*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をやろうとしてます
0043デフォルトの名無しさん
2009/01/11(日) 14:21:58アップローダつかうとか、考えられないだろうか・・・
004437
2009/01/11(日) 14:22:51すみません・・・次からそうします。
0045デフォルトの名無しさん
2009/01/11(日) 14:27:10ポインタのsが初期化されてないのに、*sに代入されてないか?
あと、
for(l=0;l>5;l++){
これは、一回も回らないよな。
0046デフォルトの名無しさん
2009/01/11(日) 14:29:07の実態がない?
0047デフォルトの名無しさん
2009/01/11(日) 14:31:45int *p,*s,*t;
FANS F={{0},{0},{0}};
これじゃポインタの中身pstを初期化できてないんですか???
>>46
int *p,*s,*t;
コレを構造体でmainとしたの関数で使いたかったんですが。
配列に入れて配列の足し算をしたくて、こう書いてみたんですが・・・
0048デフォルトの名無しさん
2009/01/11(日) 14:32:11これ?
0049デフォルトの名無しさん
2009/01/11(日) 14:34:32*t=*pで下のTANSの中身をAAに入れようと思ってそうやったんですが・・・
0050デフォルトの名無しさん
2009/01/11(日) 14:36:33ulint *p,*s,*t;
FANS F={{0},{0},{0}};
p = F.TANS;
s = F.AA;
t = F.BB;
とかしとけばいいかな?
0051デフォルトの名無しさん
2009/01/11(日) 14:40:26それでやってみると、エラーでなくワーニングで
assignment from incompatible pointer type
assignment from incompatible pointer type
assignment from incompatible pointer type
とでて、ポインタのタイプがおかしいって言われちゃいました・・・
0052デフォルトの名無しさん
2009/01/11(日) 14:41:020053デフォルトの名無しさん
2009/01/11(日) 14:45:29こんなかね
>int *p,*s,*t;
↓
int pe,*p=&pe,se,*s=&se,te,*t=&te;
0054デフォルトの名無しさん
2009/01/11(日) 14:47:060055デフォルトの名無しさん
2009/01/11(日) 14:47:45http://codepad.org/NuAqZ3xB
とくに警告とかでないけど?
0056デフォルトの名無しさん
2009/01/11(日) 14:50:34これで、tasの関数に飛ばすときはpe,se,teを飛ばせばいいってことですか??
>>54さん
最終的に無限桁にしたのでポインタと構造体がいいと進められたんです。
>>55さん
Cygwinだからでしょうか・・・
0057デフォルトの名無しさん
2009/01/11(日) 14:50:44>ulint *p,*s,*t;
こっちの型を差し替えてないんだろ
0058デフォルトの名無しさん
2009/01/11(日) 14:51:55ポインタの型をint*からulint*に直した?
0059デフォルトの名無しさん
2009/01/11(日) 14:53:01tas(&F,&F,&F);としてしか呼び出してないし。
0060デフォルトの名無しさん
2009/01/11(日) 14:56:29大分回るようになりました!!
けどやはりAA[2]まで進んだ後でとまりました・・・
>>59さん
tas(&F,&F,&F)でTANS、AA、BBをtasの関数に飛ばすってイメージだったんですが・・・
0061デフォルトの名無しさん
2009/01/11(日) 14:58:21> >>53さん
> これで、tasの関数に飛ばすときはpe,se,teを飛ばせばいいってことですか??
tasとp,s,tは関係ないじゃん
0062デフォルトの名無しさん
2009/01/11(日) 15:01:03奇数番目の合計を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が偶数番号の時の合計を代入させるのがわからないです。
だれか、そこを教えてくれないでしょうか。
0063デフォルトの名無しさん
2009/01/11(日) 15:06:50int n,i,a[i]=100000;
怖ぇ・・・たぶん
int n,i,a[100000];
って書きたかったに違いない
0064デフォルトの名無しさん
2009/01/11(日) 15:12:51*p,*s,*t=TANS,AA,BBってリンクしてるイメージだったんですが違うんですか?
ポインタと構造体の関係が本当に分からなくて・・・すみません・・・
0065デフォルトの名無しさん
2009/01/11(日) 15:12:55#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;
}
こんな感じだろ?
0066デフォルトの名無しさん
2009/01/11(日) 15:16:37ちがうな。
そもそも、何をしてるプログラムだかさっぱりわからないが。
0067デフォルトの名無しさん
2009/01/11(日) 15:19:36プログラムは32bit×32bit=64bitをするために
配列をつかって筆算みたいなやり方で答えを出そうとしてます。
AA+BB=TANSにしてBB=TNASでまたAA+BB=TNASを繰り返そうという考えです。
0068デフォルトの名無しさん
2009/01/11(日) 15:35:04http://www5.airnet.ne.jp/tomy/cpro/longint.htm
0069デフォルトの名無しさん
2009/01/11(日) 15:41:07ちょwwwもろ回答がwwwww
参考にしながら頑張ってみます、一応今ある知識だけで組んでみたいんで。
ありがとうございます!
0070デフォルトの名無しさん
2009/01/11(日) 15:43:07for (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;
}
}
}
にすればいいか
0071sage
2009/01/11(日) 16:29:32ありがとうございます
あとはiが奇数時に配列に入れた数の和と、iが偶数の時に入れた数の和を比べて、多い方をAに入れ、Bに小さい方を入れるってしたいのですが
for文使っても、iが偶数の時と奇数の時に分けられないので困ってます。
なんか最初から間違いがあったみたいですがw
本題これでして…
0072デフォルトの名無しさん
2009/01/11(日) 16:41:05・宿題ならこちらへ
C/C++の宿題を片付けます 121代目
http://pc11.2ch.net/test/read.cgi/tech/1230678123/
・sageはメール欄に
・i%2でiを2で割った余りという意味。0と1で場合分けすれば偶奇判定できる
0073デフォルトの名無しさん
2009/01/11(日) 16:51:390074デフォルトの名無しさん
2009/01/11(日) 16:53:02# pdfとしてが無理ならキャプチャしてもいいし。
0075デフォルトの名無しさん
2009/01/11(日) 17:19:16char s[] = "写本";
とかやって、s[0]からs[3]までの値をシードにして、ってこと?
0076デフォルトの名無しさん
2009/01/11(日) 22:42:12むしろそこの自然数が書かれたカードがうんたらゲームを自分で作ろうとしてて
部分的な質問を投げるようになったんだと思う。
宿題スレは丸投げ用だと思うからこっちでもいいんじゃないのかな
0077デフォルトの名無しさん
2009/01/11(日) 22:44:150078デフォルトの名無しさん
2009/01/11(日) 23:17:2575以上の答えはないだろ
0079デフォルトの名無しさん
2009/01/11(日) 23:27:12何とか間に合いそうです。
0080デフォルトの名無しさん
2009/01/12(月) 02:24:40♠はトランプのスーツの中で最強ですけど
008171
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("先手の勝ち");
てなったんですけど、でもこれじゃあ、勝ち負けと先手が勝ちって表示されるのが連動してなくてなんか不安なんですよね…
あとは引き分けの時に、数列の端と端を比べて大きい方をとるってやつが今模索中でございまして、ヒントくれればいいなと
0082デフォルトの名無しさん
2009/01/12(月) 12:54:16コピーコンストラクタに関する質問です。
いわゆる深いコピーをする際に、privateフィールドを
直接参照できるようなんですが、これは何か特別なルールなんでしょうか。
private:
int num;
......
MyClass::MyClass(const MyClass& other)
num = other.num;
.......
ちなみに、学習に利用している本はロベールC++でページは302です。
よろしくお願いします。
0083デフォルトの名無しさん
2009/01/12(月) 12:58:26MyClass のメンバ関数からは参照できる。
0084デフォルトの名無しさん
2009/01/12(月) 13:04:49別オブジェクトでも、同一クラスのメンバは参照できるんですね。
クラス外に定義した関数では同じことができなかったので疑問を持っていました。
ありがとうございます。
0085デフォルトの名無しさん
2009/01/12(月) 13:11:54考えながらやっているんですが、mainで入った数字が関数で微妙に入れ違っていて
原因が分からないのですが、どなたか教えてくださいませんでしょうか・・・
http://codepad.org/XgqEjsWE
後、未だにスタックが食いつぶされている?
実行結果で配列がどうのこうので分からない状況です・・・
よろしければ教えてください、お願いします。
0086デフォルトの名無しさん
2009/01/12(月) 13:14:51Cの入門書を一から読むべきレベル
0087デフォルトの名無しさん
2009/01/12(月) 13:20:59一応知人に借りた本とグーグル先生には聞いてみているんですが・・・
いまいち理解できていないんです・・・
0088デフォルトの名無しさん
2009/01/12(月) 13:25:55for文を無限ループ風に使うな
多倍長演算なんて100年早い
0089デフォルトの名無しさん
2009/01/12(月) 13:27:41配列がおかしい
0090デフォルトの名無しさん
2009/01/12(月) 13:29:23一応、加減乗除の加減までは解決したんですが・・・
for(i=0;i>4;i++){
とかでちゃんと回す回数指定したほうがいいのでしょうか・・・
0091デフォルトの名無しさん
2009/01/12(月) 13:30:09配列がおかしい?
最初の宣言がすでにおかしいってことですか?
0092デフォルトの名無しさん
2009/01/12(月) 13:34:15タイプミスかどうかも疑わしい
0093デフォルトの名無しさん
2009/01/12(月) 13:37:32タイプミスです・・・
for(i=0;i<4;i++){
でした。
0094デフォルトの名無しさん
2009/01/12(月) 13:42:11*s = l;
*s = C[l];
l = l + 1;
if(l==4)break;
}
この部分とかlは初期化されてないから値は上がりっぱなしだし
そもそも代入文に何の意味もないからこの部分は初期化バグ抜きでも*s = C[3];と等価だ
もう一度言う、顔洗って出直せ
0095デフォルトの名無しさん
2009/01/12(月) 13:53:45はい、勉強しなおしてきます。
ただ、ポインタと構造体が全く分からなくて。
mainではAA[0]とAA[1]に思い通りに値が入れられているのに
下の関数に飛んだときにはAA[0]の値がAA[1]になっているんです・・・
*s=l;
*s=C[l];
は、メモを忘れてしまったので何がしたいかすら自分でも分かりません・・・
ただ、このAA[0]とAA[1]の部分が謎でしょうがないです・・・
0096デフォルトの名無しさん
2009/01/12(月) 14:15:01・前半
その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]?
0097デフォルトの名無しさん
2009/01/12(月) 14:16:30まちがえた、どっちも"先手の勝ち"になってる
if(x>=y){
printf("先手の勝ち");
}else{
printf("後手の勝ち");
}
0098デフォルトの名無しさん
2009/01/12(月) 15:05:19マルチなの? 馬鹿なの? それとも同じ宿題を二人でやってるの?
http://codepad.org/XgqEjsWE
http://codepad.org/rnSOFLEU
0099デフォルトの名無しさん
2009/01/12(月) 15:34:09同じ人物ですよ?、一応昨日も来たって書いてあるんですが・・・
0100デフォルトの名無しさん
2009/01/12(月) 15:36:47http://pc11.2ch.net/test/read.cgi/tech/1231499251/
んじゃ、現在進行形でこのスレに書いているのもあんたか。
只のマルチの馬鹿だったのね。
0101デフォルトの名無しさん
2009/01/12(月) 16:53:04(bool)(_bool^_int&2)とか(int)^(_short^_char>> 15)とかそんな感じのが知りたいです。
0102デフォルトの名無しさん
2009/01/12(月) 16:54:370103デフォルトの名無しさん
2009/01/12(月) 17:05:45ttp://www.jisc.go.jp/app/pager?id=10499
ここに詳しいpdfがあるよ
0104デフォルトの名無しさん
2009/01/12(月) 17:20:34File not found.
との事ですけど・・・?登録とか必要なの?
0105デフォルトの名無しさん
2009/01/12(月) 17:24:40ttp://www.jisc.go.jp/
C++の規格は確かX 3014だから検索すればでてくるよ
0106デフォルトの名無しさん
2009/01/12(月) 17:34:170107デフォルトの名無しさん
2009/01/12(月) 17:58:59配列を使う方法ならできるんですが、ポインタを使った方法が知りたいんです。
これのどこが悪いのか教えてください。
#include <stdio.h>
int main(void){
char* str;
scanf("%s",str);
printf("%s",str);
return 0;
}
0108デフォルトの名無しさん
2009/01/12(月) 18:11:21文字列を格納する十分な大きさのメモリ領域を確保しなきゃだめだぴょん
0109デフォルトの名無しさん
2009/01/12(月) 18:12:37大体、初期化されていないポインタはどこを指しているか未定義だぴょん
0110デフォルトの名無しさん
2009/01/12(月) 18:15:27ありがとうございます。
でも、それは何故でしょうか?
scanfの時点で入力した文字列はメモリに記憶されたわけだから、それ以上メモリ領域を確保する必要が
無いように思うんですが・・・
0111デフォルトの名無しさん
2009/01/12(月) 18:18:12ごめんね、書き方が微妙だったぴょん
>>109を見てもらえれば分かると思うけど、strは初期化されていないから、アクセス違反が起こり得るんだ
その証拠に、これを実行すると「不正な処理」とか「セグメントエラー」とかならない?
0112デフォルトの名無しさん
2009/01/12(月) 18:29:30実行しても何も表示されませんでした。
今調べたんですが、初期化されてないっていうのは、>>109ということですよね?
mallocで領域を確保しなきゃいけないってことでおkですか?
0113デフォルトの名無しさん
2009/01/12(月) 18:51:27そうそう、mallocを知っているなら話が早いぴょん
0114デフォルトの名無しさん
2009/01/12(月) 18:52:29> scanfの時点で入力した文字列はメモリに記憶されたわけだから
この辺、もう少し勉強してみる必要があるんだぴょん
0115デフォルトの名無しさん
2009/01/12(月) 19:20:40int main(void){
char str[100];
scanf("%s",str);
printf("%s",str);
return 0;
}
配列でもいいよ。
0116デフォルトの名無しさん
2009/01/12(月) 19:21:16>配列を使う方法ならできるんですが、ポインタを使った方法が知りたいんです。
0117デフォルトの名無しさん
2009/01/12(月) 19:24:25よく読んでなかったよ。
#include <stdio.h>
int main(void){
char buf[100];
char* str = buf;
scanf("%s",str);
printf("%s",str);
return 0;
}
こうか。
0118デフォルトの名無しさん
2009/01/12(月) 19:39:070119デフォルトの名無しさん
2009/01/12(月) 19:44:15「*.srec ファイルを送る」部分以外は正常に作動しています。
※アスキーモードです。
�@ ifstream で *.srec を開く
�A WriteFile で 送る
という単純なやり方では、うまくいきませんでした。
1行ずつ送るということも試してみましたが、やはりダメでした。
いわゆる、TeraTerm 等の Send file... に価するプログラムを作ろうとしています。
どなたか RS-232C 通信、ファイル送信等に知識をお持ちの方がおりましたら、
御指南頂けますでしょうか?
0120デフォルトの名無しさん
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);
0121デフォルトの名無しさん
2009/01/12(月) 19:51:51hComのオープンにはちゃんと成功しているか?
WriteFile()の第二引数は&いらない
0122デフォルトの名無しさん
2009/01/12(月) 20:00:40はい。成功しています。
その他にも文字のみの通信(コマンドの送信も含む)が有り、その部分は正常に動いています。
ファイル送信のモードを追加しようとしてつまずいています。
&無しで大丈夫ですね。すみません。この部分については、結果は同じでした。
0123デフォルトの名無しさん
2009/01/12(月) 20:08:20ポインタを使うって条件だけで、malloc()使うとは言ってないじゃん。
0124デフォルトの名無しさん
2009/01/12(月) 20:08:21わざわざ丁寧にありがとうございました。
scanfの件、了解しました。もうちょい勉強してみます。
0125デフォルトの名無しさん
2009/01/12(月) 20:09:51だから、「文脈」
コミュニケーションが苦手だと苦労するぞ
0126デフォルトの名無しさん
2009/01/12(月) 20:13:26おっと、ボロが出たね
条件は「ポインタを使う」だけではないぞ
>配列を使う方法ならできるんですが、ポインタを使った方法が知りたいんです。
この文の意図するところ(必ずしも明文化できない)が「条件」
もし>>117=>>123なら、>>123の発言は>>117が「配列を使う方法」に該当しないことを意味する
0127デフォルトの名無しさん
2009/01/12(月) 20:38:360128デフォルトの名無しさん
2009/01/12(月) 21:08:300129デフォルトの名無しさん
2009/01/12(月) 21:26:21sizeof(line)がおかしいような?
0130デフォルトの名無しさん
2009/01/12(月) 21:39:38>>配列を使う方法ならできるんですが、ポインタを使った方法が知りたいんです。
いや、ポインタの使い方が分かればいいんだろ?
>>117でもいいじゃん。
0131デフォルトの名無しさん
2009/01/12(月) 22:13:400132デフォルトの名無しさん
2009/01/12(月) 22:17:420133デフォルトの名無しさん
2009/01/12(月) 22:21:00のほうがエスパーすぎるんじゃね? ふつーに。
0134デフォルトの名無しさん
2009/01/12(月) 22:22:16ヒント:mallocを提示したのは質問者
0135デフォルトの名無しさん
2009/01/12(月) 22:23:160136デフォルトの名無しさん
2009/01/12(月) 22:23:31それは読んでなかったわ。
へんなところ引用しないで、そこを引用すればいいのに。
0137デフォルトの名無しさん
2009/01/12(月) 22:25:23もうあきらめたら?
108 :デフォルトの名無しさん:2009/01/12(月) 18:11:21
>>107
文字列を格納する十分な大きさのメモリ領域を確保しなきゃだめだぴょん
109 :デフォルトの名無しさん:2009/01/12(月) 18:12:37
>>107
大体、初期化されていないポインタはどこを指しているか未定義だぴょん
これが回答者の直接の回答。
お前が勝手に「確保=malloc」だと思い込んでいるだけ
0138デフォルトの名無しさん
2009/01/12(月) 22:26:12ろくに状況を理解できないならレスすんなよクズ
0139デフォルトの名無しさん
2009/01/12(月) 22:27:04for(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の学生版です。
0140デフォルトの名無しさん
2009/01/12(月) 22:27:21>>134
それは読んでなかったわ。
へんなところ引用しないで、そこを引用すればいいのに。
こいつは往生際が悪いなww
0141デフォルトの名無しさん
2009/01/12(月) 22:28:34どこが該当箇所?
0142デフォルトの名無しさん
2009/01/12(月) 22:31:07自分のツッコミの頭の悪さ棚にあげてなに言ってるんだよ。
おれはツッコミに反論してただけだろ。
ツッコミに沿った反論しかしないから、ツッコミが見当違いだったら、
反論だってスジから外れるのはあたりまえ。
0143デフォルトの名無しさん
2009/01/12(月) 22:42:20は?wwwwwついに頭おかしくなったか?wwwwww
0144デフォルトの名無しさん
2009/01/12(月) 22:44:20ほう、じゃあお前は質問をろくに読まずに回答することを肯定するんだな
0145デフォルトの名無しさん
2009/01/12(月) 22:48:52>>138
自分のツッコミの頭の悪さ棚にあげてなに言ってるんだよ。
おれはツッコミに反論してただけだろ。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ツッコミに沿った反論しかしないから、ツッコミが見当違いだったら、
反論だってスジから外れるのはあたりまえ。
はて、お前は質問者に答えていたのでは?ww
0146デフォルトの名無しさん
2009/01/12(月) 22:50:47おまえ、マジ頭わるそうだな。
>>144
見当違いなツッコミを指摘するのと、それと、どう関係するんだ。
0147デフォルトの名無しさん
2009/01/12(月) 22:51:24アンカー先の書き込みに反論してるだろ。
0148デフォルトの名無しさん
2009/01/12(月) 22:52:19見当違いな答えを書いたお前を棚にあげて何言ってんだ。
上から順番にレスを見直せ。
お前が質問を読んでないのが原因なのは明白。
0149デフォルトの名無しさん
2009/01/12(月) 22:53:160150デフォルトの名無しさん
2009/01/12(月) 22:53:22第三者に見られていることに気づけよ。お前らがやっているのは
質問に対するレスじゃなくて、詰らない言い争い。
周りの見えない視野の狭い奴って、実社会でも迷惑だよな。
0151デフォルトの名無しさん
2009/01/12(月) 22:55:31*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
> <
0152デフォルトの名無しさん
2009/01/12(月) 22:55:320153デフォルトの名無しさん
2009/01/12(月) 22:55:390154デフォルトの名無しさん
2009/01/12(月) 22:56:25さすがにこの争っている二人、キモイな。頭がおかしいと
第三者に見られていることに気づけよ。お前らがやっているのは
質問に対するレスじゃなくて、詰らない言い争い。
周りの見えない視野の狭い奴って、実社会でも迷惑だよな。
お前もこいつらの仲間入りってか
0155デフォルトの名無しさん
2009/01/12(月) 22:58:520156デフォルトの名無しさん
2009/01/12(月) 23:02:29まともな回答が得られるかは分からんよw
#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言語です。
0158デフォルトの名無しさん
2009/01/12(月) 23:07:26p = str + strlen(str) - 1;
まずこれは分かるか?
正直よくわからないです。
0160デフォルトの名無しさん
2009/01/12(月) 23:09:27c = *str;
*str = *p;
*p = c;
str++;p--;
と書いた方がわかりやすいね
pはstrlenの行でstrの末端を指すようになってる
strとpを両端から入れ替えていってる
whileの停止条件はstrとpが交差?するまで
0161デフォルトの名無しさん
2009/01/12(月) 23:10:38すいませんでした。
ちょっと書き込むには長いので、ソースの一部をアップロードしました。
コメントアウトありはこちら。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;しないとまた似たようなエラーが起こってしまうんです。
0162デフォルトの名無しさん
2009/01/12(月) 23:12:00そのwhileのなかでのことをもう少し詳しく教えてもらえないでしょうか・・・
説明不足でしたが、仰るとおり文字列を反転させるプログラムです
0163161
2009/01/12(月) 23:14:43>してbreak;しないとまた似たようなエラーが起こってしまうんです。
とありますが、正確には
ちなみにif文ではなくswitchにしても同じでコメントアウトした部分を消すなり
してbreak;しないとまた似たようなエラーが起こってしまうんです。
でした。
すいません。
0164デフォルトの名無しさん
2009/01/12(月) 23:17:38例として、次の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?
>>162は僕です
おけです
0167デフォルトの名無しさん
2009/01/12(月) 23:20:18これを実現するにはポインタの操作が必要。
で、それが>>160の人が書いたやつなんだけど、これ、理解できる?
0168デフォルトの名無しさん
2009/01/12(月) 23:21:23まずcにstrのアドレスを代入して、
strのアドレスにpのアドレスを代入して、
pのアドレスにcを代入して、
strの配列の要素の一つ先に移って、
pの配列?の一つ先に戻ってるってことでしょうか…?
なんとなくですが
0170デフォルトの名無しさん
2009/01/12(月) 23:26:14アドレスではないよ、内容そのもの。
c = *str;
*str = *p;
*p = c;
最初、strは文字列の最初([0]とする)を指す。
pは文字列の最後(例えば[5]とする)を指す。
cっていうのは「交換」に必要な適当なハコ。
[c] = [0];
[0] = [5];
[5] = [c];
↑まず、このようにすると[0]と[5]が交換できる。おk?
0171デフォルトの名無しさん
2009/01/12(月) 23:27:39単純に、ハコの中身を入れ替えてると考えて。
あぁわかりました!
ところでp = str + strlen(str) - 1;
つまりどういうことでしょう?
0173デフォルトの名無しさん
2009/01/12(月) 23:34:03>入力された文字列のそれぞれの文字を数値化して考えて、それに文字列の長さをたして1を引いているんでしょうか?
これが君の答えだよね?
数値化って惜しいんだけど、この場合返ってくる数値は「文字数」ね。
「最初」と「最後尾」を交換するためには、「最後尾」のアドレスが必要。
だから、それを計算してpに代入している。おk?
0174デフォルトの名無しさん
2009/01/12(月) 23:36:15あ、数値化ってアドレスのことか。なら間違ってはいないのかな
つまり、
p=(strの先頭)+(文字列の長さ)−1
なんで-1するかというと、「文字列の1文字目」って配列で考えるとstr[0]でしょ?
0175デフォルトの名無しさん
2009/01/12(月) 23:36:49構ってチャンタイプだろ?
0176デフォルトの名無しさん
2009/01/12(月) 23:38:35で?
つまりたとえば"SAMPLE"という文字列だった場合、
p = str + strlen(str) - 1;
の式でstrlen(str) = 6で、
strにはS = 1, A = 2…
となるのでしょうか?
0178デフォルトの名無しさん
2009/01/12(月) 23:40:39大体合ってる。
ただし、文字列は0から始まる。
0180デフォルトの名無しさん
2009/01/12(月) 23:42:58ごめん
>数値化って惜しいんだけど、この場合返ってくる数値は「文字数」ね。
誤解を招くような書き方をしてしまった。
strが文字列を返すわけではないよ。
…どういうことでしょう?
strは単に文字列の最初の文字のアドレス?ってことでしょうか?
0182デフォルトの名無しさん
2009/01/12(月) 23:48:59str は先頭の a を、pはstrlen(str)の7から1引いてstr[6]に当たる g。
あとは先頭を指しているstrと後ろを指し示しているpのそれぞれのポインタの位置を
順番に真ん中の文字に近づけつつ、入れ替えているわけだが。
0183デフォルトの名無しさん
2009/01/12(月) 23:52:18*strがアドレスが指す文字
っていうのを誰か説明しないと
教えてくださってありがとうございました。
また来るかもしれませんがそのときはよろしくお願いします。
それでは。
0185デフォルトの名無しさん
2009/01/13(火) 02:23:05大学ではFORTRANとか学べるんですが履修してません・・・
0186デフォルトの名無しさん
2009/01/13(火) 02:32:12CとBASICとFORTRANは別物だし、むしろBASICなんて学んでいないほうがいいくらいだ。
0187デフォルトの名無しさん
2009/01/13(火) 02:39:31r_imgを使ってるところをくまなく注意深く調べれば原因が分かる
0188デフォルトの名無しさん
2009/01/13(火) 03:27:010189デフォルトの名無しさん
2009/01/13(火) 08:17:12>>97
ご指摘ありがとうございます。
先手か後手の勝敗は奇数番目と偶数番目を比べて大きい方が勝ちなので、比べてから判断して欲しいのでa[0]取ったほうが勝ちというわけじゃないです
0190デフォルトの名無しさん
2009/01/13(火) 14:50:18よくわかんない。
n=4の場合
先手:a[0]:1 後手:a[1]:2 先手:a[2]:3 後手:a[3]:4
x=4, y=6
y>xなので後手の勝ち
こんな感じに進むもんだと思ってたんだけど違うの?
0191デフォルトの名無しさん
2009/01/13(火) 15:24:25というかこれはC言語以外で作る手立てというのはあるのでしょうか?
0192デフォルトの名無しさん
2009/01/13(火) 15:33:27確かBisonというのが演算子の優先順位を認識できるとどこかで読んだ。
設計ツールについては思い当たるものがない。
せいぜいVisioくらいしか思いつかない。
0193デフォルトの名無しさん
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);
}
0194デフォルトの名無しさん
2009/01/13(火) 17:22:360195デフォルトの名無しさん
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);
}
0196デフォルトの名無しさん
2009/01/13(火) 17:25:47どういう回答をすればいいでしょうか><?
馬鹿ですいません
0197デフォルトの名無しさん
2009/01/13(火) 17:28:38for(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]++;
0198デフォルトの名無しさん
2009/01/13(火) 17:30:11ありがとうございます
ほかに問題はありませんでしょうか??
0199デフォルトの名無しさん
2009/01/13(火) 17:32:19文字列の長さ調べてるところが、いまいちな?
0200デフォルトの名無しさん
2009/01/13(火) 17:41:04いまいちわかりませんでした
申し訳ないのですが模範解答を張っていただけないでしょうか??
0201デフォルトの名無しさん
2009/01/13(火) 17:45:360202デフォルトの名無しさん
2009/01/13(火) 18:21:390203デフォルトの名無しさん
2009/01/13(火) 18:44:49while (*ptr++ != '\0'){ // ポインタ ptr の指し示す配列中の文字が「ナル文字」でない間
もしくは
j=strlen(a);
もしくは
j=sizeof(a);
かな?
0204デフォルトの名無しさん
2009/01/13(火) 18:54:41class 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))':
プロトタイプされている関数が呼び出されませんでした (変数の定義が意図されていますか?)
という警告が出てしまいます。どこが問題なのでしょうか?
0205デフォルトの名無しさん
2009/01/13(火) 19:45:43でも、それだと
2.9.1.5
って来たときは先手が偶数番目を取って勝ち、
3.2.4.1
なら先手は奇数番目を取って勝ちにならなきゃいけないので常に初めをとらなきゃいけない訳ではないんですよ
0206デフォルトの名無しさん
2009/01/13(火) 22:54:37また、0E00アドレスの一つ前は 0F00でしょうか?
1000つ先は1DFFであってますか?
0207デフォルトの名無しさん
2009/01/13(火) 22:59:43メモリアドレスは十六進法で表す習わし。
0E00hの1つ手前は0DFF。1000が十六進での値なら、1E00。
これくらい、Windowsの電卓でも叩け。
0208デフォルトの名無しさん
2009/01/13(火) 23:16:55ありがとうございます。
でもHのほかに0xをつけて示す場合もあるみたいなのがどう違うのでしょうか?
両方とも16進数って意味ですよね
0209デフォルトの名無しさん
2009/01/13(火) 23:20:15後置のhはインテル系のアセンブラでの表記、前置の0xはCなどの言語での表記。
この他にも、前置の$や前置の&H、後置の(16)など、色々ある。
0210デフォルトの名無しさん
2009/01/13(火) 23:26:18コンストラクタもどうやって書いたらいいんだ?
タノム
0211デフォルトの名無しさん
2009/01/13(火) 23:28:37<algorithm>のfind()では何かご不満でも?
0212デフォルトの名無しさん
2009/01/13(火) 23:30:07STLのコンテナは継承するもんじゃないだろ。
0213デフォルトの名無しさん
2009/01/13(火) 23:32:40{
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じゃなくて他のクラスにしたいんだけど
0214デフォルトの名無しさん
2009/01/13(火) 23:33:40他のクラスでも==で比較できればfindできる。
==で比較できなくてもfind_ifがある。
0215デフォルトの名無しさん
2009/01/13(火) 23:33:40int 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;
}
0216デフォルトの名無しさん
2009/01/13(火) 23:35:10もし、t[2]に所望の要素が入っているからc = 2になってほしいという具合であれば、
int c = std::find(t.begin(), t.end(), 2) - t.begin();とすればいい。
0217デフォルトの名無しさん
2009/01/13(火) 23:35:34>211
0218デフォルトの名無しさん
2009/01/13(火) 23:36:580219デフォルトの名無しさん
2009/01/13(火) 23:37:27それが帰ってきてほしい。
いまんとこ、forでループして探してるんだけど
ながったらしくて
ごめんなさい
0220デフォルトの名無しさん
2009/01/13(火) 23:38:140221デフォルトの名無しさん
2009/01/13(火) 23:38:34test |= array[1]<<8;
test |= array[2]:
すみませんこれはどういうことでしょうか?
0222デフォルトの名無しさん
2009/01/13(火) 23:39:23>211
0223デフォルトの名無しさん
2009/01/13(火) 23:40:38見つからなかったらどうしてほしいの?
必ず見つかるなら、int c = *find(t.begin(), t.end(), 2);でいいのだが。やる意味はともかく。
0224デフォルトの名無しさん
2009/01/13(火) 23:40:54そういうことです。何が判らないのか判らないので謝られても困ります。
0225デフォルトの名無しさん
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なんですけど。
0226デフォルトの名無しさん
2009/01/13(火) 23:52:43<algorithm>インクルードした?
0227デフォルトの名無しさん
2009/01/13(火) 23:53:55>誤ったのは、教えていただくのにこちらはなんもできないので
藪から棒になんだ?
>コンパイル通らなかったです。
gccでコンパイルしているなら、コマンドをg++にして味噌。
0228デフォルトの名無しさん
2009/01/13(火) 23:56:02大変失礼。
うまくいきました。なんで、 - t.begin()(イテレータの減算)
で取得できるのかわからないので、そこは勉強します。
ありがとうございました。
0229デフォルトの名無しさん
2009/01/13(火) 23:58:18なんか恐縮でw
コンパイラは、g++使ってます。ありがとうございます。
0230デフォルトの名無しさん
2009/01/13(火) 23:59:150231デフォルトの名無しさん
2009/01/14(水) 00:02:210232デフォルトの名無しさん
2009/01/14(水) 00:03:36え?なんか理解できませんが、そうなんですか。
試してみたらそうみたいですね。
意味不明ですが、勉強します。
えーなんでだ・・・
0233デフォルトの名無しさん
2009/01/14(水) 00:06:390E00Hの0x1000先は1E00Hとのことでしたが
これは1バイト限定の話でしょうか?
仮に全て2バイトが入るとすると
メモリアクセス単位は0E00 0E02 0E04と1000先まであるけど実際は500個しか
メモリに値をおけないということですよね
0234デフォルトの名無しさん
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; }
}
}
0235デフォルトの名無しさん
2009/01/14(水) 00:12:25そんな間抜けなプログラム、一体全体どこの阿呆が書いたんだ?
ループ制御変数にインデックスカウンタとイテレータを両方とも使うのなんて初めて見たよ。
0236デフォルトの名無しさん
2009/01/14(水) 00:15:21while( ( j = getchar() ) != '\n') {
printf("%d\n", j );
}
C言語で↑の様に書いて、数値を入力して出力させたら入力した数値と出力される数値が異なるんですが、
何故異なるのか解りません。
誰かご教示お願いします。
例:6 と入力→54 と出力される。
0237デフォルトの名無しさん
2009/01/14(水) 00:16:11getchar()は文字コードを返す。
0238デフォルトの名無しさん
2009/01/14(水) 00:17:45なるほど…
即答ありがとうございます!
0239デフォルトの名無しさん
2009/01/14(水) 00:42:37compiler : gcc
c++でカレントディレクトリの情報を取得するには
どうすればいいですか?
0240デフォルトの名無しさん
2009/01/14(水) 00:54:05/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0241デフォルトの名無しさん
2009/01/14(水) 01:07:50>>216のは、探している要素が[n]にあったら、nを返すという動作。
0242デフォルトの名無しさん
2009/01/14(水) 01:41:07std::find()が返すのは見つかった要素を指すイテレータ。
まぁ慣れないうちはポインタみたいなものと思えば。
目的の要素のポインタから先頭要素を指すポインタを引けばindexになる
0243デフォルトの名無しさん
2009/01/14(水) 07:28:23そしたら、メモリから見るとこのメモリにはどのように記述というか表されているのでしょうか?
二進数で0101010とか もしくは16進数でいれられてるのでしょうか?
2バイトの整数でも同じでしょうか
0244デフォルトの名無しさん
2009/01/14(水) 07:32:27コンデンサに電荷がたまってる
0245デフォルトの名無しさん
2009/01/14(水) 07:52:57寧ろ聞きたい。二進数で入るのと16進数で入るのとでは何が違うと思うのかね。
0246デフォルトの名無しさん
2009/01/14(水) 07:56:38どっちかしか解釈できないかとおもいまして
機械語だと二進数になるみたいに
0247デフォルトの名無しさん
2009/01/14(水) 08:00:10例えば10(16)は16(10)であり10000(2)であるわけで。
勿論それは、100(4)でもあるし、20(8)でもある。
つまり、何進数であろうともそれがその数値であることには変わらないのだが。
# 中学校辺りから数学をやり直すべきじゃないか?w
0248デフォルトの名無しさん
2009/01/14(水) 09:20:20日本語でおk
0249デフォルトの名無しさん
2009/01/14(水) 09:43:36insert error
not founc 404
found anal OK?
とでるんですがどうしたらいいんでしょうか?
0250デフォルトの名無しさん
2009/01/14(水) 09:55:370251デフォルトの名無しさん
2009/01/14(水) 10:09:22〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ こいつ まピョーん☆
彡、 |∪| /
/ __ ヽノ /
(___)
0252デフォルトの名無しさん
2009/01/14(水) 10:10:31human->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...
ってコンパイラがいかれちゃったんですけど
どうすればいいんですか?
0253デフォルトの名無しさん
2009/01/14(水) 10:16:39X * x = new X();
Xというクラスがあったとして両者は同じこと?
0254デフォルトの名無しさん
2009/01/14(水) 10:21:42やってみればわかる
0255デフォルトの名無しさん
2009/01/14(水) 10:27:30Marisa->Sex( Marisa );
ってコンパイルしたら
compiling....
....
....
....
( ゚д゚ )ポカーン
とでるんですけど・・・
0256デフォルトの名無しさん
2009/01/14(水) 10:43:53よくみろよ警告でてるぞw
warrning : Marisa has HIV.
0257デフォルトの名無しさん
2009/01/14(水) 11:06:09#pramga warrning ( disable : Marisa )
0258デフォルトの名無しさん
2009/01/14(水) 11:41:46int T = 0;
while( T∀T )
printf( "帰れません\n" );
0259デフォルトの名無しさん
2009/01/14(水) 21:00:19pingすると 61 62 63 64... というデータが取得できそれらはab cd ef となっているのですが
これは何がおこっているのでしょうか?
というか、例えば charで文字列 string を配列に保存した場合
機械語にされたらというか、メモリ上ではどのような値で存在しているのでしょうか?
また、その値を見たら文字列stringだとわかるのでしょうか?
0260デフォルトの名無しさん
2009/01/14(水) 21:19:430x61 は a です。
メモリにはアスキーコードが格納されます。
メモリの値だけを見た時、それが数字としての0x61なのか、文字のaなのかを知る術はありません。
0261デフォルトの名無しさん
2009/01/14(水) 21:28:43なんでこんな知るすべのない方式にしたのでしょうか?
0x61は16進数の61でもあるし、aにもなりうるということですよね
0262デフォルトの名無しさん
2009/01/14(水) 21:32:53そんな汎用性の無いものが使えるか
0263デフォルトの名無しさん
2009/01/14(水) 21:33:30では、メモリをそれをどうやって文字なのか数字なのか解釈しているのでしょうか?
0264デフォルトの名無しさん
2009/01/14(水) 21:37:130x61をみたときに、体重97Kgとみるか、バスト97cmとみるか、解釈しだい
0265デフォルトの名無しさん
2009/01/14(水) 21:38:350266デフォルトの名無しさん
2009/01/14(水) 21:40:310267デフォルトの名無しさん
2009/01/14(水) 21:42:40読む側が適当に解釈してます。
というよりも、実際はメモリの値だけを見てどうにかしようとすることが稀ですね。
大抵は型を保持している変数を経由してアクセスしますから。
キャストといって、あえて本来とは異なる型で読むこともあります。
0268デフォルトの名無しさん
2009/01/14(水) 23:32:24test |= array[1]<<16;
test |= array[2]<<8;
test |= array[3]:
arrayは1byteの型としておきます
これでtestは何バイト型になるのでしょうか?
0269デフォルトの名無しさん
2009/01/14(水) 23:34:53それは演算しても変わらんよ
0270デフォルトの名無しさん
2009/01/14(水) 23:35:110271デフォルトの名無しさん
2009/01/14(水) 23:44:364byte以上で宣言すればなくならないことかな
0272デフォルトの名無しさん
2009/01/14(水) 23:49:11int が 2 バイトの環境では array[0] << 16 や array[0] << 24 が未定義動作になる。
array[2] << 8 はどんな環境でも大丈夫だが、
char と int が両方 16 ビットとかいう超特殊な環境なら、上の 8 ビットが死ぬ。
(そもそも char が 8 ビットであることを期待したコードだから関係ないけどね)
0273デフォルトの名無しさん
2009/01/15(木) 00:10:21test をlongで4バイトにしても
arrayは昇格しないのですよね
intが2バイト環境で解決するほうほうはないでしょうか?
0274デフォルトの名無しさん
2009/01/15(木) 00:18:11for(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;
}
}
こんな感じで、傾きだけ指定してからなら太さを指定しても太い斜線が出力できるの
ですが、どうしてでしょうか?
0275デフォルトの名無しさん
2009/01/15(木) 00:43:580276デフォルトの名無しさん
2009/01/15(木) 01:00:58処理
}
このような文はいつwhile文が終了するのでしょうか?
組み込み系に多いらしいのですが、終了しないと無限ループして
やたら領域とCpuを食うとおもうのですが
0277デフォルトの名無しさん
2009/01/15(木) 01:06:090278デフォルトの名無しさん
2009/01/15(木) 01:11:000279デフォルトの名無しさん
2009/01/15(木) 01:21:52ありがとうございます。
intからdoubleにしたらちゃんと描画されました。
0280デフォルトの名無しさん
2009/01/15(木) 01:25:59union使うとか?
0281デフォルトの名無しさん
2009/01/15(木) 02:13:08検索できなくて面倒なんだけど
0282276
2009/01/15(木) 07:01:440283デフォルトの名無しさん
2009/01/15(木) 07:06:45array[*] を 4 バイトの型にキャストすればいい。
0284デフォルトの名無しさん
2009/01/15(木) 07:13:42それなら、ビットシフトする必要はなくなるかな?
0285デフォルトの名無しさん
2009/01/15(木) 07:24:060286デフォルトの名無しさん
2009/01/15(木) 07:25:42・バイトオーダに依存する
・CPU によってはアラインメントがズレてて死ぬかもしれない
まあ、環境が許すならいいじゃない?
0287デフォルトの名無しさん
2009/01/15(木) 07:26:00もしかしたら = array[0] << 8L; でも大丈夫かも
でも責任はもてない
0288デフォルトの名無しさん
2009/01/15(木) 07:29:220289デフォルトの名無しさん
2009/01/15(木) 11:04:580290デフォルトの名無しさん
2009/01/15(木) 12:04:130291デフォルトの名無しさん
2009/01/15(木) 14:00:32その外部関数内で配列をいじくるとmain関数内の二次元配列の値も変わってしまうのですが、
どうすればよいのでしょうか。
0292デフォルトの名無しさん
2009/01/15(木) 14:09:17その配列を複製してしまえばよろしい。
0293デフォルトの名無しさん
2009/01/15(木) 14:10:31外部関数内で配列をいじらないようにする。
0294デフォルトの名無しさん
2009/01/15(木) 16:14:40array[ 0 ] = strtok( file_image, ",\n" );
array[ 1 ] = strtok( NULL, ",\n" );
array[ 2 ] = strtok( NULL, ",\n" );
こういうのがでてきました。しかしここで疑問なのですが、なぜ2回目からNULLなのでしょうか?
指し示すファイルから、指定した文字で分割する関数ですよね?NULLを指定しても意味がないように見えるのです
0295デフォルトの名無しさん
2009/01/15(木) 16:30:550296デフォルトの名無しさん
2009/01/15(木) 18:23:46strtok関数が覚えてる
0297デフォルトの名無しさん
2009/01/15(木) 18:35:12x と y はどのように初期化してるんだい?
その配列を除外すると斜めに引けるんでしょ?
0298デフォルトの名無しさん
2009/01/15(木) 19:19:20第一引数にディレクトリ名、第二にファイル数です。
このプログラムを改造して指定ディレクトリから、選んでくるファイルをランダムにするようにしたいのですが、
どのようなコーディングになりますでしょうか。(エラー処理は適当です、すいません)
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);
}
0299デフォルトの名無しさん
2009/01/15(木) 19:23:41多分その環境ならあるだろう
0300デフォルトの名無しさん
2009/01/15(木) 19:52:06readdir()がNULLを返すまで繰り返さないと、ディレクトリに何個ファイ
ルが存在するかはわからなかった気がする。
簡単にやるには、readdir()ループでファイル名をぜんぶ記録して、総数
がわかってから確率で選んで、実際の処理をする。
0301デフォルトの名無しさん
2009/01/15(木) 19:52:30うまい方法はないので、一旦全部のファイルを読んで
数とファイル名を覚えておく。そのあと、そこからランダムに選んでいく。
ランダムに選ぶのを厳密にやるのは面倒だけど、そこを気にしては
いないでしょ?
0302デフォルトの名無しさん
2009/01/15(木) 20:11:08ちなみに、乱数の揺らぎのせいで選出パターンがリストの序盤に偏ったり、
逆に必要数が集まらなかったりするので、厳密にやろうとすれば
1.ファイル情報を全て配列に並べる
2.乱数を使ってソーティングする
3.上から必要な分だけ選ぶ
という流れになる。
ランダムソートのコストが大きいのであれば、ちょっと低めの確率で2〜3回リストを
走査して必要数が集まるようにすれば、それっぽい動きをするでしょう。
0304デフォルトの名無しさん
2009/01/15(木) 20:27:22ふっ、この程度のもの、プログラミングを職としていない俺でも
昼食前だぜ
0305デフォルトの名無しさん
2009/01/15(木) 20:43:050306デフォルトの名無しさん
2009/01/15(木) 20:44:26C++ というより数学の記号
開区間と閉区間でぐぐれば分かるんじゃねー
0307デフォルトの名無しさん
2009/01/15(木) 20:44:590308デフォルトの名無しさん
2009/01/15(木) 20:57:05[a, b] : a <= x <= b
[a, b) : a <= x < b
0309デフォルトの名無しさん
2009/01/15(木) 21:16:29みんな頭いいな。
0310デフォルトの名無しさん
2009/01/15(木) 21:33:45http://msdn.microsoft.com/en-us/library/ms533798.aspx
ここを読む限り、NT 4 SP6はいいが95はだめそうだ。
0311298
2009/01/15(木) 21:46:06みんなレスありがとー
ファイル名全部を配列に保持して、インデックスをランダム抽選するのですね
C初で関数名が鮭わかめですがググル先生とがんばってみまう
0312デフォルトの名無しさん
2009/01/15(木) 23:35:520313デフォルトの名無しさん
2009/01/16(金) 17:16:15static char name[30];
static int sequence = 0;
name[3] = static_cast<char>(sequence + '0');
0314デフォルトの名無しさん
2009/01/16(金) 17:25:50例えば sequence = 1 なら、sequence + '0' ==> '1' といった具合に。
0315デフォルトの名無しさん
2009/01/16(金) 18:11:05ありがとうございます!
単にchar型にキャストするだけじゃ文字には変換されないんですね。
0316デフォルトの名無しさん
2009/01/16(金) 20:25:06いいですか?イテレータで詰まってます。
0317デフォルトの名無しさん
2009/01/16(金) 22:30:24グーグルで「C++ 開発環境 無料」での一番上のサイトで揃えようとしましたが、
デバッカーだけ揃えられませんでした。
デバッカーをダウンロードできる項目と
上記の環境以外で、無料開発環境のオススメを教えて下さい。
お願いします。
0318デフォルトの名無しさん
2009/01/16(金) 22:31:40もっとも、Windowsが無料じゃないというのが手落ちだが。
0319デフォルトの名無しさん
2009/01/16(金) 22:38:35Mac OS X -> XCode(OS に同梱)
Linux -> Eclipse
これでおk
0320デフォルトの名無しさん
2009/01/16(金) 22:41:250321デフォルトの名無しさん
2009/01/16(金) 22:46:130322デフォルトの名無しさん
2009/01/16(金) 22:50:070323デフォルトの名無しさん
2009/01/16(金) 22:52:230324デフォルトの名無しさん
2009/01/16(金) 22:58:370325デフォルトの名無しさん
2009/01/16(金) 23:00:110326デフォルトの名無しさん
2009/01/16(金) 23:02:330327デフォルトの名無しさん
2009/01/16(金) 23:14:310328デフォルトの名無しさん
2009/01/16(金) 23:38:48VisualStudio6.0を使ってC言語の勉強をしています
コンソールアプリケーションで色々書いて動かしているようなレベルなのですが
ファイル名の命名規則のようなものがあったら教えて頂けないでしょうか?
変数や関数の命名規則は色々出てきたのですが、
ファイル名の命名規則のようなものが見つけ切れませんでした
例えばソースファイルならこのような形式の名前のファイルにするとか
大文字だとかそういうルール的なものがあればという意味合いなのですが
もし、そんなルールがないのでしたら一般的な一例を教えて頂ければと思います
変な質問で恐縮ですが、宜しくお願いします
0329デフォルトの名無しさん
2009/01/17(土) 00:07:09SourceFile.c
sourceFile.c
source-file.c
source file.c
ソースファイル.c
好きなの使っとけ。
0330デフォルトの名無しさん
2009/01/18(日) 01:09:25for(・・・) {
for(・・・) {
switch(・・・) {
case *:
・・・
}
}
}
というようなループ機構で、ループ内でswitch分岐を行っているのですが、
ループ回数がかなり多く、高速化のため分岐を外に出しました。
つまり同じループ機構をいくつか書いて、ループ内でなるべく条件判定を
行わないようにしたのですが、実際このループ部分も結構色々書いてまして、
同じ文を何度も書くと結構な量です。さらにこうなると後の修正も非常に面倒になりますので、
何とか同じ文を何度も書かずに済む方法はないかと思っています。
結果的に分けられたループそれぞれの違いはループ内だけになるのですが、
何かうまい方法はありませんでしょうか?
例えばテンプレートなんかだと、結構似たようなことが出来ますが、
あれは型や値で分けることしか出来ないみたいですね。
ループ前後をマクロ化するというのも考えましたが何か不格好な・・・。
ちなみにループひとつでおよそ50行くらいです。
0331デフォルトの名無しさん
2009/01/18(日) 01:34:46あと条件判定が外出しすることで高速化した、と言ってるようだが
普通、条件判定みたいに一瞬で終わるものを外に出しても
高速化しない。
0332デフォルトの名無しさん
2009/01/18(日) 01:39:320333デフォルトの名無しさん
2009/01/18(日) 02:08:230334デフォルトの名無しさん
2009/01/18(日) 02:41:35関数オブジェクトあたりを使うといいんじゃないだろうか
0336デフォルトの名無しさん
2009/01/18(日) 13:22:37開発環境を立ち上げる事ができません。
どうやって起動すればいいでしょうか?
因みに、
>もっとも、Windowsが無料じゃないというのが手落ちだが。
はどういう意味でしょうか?
0337デフォルトの名無しさん
2009/01/18(日) 13:45:37まぁ、バンドル品しか買ってないと気がつきにくい話ではあるが。
0338デフォルトの名無しさん
2009/01/18(日) 13:46:23困ったものですね
0339デフォルトの名無しさん
2009/01/18(日) 15:50:57VC++のアイコンがデスクトップにあれば、それをダブルクリックすると起動するよ。
あるいは、デスクトップ左下のスタートアイコンの「すべてのプログラム」からVC++をさがしてクリックすれば起動するはず。
0340デフォルトの名無しさん
2009/01/18(日) 18:37:10int 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*'
0341デフォルトの名無しさん
2009/01/18(日) 18:38:010342デフォルトの名無しさん
2009/01/18(日) 18:40:050343デフォルトの名無しさん
2009/01/18(日) 18:43:540344デフォルトの名無しさん
2009/01/18(日) 18:45:18なるほど分かりました.
Java のように文字列が string 型扱い…ということではなかったんですね
0345デフォルトの名無しさん
2009/01/18(日) 18:49:43Cとの互換のためchar*への変換が可能になっている。
まあstring型は別にあるけど、それはともかく。
0346デフォルトの名無しさん
2009/01/18(日) 18:55:32CもC++も初めからconst charの配列。
互換のためでも何でもなく、変換はそもそも可能。
0347デフォルトの名無しさん
2009/01/18(日) 19:02:06constが無かった時代を引きずっている。
0348デフォルトの名無しさん
2009/01/18(日) 19:24:47何を血迷ってるんだ。
リテラルを書き換えられた古代の C との互換性のため
ANSI C でしかたなく char* への変換を可能にして、
それとの互換性で C++ でも同様にしてるんじゃないか。
0349336
2009/01/18(日) 20:40:24なぜか、すべてのプログラムの項目にもVC++の欄は無く、
デスクトップには、リンク先が「F:\vcsetup.exe」の「vcsetup へのショートカット」
というアイコンしか出ませんでした・・・orz
0350デフォルトの名無しさん
2009/01/18(日) 21:04:050351デフォルトの名無しさん
2009/01/18(日) 22:39:44int 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)
とエラーが出るのですが、どのようにすればいいのでしょうか?教えてください。
0352デフォルトの名無しさん
2009/01/18(日) 22:43:30printf("平均値 %d\n",ave(y));
0353デフォルトの名無しさん
2009/01/18(日) 22:44:29y[5]はint
0354デフォルトの名無しさん
2009/01/18(日) 22:45:180355デフォルトの名無しさん
2009/01/18(日) 23:10:26ありがとうございました。
0356デフォルトの名無しさん
2009/01/19(月) 01:00:25関数をテンプレートにして、関数オブジェクトを使えば確かにできそうですね。
しかし実際やってみると本当にインライン展開してくれるのかが不安です・・・
もし展開されてないと呼び出しオーバーヘッドが発生しては意味がないので。
0357デフォルトの名無しさん
2009/01/19(月) 01:01:150358デフォルトの名無しさん
2009/01/19(月) 15:10:53各行はひとつの三角形を示す。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
0359デフォルトの名無しさん
2009/01/19(月) 15:13:580360デフォルトの名無しさん
2009/01/19(月) 15:32:34a * 3.14 / (4 + b) + e ^ (3c)
などと書かれたテキストを解析して計算させようとおもっているのですが、
こういうのってなんて言うんですか?
(数式処理プログラム…とはちょっと違いますよね)
実現できるライブラリや、開設サイトとかありましたらご教授ください。
0361358
2009/01/19(月) 15:33:00#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;
}
例のとおりに表示するにはどうすればいいのでしょう?
0362デフォルトの名無しさん
2009/01/19(月) 15:40:34printf("%d 個の三角形の面積は下記のとおりである。\n", NUM);
printf("%.2f\n", s1);
printf("%.2f\n", s2);
printf("%.2f\n", s3);
ということ?
0363デフォルトの名無しさん
2009/01/19(月) 15:44:38yaccとかlexの話かな?
0365デフォルトの名無しさん
2009/01/19(月) 16:03:23もともと質問が表示するにはどうしたらいいか?だったからprintfしか書かなかったが。
0366デフォルトの名無しさん
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;
}
0368360
2009/01/19(月) 18:13:53うーん、コンパイラコンパイラとはちょっと違うと思います…
上手く説明できてないんですけど、
たとえば、aとbとcという変数があったとき、
それを
a * 3.14 / (4 + b) + e ^ (3c)
とか、
a * log(b) + c
とか、任意の式を文字列で与えて計算できるようにしたい…という感じです。
BearGraph(グラフ描画ソフト)で、式を入れると、それを解析して、
変数に応じたグラフを吐いてくれる…みたいな使い方です。
…とBearGraphのヘルプ見たらなんとかなるんじゃないかと思い、参考文献読みあさったら、
アルゴリズム事典の"式の評価"の所にそれらしきものが載っていました(四則演算のみですが)。
ちょっとこれをいじって関数使えるように挑戦してみますが、
もし既にこんな事ができるライブラリがありましたらご教授願います。
0369デフォルトの名無しさん
2009/01/19(月) 19:17:08「逆ポーランド記法」で頑張れ。
0370デフォルトの名無しさん
2009/01/19(月) 19:18:29そんなのは自分で考えェェ!!!
0371デフォルトの名無しさん
2009/01/19(月) 22:02:20スタックマシーン
0372デフォルトの名無しさん
2009/01/19(月) 22:05:17二分木
0373360
2009/01/19(月) 22:26:26これすごいw 知らなかったw
ちょっとがんばってみるww
>>368-369
一口に式の評価といっても、いろいろあるんですね…
勉強になりました。ありがとうございました。
0374デフォルトの名無しさん
2009/01/19(月) 22:31:080375デフォルトの名無しさん
2009/01/19(月) 22:31:35まあそれはそれで面白いけど、
計算式を構文解析して内部的に逆ポーランド記法みたいな状態にコンパイルしてから
スタックマシンに計算させるって使い方が普通じゃね。
0376デフォルトの名無しさん
2009/01/19(月) 22:45:31たぶんコンパイラの教科書の最初の方(構文解析のところ)に載ってるよ
0377デフォルトの名無しさん
2009/01/19(月) 22:50:31逆ポーランド記号は確実に入るから
構文解析が楽なのかね
とこの流れを見てふと思った
0378デフォルトの名無しさん
2009/01/19(月) 22:53:260379デフォルトの名無しさん
2009/01/19(月) 22:57:58この場合はyaccとlexでいいんじゃないかと思う
0380デフォルトの名無しさん
2009/01/19(月) 23:01:35yacc/lex だとプログラムの組み方にも変な制限かかるしね。
0381デフォルトの名無しさん
2009/01/19(月) 23:03:35公開したい場合は面倒なんだよな。
0382デフォルトの名無しさん
2009/01/19(月) 23:34:04cf.
system("awk 'BEGIN {a = 3; b = 4; c = 5; print c * c - a * a - b * b;}'");
0383デフォルトの名無しさん
2009/01/19(月) 23:35:53Ruby で計算させるやつ。
0384349
2009/01/19(月) 23:50:20「Program Files」の「Microsoft Visual Studio 9.0」というフォルダの中に
「Microsoft Visual C++ 2008 Express Edition with SP1 - JPN」や「VC」がありますが、
確かにsetupと書いてあるので、
おそらくインストールされていないでしょうが、
私の使っているパソコンには、Fドライブはありませんですし、
それに至るプロセスが無い以上、どうする事も出来かねます。
0385デフォルトの名無しさん
2009/01/20(火) 00:41:38重複しないようにするには、これまで発生した数すべて記憶するほか術はないのでしょうか
0386デフォルトの名無しさん
2009/01/20(火) 00:46:43記憶っていうか、そういうことをするなら、配列に0〜1000の値を
入れておいて、シャッフルするのがふつーだと思う。
0387デフォルトの名無しさん
2009/01/20(火) 00:47:05for(i=0;i<=1000;i++)
a[i]=i;
for(i=0;i<適当に;i++)
swap(&a[rand()%1001], &a[rand()%1001]);
こんなんでどうよ?
swap()は適当に実装よろ
0388デフォルトの名無しさん
2009/01/20(火) 00:50:37即レスありが�d
シャッフル同盟について調べてみるお
GO FIGHT
>>387
100回くらい読んだけどわかんないお・・・(^オメガ^;)
swapについて調べてみるお
0389デフォルトの名無しさん
2009/01/20(火) 00:52:480390デフォルトの名無しさん
2009/01/20(火) 00:54:12シャッフルって言うか、スワップっていうか
http://www.tbs.co.jp/loveshuffle/
0391387
2009/01/20(火) 01:05:59for(i=0;i<=1000;i++)
swap(&a[i], &a[rand()%(i+1)]);
こっちのがよさげだわ
0392デフォルトの名無しさん
2009/01/20(火) 01:15:43for(i=0; i<=1000; i++) {
j = rand() % (i + 1);
a[i] = a[j];
a[j] = i;
}
0393デフォルトの名無しさん
2009/01/20(火) 01:18:13CALLBACK関数のポインタを受け取りたいんですけど、書き方がどうしてもわからずに相当なやんでます。
使ってるのは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: 構文エラー : ')'
括弧がどうとか、ってことなんですけど・・・
0395デフォルトの名無しさん
2009/01/20(火) 01:40:07俺は関数ポインタを扱うときは(メンバ関数も含め)必ずtypedefするようにしてる。
だからどうやったらエラーが消せるかわからない。
0396デフォルトの名無しさん
2009/01/20(火) 01:41:20シャッフル後の並びに確率的な偏りが生じるから注意
0397デフォルトの名無しさん
2009/01/20(火) 01:46:210398デフォルトの名無しさん
2009/01/20(火) 01:53:450399デフォルトの名無しさん
2009/01/20(火) 01:54:36void timerset(void (CALLBACK *func)(UINT, UINT, ULONG, ULONG, ULONG),
UINT time_delay, UINT event)
0400デフォルトの名無しさん
2009/01/20(火) 01:55:13void 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
0401デフォルトの名無しさん
2009/01/20(火) 01:56:08C++じゃないならあきらめろ。
0402デフォルトの名無しさん
2009/01/20(火) 01:57:09生じる
まともにやりたきゃ、1から1000のリンクリスト作ってランダムで1個ずつ抜いていけ
0403デフォルトの名無しさん
2009/01/20(火) 01:57:26ありがとうございます!
今日の夕方から調べたり試したりしてたので、多分7時間くらいはなやんでましたw
死んできますw
0404デフォルトの名無しさん
2009/01/20(火) 01:59:18プw
for(i=0;i<=1000;i++)
a[i]=i;
で初期化して
for(i=0;i<=1000;i++)
swap(&a[i], &a[rand()%(i+1)]);
すれば偏りなんてありませんw
0405デフォルトの名無しさん
2009/01/20(火) 02:09:13試せよカス
0406デフォルトの名無しさん
2009/01/20(火) 02:13:38お前が試せよ、カスがw
0407387
2009/01/20(火) 02:36:52デクリメントループだとFisher-Yatesのアルゴリズムと言われるみたいだな。
根拠となる文献示してもらえると無駄にあれなくて済むから
偏るって言ってる人はキーワードだけでも教えてもらえるとうれしい。
この辺で今日は寝る
0408デフォルトの名無しさん
2009/01/20(火) 04:06:38カスがカスに向かってカスとは、失礼だろw このクズがw
0409デフォルトの名無しさん
2009/01/20(火) 05:38:15(^オメガ^;)
0410デフォルトの名無しさん
2009/01/20(火) 05:42:580411デフォルトの名無しさん
2009/01/20(火) 08:03:42どう考えても偏ります。本当にありがとうございました。
0412デフォルトの名無しさん
2009/01/20(火) 08:35:04さっぱりわからん
0413デフォルトの名無しさん
2009/01/20(火) 10:17:16ttp://d.hatena.ne.jp/bellbind/20081105/
0414デフォルトの名無しさん
2009/01/20(火) 10:44:37まじでありがとう。
なんとなくわかってきたわ。
0415デフォルトの名無しさん
2009/01/20(火) 11:18:27while(data_in.eof()){
0416デフォルトの名無しさん
2009/01/20(火) 11:24:120417デフォルトの名無しさん
2009/01/20(火) 11:25:01ifstream data_in(argv[1]); // 入力ファイル
int num;
while(!data_in.eof()){
data_in >> num;
cout << num;
}
return(0);
とするとですね、空っぽのファイルを読み込む場合、
EOFを読む前に一回loopに入ってしまうみたいなんですが、
どうすればloopに入らないようにできるんでしょうか?
あと入力ファイルに文字列が含まれていた場合、止まらなくなったんですが
どういう挙動が起こっているのかも教えてほしいです
0418デフォルトの名無しさん
2009/01/20(火) 11:32:070419デフォルトの名無しさん
2009/01/20(火) 11:40:40その系統は全て、「前回読んだ結果EOFに達したかどうか」の判定をしているだけ。
while (feof()) {...} みたいなループはおそらく意図通りには動かない。
また、数字を読みたいのに数字以外が入力されたときは
入力エラーということだけを返して
次回の入力はまた同じ位置から始まるので、また同じエラーが繰り返される。
詳しくはscanf+無限ループあたりでぐぐるとよいかも。
0420デフォルトの名無しさん
2009/01/20(火) 11:54:54while (!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 も立たないけどね。
0421デフォルトの名無しさん
2009/01/20(火) 12:02:390422デフォルトの名無しさん
2009/01/20(火) 12:04:140423デフォルトの名無しさん
2009/01/20(火) 12:04:49次の文字を読み込もうとしてEOFに達した」というのも
「前回の読み込みでEOFに達した」に含まれるでしょ。
0424デフォルトの名無しさん
2009/01/20(火) 12:05:19みなさんありがとうございます!勉強になりました。
そこそこ高い参考書を買ったんですが、
細かい所までは載ってないんですよね
0425デフォルトの名無しさん
2009/01/20(火) 12:13:44だから>>420の「C++のストリーム云々」が関係ないっての。
12345<EOF>をscanf("%d")しても読み込めるし、(FILE構造体内の)eofビット立つっての。
0426デフォルトの名無しさん
2009/01/20(火) 12:18:310427デフォルトの名無しさん
2009/01/20(火) 12:23:48>>421「いや、C++のストリームだけじゃないよ」
どこがおかしいの?
0428デフォルトの名無しさん
2009/01/20(火) 12:27:470429デフォルトの名無しさん
2009/01/20(火) 12:29:100430デフォルトの名無しさん
2009/01/20(火) 12:31:23そもそも、
>ちょうどぴったりEOFに到達した場合は eofbit が立つよ。
自体がおかしいんだから。
「ちょうどぴったりだった」じゃなくて、
「次を読もうとして一致しなかった(EOFだった)」からeofbitが立つのであって
全然>>419の「前回読んだ結果がEOFだったかどうかの結果を示す」の反論になってない。
その上で、わざわざ「C++の場合は意味があるよ」と言ってるが
その程度の「意味があるよ」なら「C++に限らない」というだけ。
0431デフォルトの名無しさん
2009/01/20(火) 12:35:10「C++の場合はEOFの位置を読もうとトライして失敗した結果じゃなく、
ファイルサイズを知っていて12345<EOF>の<EOF>を読み込もうとはしていない」
と言いたいわけじゃあるまい。
0432デフォルトの名無しさん
2009/01/20(火) 12:49:18int n;
cin >> n;
というコードがあるとして、
>>419は、cin >> n; が失敗したかどうかに関係なく
「読み込みのときにEOFに達したら」eof()になるという話なのに
>>420が「cin >> n; が失敗したら」と読み取って
「ちょうどぴったりだと、」という話を始めたんだろ?
だから、「それは(C++のstreamに限らず)一般的なことで、当然である」
ということなんだが。
0433デフォルトの名無しさん
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を調べてみたのですが、関数のようなものの使い方がよくわからずに困り果てています。
型の変換をしたらいいということまではわかったのですが…
どなたか解決策を教えていただけないでしょうか??
0434デフォルトの名無しさん
2009/01/20(火) 13:55:07#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
0435デフォルトの名無しさん
2009/01/20(火) 14:00:43{ return 0; }
を付け加えるというのでどうだろう
0436デフォルトの名無しさん
2009/01/20(火) 14:16:21うまくいきませんでしたが、ありがとうございます。
0437デフォルトの名無しさん
2009/01/20(火) 14:36:05Speech知らんけどググったらこんなのが
ttp://www.wasamon.net/miyo/Diary%252F2007%252D12.html
0438デフォルトの名無しさん
2009/01/20(火) 15:14:36神きたーー!!
そのまんまコピペでコンパイルできました!!
ありがとうございます!
ほんとにたすかりました
0439デフォルトの名無しさん
2009/01/20(火) 18:12:470440デフォルトの名無しさん
2009/01/20(火) 18:26:440441デフォルトの名無しさん
2009/01/20(火) 19:45:030442デフォルトの名無しさん
2009/01/20(火) 20:06:50エラー 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行目です)
0443デフォルトの名無しさん
2009/01/20(火) 20:07:200444デフォルトの名無しさん
2009/01/20(火) 20:10:22int x;
int y;
int ghandle;
int shooting;
};
struct CharaData jikidata;
struct CharaData jitama;
を
#include "DxLib.h"
の直後に移動させるといいよ
しかいスコープを全く理解していないんだな
0445デフォルトの名無しさん
2009/01/20(火) 20:18:36スコープの無い言語から最近C++に移ったもので、おっしゃる通りスコープの概念をまだあまり理解できてないです…
whileの外で宣言していたから大丈夫かと思ったのですが、どうやら違っていたようで…
本当にありがとうございました。
0446デフォルトの名無しさん
2009/01/20(火) 20:50:510447デフォルトの名無しさん
2009/01/20(火) 20:52:46買う本間違えました
0448デフォルトの名無しさん
2009/01/20(火) 21:41:120449デフォルトの名無しさん
2009/01/20(火) 21:51:10人の代わりにググろうと思ったら、マルチかよ。
http://oshiete1.goo.ne.jp/qa4645590.html
0450デフォルトの名無しさん
2009/01/20(火) 21:52:280451デフォルトの名無しさん
2009/01/20(火) 22:12:00}
このような文があった場合、いつまでループするのでしょうか?
0452デフォルトの名無しさん
2009/01/20(火) 22:12:390453デフォルトの名無しさん
2009/01/20(火) 22:13:250454デフォルトの名無しさん
2009/01/20(火) 22:17:35ということは、それが前提だとたいてい
for文の中にif文があるということでしょうか?
break return gotoなきfor(;;)は無限ループということですよね
0455デフォルトの名無しさん
2009/01/20(火) 22:18:190456デフォルトの名無しさん
2009/01/20(火) 22:21:480457デフォルトの名無しさん
2009/01/20(火) 22:22:510458デフォルトの名無しさん
2009/01/20(火) 22:30:13rand()に依存するため、どの道、何かしら偏りというのは起こる。
思い込みや勝手な持論を展開する奴ほど、厄介。
結果が全て物語っているんだが・・・結果を見ない奴もいるし。
0459デフォルトの名無しさん
2009/01/20(火) 22:32:22どっかのブログで、その方法は偏りがでるって解説してたな。
(rand()が偏りなくても)
0460デフォルトの名無しさん
2009/01/20(火) 22:36:05それがどこのブログか、どんな理由で偏りが生じるかがわかればすっきりするんだがな
0461デフォルトの名無しさん
2009/01/20(火) 22:36:381/0ってなんでしょうか?
0463デフォルトの名無しさん
2009/01/20(火) 22:46:06ゼロ除算 これやると死ぬっていう話だったんだけど
ためしにVC2008でコードかいたらコンパイラに突っぱねられたorz
int a, b = 0;
a = 1/b;
とでも書いてみるといい
0464デフォルトの名無しさん
2009/01/20(火) 22:52:59そういう話じゃないじゃん。
結果って>>413のリンクのことを言っている?
0465デフォルトの名無しさん
2009/01/20(火) 22:53:43VC独自は置いとけば、
0除算で例外はおきないよ
0466デフォルトの名無しさん
2009/01/20(火) 22:54:440467460
2009/01/20(火) 22:56:24他に見かけるのは全部降順ループになってるし
http://www.codinghorror.com/blog/archives/001015.html
この点で差が出てくるのかまだわからん
線形合同法は信用してないしrand()依存の偏りは同意するわ
個人的にここではスルーでいいと思ってたけど
0468デフォルトの名無しさん
2009/01/20(火) 22:57:510469デフォルトの名無しさん
2009/01/20(火) 22:58:32どんなアルゴリズムでも、rand()に依存するから
何かしら偏りはある
0470デフォルトの名無しさん
2009/01/20(火) 22:58:35まじすか?
ごめん 勘違いだったみたい
0471デフォルトの名無しさん
2009/01/20(火) 23:00:380472デフォルトの名無しさん
2009/01/20(火) 23:00:470473デフォルトの名無しさん
2009/01/20(火) 23:04:09そういうh(ry
0474デフォルトの名無しさん
2009/01/20(火) 23:12:42線形合同法で内部で32bitで計算して、上位16bitを返してる
実装だと、下位ビットの周期はたぶん6万くらいだから、
数十万とか数百くらいでためせば偏りがわかるかも。
0475デフォルトの名無しさん
2009/01/20(火) 23:16:28>>474
はなんで人の話聞かないんだろう・・・・・・
0476デフォルトの名無しさん
2009/01/20(火) 23:18:57お前が偏りに関して無知なだけ。
0477デフォルトの名無しさん
2009/01/20(火) 23:20:32rand()の偏りについてはだれも疑問にすら思ってないから安心しろ
0478デフォルトの名無しさん
2009/01/20(火) 23:23:150479デフォルトの名無しさん
2009/01/20(火) 23:23:52rand()が理想的な一様分布の乱数と仮定したとき>>404のアルゴリズムに偏りが生じるかどうか答えてもらおうか
これでこの話も終わるだろ
0480デフォルトの名無しさん
2009/01/20(火) 23:24:19例えば4枚のカードをシャッフルする例で、三万回やれば24パターンが同数出るとでも思っているのか?
0481デフォルトの名無しさん
2009/01/20(火) 23:25:49VC++ では構造化例外という例外の独自拡張により
0 除算なども構造化例外を投げるよ。
0482デフォルトの名無しさん
2009/01/20(火) 23:27:34もしそれ以上追求したいなら、例えば1〜10までの値を扱う場合、
前半に5以下の値をいくつまでと決めるとか、何かしら手を加えなきゃ無理。
いくらあのアルゴリズムで並び替えても、連続する数字が並んでいたら
偏りと言ってしまえば、それまで。それも偶然か、rand()依存は関与してしまう。
0483デフォルトの名無しさん
2009/01/20(火) 23:27:41ほぼ同数でるんじゃね?
0484デフォルトの名無しさん
2009/01/20(火) 23:28:05と思ってたけど、ググると PowerPCは単に0を返すみたいだ。へえ
0485デフォルトの名無しさん
2009/01/20(火) 23:32:53オマエは実際やってみた方がいい・・・
0486デフォルトの名無しさん
2009/01/20(火) 23:33:20独自拡張だけどな。
0487デフォルトの名無しさん
2009/01/20(火) 23:40:07たった24パターンしかないのに、三万回もやってそんなに偏りはでないだろ。
0488デフォルトの名無しさん
2009/01/20(火) 23:40:58>>413で終わりにしよう。
0489デフォルトの名無しさん
2009/01/20(火) 23:43:00http://www.aso.ecei.tohoku.ac.jp/~shun/multi_dim.html
にある様にやっているのですがうまくいきません。
↑の資料は合っていますか?
あと、画像処理で2次元配列の動的確保を行っているんですが
4167×4167のbitmapのメモリ動的確保はメモリくいすぎて
うまくいかないんでしょうか?
・・とおもって3×3のbitmapでやってもうまくいきません。。
0490デフォルトの名無しさん
2009/01/20(火) 23:48:29資料は合ってると思うけど
君の書いた奴を晒してくれないと
0491デフォルトの名無しさん
2009/01/20(火) 23:50:480492デフォルトの名無しさん
2009/01/20(火) 23:51:42二次元配列の作り方には主に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の倍数にする必要もあるので注意な。
0493デフォルトの名無しさん
2009/01/20(火) 23:56:17シグナル関連の話なのか
構造化例外のことなのか
0494デフォルトの名無しさん
2009/01/21(水) 00:01:480495デフォルトの名無しさん
2009/01/21(水) 00:04:140496デフォルトの名無しさん
2009/01/21(水) 02:57:40> >>404のアルゴリズムに偏りが生じるかどうか
環境依存。rand()を使用している以上、その仕様に依存する。
確率を調べようにも、結局、コンピュータが内面的に出している乱数も
偏りがあるから仕方が無い。たまたま、使用した環境、タイミング、PCで述べられても困る。
そこまで気にするなら、予めいくつかパターンを用意しておくなり、ハッシュを使え。
あと、例のサイトの落とし穴は、そいつがあの結果をもとに、そう思ったに過ぎない。
意図的に仕組まれていない以上、最初の順番が関与するというなら、その順番を一度
並び替えてから、また並び替えを行えば良いじょのいこ?w
0497デフォルトの名無しさん
2009/01/21(水) 02:58:580498デフォルトの名無しさん
2009/01/21(水) 02:59:32取り出すのもありだろ?頭を使わないと、結局その場当たり的な結果で
己の思考まで左右されてしまうぞ?もっと客観的に、柔軟に考えろ。
最初からバラバラに並んでいるのなら、シャッフルも必要なかろうw
0499デフォルトの名無しさん
2009/01/21(水) 03:00:33だからさぁ、言いたいことがあるなら言えよ。宿題スレにしろ、うぜぇんだよガキが
0500デフォルトの名無しさん
2009/01/21(水) 03:02:210501デフォルトの名無しさん
2009/01/21(水) 03:03:43一人でいいんですよね?
0502デフォルトの名無しさん
2009/01/21(水) 03:04:22それじゃ、先頭から適当に乱数を入れて、それより前のものと
重複しないものが出るまでやり直すのかね?
落とし穴を言う割には、それじゃ何が偏りが出ないか、まったく説明していないじゃないかw
どの道、rand()を使用する以上、それによって左右されるし、いくら効率が悪くても
上記のやり方でやれば、範囲を広めて、使用する個数を増やしたら、処理に時間が掛かるよ?
そもそも、RAND_MAXの範囲内で10個選ぶなら、大して時間は掛からないけどさ。
使用目的に応じて、何を使うかは人それぞれ。欠点ばかり指摘しているんでは、
事故が起きたら面倒な自動車なんて、乗れませんよ?w
0503デフォルトの名無しさん
2009/01/21(水) 03:05:570504デフォルトの名無しさん
2009/01/21(水) 03:06:01おk
0505デフォルトの名無しさん
2009/01/21(水) 03:08:35偏りは出てしまう。あのサイトの説明では、ある要素を順番に並べたものを
入れ替えるのでは、ある要素がn番目に来る確率で説明しているが、それじゃ
ある要素がn番目に来る確率が低かったら、結局それも偏りだろ?w
説明する方も、自分の穴を見落としてんだよ。だったら、シャッフルする回数を
増やせば良いじょのいこぉ〜?
0506デフォルトの名無しさん
2009/01/21(水) 03:11:30C関係のスレで頭の悪いヤツが暴れてたら、こいつと思って間違いない。
0507デフォルトの名無しさん
2009/01/21(水) 03:16:07まさか、理解できていないとは・・・
・・・しまった、釣られた!!!
0508デフォルトの名無しさん
2009/01/21(水) 03:17:24アルゴリズムは?と聞かれて、答えていないなら意味ないだろ。
あれが偏る?そうこともあるが、何か?それで?嫌なら使うなよw
事故りたくないなら、自動車に乗るなよ。被害に遭いたくないなら、
路上に出るなよ、引きこもりかっ!?
人と触れ合うチャンスさえ、なくなるぞ?そうなると面倒だ。
視野が狭くなるからな。頑固になって、自分の間違いや不手際さえ認めない、
のに、相手に対して勝手なことを言う、だから言い返される。
典型的な虐められっ子も、いじめっ子もそういうタイプじゃね?
0509デフォルトの名無しさん
2009/01/21(水) 03:20:23理解どころか、読まずにレスしてるだろ
0510デフォルトの名無しさん
2009/01/21(水) 03:24:52不良だから非処女率が高い?それじゃ、不良でなきゃ処女か?違うだろ?
思い込みなんて、他人に言っても無駄だということ。
逆に、その仕組みを理解している人には、だから何?って言われるだけだよ。
嫌ならやるなよ、そういうこと。分かったかね、人間としても未熟の青二才?
0511デフォルトの名無しさん
2009/01/21(水) 03:27:420512デフォルトの名無しさん
2009/01/21(水) 03:29:59ある範囲内で選ぶとしたら、その範囲内の何か1つが
頻繁に出てしまうなんてことは良くあること。
0513デフォルトの名無しさん
2009/01/21(水) 03:31:32本人だけがわかってないw
0514387=460
2009/01/21(水) 03:48:22まさかこんなのに振り回されてただけだとはorz
俺の時間を返せこんちくしょうw
0515デフォルトの名無しさん
2009/01/21(水) 03:54:01そこから理解していないから、あんな結果に対して、勝手な評価をしてしまうんだよ。
所詮、使用しているのは実装された環境。それに応じて作り変えるのが人間。
何のためにてめぇらはPCにない知能を持ち合わせているんだと?
0516デフォルトの名無しさん
2009/01/21(水) 04:19:05落ち着いてFisher-Yatesをもう一度見るんだ。
>>391はよくない
0517デフォルトの名無しさん
2009/01/21(水) 04:21:14すまんこまんこ
0518デフォルトの名無しさん
2009/01/21(水) 04:22:33それに応じて偏る。扱い方次第。嫌なら、先頭からではなく、後ろから、
中間から、適当に取り出しゃ良いだろ?頭を使えない奴こそ、変な持論を展開して
出来た気になるから迷惑。お前らが東大に行けない理由は、もう思想の面から
日本では通じないからなんだよ。
0519デフォルトの名無しさん
2009/01/21(水) 04:25:27rand君以外の発言は、有用なものとちょっとお茶目なミスだろう?
どんと来いだぜ
0520デフォルトの名無しさん
2009/01/21(水) 05:47:39> 風邪で寝てるあいだ、頭痛な頭でなぜか配列のシャッフルするアルゴリズムのことを思い出し、
こんな頭で考えた奴の意見を信じろと?何を考えているんだね、あんたは?
0521デフォルトの名無しさん
2009/01/21(水) 06:31:21実際に何回か実験すると、各パターンが現れる回数の揺らぎは中心極限定理に従って
ばらつくんですよね。
0522デフォルトの名無しさん
2009/01/21(水) 07:04:01int dst = (int) Math.floor(Math.random() * (i + 1));
(i+1)ではなく、(array.length+1)でやってみてはどうだろうか?
にしても、落とし穴も何も、それがどういう並び替えかくらい分かっているだろ。
どれを選ぼうが、最終的には擬似乱数発生ライブラリに依存する以上、
何かしらそれに応じて偏りはある。
0523デフォルトの名無しさん
2009/01/21(水) 07:31:500524デフォルトの名無しさん
2009/01/21(水) 08:12:51官僚から適当に取り出して ... 天下り・大臣
その結果が、今のこの国の状態。(w
0525デフォルトの名無しさん
2009/01/21(水) 08:42:09http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8700.txt
これで初心者さんも>>522に騙されずに済むね
0526デフォルトの名無しさん
2009/01/21(水) 09:01:54バカなのは信用できるな
0527デフォルトの名無しさん
2009/01/21(水) 09:38:14擬似乱数っていうものは、ある回数で 「収束してしまう」 から擬似乱数なんですよ?
もちろん、短期的に偏るのは当たり前の話。規則性があったら乱数じゃないし・・・。
問題は、長期的、統計的に偏りが出るかどうか。
0528デフォルトの名無しさん
2009/01/21(水) 09:42:280529デフォルトの名無しさん
2009/01/21(水) 09:58:500530デフォルトの名無しさん
2009/01/21(水) 10:17:200531デフォルトの名無しさん
2009/01/21(水) 10:21:340532デフォルトの名無しさん
2009/01/21(水) 10:24:04もっとも、ほとんどのケースではプロセスの優先度を設定すれば事足りると思いますが。
0533デフォルトの名無しさん
2009/01/21(水) 10:26:07タイマー割り込みで10回に1回そのプログラムが
動くようにすればよいです。
OSから書く必要あるけど
0534デフォルトの名無しさん
2009/01/21(水) 10:52:290535デフォルトの名無しさん
2009/01/21(水) 10:57:43sleepだとプログラムの量で%に調整するのが難しくてつまってました。
起動中のアプリにCUP使用率制限をかけるソフトはいろいろあるみたいなんですが、
これはアプリにかぶせるように起動させて実行停止を繰り返し制限させてるんでしょうか?そんな関数あるんですか?
0536デフォルトの名無しさん
2009/01/21(水) 12:58:2810%に固定なんて出来るOSは存在しないから自分で作れと言われている。
0537デフォルトの名無しさん
2009/01/21(水) 13:33:03すいません。プログラムのコード量で調整ではなくて、CPUMAXと使用率の取得で分岐させることで
Sleepでも制限できるようになりました。ありがとうございました。
0538デフォルトの名無しさん
2009/01/21(水) 14:37:030539デフォルトの名無しさん
2009/01/21(水) 17:09:550540デフォルトの名無しさん
2009/01/21(水) 17:22:00現在 Windows Live ID で技術的な問題が発生しています。後でもう一度やり直してください。
となります・・どうすればいいんでしょう・・・
0541デフォルトの名無しさん
2009/01/21(水) 17:23:010542デフォルトの名無しさん
2009/01/21(水) 17:26:25僕にC++を諦めろと言いたいのかい・・・・・!?
0543デフォルトの名無しさん
2009/01/21(水) 17:30:16Web版じゃなくてISO版ダウンロードしてきてインストールすりゃ認証いらないかもよ、
0544デフォルトの名無しさん
2009/01/21(水) 17:32:22やってみる。サンクス
0545デフォルトの名無しさん
2009/01/21(水) 17:49:250546デフォルトの名無しさん
2009/01/21(水) 17:58:560547デフォルトの名無しさん
2009/01/21(水) 18:10:58PowerISOとかDeamonToolsとかあるべ。
0548デフォルトの名無しさん
2009/01/21(水) 18:43:17bitmapの画像処理をする際に、
二次元配列を動的に使ってはダメなのは初めて知りました。
驚きました。一次元配列では死ぬほど画像処理をやった経験があるので
一次元は大丈夫なんですがアドバイすありがとう。
連続領域じゃないとだめだなんて不便だなぁ・・。
0549デフォルトの名無しさん
2009/01/21(水) 20:06:58「収束」ってどういう意味で使ってる?
普通の数学ではそういう使い方しないよね。
0550デフォルトの名無しさん
2009/01/21(水) 20:09:15何をどう読んだら動的に使ってはダメという結論に達するのか理解できない。
0551デフォルトの名無しさん
2009/01/21(水) 20:16:39http://jug7.com/convergence.html
0552デフォルトの名無しさん
2009/01/21(水) 20:26:19そういう意味でもなさそうじゃない?
>>527は周期のことを言ってるように見える。
うーん、言いたいことはわかるけどなー。
0553デフォルトの名無しさん
2009/01/21(水) 20:36:390554デフォルトの名無しさん
2009/01/21(水) 20:37:16> >>527は周期のことを言ってるように見える。
目の錯覚
0555デフォルトの名無しさん
2009/01/21(水) 20:44:53「見てわかるC言語入門」って本なんだけど。
次何勉強すればいいの?本では「printfの表示」ってなってるんだけど
0556デフォルトの名無しさん
2009/01/21(水) 20:49:39すみません、これはどういうことでしょうか?
また、
hairetu[2] | =
これもどういう風に足しているのでしょうか? =
0557デフォルトの名無しさん
2009/01/21(水) 20:51:101 足す
ビット演算子と代入がセットになったもの
0558デフォルトの名無しさん
2009/01/21(水) 21:10:211たすとは配列の要素番号を1たすということでしょうか?
下の方は、配列2の要素の値のビット数+ 右辺にあるビット数を足したものを
配列2に格納するというこでしょうか?
基本的に& や | があったら、ビットの演算子であるとおもえばよろしいのでしょうか?
0559デフォルトの名無しさん
2009/01/21(水) 21:29:56まず、一冊読み終えろよ。
そしたら、どうレベルの本を図書館で借りて読め。
本を信じるな。
0560デフォルトの名無しさん
2009/01/21(水) 21:31:380561デフォルトの名無しさん
2009/01/21(水) 21:36:27全部の理解なんて、まだ、ずっと先だ
0562デフォルトの名無しさん
2009/01/21(水) 21:39:04a++ は a = a + 1 とおなじ
a|=b は a = a | b とおなじ
0563デフォルトの名無しさん
2009/01/21(水) 21:41:430564デフォルトの名無しさん
2009/01/21(水) 21:50:280565デフォルトの名無しさん
2009/01/21(水) 21:51:23配列の場合はどうなるのでしょうか?
0566デフォルトの名無しさん
2009/01/21(水) 21:51:260567デフォルトの名無しさん
2009/01/21(水) 21:51:47死ね
0568デフォルトの名無しさん
2009/01/21(水) 21:53:11下の方は、配列2の要素の値のビット数+ 右辺にあるビット数を足したものを
配列2に格納するというこでしょうか?
基本的に& や | があったら、ビットの演算子であるとおもえばよろしいのでしょうか?
0569デフォルトの名無しさん
2009/01/21(水) 21:54:32そうです
配列の要素番号が1増えます
0570デフォルトの名無しさん
2009/01/21(水) 21:57:40でも学校にあるかな・・・・・
0571デフォルトの名無しさん
2009/01/21(水) 22:01:590572デフォルトの名無しさん
2009/01/21(水) 22:02:21すみません、これはどういうことでしょうか?
また、
hairetu[2] | =
これもどういう風に足しているのでしょうか? =
1たすとは配列の要素番号を1たすということでしょうか?
下の方は、配列2の要素の値のビット数+ 右辺にあるビット数を足したものを
配列2に格納するというこでしょうか?
基本的に& や | があったら、ビットの演算子であるとおもえばよろしいのでしょうか?
0573デフォルトの名無しさん
2009/01/21(水) 22:03:16正規化?
0574デフォルトの名無しさん
2009/01/21(水) 22:03:28他のスレでも聞こうと思ったら間違えてここに書いてしまいました
0575デフォルトの名無しさん
2009/01/21(水) 22:05:400576デフォルトの名無しさん
2009/01/21(水) 22:13:47スレ違い
0577デフォルトの名無しさん
2009/01/21(水) 22:25:06aをhairetu[num]と読み替えればいいとは思えなかった?
他の解釈をしたならその解釈を書いてみて
0578デフォルトの名無しさん
2009/01/21(水) 22:30:05でもそれならhairetu[num++]だと要素数をプラス
hairetu[num]++だと中身をプラスとかポインタプラスのほうがわかりやすいような
0579デフォルトの名無しさん
2009/01/21(水) 22:37:05前者は要素数は増えない。hairetu[num]の値を評価した後に、numがインクリメントされる
後者は中身がプラスされる。
0580デフォルトの名無しさん
2009/01/21(水) 22:37:52中身をプラスとポインタをプラスじゃ意味違うじゃねーか
プログラム書いてすぐ判ることをきくなよ。バカじゃねーの?
0581デフォルトの名無しさん
2009/01/21(水) 22:40:34お前は黙ってろ
0582デフォルトの名無しさん
2009/01/21(水) 22:41:30>>580
お前は黙ってろ
0583デフォルトの名無しさん
2009/01/21(水) 22:42:110584デフォルトの名無しさん
2009/01/21(水) 22:43:020585デフォルトの名無しさん
2009/01/21(水) 22:46:40ということは>>569は違うということでしょうか?
つまり、hairetu[num]++は、hairetu[num]の中の値が+1される?中身が文字だった場合は、次の文字?
hairetu[num++]は、hairetu[num]の中身をみたあと、次呼び出されたらhairetu[num+1]の値を見るというこでしょうか?
0586デフォルトの名無しさん
2009/01/21(水) 22:47:23>>569であってるよ
0587デフォルトの名無しさん
2009/01/21(水) 22:51:19おおむねあってる。
>>569は間違い。
>>586は釣り。というか、実際に試してみたらどうだい?という意味を込めてこう書いてるんだろうけど
0588デフォルトの名無しさん
2009/01/21(水) 22:54:35座学でやってるから、実際にはためせないんです。
0589デフォルトの名無しさん
2009/01/21(水) 22:56:180590デフォルトの名無しさん
2009/01/21(水) 22:56:19ありがとうございます。助かりました。
0591デフォルトの名無しさん
2009/01/21(水) 22:57:50めんどくさいし。
0592デフォルトの名無しさん
2009/01/21(水) 23:00:12こっちはインクリメントが先ね。
0593デフォルトの名無しさん
2009/01/21(水) 23:00:52聞かれたことにだけ答えろカス
0594デフォルトの名無しさん
2009/01/21(水) 23:01:15hairetu[num] = hairetu[num++];
とかするとどうなるかとかも覚えといたらいいよ
0595デフォルトの名無しさん
2009/01/21(水) 23:13:21仕様的にはアリなの?
0596デフォルトの名無しさん
2009/01/21(水) 23:20:30それは実際試した結果を当てにしたらダメだろ。
>>595
アリです。
0597デフォルトの名無しさん
2009/01/21(水) 23:41:030598デフォルトの名無しさん
2009/01/22(木) 01:02:17vectorは可能ですか
0599デフォルトの名無しさん
2009/01/22(木) 01:13:100600デフォルトの名無しさん
2009/01/22(木) 01:18:580601デフォルトの名無しさん
2009/01/22(木) 05:55:31どこら辺がおかしいのでしょうか?
↓ソースコード
ttp://hante.web.fc2.com/
0602デフォルトの名無しさん
2009/01/22(木) 06:19:15こんなところでいきなり丸投げするあんたの頭。
0603デフォルトの名無しさん
2009/01/22(木) 06:35:220604デフォルトの名無しさん
2009/01/22(木) 08:17:28即値が多過ぎる辺りがおかしい
0605デフォルトの名無しさん
2009/01/22(木) 15:46:39じゃあ教えてやれよ
0606デフォルトの名無しさん
2009/01/22(木) 17:26:01やれよ?何命令してんだてめぇは?アホじゃね?こんな場所、任意でレスしても良いだろうが
他人から指図されする場所じゃねーよ。答えて欲しけりゃ、金払えや。何でもただの時代じゃねーぞ
現代の貨幣経済は。経済を習え、小僧。
0607デフォルトの名無しさん
2009/01/22(木) 17:38:48ライフゲームが私のライフワークなんです。
0608デフォルトの名無しさん
2009/01/22(木) 17:40:550609デフォルトの名無しさん
2009/01/22(木) 17:43:280611デフォルトの名無しさん
2009/01/22(木) 18:30:55> 誰でも一回くらいは作ったことあるであろう
大嘘ぶっこいてやがるな、こいつ。それじゃ、この世の全員に
「あなたはぁ〜、ライフゲームを、ちゅくったこと、ありまちゅか?」って
訊ねてこいよ?w 9割近くの人が「知りません」って言うか、
すごろくのようなボードゲーム?って思うかもw
0612デフォルトの名無しさん
2009/01/22(木) 18:38:080613デフォルトの名無しさん
2009/01/22(木) 18:39:35ざっと見たけどfloatじゃなくてもintでいいのでは
0614デフォルトの名無しさん
2009/01/22(木) 18:55:280615デフォルトの名無しさん
2009/01/22(木) 19:05:280616デフォルトの名無しさん
2009/01/22(木) 20:31:30*pp^0x0000ffff
すみません、このよう文はどういう意味をあらわしているのでしょうか?
0617デフォルトの名無しさん
2009/01/22(木) 21:13:24int* p; p=&x; printf("%d",*p);
など。
0618デフォルトの名無しさん
2009/01/22(木) 21:17:27また、この場合ポインタにアドレスを直接セットしているのでしょうか?
0619デフォルトの名無しさん
2009/01/22(木) 21:21:570620デフォルトの名無しさん
2009/01/22(木) 21:24:28*p+=3;
だと、x=4になる。排他的論理和の場合も計算結果が入るだけ。
0621デフォルトの名無しさん
2009/01/22(木) 21:26:20誰でも、をそのまま取っちゃったか。
プログラム書いてる人ね。>>611はまだ作ったことないのか。割りと面白いものだよ。
同じころにハノイとかも作る人おおいのではないかな
0622デフォルトの名無しさん
2009/01/22(木) 21:38:36x = x or 3 だと 4でいいのですよね?16進数だと違いますが
0623デフォルトの名無しさん
2009/01/22(木) 21:40:59| とか & の演算子の意味を知らないのか?
0624デフォルトの名無しさん
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);
..処理..
}
0625デフォルトの名無しさん
2009/01/22(木) 21:48:59+ と × ですよね
xor だと?
0626デフォルトの名無しさん
2009/01/22(木) 21:49:2916進数だと何が変わるのかさっぱりわかりませんが、
1と3の論理和は3ですよ
0627デフォルトの名無しさん
2009/01/22(木) 21:51:42和を得るには+演算子を用い、積を得るには*演算子を用い、
論理和を得るには|演算子を用い、論理積を得るには&演算子を用います
^は排他的論理和を得たい場合に使用します。
0628デフォルトの名無しさん
2009/01/22(木) 22:01:30それで大丈夫だと言う保証は何もないな。
0629デフォルトの名無しさん
2009/01/22(木) 22:08:56何重まで継承出来んの?
今のデファクトスタンダードのVC++でどのくらい?
0630デフォルトの名無しさん
2009/01/22(木) 22:09:090631デフォルトの名無しさん
2009/01/22(木) 22:10:263=11
だから、2=10
異なる数字だと1。同じだと0。
0632デフォルトの名無しさん
2009/01/22(木) 22:13:03多重継承っていつ使うの?
0633デフォルトの名無しさん
2009/01/22(木) 22:13:30コンパイラの制限の話か。
やったことはないが、
一文の長さの制限かなにかで制限は受けそうだな。
0634デフォルトの名無しさん
2009/01/22(木) 23:24:08ATL
0635デフォルトの名無しさん
2009/01/23(金) 02:12:47Win32 applicationで作成するwindowsアプリケーションの種類を
次の3つから選択できますが、どのように違うのですか?
�@空のプロジェクト
�A単純なWin32アプリケーション
�B標準的な"Hello World"アプリケーション
また、Microsoft Visual Studio 2005/2008ではこの3つに
当たるものがあるのでしょうか?
0636デフォルトの名無しさん
2009/01/23(金) 04:19:17宣言した配列なり関数なりポインタにメモリアドレスを指定するにはどうすればよいのでしょうか?
0637デフォルトの名無しさん
2009/01/23(金) 06:56:36char array[2] のメモリアドレスを指定
0638デフォルトの名無しさん
2009/01/23(金) 07:58:57Ex. void * ptr = reinterpret_cast<void *>(0x80000000);
0639デフォルトの名無しさん
2009/01/23(金) 10:40:35> プログラム書いてる人ね。
それでも少ないと思うよ
古くて安っぽいC系の和書はアルゴリズムの練習問題が中盤以降に書かれてることが多いけど
入門者にそういう本をすすめる人は珍しくなった
0640デフォルトの名無しさん
2009/01/23(金) 11:47:45VBや.NETの経験はあるのですが、C言語は初めてです
勉強がてら、汎用関数のようなものを作ろうと思っているのですが
C言語を使った処理で、よく使われるような関数にはどのようなものがあるのでしょうか?
そういうものをいくつか作って勉強したいと思っているのですが、思いつかず困っております
どなたか師事頂けませんでしょうか?
0641デフォルトの名無しさん
2009/01/23(金) 12:15:010642デフォルトの名無しさん
2009/01/23(金) 12:16:44printf()
0643デフォルトの名無しさん
2009/01/23(金) 12:24:36VBでいうとこのTrim関数みたいなの作ってみ
0644デフォルトの名無しさん
2009/01/23(金) 12:37:19wwwまったくだw
>>640
いいから入門書でも買ってきて例題全部終わらせろ。
0645デフォルトの名無しさん
2009/01/23(金) 12:40:07師事「頂く」だぞ?
0646デフォルトの名無しさん
2009/01/23(金) 12:55:490647デフォルトの名無しさん
2009/01/23(金) 12:56:40‘^^’
0648デフォルトの名無しさん
2009/01/23(金) 13:08:41「教わって」頂くだぞ?
0649デフォルトの名無しさん
2009/01/23(金) 13:14:020650デフォルトの名無しさん
2009/01/23(金) 13:59:250651デフォルトの名無しさん
2009/01/23(金) 14:02:32「ご命令」頂くでも変
0652デフォルトの名無しさん
2009/01/23(金) 14:45:00ちっとも変じゃない。
0653デフォルトの名無しさん
2009/01/23(金) 15:19:460654デフォルトの名無しさん
2009/01/23(金) 16:30:27そんなことよりC入門のサイトより本のほうが参考になるって本当ですか?
もしそうだとして、一番参考になってわかりやすいC入門のサイトはどこですか?
0655デフォルトの名無しさん
2009/01/23(金) 17:36:230656デフォルトの名無しさん
2009/01/23(金) 19:52:130657デフォルトの名無しさん
2009/01/23(金) 19:54:56char ch[1000]="hage"; をファイルに書き込まずに、ファイルのように扱いたいです。
たとえばデータが50Mなど大きい場合、出力とアプリの入力にかかる時間が短縮できます。
0658デフォルトの名無しさん
2009/01/23(金) 20:04:090659デフォルトの名無しさん
2009/01/23(金) 20:09:30文字列配列を呼び足す順番を書いた添字配列を別途作ってそれをシャッフルするのと
実際、文字列配列をシャッフルするのではどちらが早いですか?
上で実装したのですが、コーディングがへたくそなのか非常に動作がもたつきます
>>385のときはありがとございました
0660デフォルトの名無しさん
2009/01/23(金) 20:09:360661デフォルトの名無しさん
2009/01/23(金) 20:12:09添え字配列のほうが速いよ。文字列のポインタを交換するほうが簡単だね。
文字列のコピーはすごく遅い
0662デフォルトの名無しさん
2009/01/23(金) 20:30:22ファイルを読み込むアプリを騙してメモリから読ませいって言うことです。
動的にRAMファイルが作れれば、メモリマップドファイルを使えばできるのですが。
0663デフォルトの名無しさん
2009/01/23(金) 21:03:02ありがとごぜますだ
精進しますだ
0664デフォルトの名無しさん
2009/01/23(金) 21:08:361 そういうファイルシステムを作る。
2 リモートファイルシステムでごまかす。
3 API乗っ取る。
好きなのをどうぞ。
0665デフォルトの名無しさん
2009/01/23(金) 22:00:49RAMディスクの代わりなら、Win32APIでファイルを作るときの属性でキャッシュ制御ができる。その中にテンポラリファイル用の属性があってスワップアウトを抑制してRAM(ディスクキャッシュ)にデータをとどまるように努力するオプションがあったと思う。
0666デフォルトの名無しさん
2009/01/23(金) 22:09:28それもメモリマップドファイルでいいと思う。
現代のOSでは、メモリマップドファイルでないメモリ領域も
どうせページングでディスクに書き出される。
逆に、メモリマップドファイルだって、いたずらにファイルに書き出すわけではない。
メモリマップドファイルとそうでない領域の違いは、ページング時の書き出し先が
どこかのファイルかシステムの用意した領域かの違いでしかないと言っても過言ではない。
0667デフォルトの名無しさん
2009/01/23(金) 22:28:14ファイルを読み込むアプリをだます為にRAMドライブに読み込むのは誰がやるのか
一旦読んでおいたものをなんども読ませたいってなら動的に云々はいらなさそうに思うし
もうちょっとやりたいことを細かくお願いできますか
0668デフォルトの名無しさん
2009/01/23(金) 22:54:12DLLはファイルしか読み込めないとします。
ファイルに書き出してからDLLに渡すよりかは、
メモリをファイルに見せかければ短時間で済みます。
0669デフォルトの名無しさん
2009/01/23(金) 23:03:18メモリマップドファイルで関連づけてそこへデータを蓄えれば
メモリをファイルに見せかけられる事になります。 できませんか?
0670デフォルトの名無しさん
2009/01/23(金) 23:08:39ファイル作っちゃいなよ。想像してるほど速度差無いよ。
0671デフォルトの名無しさん
2009/01/23(金) 23:11:200672デフォルトの名無しさん
2009/01/23(金) 23:15:22事前にRAMドライブをつくっておいてそこにファイルを作れば?
0673デフォルトの名無しさん
2009/01/23(金) 23:19:31俺の方がうまくやれると。
そう言いたいわけだな。
0674デフォルトの名無しさん
2009/01/23(金) 23:22:22おとなしくメモリマップドファイルで書き出しちゃいなよ。
すぐに閉じず、とっとと向こうにファイル名を渡してやれば、
ディスクに書き出したものを読み込むなんて無駄なことにはならないから。
0675デフォルトの名無しさん
2009/01/23(金) 23:33:430676デフォルトの名無しさん
2009/01/23(金) 23:41:400677デフォルトの名無しさん
2009/01/23(金) 23:41:440678デフォルトの名無しさん
2009/01/23(金) 23:42:130679デフォルトの名無しさん
2009/01/23(金) 23:45:550680デフォルトの名無しさん
2009/01/23(金) 23:47:00↓
「〜しろ」
会話が成り立っていない。
0681デフォルトの名無しさん
2009/01/23(金) 23:48:03Server2008ででっかいファイル作ろうとすると処理が終わるまでずーっと0KBのままなんで、何でだろうなあとは思ってた
0682デフォルトの名無しさん
2009/01/23(金) 23:50:02いや違う。
0683デフォルトの名無しさん
2009/01/23(金) 23:52:44書き込む前の情報が読み出せる。
0684デフォルトの名無しさん
2009/01/23(金) 23:56:16質問主がやろうとしてるのは向こうは既製アプリだから危なくないの?
0685デフォルトの名無しさん
2009/01/23(金) 23:57:18既製アプリに読ませようとしてるから同期とる仕組みを提供できないんじゃないの?
と読み替えてorz
0686デフォルトの名無しさん
2009/01/24(土) 00:38:11#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 *' に変換できません。
と出てきてしまいます。
どうすればよいのでしょうか?
0687デフォルトの名無しさん
2009/01/24(土) 00:41:44d=60*b;
f=modf(d,h);
g=60*f;
0688デフォルトの名無しさん
2009/01/24(土) 00:42:090689デフォルトの名無しさん
2009/01/24(土) 00:48:04b=modf(a,c);
d=60*b;
f=modf(d,h);
*g=60*f;
0690デフォルトの名無しさん
2009/01/24(土) 00:55:05ありがとうございます。
modfってmain関数の中だと&つけてたのに自分で作った関数の中だと&つけなくてもいいんですね。
0691デフォルトの名無しさん
2009/01/24(土) 01:00:40理解としてはすげぇ間違ってる
0692デフォルトの名無しさん
2009/01/24(土) 01:21:140693デフォルトの名無しさん
2009/01/24(土) 01:24:530694デフォルトの名無しさん
2009/01/24(土) 01:26:430695デフォルトの名無しさん
2009/01/24(土) 01:29:54ボイン太でググレカス
0696デフォルトの名無しさん
2009/01/24(土) 01:42:490697デフォルトの名無しさん
2009/01/24(土) 01:46:38とかなんとか言っちゃって、ググって (・∀・)ニヤニヤ しているくせにw
0698デフォルトの名無しさん
2009/01/24(土) 03:23:12上位の方、この板が随分引っ掛かるのだが。
0699デフォルトの名無しさん
2009/01/24(土) 03:36:220700デフォルトの名無しさん
2009/01/24(土) 03:37:15嘘言うなよw AVのタイトルだろ?w
0701デフォルトの名無しさん
2009/01/24(土) 03:40:13まさかとは思うが、"ボイン太"で検索してないなんて言わないよな。
0702デフォルトの名無しさん
2009/01/24(土) 03:41:48まさかとは思うが、ググレの意味が分かっていないなんて言わないよな?
確かに、検索しろという意味でもあるが、googleで検索しているか?w
0703デフォルトの名無しさん
2009/01/24(土) 03:44:02望ましい検索結果を得られず「何でそこで区切っちゃったんだ?」
と思いながら検索結果の中から人力検索してたりする?
0704デフォルトの名無しさん
2009/01/24(土) 03:47:15ググれの概要
Googleを使って自分で調べろ、の意味。
0705デフォルトの名無しさん
2009/01/24(土) 03:47:56先生、ググった際のURLを貼っていただけますか?
0706デフォルトの名無しさん
2009/01/24(土) 03:48:460707デフォルトの名無しさん
2009/01/24(土) 03:49:340708デフォルトの名無しさん
2009/01/24(土) 03:51:36ちゃんとググれないのが一人で、それをニヤニヤしながら見てるのが三人くらいか?
0709デフォルトの名無しさん
2009/01/24(土) 03:53:190710デフォルトの名無しさん
2009/01/24(土) 03:55:510711デフォルトの名無しさん
2009/01/24(土) 03:57:02本人だけが面白いと思ってるが、回りは誰も相手にしてない。
0712デフォルトの名無しさん
2009/01/24(土) 04:36:210713デフォルトの名無しさん
2009/01/24(土) 05:02:000714デフォルトの名無しさん
2009/01/24(土) 05:25:540715デフォルトの名無しさん
2009/01/24(土) 09:10:36ここでいってるキャッシュはOSのディスクキャッシュ。NTのディスクキャッシュは仮想記憶機構の一部である。
0716デフォルトの名無しさん
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;
}
0717デフォルトの名無しさん
2009/01/24(土) 14:56:530718デフォルトの名無しさん
2009/01/24(土) 15:01:05ポインタの仕組みはたぶんわかってるつもりなんですが,
日本語的に渡すだの何だので,混乱して自爆するんです.
ありがとでした.
0719デフォルトの名無しさん
2009/01/24(土) 15:06:26ってか動かしてないの?
0720デフォルトの名無しさん
2009/01/24(土) 15:09:48環境はLinuxです.
何でプロトタイプ宣言なくても動くっちゃ動きます.
一応答えも出たんですが,問題の答えになってるかどうか不安だったんです.
0721デフォルトの名無しさん
2009/01/24(土) 15:09:59void 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に数値入れなくてもこれでいいんじゃね?
0722デフォルトの名無しさん
2009/01/24(土) 15:10:38それで問題には答えてるけど、
a,bを定義する必要性はないね
0723デフォルトの名無しさん
2009/01/24(土) 15:12:44いろいろスマートじゃないのは,
生まれつきなんです.んません.
0724デフォルトの名無しさん
2009/01/24(土) 15:27:48void 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);
}
和をポインタに格納するなんてマニアックな問題だな。
0725デフォルトの名無しさん
2009/01/24(土) 15:36:100726デフォルトの名無しさん
2009/01/24(土) 15:38:55void add2(int i1, int i2, void* pi3) { }
0727デフォルトの名無しさん
2009/01/24(土) 16:00:51>>716の問題文にはそうしろと書いてある。
0728デフォルトの名無しさん
2009/01/24(土) 16:02:320729716
2009/01/24(土) 16:09:29確かに私の日本語はアレですけど
問題じたいはコピペなんで,この問題がおかしいんだったら
私に問題出した人も日本語がおかしいということになっちゃいますよ.
0730デフォルトの名無しさん
2009/01/24(土) 16:12:04>私に問題出した人も日本語がおかしいということになっちゃいますよ.
いや、そのとおりだから。
0731デフォルトの名無しさん
2009/01/24(土) 16:13:570732デフォルトの名無しさん
2009/01/24(土) 16:29:46これが真っ当な日本語だと思えるのなら、自分の頭を疑うべきだ。
0733716
2009/01/24(土) 16:31:58日本語が弱すぎるのは自分だと思って損しました…
0734デフォルトの名無しさん
2009/01/24(土) 16:33:26馬鹿なクライアントの要求から、本当に必要としていることを導き出すSEの採用試験なんだろ。
0735デフォルトの名無しさん
2009/01/24(土) 16:38:420736デフォルトの名無しさん
2009/01/24(土) 16:44:05ただし、結果はポインタ渡しした引数で返し、関数自体は戻り値を持たないものとする。
0737デフォルトの名無しさん
2009/01/24(土) 16:47:310738デフォルトの名無しさん
2009/01/24(土) 16:49:08ただし、関数は返り値を持ちません
0739デフォルトの名無しさん
2009/01/24(土) 16:50:10void f(){1+1;}
0740デフォルトの名無しさん
2009/01/24(土) 16:53:460741デフォルトの名無しさん
2009/01/24(土) 16:59:48で、関数で、結果はポインタ渡しでみたいな。
そんなんでよろしく。明日までね。
0742デフォルトの名無しさん
2009/01/24(土) 17:14:360743デフォルトの名無しさん
2009/01/24(土) 17:16:230744デフォルトの名無しさん
2009/01/24(土) 17:38:04どんなパスワードでも復元できるようにして、元に戻せるのは一通りがいいと思う。
0745デフォルトの名無しさん
2009/01/24(土) 17:41:420746デフォルトの名無しさん
2009/01/24(土) 17:46:31総当たりされてしまう。 どんなパスワードでも復元されれば無理。
0747デフォルトの名無しさん
2009/01/24(土) 17:49:570748デフォルトの名無しさん
2009/01/24(土) 17:49:580749デフォルトの名無しさん
2009/01/24(土) 19:00:31ですよねー。ブルートフォース最強ですよねー
その調子で暗号も解読しまくってくださいね
0750デフォルトの名無しさん
2009/01/24(土) 19:02:24以上。
0751デフォルトの名無しさん
2009/01/24(土) 19:03:52てにをは
0752デフォルトの名無しさん
2009/01/24(土) 19:11:30いろんな型で同じ処理をできるようテンプレート関数を作りました。
template <typename T> func();
というものです。
機能的には、呼び出すときに、
switch(どの型を使えばよいのかの判断){
case ちゃんちゃら:
func<ちゃんちゃらの時の型>
break;
}
としたいのですが、上はもっとうまく実現できないのでしょうか。
0753デフォルトの名無しさん
2009/01/24(土) 19:12:180754デフォルトの名無しさん
2009/01/24(土) 19:14:59if( flag==1 ){ func<int>();}
else{ func<double>(); }
とか面倒なんです。
flagに対して,型を返すみたいなものをマクロとか何か使ってうまくできればなぁ、と。
0755デフォルトの名無しさん
2009/01/24(土) 19:16:26それってperfumeのやつですか?
0756デフォルトの名無しさん
2009/01/24(土) 19:17:220757デフォルトの名無しさん
2009/01/24(土) 19:17:430758デフォルトの名無しさん
2009/01/24(土) 19:19:30一方、テンプレートはコンパイル時の処理。
そもそもそこにテンプレートを使うのがふさわしいかどうか考え直したほうがいい。
0759デフォルトの名無しさん
2009/01/24(土) 19:21:18場合分けは、ほとんどすべてのテンプレート関数で同じものを使うので、うまく解決したいんですが。
0760デフォルトの名無しさん
2009/01/24(土) 19:24:10どぉーん。おっしゃるとおりで。
マクロで都合よく解決できないかと思いましたが、あきらめまふ。
0761デフォルトの名無しさん
2009/01/24(土) 19:26:030762デフォルトの名無しさん
2009/01/24(土) 19:34:140763デフォルトの名無しさん
2009/01/24(土) 19:35:390764デフォルトの名無しさん
2009/01/24(土) 19:51:34的なのじゃだめなの?
0765デフォルトの名無しさん
2009/01/24(土) 19:59:52char* name;
strcpy(name, argv[1]);
}
として、argv[1]をhanafudashaffle.cppとしたところエラーが生じました。
char* name で宣言すると、確保できるメモリの限界はどのようになるのでしょうか?
またargv[1]に格納された文字列のサイズを知るにはどうしたら良いでしょうか?
0766デフォルトの名無しさん
2009/01/24(土) 20:03:08char *name;
じゃ全く確保されてない、コピーするな
長さはstrlen使え
0767デフォルトの名無しさん
2009/01/24(土) 20:11:33ありがとうございます!!
ポインタ宣言してるだけですし、そりゃそうですよね・・。
ただargv[1]をもっと短い文字列にすると何事もなく動作してくれるんですが、
これは何でなんでしょうか?
0768デフォルトの名無しさん
2009/01/24(土) 20:20:16たまたまうまく動作しただけ
0769デフォルトの名無しさん
2009/01/24(土) 20:20:22それでもたまに失敗して妊娠するけどな
0770デフォルトの名無しさん
2009/01/24(土) 20:30:31なるほどー。
へんてこなコード書いてもたまたまうまくいってるってこともあるんですね。
0771デフォルトの名無しさん
2009/01/24(土) 21:06:050772デフォルトの名無しさん
2009/01/24(土) 21:10:160773デフォルトの名無しさん
2009/01/24(土) 21:24:51doubleの数字(整数)を/を使って割ると、商が小数になってしまうのですが・・・
0774デフォルトの名無しさん
2009/01/24(土) 21:25:51modf
0775デフォルトの名無しさん
2009/01/24(土) 21:26:100776デフォルトの名無しさん
2009/01/24(土) 21:26:52わざわざそれ使わんでもいいだる
0777デフォルトの名無しさん
2009/01/24(土) 21:36:06誤差であって、それを四捨五入したものが正しい商だと考えてもいいですか?
0778デフォルトの名無しさん
2009/01/24(土) 21:37:300779デフォルトの名無しさん
2009/01/24(土) 21:40:500780デフォルトの名無しさん
2009/01/24(土) 21:41:56ttp://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
を呼ぶことで解消されるのかがわからずに質問させていただきました。
無効領域を作る、、、という説明しかなかったので。
よろしくお願いします。
0781デフォルトの名無しさん
2009/01/24(土) 21:58:39よく分からんが、ウィンドウプロシージャと特定のインスタンスを関連づけたい時は
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);
}
}
0782デフォルトの名無しさん
2009/01/24(土) 22:58:25それと同じことはSetProp/GetPropでもできる。
むしろ、ATOM併用ではSetWindowLongPtrより僅かに早いという話を見たこともある(ソース失念御免)。
>>780のページのやり方では、CreateWindowの後でSetPropしているのが良くない。
SetPropでも>>781のようにWM_CREATEあるいはWM_NCCREATEで設定すべき。
より完璧を期すなら、WM_NCCREATEより前にやってくる
WM_MINMAXINFOに対処できるようにしたくなるんだけど、
普通は使わないから、自分だけで使う分にはめったに問題にならないだろう。
0783デフォルトの名無しさん
2009/01/24(土) 22:58:540784デフォルトの名無しさん
2009/01/24(土) 23:24:14GetWindowLongPtr ってそんなに遅いんだ?
0785デフォルトの名無しさん
2009/01/24(土) 23:33:40ウィンドウ作成関数で同期を取ればいいんだよね?
0786デフォルトの名無しさん
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/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
0787デフォルトの名無しさん
2009/01/25(日) 00:11:17なるほど・・・CreateWindowの後でSetPropしてるのがそもそもの原因だったようですね。
thisをCreateWindowEXのPVOIDに渡してWM_NCCREATEの時に結びつけるということでしょうか。
とにかくいろいろと試してみます。ありがとうございました。
0788デフォルトの名無しさん
2009/01/25(日) 01:20:29flag++
flag=flag+1
がありますが、調べたところ、flag++のが高速だと書いてありました
その理由がほしいんですが誰か説明してくれませんか?
そしてどのくらい高速なんでしょうか
0789デフォルトの名無しさん
2009/01/25(日) 01:24:30そのflagがPOD型なら、今時のコンパイラにとってそれらは全く同じように解釈できる。
だが仮にPOD型ではなくクラスなのであれば、そのクラスの定義によっては差が出るかもしれない。
いずれにしても、速度については観測と実測に基づかない限り云々する意味がない。
0790デフォルトの名無しさん
2009/01/25(日) 01:24:38前者の方が約2倍速く読み込める。
0791デフォルトの名無しさん
2009/01/25(日) 01:30:02intならば、大抵のCPUは一つの命令で値を+1する命令を持っている。
前者はその命令を使う。後者は、値を読み出す、1を加える、値を書き戻す。
ので、20年前は後者は遅いと言われていた。
今時のコンパイラはどちらでも同じコードを生成するので変わらない。
0792デフォルトの名無しさん
2009/01/25(日) 03:08:30どうもあってるはずなのに動作がおかしい
手本を走らせてもオープンエラーが出る。
#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;
}
これはコンパイラ側の設定ミスかなにかですか?
0793デフォルトの名無しさん
2009/01/25(日) 03:12:210794デフォルトの名無しさん
2009/01/25(日) 03:13:33の前にperror(0);
入れてみれ
そして結果を報告しろ
多分、カレントディレクトリをお前が勘違いしてるのが原因だろうが
0795デフォルトの名無しさん
2009/01/25(日) 03:14:20わからないならを使って場所特定したら?
0796デフォルトの名無しさん
2009/01/25(日) 03:19:31変化なしです。
EXEがあるディレクトリと同じところにtextをおいています。
0797デフォルトの名無しさん
2009/01/25(日) 03:21:160798デフォルトの名無しさん
2009/01/25(日) 03:21:31完全に、ファイル名を間違ってる感じだな
0799デフォルトの名無しさん
2009/01/25(日) 03:26:580800デフォルトの名無しさん
2009/01/25(日) 03:27:09exeディレクトリです。
ファイル作ってみます
0801デフォルトの名無しさん
2009/01/25(日) 03:58:29それにしても、拡張子.dってなんだよ。
0802デフォルトの名無しさん
2009/01/25(日) 10:18:15デバッカーからじゃなくて、 Read_Test.exeのアイコンをダブルクリックして直接実行したらどうなるの?
0803デフォルトの名無しさん
2009/01/25(日) 12:18:070804デフォルトの名無しさん
2009/01/25(日) 13:36:440805デフォルトの名無しさん
2009/01/25(日) 13:56:06FILE *fpt=fopen("test.raw","wb");
FILE *fpt;
fopen_s(&fpt,"test.raw","wb");
fopen_sでは2行になってしまうので遅くなる気がするんですが
コンパイラはfopen_sを推奨してきます。
0806デフォルトの名無しさん
2009/01/25(日) 13:58:29同じ
>コンパイラはfopen_sを推奨してきます。
なら、fopen_sを使おう。
0807デフォルトの名無しさん
2009/01/25(日) 13:59:01安全性の問題だ。
0808デフォルトの名無しさん
2009/01/25(日) 14:00:350809デフォルトの名無しさん
2009/01/25(日) 14:01:420810デフォルトの名無しさん
2009/01/25(日) 14:04:00それを言うなら、
FILE *fpt=fopen("test.raw","wb");
と
FILE *fpt;
fpt=fopen("test.raw","wb");
はどうなんだ?
0811デフォルトの名無しさん
2009/01/25(日) 14:04:47でいいだろ。
0812デフォルトの名無しさん
2009/01/25(日) 14:07:320813デフォルトの名無しさん
2009/01/25(日) 14:46:21書き方以外で
0814デフォルトの名無しさん
2009/01/25(日) 14:49:17こういうの読もう
ttp://msdn.microsoft.com/ja-jp/library/8ef0s5kh(VS.80).aspx
0815デフォルトの名無しさん
2009/01/25(日) 15:39:04OS間で移植なんかしなくても
移植性が問題になるケースはあるよ
ずいぶん限定的な意味で捉えてないかい
0816デフォルトの名無しさん
2009/01/25(日) 15:39:57例えば?
0817デフォルトの名無しさん
2009/01/25(日) 15:41:500818デフォルトの名無しさん
2009/01/25(日) 15:42:190819デフォルトの名無しさん
2009/01/25(日) 15:44:120820デフォルトの名無しさん
2009/01/25(日) 15:47:110821デフォルトの名無しさん
2009/01/25(日) 15:48:170822デフォルトの名無しさん
2009/01/25(日) 15:50:140823デフォルトの名無しさん
2009/01/25(日) 15:51:090824デフォルトの名無しさん
2009/01/25(日) 15:52:160825デフォルトの名無しさん
2009/01/25(日) 15:53:58ユニコード化関連で大変だった人もいるだろうに。
0826デフォルトの名無しさん
2009/01/25(日) 15:54:300827デフォルトの名無しさん
2009/01/25(日) 15:56:06そんな大事が起きたら移植性を考えていたところで大半作り直しだろ。
明日起きるかどうかも分からない移植のことを考えて今日大変な思いをする必要はない。
0828デフォルトの名無しさん
2009/01/25(日) 15:56:49どうしていたら、ユニコード化関連で大変にならずに済んだんだ?
0829デフォルトの名無しさん
2009/01/25(日) 15:58:03移植性を高くするために TCHAR なんてものが用意されてんのに
(しかも使い方が難しいわけではない)、
それを舐めてて使わなかった結果苦しんだのはバカとしか言えないと思うが。
0830デフォルトの名無しさん
2009/01/25(日) 15:58:07移植をしないのに、移植性の話をするなんて、滑稽だろ
0831デフォルトの名無しさん
2009/01/25(日) 15:58:31で、TCHARって移植性あるの?
0832デフォルトの名無しさん
2009/01/25(日) 16:00:29移植性を高めるためにTCHARを使いましょう。
0833デフォルトの名無しさん
2009/01/25(日) 16:01:56ユニコード関連が問題になるのは API を使う時だけなので、
Windows 以外の OS への移植に関しての移植性を語るのはナンセンス。
Windows 内での移植に限れば移植性は高い。
0834デフォルトの名無しさん
2009/01/25(日) 16:03:32凄い限っちゃったなww
0835デフォルトの名無しさん
2009/01/25(日) 16:04:21移植をしない奴は黙ってれば
0836デフォルトの名無しさん
2009/01/25(日) 16:04:36API を使ったプログラムなんて
どう頑張っても OS 間の移植性なんか無いだろw
0837デフォルトの名無しさん
2009/01/25(日) 16:05:060838デフォルトの名無しさん
2009/01/25(日) 16:05:550839デフォルトの名無しさん
2009/01/25(日) 16:06:37そんなのテキスト置換でOKだろw
0840デフォルトの名無しさん
2009/01/25(日) 16:07:120841デフォルトの名無しさん
2009/01/25(日) 16:07:270842デフォルトの名無しさん
2009/01/25(日) 16:08:19移植することが決まっていなければ、移植性なんて考えなくてもいい
0843デフォルトの名無しさん
2009/01/25(日) 16:09:08移植しないことが決まっていれば、移植性なんて考えなくてもいい
0844デフォルトの名無しさん
2009/01/25(日) 16:09:220845デフォルトの名無しさん
2009/01/25(日) 16:09:220846デフォルトの名無しさん
2009/01/25(日) 16:09:420847デフォルトの名無しさん
2009/01/25(日) 16:09:540848デフォルトの名無しさん
2009/01/25(日) 16:10:410849デフォルトの名無しさん
2009/01/25(日) 16:11:37多重継承がちと厄介だった
0850デフォルトの名無しさん
2009/01/25(日) 16:12:40その言語に特有の機能をできるだけ使わないようにする、
とか、流石にバカらしいし。
0851デフォルトの名無しさん
2009/01/25(日) 16:13:16移植性を考慮して開発遅延する奴
死ねよw
0852デフォルトの名無しさん
2009/01/25(日) 16:14:27確かにそんな奴は使えないな。
0853デフォルトの名無しさん
2009/01/25(日) 16:15:19細かい制御をするには環境に依存するしかないわな
そういう環境依存が避けられない部分はわかるけど
どうでもいいループカウンタにDWORDとか使うアホは死ねよと
0854デフォルトの名無しさん
2009/01/25(日) 16:17:19勝手に移植性を高めるために使った工数に、対価は支払いません。
移植に対価は払いますが、移植性に対価を支払うことはありません。
0855デフォルトの名無しさん
2009/01/25(日) 16:18:140856デフォルトの名無しさん
2009/01/25(日) 16:20:17お前らは要求通りの機能を作ってりゃいいんだよ。
0857デフォルトの名無しさん
2009/01/25(日) 16:21:310858デフォルトの名無しさん
2009/01/25(日) 16:23:300859デフォルトの名無しさん
2009/01/25(日) 16:23:360860デフォルトの名無しさん
2009/01/25(日) 16:24:49大変だな。心中察するわ。
0861デフォルトの名無しさん
2009/01/25(日) 16:25:07さっさと作りたい機能付くった方が気持ちいいし。
移植性は必要になってから考える。
0862デフォルトの名無しさん
2009/01/25(日) 16:25:530863デフォルトの名無しさん
2009/01/25(日) 16:27:510864デフォルトの名無しさん
2009/01/25(日) 16:27:51基盤更改でSolarisからHP-UXになりました
とか平気で言われるからな
0865デフォルトの名無しさん
2009/01/25(日) 16:28:200866デフォルトの名無しさん
2009/01/25(日) 16:30:01「それでは移植にこれだけの工数が必要です」で済む話じゃん。
何故HP-UXが出てくる前に、移植性を考慮する必要があろうか。
0867デフォルトの名無しさん
2009/01/25(日) 16:32:25その工数が低く見積もれる事に越した事はないだろ
というかSoralisそのまま使えよと意見するのが先だけど
0868デフォルトの名無しさん
2009/01/25(日) 16:34:18この御時世、君の会社はそんなに余裕があるの?
0869デフォルトの名無しさん
2009/01/25(日) 16:39:010870デフォルトの名無しさん
2009/01/25(日) 16:39:400871デフォルトの名無しさん
2009/01/25(日) 16:39:400872デフォルトの名無しさん
2009/01/25(日) 16:40:23想像力が足りない
0873デフォルトの名無しさん
2009/01/25(日) 16:40:520874デフォルトの名無しさん
2009/01/25(日) 16:41:070875デフォルトの名無しさん
2009/01/25(日) 16:41:540876デフォルトの名無しさん
2009/01/25(日) 16:42:25移植するとき、別途お金上げるから
今は移植性考慮しないでwwwwおねがいwwww
0877デフォルトの名無しさん
2009/01/25(日) 16:42:26移植性の高いコードに勝手になるんだよ。
そして、移植性の高いコードはバグも出にくい。
0878デフォルトの名無しさん
2009/01/25(日) 16:43:070879デフォルトの名無しさん
2009/01/25(日) 18:02:07それは激しく同意する
ソフト会社に発注して上がってくるコードを見ると、
ベテランと初心者(たいてい新人)の差は果てしなく大きい。
特に目につくのは、初心者は知識量が少ないくせに全力で頑張った結果、
ぎりぎりで動くプログラムを作ってくる。このギリギリプログラムが、まさに
移植性の無いものなんだよね。動くけど、余裕がないというか
移植性といっても、別にWin→Linuxとかの移植に限らない。
同じアプリの次のエンハンスに使いまわすことも含まれる。ちょっと気を回せば
汎用的になるのに、嫌がらせのごとく特定の状況しか動かないコードは移植性が無い。
0880デフォルトの名無しさん
2009/01/25(日) 18:55:500881デフォルトの名無しさん
2009/01/25(日) 18:56:540882デフォルトの名無しさん
2009/01/25(日) 19:03:460883デフォルトの名無しさん
2009/01/26(月) 01:10:59関数ポインタをvoid*のポインタにはいれてはいけないらしいんですが、
クラスとか、構造体、同じものですが関数オブジェクトはvoid *型のポインタに代入してもおk?
0884デフォルトの名無しさん
2009/01/26(月) 01:13:55そっちは大丈夫。
0885デフォルトの名無しさん
2009/01/26(月) 01:16:01まあ、あまりvoid*は使いたくはないが。
あと、関数ポインタへのポインタならvoid*に入れられるよ。
ミディアムモデルとかコンパクトモデルとかでググると
関数ポインタを入れらんないのも無理は無いと思うようになるよ。
0886デフォルトの名無しさん
2009/01/26(月) 03:37:21assignment makes pointer from integer without a cast
ポインタと整数との比較を行っています
とコンパイラに言われてしまいます
何故、そう言われてしまうのかが解りません
ご教示お願いします。
環境 : Linux
コンパイラ : gcc
0887デフォルトの名無しさん
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);
}
0888デフォルトの名無しさん
2009/01/26(月) 04:54:100889デフォルトの名無しさん
2009/01/26(月) 10:50:43それと今後質問するときは、エラーメッセージを抜粋しないこと
どの行で発生したのかぐらい書け
0890デフォルトの名無しさん
2009/01/26(月) 11:38:34この辺で出そうに思うけどな
0891デフォルトの名無しさん
2009/01/26(月) 11:42:40データ量のエクスポーネンシャルで増大していく処理速度に耐えられなくなった時。
0892デフォルトの名無しさん
2009/01/26(月) 12:10:08動かないから質問してんだろバカ
0893デフォルトの名無しさん
2009/01/26(月) 12:13:12>int *cont_ptr[5]; //cont配列のポインタ
どう見ても「ポインタの配列」になっている件。
もしかして:
int (*cont_ptr)[5];
0894デフォルトの名無しさん
2009/01/26(月) 12:13:31if文の中でメッセージの通りのことをしているから
0895886
2009/01/26(月) 14:07:49>>888が言うとおり配列だけを使えばいいのですが、
ポインタを使わなければいけない課題なのです
課題の質問はスレ違いでしょうか…?
エラーメッセージを書いたモノを上げときます。
文字列を1行ずつ入力して、それを5回繰り返したら入力した文字列を一括表示させるプログラムです。(ポインタ使用が条件)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8735.txt
0896デフォルトの名無しさん
2009/01/26(月) 14:14:500897デフォルトの名無しさん
2009/01/26(月) 14:17:17cont_ptr[1] = &cont[1];
cont_ptr[2] = &cont[2];
cont_ptr[3] = &cont[3];
cont_ptr[4] = &cont[4];
0898デフォルトの名無しさん
2009/01/26(月) 14:17:43>>889の言い分もわかるw
0899889
2009/01/26(月) 14:44:51警告を消したい以前の問題なんだよね
まあでも今回の場合、警告を調べることがバグつぶしに繋がるので、
頑張るといいかもしれない。
でも >>886 は相当にC言語分かってないので、そのまま提出するのが
正解だと思う。先生も、そういう生徒が多ければなんか対策するでしょう
0900デフォルトの名無しさん
2009/01/26(月) 14:58:52int 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で確保を繰り返すことになりますが、メモリ管理はどのような感じになってるのですか
サーバーで走らせるので、他人に迷惑になりそうで・・・
0901デフォルトの名無しさん
2009/01/26(月) 15:03:32float val = 1.0/0;
としておくとwarning: division by zeroがでてしまうし。
(実行は問題ないのですが)
float val = Inf;とかfloat val = inf;とかは全然駄目だし。
ご存知のひとよろしくお願い。
0902デフォルトの名無しさん
2009/01/26(月) 15:32:27malloc した以上、free する必要はある。
free するタイミングは array が必要でなくなったとき。
load 内だけで使うんだったら load から戻る前に free すべきだし、
load 以降も使うんだったら、その例だと main の中で free すべきかな。
0903デフォルトの名無しさん
2009/01/26(月) 15:49:32ならまずはポインタを使わずに動作するものを作成してみては?
動作するものができたがポインタの使いどころが見あたらなかったといって提出するのはだめなことじゃない
0904デフォルトの名無しさん
2009/01/26(月) 15:54:31最後のprintfで%s指定してるがchar*やchar[]がどこにもないぜ。
0905デフォルトの名無しさん
2009/01/26(月) 15:58:41float val = INFINITY;
として、c99指定コンパイルをするか、その警告を出力させないようにするか
0906デフォルトの名無しさん
2009/01/26(月) 16:04:10ダイナミックリンク用のヘッダを出力するツールはありませんか?
必要な関数のダイナミック呼び出しを追加するツールです。
0907デフォルトの名無しさん
2009/01/26(月) 16:06:39コンパイラの依存が無くせるのですが。 どうしたらいいですか?
0908デフォルトの名無しさん
2009/01/26(月) 16:07:04割るほうに.0つけてみてよとりあえず
0909900
2009/01/26(月) 16:19:48続けて質問すいません、mallocの数だけfreeすべきですか?
それともmain関数の最後にfreeでいいですか
watasiJKはarrayデータを弄る処理です
0910デフォルトの名無しさん
2009/01/26(月) 16:21:560911デフォルトの名無しさん
2009/01/26(月) 16:31:03mallocの数だけfreeが必要
0912デフォルトの名無しさん
2009/01/26(月) 16:31:060913906
2009/01/26(月) 16:33:200914デフォルトの名無しさん
2009/01/26(月) 16:35:15プロトタイプ宣言を自動で作れないかってこと?
0915906
2009/01/26(月) 16:38:54hoge.libはコンパイラに依存します。 そのため、hoge.hやhoge.libを解析して
必要な関数を動的呼び出しで読み込むようにヘッダに追加するんです。
するとそのヘッダだけで、DLLが使えます。
0916デフォルトの名無しさん
2009/01/26(月) 16:40:57使いたい関数がDLLにあるならそのヘッダ使えばいいだけじゃないの?
0917デフォルトの名無しさん
2009/01/26(月) 16:42:37コンパイラごとに切り替えたいなら、たいていそのコンパイラを識別できる何かが#defineされてるからそれ使えば?
0918デフォルトの名無しさん
2009/01/26(月) 16:42:560919906
2009/01/26(月) 16:49:16これなんです。 そういうツールかいい方法ありませんか?
0920デフォルトの名無しさん
2009/01/26(月) 16:57:33P/InvokeだとVS用にそういうアドインがあったからC++でもあるんでないのかな
0921デフォルトの名無しさん
2009/01/26(月) 17:05:27これか、けっこう近いな。
0922886
2009/01/26(月) 18:03:07もう少しで疑問が解けそうです
助言してくれた方ありがとうございました!
0923デフォルトの名無しさん
2009/01/26(月) 19:34:17typedef {何か型} type;
void* a = new type;
void* b = new type[1];
上記のコードは同じバイト数を確保すると思うのですが、
パフォーマンス等に差はありますか?
削除時のdeleteとdelete[] を統一したいのです。
0924デフォルトの名無しさん
2009/01/26(月) 19:58:23new []は確保した領域の大きさを(大抵の方法としては)確保した領域の直前に置き
解放時にそれを読むのでので、ちょっと落ちることにはなる
そんな細かい手間省きたいならスマートポインタつかっときゃいいのに
0926デフォルトの名無しさん
2009/01/26(月) 20:40:220927デフォルトの名無しさん
2009/01/26(月) 20:55:19{
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)]);
}
0928927
2009/01/26(月) 20:57:46以前シャッフルでお世話になったものです。
実装を試みているのですが、なかなかうまくいきません。
strのコピーは遅いとお聞きして、ポインタの配列でswapを行いたいのですが、気づいたことがあればどんなことでもお教え願えませんか
0929デフォルトの名無しさん
2009/01/26(月) 21:09:440930デフォルトの名無しさん
2009/01/26(月) 21:09:46なんでそんな馬鹿なことしているの?
char配列の確保とポインタ配列の確保を一回で済ませようなんて横着しないで、
地道に確保して味噌。
0931デフォルトの名無しさん
2009/01/26(月) 21:11:21お前も勘違いしてないか
確保までは普通のことしてるだろ
0932デフォルトの名無しさん
2009/01/26(月) 21:14:570933デフォルトの名無しさん
2009/01/26(月) 21:15:03むしろおまいさんがchar (*)[100]の意味をわかってないんじゃないかと
0934デフォルトの名無しさん
2009/01/26(月) 21:15:21確保までっていうのは確保を含まない、でいい?
やりたいことはこの方法じゃ実現できないよね
0935デフォルトの名無しさん
2009/01/26(月) 21:16:23>>934スルーしてくだされ><
0936927
2009/01/26(月) 21:19:10ポインタを使った配列の動的確保は無理ってことですか
配列確保コメ以下はいまいちわかってません
>>933さんが指摘されたところは、まさにさっぱりです
うーん・・・・
0937デフォルトの名無しさん
2009/01/26(月) 21:22:03ばーかw
0938デフォルトの名無しさん
2009/01/26(月) 21:23:49確保まで含むよw
まぁ確かにこの方法で質問主の望むことが出来ないが
二次元配列の確保としては正しいだろ
>char配列の確保とポインタ配列の確保を一回で済ませようなんて横着しないで
これは勘違いしてるだろ・・・
0939930
2009/01/26(月) 21:27:400940デフォルトの名無しさん
2009/01/26(月) 21:32:04>char配列の確保とポインタ配列の確保を一回で
と書いたことを問題視していて、質問主のやりたいことはそっちのけだったみたいだね。
0941デフォルトの名無しさん
2009/01/26(月) 21:36:41いや、君が質問主のやりたいことをわかってないからそう思うだけ。
0942デフォルトの名無しさん
2009/01/26(月) 21:37:23使ったほうで誰かくやってやれよ
0943デフォルトの名無しさん
2009/01/26(月) 21:37:300944デフォルトの名無しさん
2009/01/26(月) 21:40:430945デフォルトの名無しさん
2009/01/26(月) 21:41:05char (*filename)[100];
を使った方法でやってやれよ
0946デフォルトの名無しさん
2009/01/26(月) 21:41:33それはずいぶんずれた回答だなあ
0947デフォルトの名無しさん
2009/01/26(月) 21:46:02だから無理ジャン、文字列を内容コピーは嫌だからポインタの指す先変えたいっつってんだもん
0948927
2009/01/26(月) 22:14:42void 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はスペースの都合で略しました。すんまそん
こんなかんじです。これでもやっぱり遅いです・・・
気づいた点あれば、ご指摘願えませんか。
0949デフォルトの名無しさん
2009/01/26(月) 22:23:00先にmallocして直接strcpyしたらだめなのか?
0950デフォルトの名無しさん
2009/01/26(月) 22:28:30処理の中でいじっちゃいけないって書いてあるんですがどうしてなのですか?
下のようなことはしてはいけないらしいですが動きはします。
for(n = 1 ; n <= 100 ; n++){
n=n+1;
}
0951927
2009/01/26(月) 22:28:32データのファイル名の長さが不均一でして・・・・
>filename[i] = (char *)malloc(strlen(temp)+1);
ここは常に最大長の256でいったほうがはやい気もするのですが・・・
私の勘違いな気もしないでもなくて・・・
といっても、多分自力では書けないっす
0952デフォルトの名無しさん
2009/01/26(月) 22:32:28やっていることが理解できているのなら、別に問題はない。
一体全体何に書いてあったのか知らんが、それを書いた者は初心者への警告の積もりなのか他言語と混同しているか、根本的に間が抜けているのだろう。
0953デフォルトの名無しさん
2009/01/26(月) 22:33:38何に書いてあったのか、確かに知りたいな。
普通、Cでは0から始めるのに1で始めているところからしても、basic崩れなんじゃないだろか。
0954デフォルトの名無しさん
2009/01/26(月) 22:38:32書いてあったのは授業で使った教科書・・・
調べるとかなり酷評されていますが。
0955デフォルトの名無しさん
2009/01/26(月) 22:38:550956デフォルトの名無しさん
2009/01/26(月) 22:41:19を直接やらず、
int num[5]={0,1,2,3,4};
をやれば結果は同じでかんたんだろ画。
0957927
2009/01/26(月) 22:41:23先にそれを実装したのですが、ポインタのつなぎかえだけのほうが早い気がしまして・・・
データ数30000でシャッフルしてますが、速度はどちらも同じくらいですね・・・
0958デフォルトの名無しさん
2009/01/26(月) 22:50:22教えてやるよ。
0959デフォルトの名無しさん
2009/01/26(月) 22:52:330960デフォルトの名無しさん
2009/01/26(月) 22:53:44俺も知りたい
教えて
0961デフォルトの名無しさん
2009/01/26(月) 22:54:21が必要。 3万だと多倍長演算しないと無理だな。
0962927
2009/01/26(月) 22:56:490963デフォルトの名無しさん
2009/01/26(月) 22:58:010964デフォルトの名無しさん
2009/01/26(月) 23:00:53AESのCBCに初期値を乱数で1回作って入れて回して出力される系列で混ぜればいい。
0965デフォルトの名無しさん
2009/01/26(月) 23:14:16int suji[0x55555555]
char array[0xFFFF] */で先頭配列を指定?
とかいったかんじでしょうか?
0966958
2009/01/26(月) 23:14:53#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");
}}
0967デフォルトの名無しさん
2009/01/26(月) 23:16:26ダメだと言うとすれば、コンパイラが理解しても読む人間がぱっと理解しづらいということかな。
for自体の中身以外でループ変数を書き換えるコードは滅多に見かけないから。
0968デフォルトの名無しさん
2009/01/26(月) 23:17:56int suji;
&suji = 0x55555555;
char array[10];
&array = 0xffff;
0969デフォルトの名無しさん
2009/01/26(月) 23:18:16特定のメモリアドレスでなければ困るという意味であれば、
コンパイラやリンカにここに割り当ててくれって指示を出したり、
領域だけ用意してもらって、int* hoge = (int*)0xdead;のように決め打ちしたりする。
0970958
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"); }}
0971デフォルトの名無しさん
2009/01/26(月) 23:19:16書いた人が馬鹿だから。
0972デフォルトの名無しさん
2009/01/26(月) 23:19:32int *p;
p = (int *)0x55555555
0973958
2009/01/26(月) 23:22:490974デフォルトの名無しさん
2009/01/26(月) 23:26:36自信満々に持ち出すならもうちょっときれいなコードくれよ
0975デフォルトの名無しさん
2009/01/26(月) 23:32:07単にヘボい疑似乱数使ってるのと同値だろ。rand()使った方がよっぽど混ざる。
0976デフォルトの名無しさん
2009/01/26(月) 23:32:510977デフォルトの名無しさん
2009/01/26(月) 23:33:020979デフォルトの名無しさん
2009/01/26(月) 23:34:17お前にはがっかりだよ
0980デフォルトの名無しさん
2009/01/26(月) 23:40:56ボゴソート馬鹿にすんな
あれ?
0981958
2009/01/26(月) 23:41:36#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]); }
0982デフォルトの名無しさん
2009/01/26(月) 23:43:25DLLの関数を使うときって,そのヘッダーファイルをインクルードするだけじゃなくて,
DLL(の関数)をロードして使いますよね?
でも平方根を取るsqrt()関数とかってmath.hをインクルードするだけで使えちゃいます。
なんでですか?
僕は初めて学んだ言語がJavaなせいか,C++とごちゃまぜにしている可能性が高いです。
おかしな点があったら指摘してください。
Javaだと,スタティックなメソッドだとそのメソッドを持っているクラスファイルをインポートするだけで使えちゃいますよね?
これが僕の中では,math.hのsqrt()関数です。
それで,ロードしなきゃ使えない関数が,Javaで言うところの,非スタティックなメソッドで,
インスタンスを生成しなければ使えないやつです。
このイメージって全然ちがいますか?
0983デフォルトの名無しさん
2009/01/26(月) 23:45:59汎用性以前に、質の悪い乱数でかきまぜる、遅いアルゴリズムで、何したいの?
0984デフォルトの名無しさん
2009/01/26(月) 23:46:34cc -ml source.c
0985958
2009/01/26(月) 23:50:43このアルゴリズムは全ての順列と、自然数を対応される一対一対応になってるんだよ。
与える自然数が異なれば、異なる順列が生成されるんだ。
シャッフルに限れば完璧の性能。
0986デフォルトの名無しさん
2009/01/26(月) 23:50:46標準ライブラリの関数は特別扱いで、自動的にDLL/LIBなどがリンクされるよう
手はずを整えられていることが多い。
0987デフォルトの名無しさん
2009/01/26(月) 23:53:10要するに順列でいうk番目を取り出してるわけか
0988デフォルトの名無しさん
2009/01/26(月) 23:53:38自然数と順列の数では集合としての濃度が違うのだが、わかってる?
0989958
2009/01/26(月) 23:56:421〜10!と、配列数10のシャッフル全体が一対一対応。
0990デフォルトの名無しさん
2009/01/26(月) 23:58:440991デフォルトの名無しさん
2009/01/26(月) 23:59:420992デフォルトの名無しさん
2009/01/27(火) 00:02:30つまり20個まで
( ゚д゚)、ペッ
0993958
2009/01/27(火) 00:03:26http://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 節 階乗進数と完全順列の対応
0994デフォルトの名無しさん
2009/01/27(火) 00:03:35なーるほど。じゃ,基本はDLLの関数を使うときは,ちゃんとロードしないとだめ
ってことなんですね。で,標準ライブラリの場合は,暗黙的に勝手にロードしてくれると。
0995デフォルトの名無しさん
2009/01/27(火) 00:04:390996デフォルトの名無しさん
2009/01/27(火) 00:04:42>for(j=n;j<i-1;j++) A[j]=A[j+1];
センスねーなw
0997958
2009/01/27(火) 00:05:040998デフォルトの名無しさん
2009/01/27(火) 00:06:330999デフォルトの名無しさん
2009/01/27(火) 00:07:571000デフォルトの名無しさん
2009/01/27(火) 00:08:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。