C言語なら俺に聞け(入門篇) Part 21at TECH
C言語なら俺に聞け(入門篇) Part 21 - 暇つぶし2ch590:デフォルトの名無しさん
07/11/22 14:38:34
アチャー

591:デフォルトの名無しさん
07/11/22 14:47:41
なんかC言語の配列って何度も呼び出すと鈍くならない?
なんで
a = x[y[z[n]]];
みたいな感じ

a=z[n];a=y[a];a=x[a];
のほうが速くない?

592:デフォルトの名無しさん
07/11/22 14:56:24
計ってみれば?

593:デフォルトの名無しさん
07/11/22 15:05:40
計ってみたよ 配列に何度も入れた方がわずかに速いようだ

#include <iostream>
#include <time.h>
#define N 900000
using namespace std;
main(){
unsigned int n,k,c,sum;
unsigned int *x,*y,*z,*v,*w;
x=new unsigned int [N]; y=new unsigned int [N];
z=new unsigned int [N]; v=new unsigned int [N];
w=new unsigned int [N];

for(n=0;n<N;n++){x[n]=rand()%10;y[n]=rand()%N;z[n]=rand()%N;v[n]=rand()%N;w[n]=rand()%N;}

sum=0; c=clock();
for(n=0;n<N;n++){k=w[n];k=v[k];k=z[k];k=y[k];sum+=x[k];}
c=clock()-c; cout<<c<<" clock "<<sum<<endl;

sum=0; c=clock();
for(n=0;n<N;n++)sum+=x[y[z[v[w[n]]]]];
c=clock()-c; cout<<c<<" clock "<<sum<<endl;
}


594:デフォルトの名無しさん
07/11/22 15:30:37
>>593
手元のiccでは全く同じコードにコンパイルされたよ。
--
movl (%rbx,%rcx,4), %ecx #15.20
movl (%rbp,%rcx,4), %edi #15.27
movl (%r12,%rdi,4), %r8d #15.34
movl (%r13,%r8,4), %r9d #15.41
addl $1, %edx #15.13
movl %edx, %ecx #15.13
addl (%r10,%r9,4), %r15d #15.46
movl %ecx, %edx #15.1
cmpl $900000, %edx #15.1
jb ..B1.15 # Prob 99% #15.1
--
movl (%rbx,%rcx,4), %ecx #19.30
movl (%rbp,%rcx,4), %esi #19.28
movl (%r12,%rsi,4), %edi #19.26
movl (%r13,%rdi,4), %r8d #19.24
addl $1, %edx #19.13
movl %edx, %ecx #19.13
addl (%r9,%r8,4), %r15d #19.17
movl %ecx, %edx #19.1
cmpl $900000, %edx #19.1
jb ..B1.23 # Prob 99% #19.1
--

595:デフォルトの名無しさん
07/11/22 15:31:30
処で、>593はなんでC++でコンパイルしているんだ?

596:デフォルトの名無しさん
07/11/22 15:34:55
仮想関数を利用する上での注意点があれば教えて下さい。

597:デフォルトの名無しさん
07/11/22 15:40:00
iccだとmovlにしてくれるのか
VCだとmov,mov,...ってのにしかならない

598:デフォルトの名無しさん
07/11/22 15:44:40
>593以下速度の話題
C/C++スレか速度スレ、或いは最適化スレへどうぞ。

>>596
あんたもスレ違い。

599:デフォルトの名無しさん
07/11/22 21:02:53
for(i=10;i>=0;i--)printf("%d\n"i);
っていうコード unsigned にするとやばいね 全然気づかなかったよ

600:デフォルトの名無しさん
07/11/22 21:11:23
処理系依存になるってこと?

601:デフォルトの名無しさん
07/11/22 21:17:31
unsigned int iに対してi>=0は常に真だべ

602:デフォルトの名無しさん
07/11/22 21:20:46
なるほど
どうもありがとう

603:デフォルトの名無しさん
07/11/22 22:37:22
ポインタが指してる内容を配列に入れたいのですがどうしたらいいですか?
例えば、
char *a="ABC";
char b[4];
このとき、 b[0]=A,b[1]=B,b[2]=C にしたいです。

604:デフォルトの名無しさん
07/11/22 22:39:15
strcpy(b,a);

605:デフォルトの名無しさん
07/11/22 22:41:18
memmove(b,a,3);


606:603
07/11/22 23:01:19
>>604,>>605
できました。
ありがとうございます。



607:デフォルトの名無しさん
07/11/22 23:01:27
for(i=0;b[i]=a[i];i++);

608:デフォルトの名無しさん
07/11/22 23:16:00
昨日自己参照構造体でのリストについてかけねーって嘆いてた者だけど、
今日紙に書きつつ、これがこーなるから次はこうなるだろーってソース書いてったら無事動きました!

609:デフォルトの名無しさん
07/11/22 23:28:12
二次方程式の解の公式を求めるプログラムを作れとの課題が出たので考えてみたのですが
思うようにうまくいきません。
#include <stdio.h>
#include <math.h>


int main() {
double x1 ,x2, a, b, c;

printf( "a = " );
scanf("%lf" , &a);

printf( "b = " );
scanf("%lf" , &b);

printf( "c = " );
scanf("%lf" , &c);

x1 = -b+sqrt(b*b-4.0*a*c)/2.0*a;
x2 = -b-sqrt(b*b-4.0*a*c)/2.0*a;
printf("x1= %lf x2= %lf\n", x1, x2);
}

までできたのですが、
x1= -1.#IND00 x2= -1.#IND00
何を入力してもこの答えになってしまいます。
自分なりに見直してみたのですが間違いが分かりません。
どなたかご教示いただけたら幸いです。



610:デフォルトの名無しさん
07/11/22 23:32:03
そもそも式が違うじゃん

611:デフォルトの名無しさん
07/11/22 23:39:05
かけざんとわりざんはたしざんやひきざんよりもさきにけいさんします。

612:609
07/11/22 23:40:33
式からして間違ってるのでしょうか?
今の式じゃ-bがが最後に計算されてしまうってことですかね?

613:デフォルトの名無しさん
07/11/22 23:43:51
>>609
あなたが書いている式は

       √(b^2 - 4ac)
x1 = -b + ------------- * a
          2

こんなだよ

614:609
07/11/22 23:44:12
x1 = (-b+sqrt(b*b-4.0*a*c))/2.0*a;
x2 = (-b-sqrt(b*b-4.0*a*c))/2.0*a;

こんな感じでいいんでしょうか?あと
warning C4996: 'scanf' が古い形式として宣言されました。
というエラーが発生してるんですがこれが原因でしょうか?
習ったとおりに書いてみたのですが。

615:デフォルトの名無しさん
07/11/22 23:46:11
printfで%lfは標準じゃなかった気がする。
独自拡張とかC99とかならいけたかもしれんけど。

616:デフォルトの名無しさん
07/11/22 23:47:57
>>613
最後のaは分母にかかりますよね?

>>615
そうなんですか・・・家と学校じゃ環境が違うのでそのせいかもしれません。
他に間違ってるところありますかね?

617:デフォルトの名無しさん
07/11/22 23:48:09
>>614
それは警告であってエラーじゃない

618:デフォルトの名無しさん
07/11/22 23:48:11
>>614 (...)/2*aじゃなくて(...)/(2*a)

619:デフォルトの名無しさん
07/11/22 23:48:15
それだと

    -b + √(b^2 - 4ac)
x1 = ----------------- * a
         2
だな

>warning C4996: 'scanf' が古い形式として宣言されました。
warning C4996 でぐぐれ

620:デフォルトの名無しさん
07/11/22 23:48:46
>>616
かからねーよwww

621:デフォルトの名無しさん
07/11/22 23:51:39
>>618-620
なるほど・・・()付けない限り数字同士はくっ付かないんですか
ご指摘ありがとうございます。修正してみましたが、相変わらず答えは変わりません。
他に間違っているところがないのであれば家の環境が悪いということで諦めます。


622:デフォルトの名無しさん
07/11/22 23:53:55
入力してる値が悪いのでは?実数解を持つ値を入れてみ

623:デフォルトの名無しさん
07/11/22 23:59:22
>>622
答えがでました。適当に値を入れていたのが原因でしたか・・・
こんな基礎の問題に答えてくれて助かりました。
もっと勉強しないと駄目なようです、ありがとうございました。

624:デフォルトの名無しさん
07/11/23 00:02:47
適当にいれんなよwwwwwwwwwwww

625:デフォルトの名無しさん
07/11/23 00:05:03
Cに一番大事なのはとにかく基礎。
応用なんてものは後回しでとにかく基礎だぜ。

626:デフォルトの名無しさん
07/11/23 00:06:46
AもBもすっとばしていきなりCやるとはたかれるってことですよねー

627:デフォルトの名無しさん
07/11/23 00:11:14
たまにする背伸びは楽しいけどな
良い気分転換になる

628:デフォルトの名無しさん
07/11/23 00:12:09
fizzbuzzもかけない段階でchaos pp使ってメタプログラミングしたりな

629:助けてBOYZ
07/11/23 02:27:55
今日からの連休中に3つの課題を出されました。
ポインタ大嫌いです。
どなたか助けて下さい。
この問題が一つ目です。

【問】数字文字列を数値化する関数を作成して下さい。

<関数仕様>
書式 :short *AtoS(char *pStr, int *pRetCode);
戻り値:数字文字列のポインタ
引数 :char *pStr → 文字列の先頭アドレス
    :int *pRetCode → 動作の成否を返す (正常なら:0,エラー時は-1)
              ※但し、NULLの時は返さない
処理 :pStrで与えられた文字列をshort型の数値に変換する
    ※負数(マイナス)にも対応

<考慮必要事項>
・short型の範囲外の数値文字列
・非数字文字列
・数字文字列と非数字文字列の混在(先頭の'-')は除く
・空文字列
・NULL

以上の5つはpRetCodeの示す領域にはエラーを返す、戻り値は0

630:デフォルトの名無しさん
07/11/23 02:28:53
>>629
いつまで逃げ続けられるの?
終わりはあるの?

631:デフォルトの名無しさん
07/11/23 02:40:04
>>629
自分で考える気がないなら宿題スレへ
スレリンク(tech板)

632:デフォルトの名無しさん
07/11/23 03:03:04
>>609
printf("x1= %f x2= %f\n", x1, x2);
で試したのか? どうみてこうだと思うんだが

633:デフォルトの名無しさん
07/11/23 03:05:05
>>632
そういう問題じゃないから

634:助けてBOYZ
07/11/23 03:11:41
何とか自分で作ってみました。
だけど戻り値?とか関数の意味がよく分からないし、何だかグダグダと
長いプログラムになってしまいました。
ポインタ&関数を理解するコツを教えて下さい。

635:デフォルトの名無しさん
07/11/23 03:15:18
戻り値ってshort*なの?

636:デフォルトの名無しさん
07/11/23 03:15:18
そもそも問題がおかしいのにどうしろと
文字列を数値化するのに文字列へのポインタ返してどうしろと

637:助けてBOYZ
07/11/23 03:22:30
戻り値はshortみたいです。
一応表示はされたんですけど…
ちょっとチェックして下さい。
おかしいところ教えて下さい。

638:助けてBOYZ
07/11/23 03:26:42
#include <stdio.h>
short AtoS(char *pStr, int *pRetCode);
int main(void)
{
short val;
int ret = 0;

val = AtoS("1234", &ret);
printf("%d\n", val);

val = AtoS("-789", &ret);
printf("%d\n", val);

val = AtoS("atai", &ret);
if (-1 == ret) {
printf("数値文字列でないデータが渡されました。\n");
}
return 0;

639:助けてBOYZ
07/11/23 03:27:56
改行が多くて入りませんでした。
間違ってるところあれば教えて下さい。
short AtoS(char *pStr, int *pRetCode)
{
int *p;
int i;
int sum;
short goukei;

goukei = 0;
if (pStr[0] == '-') {
for (i = 1; pStr[i] != '\0'; i++) { /* p[0]に'-'が入力された */

pStr[i] = pStr[i] - '0';
goukei = pStr[i] + (goukei * 10);
}
goukei = goukei - (goukei * 2);
return goukei;
}
goukei = 0;
for (i = 0; pStr[i] != '\0'; i++) { /* p[0]~'\0'の中に数字だけが入力された */
if (pStr[i] > 48 && pStr[i] < 58) {
pStr[i] = pStr[i] - '0';
goukei = pStr[i] + (goukei * 10);
}
else {
*pRetCode = -1;
return pRetCode[0];
}
}
return goukei;

640:デフォルトの名無しさん
07/11/23 05:10:13
>>629
次からは宿題スレへ
#include <stdio.h>
short AtoS(char *pStr, int *pRetCode)
{
int n,s;
if(pRetCode == NULL) return 0;
*pRetCode = -1;
if(pStr == NULL || *pStr == '\0') return 0;
for(s=*pStr=='-'?1:0,pStr+=s,n=0;*pStr != '\0' && *pStr>='0' && *pStr<='9';pStr++)
n=n*10+*pStr-'0';
n=s==1?-n:n;
if(*pStr != '\0' || *(pStr-1) == '-' || n<-32768 || n>32767) return 0;
*pRetCode = 0;
return n;
}
int main()
{
int i,s,r;
char t[][8]={"","-","a","-a","a1","1a","1-",
"-32769","-32768","-1","0","1","32767","32768","-000001","000001"};
printf("String\t: Value\t(RetCode)\n");
s = AtoS("1",NULL);
printf("\"1\"\t: %d\t(NULL)\n",s);
s = AtoS(NULL,&r);
printf("(NULL)\t: %d\t(%d)\n",s,r);
for(i=0; i<sizeof(t)/8; i++) {
s = AtoS(t[i],&r);
printf("\"%s\"\t: %d\t(%d)\n",t[i],s,r);
}
return 0;
}

641:640
07/11/23 06:31:08
訂正
#include <stdio.h>
short AtoS(char *pStr, int *pRetCode)
{
int n,s;
if(pRetCode == NULL) return 0;
*pRetCode = -1;
if(pStr == NULL || *pStr == '\0') return 0;
for(s=*pStr=='-'?1:0,pStr+=s,n=0;*pStr != '\0' && *pStr>='0' && *pStr<='9' && n>=-32768;pStr++)
n=n*10-*pStr+'0';
n=s?n:-n;
if(*pStr != '\0' || *(pStr-1) == '-' || n<-32768 || n>32767) return 0;
*pRetCode = 0;
return n;
}
int main()
{
int i,s,r;
char t[][16]={"","-","a","-a","a1","1a","1-",
"-32769","-32768","-1","0","1","32767","32768","-000001","000001","4294967296"};
printf("String\t: Value\t(RetCode)\n");
s = AtoS("1",NULL);
printf("\"1\"\t: %d\t(NULL)\n",s);
s = AtoS(NULL,&r);
printf("(NULL)\t: %d\t(%d)\n",s,r);
for(i=0; i<sizeof(t)/16; i++) {
s = AtoS(t[i],&r);
printf("\"%s\"\t: %d\t(%d)\n",t[i],s,r);
}
return 0;
}

642:デフォルトの名無しさん
07/11/23 09:05:09
>>639
> pStr[i] = pStr[i] - '0';

文字列へのポインタ貰った関数が、中身を書き換えちゃいけない。
呼び出し側が、
n=AtoS("12345", &x);
とした場合、pStrの指す先は書き換えは不可能である処理系が多い。

普通、こういう文字列へのポインタを貰う関数は、
short AtoS(const char *pStr, int *pRetCode)
のようにconstを付ける。

643:デフォルトの名無しさん
07/11/23 09:23:18
>641

for(s=*pStr=='-'?1:0,pStr+=s,n=0;*pStr != '\0' && *pStr>='0' && *pStr<='9' && n>=-32768;pStr++)
n=n*10-*pStr+'0';

↑こういう可読性の悪い書き方はやめようぜ…


644:デフォルトの名無しさん
07/11/23 09:24:47
わざとだろう

645:デフォルトの名無しさん
07/11/23 10:41:36
x[n]とr=0.6に対して

(x[0]-x[1])/x[1] + r * (x[1]-x[2])/x[2] + r^2 * (x[2]-x[3])/x[3] + ・・・

という計算を多くするとき計算が速く終わるコードって分かりますか?
x[n]は変化します 厳密な値ではなくていいです

646:デフォルトの名無しさん
07/11/23 10:42:45
あとx[n]の値は50%以内のずれしかありません

647:デフォルトの名無しさん
07/11/23 10:54:43
x[n]の平均値hとその誤差をd[n]とすると

(x[0]-x[1])/x[1]
=d[0]-d[1]/x[1]
=d[0]-d[1]/h
=(d[0]-d[1])*k k=1/h
とすれば速そうですね

648:デフォルトの名無しさん
07/11/23 11:57:13
(x[0]-x[1])/x[1] = x[0]/x[1]-1 でしょ。
-1の部分だけ分けて、
元の式=x[0]/x[1]+r*x[1]/x[2]+r^2*x[2]/x[3]....-(1+r+r^2+...)
とすれば、
r=0.6固定なら後ろの部分は定数だから前もって計算しておけば早いのかも。

精度が無視できる項以降は計算しないって手もあるのかな。
有効数字2ケタでいいなら、0.6^10以降は計算しなくてもいいと思う。

649:デフォルトの名無しさん
07/11/23 12:22:00
>>648
サンクス

650:574
07/11/23 13:43:42
>>576-579
ありがとうございました。
プロトタイプ宣言はやはり暗黙的にexternのですね。
社内のソースと合わせるため、一応これからはグローバルな関数はexternを付けて区別していこうと思います。

651:デフォルトの名無しさん
07/11/23 14:22:28
プロトタイプ宣言は厳密には暗黙的に extern なのではなくて、
それより前に static なプロトタイプ宣言や関数定義がなければ extern になり、
あれば static になる。

652:デフォルトの名無しさん
07/11/23 14:24:28
そういうときに「規定」って言葉を使うのかな。


653:デフォルトの名無しさん
07/11/23 14:26:23
ヘッダファイルで static な関数プロトタイプを書くことは無いし、
ヘッダファイルはファイルの先頭でインクルードするしで、
>>651 のような曖昧さがあっても実際の所これが問題になる事はない。
extern をつけるかどうかは好みの問題。

654:デフォルトの名無しさん
07/11/23 15:14:15
>>653
すまん。
前2行と後ろ2行の関係が分からん。
出来ればもうちょい詳しく頼む。

655:デフォルトの名無しさん
07/11/23 15:39:55
別のスレに翻訳単位をよくわかってない奴がいたな。
ヘッダファイルは彼にとって何か特別なものなのかもしれないが。

656:デフォルトの名無しさん
07/11/23 15:52:05
>>654
前2行の理由により、普通はヘッダファイル内にあるプロトタイプ宣言より先に
static なプロトタイプ宣言や関数定義が現れることはないから、
実質的には暗黙的に extern になると考えても問題ないという話。

657:デフォルトの名無しさん
07/11/23 19:14:43
ここに来てるのってみんなプログラマーなの?

658:デフォルトの名無しさん
07/11/23 19:36:03
プログラムが出来るって意味ではみんなプログラマーだろうな

659:デフォルトの名無しさん
07/11/23 19:59:26
職業=プログラマはあんまいないと思う
学生とSEばっか

660:デフォルトの名無しさん
07/11/23 20:09:55
いや、プログラマーって普通にいるだろ。

661:デフォルトの名無しさん
07/11/23 20:13:13
>>659
SEが居るならプログラマも居る事になるんだよ

662:デフォルトの名無しさん
07/11/23 20:19:42
SEと職業プログラマはちょっと違うけどな

663:デフォルトの名無しさん
07/11/23 20:21:40
あ、名刺はSEだけどプログラマって人はいっぱいいると思う
特に若い人。

664:デフォルトの名無しさん
07/11/23 20:35:16
昔職業プログラマって優れたコードを書く人だと思ってたけど、
なってみたら優れたコードとかは二の次で動くコードを書く人だと知った。

665:デフォルトの名無しさん
07/11/23 20:40:15
資格とかいらなくて、基本的にだれでもやれる職業だしな。

666:デフォルトの名無しさん
07/11/23 21:25:12
頭使うドカタだしな。

667:デフォルトの名無しさん
07/11/23 21:44:55
名刺もってるプログラマに出会ったことないんだけど

668:デフォルトの名無しさん
07/11/23 21:46:47
名刺は持ってるぞ
渡す機会は無いけど

669:デフォルトの名無しさん
07/11/23 21:47:29
名刺に「プログラマ」と書くとどうしても低く見られるから、
「システムエンジニア」と書くんだよ。


670:デフォルトの名無しさん
07/11/23 21:48:33
みんな普通にもってるでしょ?
自社以外の人にいっさい会わないで、こもって仕事してるならいらないけど。
名詞の肩書きに「プログラマー」とか入ってないって意味?

671:デフォルトの名無しさん
07/11/23 21:50:10
所属とか役職は入ってるけど、プログラマーとかSEとかってのは書いてないよね。

672:デフォルトの名無しさん
07/11/23 21:50:43
いや、会社が名刺をつくってくれないらしいんだが……

673:デフォルトの名無しさん
07/11/23 21:54:02
たまにしか使わないのに何十枚も刷ると高いから、
使うときに1枚だけプリンタから出せってことだよ。

674:デフォルトの名無しさん
07/11/23 21:58:23
数十枚刷れば数年もつ

675:デフォルトの名無しさん
07/11/23 22:03:15
プログラマが名刺出すような状況にならんだろ
SEとして派遣されたら名刺だすけどさ

676:デフォルトの名無しさん
07/11/23 22:10:23
>672-673

どんだけ貧乏な会社なんだよ。
100枚1000円ぐらいなのに…


677:デフォルトの名無しさん
07/11/23 22:11:36
使わないものを作ったってねぇ

678:デフォルトの名無しさん
07/11/23 22:15:03
あんま名刺出すとセールスの電話が増えて業務が滞る

679:デフォルトの名無しさん
07/11/23 23:19:51
>>678
わたくしどもはお客様の会社にプログラマを派遣いたしております
わたくしどもは常に優秀な人材を取り揃えてございます
おたくの会社にもおひとついかがでしょうか?

680:デフォルトの名無しさん
07/11/23 23:23:29
おもしろくないよ

681:デフォルトの名無しさん
07/11/23 23:32:04
そのとおり
笑えない話なのさ

682:デフォルトの名無しさん
07/11/23 23:47:54
Cでpow(5,i)の計算をした時のことでお聞きしたいことがあります。
最初はpow(5,0)=1,pow(5,1)=5,(5,2)=25....と順調です。
しかし、pow(5,23)の時に本来ならば11920928955078125のはずなのですが、
なぜか11920928955078124と1小さい数になってしまいます。
pow(5,24)以降も正しい数値が得られず誤差がどんどん大きくなっていってしまいます
この原因が全く分からず途方にくれている状態です…よろしくお願いします。

683:デフォルトの名無しさん
07/11/23 23:50:40
>>682
URLリンク(ja.wikipedia.org)

684:デフォルトの名無しさん
07/11/23 23:51:45
>>682
doubleの有効桁数を超えてるとか。

685:デフォルトの名無しさん
07/11/23 23:57:53
多売長ライブラリ

686:デフォルトの名無しさん
07/11/24 00:15:23
>683

倍精度浮動小数点で普通使われるIEEE 754 形式だと仮数部52ビットだけど、
pow(5,23)で52bitを超えるから、以降は誤差が出る。
誤差を避けるためには自分で作るしかない。
でも多分そういうアルゴリズムは探せばあるよ。


687:デフォルトの名無しさん
07/11/24 01:53:27
0*0.003=0

をlog計算するためにプログラムでかくにはどうすればいいですかね?

0*確率なら0になるから処理の結果に影響ないんだけど
logだと0にならないんで困るわ。

688:デフォルトの名無しさん
07/11/24 01:54:20


689:デフォルトの名無しさん
07/11/24 02:09:44
わからないかな?
たとえばこの図であらわすと
URLリンク(kossie.net)
startから1回目の移動で↑と↓に移動できるそのときの確率が0.5と0.5
start地点の状態確率が1とすると↑と↓に移動した段階の状態確率はそれぞれ0.5 0.5

プログラム的に1回の移動ごとに、すべての状態をまわって、
そのあとに2回目の移動をすることにしてます。そうじゃないと作れないので。
これを小数点でなら最初すべての状態の確率を 0にしておけば、それぞれの移動ごとに
すべての状態をまわっても0*移動確率 =0になるので変な数値が値がでることはありません。

ただlogで計算する場合に、logはlog(A*B)=logA+logBという性質があるので
Aが0であってもBが0でなければ数値は残ってしまういうわけ。

これでプログラムになやんでるんですよ。

690:デフォルトの名無しさん
07/11/24 02:13:56
そもそもlogxって定義域x>0だろが

691:689
07/11/24 02:35:46
まあ問題はこういう感じなんですけど、図は>>689のとおりです

いま、start,1,2,3,10,11,endという状態がありまして、
以下のような確率で移動することとします。
最初はstartで最後はendです。startの状態確率は1.0です。
1.0から移動する確率をかけると状態1のその時点での状態確率が0.5、状態2の状態確率が
0.5となります。
ただし状態1は入ってくる矢印が3つですので、その時点では0.5ですが
次の状態に状態1から状態1へ移動すると0.5X0.6の計算をして0.3となるわけで
す。この(startから状態1への移動確率)
(状態1の状態確率)X(状態1から状態1への移動確率)と、(状態11の状態確率)X(状態11
から状態1への移動確率)の和が状態1の状態確率となります。
startから状態10に移動したり、状態2に移動したりして計算をしていって
endにきたときの最終状態確率を求めよ。っていうのが問題です。

これをlogで計算しないといけないっていう前提にプログラムを作るとしたら
どうつくっていきますか?ただし状態に入ってくる3つの値は比較しながら
計算しないといけないんでね。logの計算なので。

692:デフォルトの名無しさん
07/11/24 02:39:14
>>689
なんだお前か
氏ね

693:689
07/11/24 02:46:15
どうせできないのにいばんな。

694:デフォルトの名無しさん
07/11/24 02:47:25
非友好的な態度だな

695:デフォルトの名無しさん
07/11/24 03:40:22
負の無限大?

696:デフォルトの名無しさん
07/11/24 03:57:50
>>691
人に説明する気はありますか?
宿題スレでも、簡単なことを訳の分からない説明してたし
考えていることを整理してみてはどうでしょう?

エスパーしておくと、対数を使うのは外部データの入出力のときだけで
内部での計算は対数を使わなくていいんじゃないかと・・・
(どうせ浮動小数点だし)

697:デフォルトの名無しさん
07/11/24 09:14:10

             「 ̄ `ヽ、   ______
             L -‐ '´  ̄ `ヽ- 、   〉
          /           ヽ\ /
        //  /  /      ヽヽ ヽ〈
        ヽ、レ! {  ム-t ハ li 、 i i  }ト、
         ハN | lヽ八l ヽjハVヽ、i j/ l !
         /ハ. l ヽk== , r= 、ノルl lL」
        ヽN、ハ l   ┌‐┐   ゙l ノl l
           ヽトjヽ、 ヽ_ノ   ノ//レ′
    r777777777tノ` ー r ´フ/′
   j´ニゝ        l|ヽ  _/`\
   〈 ‐ 知ってるが lト、 /   〃ゝ、
   〈、ネ..         .lF V=="/ イl.
   ト |お前の態度が とニヽ二/  l
   ヽ.|l         〈ー-   ! `ヽ.   l
      |l気に入らない lトニ、_ノ     ヾ、!
      |l__________l|   \    ソ

698:デフォルトの名無しさん
07/11/24 09:21:52
>>689
>ただlogで計算する場合に、logはlog(A*B)=logA+logBという性質があるので
>Aが0であってもBが0でなければ数値は残ってしまういうわけ。

なんで、そんな偉そうにウソを語るんだ。

699:デフォルトの名無しさん
07/11/24 09:53:50
log0 は未定義だから log(A*B)=logA+logB で A が 0 の場合を考える事自体がナンセンス

700:デフォルトの名無しさん
07/11/24 10:03:19
>>689
よく分からんが、log0って出来ないんじゃないの?

701:デフォルトの名無しさん
07/11/24 10:06:58
エスパーすると、確率を log した値で保持しておいて、
確率変化を積じゃなく和で表現したいんだろうな。
log(0) は CPU によっては -inf (マイナス無限大) として扱われるから、
そういう CPU では特に問題は発生しないと思うんだけど。

702:デフォルトの名無しさん
07/11/24 10:45:05
>>683-686
レスサンクス!
結局、多倍長演算をするためにGMPとやらを入れてみました。
しかしGMPの関数を解説してるサイトの少ないこと…
どんな関数があるのか、引数の意味は何かとかさっぱり分からないorz

703:デフォルトの名無しさん
07/11/24 11:32:52
練習で、サーバーソケットとクライアントソケットを両方持つプログラムを作ってます。
サーバーはサーバーでリッスンさせといて、クライアントはメッセージを入力すると相手サーバーへ飛ぶ、
と考えたんだけど、先にサーバーソケットをaccept()でループさせとくと、後のクライアント処理に行けなくて困ってる。
スレッド使わないとムリ?

704:デフォルトの名無しさん
07/11/24 11:55:20
>>703

>スレッド使わないとムリ?

無理。素直にスレッド立てれ。


705:デフォルトの名無しさん
07/11/24 11:57:22
プロセスでもいいけどな

706:デフォルトの名無しさん
07/11/24 12:00:22
selectとその仲間


全然(標準)Cじゃねーじゃねーか

707:デフォルトの名無しさん
07/11/25 00:04:32
for文とwhile文の使い分けがよく分かりません。
苦Cのサイトに、「for文はwhile文を拡張した文」と書いてあったのですが、
while文が先にできて後でfor文を追加したのでしょうか?

while文でなければできないことや、while文でやった方がいいこと、またその逆など、
ありましたら教えてください。よろしくお願いいたします。

708:デフォルトの名無しさん
07/11/25 00:10:58
>>707
とりあえずループカウンタをつかってるループはfor()を使っておけばいいんじゃないの?



709:デフォルトの名無しさん
07/11/25 00:17:10
>>707
while文でできてfor文でできないことや、その逆のことは、ない。
 i = 0;
 while (i < 10) {
  ....
  i++;
 }

 for (i = 0; i < 10; i++) {
  ...
 }
のどちらが読みやすいか?
その程度の問題。

710:デフォルトの名無しさん
07/11/25 00:19:45
do{}while(); // 必ず一回は行う処理
for(;;) // ループ途中で continue を行っても for の第三項が実行される

711:デフォルトの名無しさん
07/11/25 00:36:29
>>708-710
ありがとうございます。
文法的にwhile文の方が見やすいので、個人的にはそちらを使おうかと思っています。
一般的にはどういう使い分けがされてるとか、「慣習」や「常識」みたいのはありますでしょうか?

712:デフォルトの名無しさん
07/11/25 00:54:11
文字列処理とか数値処理とかで使い分けるだろ。


713:デフォルトの名無しさん
07/11/25 01:03:14
ここでfor文の方が速いからfor文使え、とその後200レス程費やす無駄な議論を起こす為のネタ投下

714:デフォルトの名無しさん
07/11/25 01:04:49
慣習とかは無いだろうけど,
回数が固定なら for,未定なら while が一般的だと思う
たとえば,「荷物を10個選ぶ」なら for で,「荷物を10kg分選ぶ」なら while とか


715:デフォルトの名無しさん
07/11/25 01:07:00
そうだな
内容の容量の制限したいときにforではせんわな。

あープログラムつくらないといけないのに
作る気がしない。
作り始めたら5,6時間いけるのに
そういうのが全然ない。

716:デフォルトの名無しさん
07/11/25 09:10:10
たしかに for でも while でもよいネ。
オイラは無限ループは while 使うようにしてるな。
do while は使わなくなった。


717:デフォルトの名無しさん
07/11/25 09:50:56
ループするごとに毎回行いたい処理があれば for を使うね。
continue しても実行されるから。

718:デフォルトの名無しさん
07/11/25 11:06:17
vcだとwhile(1)は警告レベル最大だと文句言われるのでfor(;;)を使うようになった
この辺の習慣は環境で変わるんだろうね

719:デフォルトの名無しさん
07/11/25 11:08:38
泣く泣く for (; ;) を使うように

720:デフォルトの名無しさん
07/11/25 13:30:51
>>718
どういう警告?


721:デフォルトの名無しさん
07/11/25 13:42:40
>>720
C4127

722:デフォルトの名無しさん
07/11/25 15:10:01
CとC++はもう仲良くできないの?
C99すごすぎ。

723:デフォルトの名無しさん
07/11/25 17:28:24
認識率1%とかの実験のプログラムを前の先輩をつくられて
再実験でそのプログラムを作ってるんだけど。
データ100でそのうちの何個かで認識率を出すって感じで
今ようやくデータ1つで数値を出せるようになった。
データ100個をプログラムで入力できるようにして自動でしたいんだけど
結構複雑。
データ1つ入力して値をだして100回するのも
認識率1%とかいうやって意味あるのか的な感じがして自重してる。

しかしプログラムの内容を率でだされるのっていやだね。

724:デフォルトの名無しさん
07/11/25 17:36:31
日記帳にでも書いてろカス

725:デフォルトの名無しさん
07/11/25 18:57:23
URLリンク(www.nicovideo.jp)
これか

726:デフォルトの名無しさん
07/11/25 19:48:10
文字列処理を極めたいのですが、何から手を付けたらいいですか?

727:デフォルトの名無しさん
07/11/25 20:01:28
左から。

728:デフォルトの名無しさん
07/11/25 20:02:51
まずは文字列の表現方法を考えることから

729:デフォルトの名無しさん
07/11/25 20:03:10
修辞的疑問文というやつだな

730:デフォルトの名無しさん
07/11/25 20:13:07
ファイルを読み取る時に一文字ずつ読み取る方法と
一行ずつ読み取る方法がありますが、
どういう場合に使い分けるんですか?

731:デフォルトの名無しさん
07/11/25 20:14:23
カンタンなことだ。
ファイルを1文字ずつ読み取りたい場合は1文字ずつ読み取る方法を使い、
1行ずつ読み取りたい場合は1行ずつ読み取る方法を使う。

732:デフォルトの名無しさん
07/11/25 20:16:09
その日の気分による

733:デフォルトの名無しさん
07/11/25 20:30:51
一行ずつ、もしくは一文字ずつ読み取らなければいけない場合とは、
例えばどんな場合がありますか?

734:デフォルトの名無しさん
07/11/25 20:43:56
>>733
行に意味があるときには行単位で読んだほうが楽
行に意味がないときには文字単位で読んだほうが楽

735:デフォルトの名無しさん
07/11/25 22:13:40
バイナリファイルは1文字ずつ読んで、
テキストファイルは1行ずつ読む。

736:デフォルトの名無しさん
07/11/25 22:39:40
>>735
さらっと嘘教えるな

737:デフォルトの名無しさん
07/11/25 23:10:37
型変換しないのに型変換するとコストかかりますか?

たとえばunsigned int型を同じ型でキャストした場合です

738:737
07/11/25 23:17:16
どうやらたいして差がないことが分かりました

739:デフォルトの名無しさん
07/11/25 23:39:11
まず間違いなく出力は1バイトもたがわないと思う。

740:デフォルトの名無しさん
07/11/26 00:22:38
ビルドしてfc /bで比べればいいんじゃね

741:デフォルトの名無しさん
07/11/26 01:08:03
>>714
分かり易い説明をありがとうございます。
>>709の例で言うと、for文を使う方が一般的、ということですね。
どちらも i を宣言しないといけないことに変わりはないんですね。

742:デフォルトの名無しさん
07/11/26 05:05:13
ループの終了条件がループカウンター以外の場合はwhileを使う。
ループごとにある関数を呼んで、その結果が真の時のみループを抜ける、とかな。

while (func() != 0)
{
~何かの処理~
}

まあforでも実現できるから、どっちでもいいんじゃない?

743:デフォルトの名無しさん
07/11/26 09:16:58
C言語の参考書Lvを卒業して、線形リストとかアルゴリズムみたいなのをある程度組んでみた。
30日位考えれば作れるようなプログラムとかどのような物があります?
大学にも行けなかったような頭なので、そこまで難しい物はまず出来ませんが。

744:デフォルトの名無しさん
07/11/26 09:31:01
>>743
トランプのポーカーを AI 付で

745:デフォルトの名無しさん
07/11/26 09:36:18
>>743
OS。本が売ってるからそれに従えばおk

746:デフォルトの名無しさん
07/11/26 09:55:58
>>744
色々ネットにソースありましたが、AIって部分が難しそうですね・・・
ゲーム作ってみたかったので参考にさせて頂きます。

>>745
アセンブラも使うそうですし、OSとなると自分には無理な気がしてならないですがw
30日でOSが出来るならとなると少し興味もありますね。
レビューのみでは分からなかったのでこれから本屋行って二つを見て周って来ます

レス下さった方有難うございました

747:デフォルトの名無しさん
07/11/26 13:45:16
int a[256]={0} という配列を定義して
例えば1024をscanfでこの配列に
a[0]=1024 , a[1]=0 ,a[2]=0,......,a[255]=0
ではなく
a[0]=4 ,a[1]=2, a[2]=0, a[3]=1.a[4]=0,.....,a[255]=0
という風に格納したいのですが、どういう風にプログラムを書けばいいのか思いつきません
よろしくお願いします。

748:デフォルトの名無しさん
07/11/26 13:48:11
int n, a[256] = {0}, i;

scanf("%d", &n);
for(i=0; n; i++, n/=10) a[i] = n % 10;

749:デフォルトの名無しさん
07/11/26 14:06:25
>>748
ありがとうございます!
int型やdouble型以上の桁の数字を扱う方法として
一桁ずつ格納する方法ならば!と思ったのですが、
どちらにしろ一度int型の変数に代入しないといけないことにプログラム見て気付きましたorz

char型の配列(例えばstr[256])に文字として数値を文字として格納した後に、
それをint型の配列(a[256])に入れなおすことって出来ませんよね…


750:デフォルトの名無しさん
07/11/26 14:19:16
>>749
こういうこと?

char buf[] = "123456789";
int val[sizeof(buf)];
for (unsigned ic = 0; ic < sizeof(buf); ++ic) {
val[ic] = buf[ic] == '\0' ? 0 : buf[ic] - '0';
}

751:デフォルトの名無しさん
07/11/26 14:20:01
int i, j=0, a[256];
char str[256];

scanf("%s", str);
for(i=0; str[i]; i++);
whil(i--) a[j++] = str[i] - '0';

752:デフォルトの名無しさん
07/11/26 14:20:10
void array_double(int *a, int n)
{
int i;
for(i=0;i<n-1;i++,n--)
{
a[i] = a[n-1];
}}
配列aとそのサイズnを受け取り、要素を逆順にするプログラムを考えているんですが、
うまくコンパイルすることができず、1,2,3,4,5と入力すると、5,4,3,4,5と出力されます。
どこがおかしいのでしょうか?

753:デフォルトの名無しさん
07/11/26 14:25:38
>>752
>どこがおかしいのでしょうか?
頭。

コードと結果が合致してさえいないぞ。自分のコードくらい間違うな。

754:デフォルトの名無しさん
07/11/26 14:29:45
>>752
ヒント: 上書きと交換は違う


755:デフォルトの名無しさん
07/11/26 14:31:48
>>753
ヒント: ピントが外れている

756:デフォルトの名無しさん
07/11/26 14:32:11
>>753
お前の頭もおかしいよ

757:デフォルトの名無しさん
07/11/26 14:36:06
>>752
自分の頭(紙と鉛筆でもいい)の中で実行して
1行ずつ変数の中身がどうなるか考えてみよう
ループを展開するんだ。
a[0] = a[5-1];
a[1] = a[5-1];




758:デフォルトの名無しさん
07/11/26 14:36:57
>>757
お前もちゃんとコード見ろ

759:753
07/11/26 14:40:36
とりあえず、>755のお蔭でn--を見落としていたのは判ったw

>>757
同士よw

760:デフォルトの名無しさん
07/11/26 14:52:32
>>752
a[i] = a[n-1] を

int temp = a[i];
a[i] = a[n-1];
a[n-1] = temp;

にすればok

761:デフォルトの名無しさん
07/11/26 14:58:31
Cに交換演算子が欲しいと思う恭子の頃。

762:デフォルトの名無しさん
07/11/26 15:31:04
>>761
具体的にどう実装する?

763:デフォルトの名無しさん
07/11/26 15:33:38
>>762
>760の例なら
a[i] <> a[n - 1];
とか。
評価の回数を減らせるし、swapマクロを作って自爆することもなくなるし、
CPUに交換ニモニックがあれば使えるべさ。

764:デフォルトの名無しさん
07/11/26 16:08:54
今大学でプログラミング授業を取ってるんだが、色々とワカンネorz

演習内容うpするので教えてくれませんか?

765:デフォルトの名無しさん
07/11/26 16:16:21
>>764
スレ違い

766:デフォルトの名無しさん
07/11/26 16:18:44
>>765
キティーだから許して。スレ違いだったらスマン

板いろいろ探したんだが、何処で聞いたらいい?
ググレ以外の回答を頼むw

767:デフォルトの名無しさん
07/11/26 16:26:09
C/C++の宿題を片付けます 100
スレリンク(tech板)l50


768:デフォルトの名無しさん
07/11/26 16:26:32
>>764
宿題スレも見つけられないなら大人しく首括っとけ。

769:デフォルトの名無しさん
07/11/26 17:57:03
Visual C++ 2005を使用しています。
文字列をLONGLONG型の整数値に変換したいんですが、atoll関数が見つかりません。
Visual C++ 2005の環境では、atoll関数は自作するしかないでしょうか。


770:デフォルトの名無しさん
07/11/26 17:58:25
>>769
つ[strtoll()]

771:デフォルトの名無しさん
07/11/26 18:42:36
_atoi64

772:デフォルトの名無しさん
07/11/26 18:51:11
boost::lexical_cast

773:769
07/11/26 18:53:19
>>770-772
ありがとうございます。
_atoi64でいけました。

774:デフォルトの名無しさん
07/11/26 19:59:33
>>770
VC2005はC99に未対応じゃね?

775:デフォルトの名無しさん
07/11/26 20:56:49
変な質問ですが、C言語をマスターするのにだいたいどのくらいかかりますか?

776:デフォルトの名無しさん
07/11/26 21:01:58
オレにも教えて下さい。C言語って何が出来ますか?
入門書卒業後何をしたらいいのやら。

グラフィック系統の本みたけど、これを利用してぱらぱら漫画みたいなの作れないですか

777:デフォルトの名無しさん
07/11/26 21:05:11
Cでできないことはほとんどない

778:デフォルトの名無しさん
07/11/26 21:06:05
>>776
それだけなら画像表示ツール自身でできるからなぁ。
あんたの質問は、「英語で何ができますか?」と同じくらい無意味なんだよ。

779:デフォルトの名無しさん
07/11/26 21:40:46
#include <stdio.h>

int main(void)
{
FILE *fp;
int x;
int y = 30;

fp = fopen("test.txt","r");
fscanf(fp,"%d",&x);
printf("%d",x);
fclose(fp);
fp = fopen("test.txt","w");
fprintf(fp,"%d",x);
fscanf(fp,"%d",&x);
printf("%d",x);
fclose(fp);

return(0);
}

------test.txt-----
10
-----------------
馬鹿な質問で申し訳ないです。
実行結果が107になるんですが、何か見落としてるのでしょうか。

780:デフォルトの名無しさん
07/11/26 21:47:04
"w" なのになんで fscanf を?

781:デフォルトの名無しさん
07/11/26 21:48:45
>>779
>何か見落としてるのでしょうか。


冗談さておき、"w"でオープンしたストリームからは読み込めません。
まして、fprintf()で出力した先には何もありません。

782:デフォルトの名無しさん
07/11/26 21:49:26
あ、ホントだ。
ありがとうございます。

また"r"で開きなおさないとダメなんですね。
"r+"とか"w+"の使い方もいまいち不明だし。

783:デフォルトの名無しさん
07/11/26 21:58:29
ついでに質問です。
"r+"と"a+"の違いって何でしょう?
両方ともファイルに出力したら追記されますよね。

単純にファイルが新規に作成されるか否かですか?

784:デフォルトの名無しさん
07/11/26 22:01:41
r+ は途中にも書き込める。
a+ はファイルの終わりにしか書き込めない。

785:デフォルトの名無しさん
07/11/26 22:14:53
>>784
挿入可能って事ですか?
それとも上書きが出来るって事でしょうか。

色々試してみてるけど思うように扱えないです。

786:デフォルトの名無しさん
07/11/26 22:23:12
r+ は上書き可能。こんな感じ。       ポップアップ用アンカー >>786
#include <stdio.h>
#include <stdlib.h>

int main() {
static const char FILENAME[] = "test.txt";
FILE *fp;
int x = 0;

/* とりあえず 10 と書き込む */
fp = fopen(FILENAME, "w");
fprintf(fp, "%d", 10);
fclose(fp);

fp = fopen(FILENAME, "r+"); /* r+ で開く */

/* ファイルの先頭から数値を読み出す */
fscanf(fp, "%d", &x);
printf("%d\n", x); /* 10 と出力されるはず */

/* ファイルの先頭に移動して 30 と書き込む */
fseek(fp, 0, SEEK_SET);
fprintf(fp, "%d", 30);

/* またファイルの先頭に移動して数値を読み出す */
fseek(fp, 0, SEEK_SET);
fscanf(fp, "%d", &x);
printf("%d\n", x); /* 30 と出力されるはず */

fclose(fp);
return EXIT_SUCCESS;
}

787:デフォルトの名無しさん
07/11/26 22:32:56
分かり易い解説ありがとうございます。
上記の例で、"a+"だと、
10
1030
と出力されちゃうんですね。

fseek関数はまだ触った事ないので勉強してみようと思います。

788:デフォルトの名無しさん
07/11/26 23:07:17
/* fseekってイマイチよく分からん。 オフセットとかなんだか知らんが
読んだときか書き込んだときでかは忘れたけど、数字で
int型の4バイトの時と、char型の1バイトの時があってイミフ。
チラシの裏で馬鹿なレスだからスルーしてね^^ */

789:デフォルトの名無しさん
07/11/26 23:43:55
>>788
それは恐らくfseek()が判らないのではなくて、fprintf()で書き込むのかfwrite()で書き込むのかの
違いがよく判っていないんジャマイカ。

>>787
書き込み後は、fseek()(或いはそのサブセットのrewind())をするか、明示的にfflush()しないと
書き込んだ結果が実際のストリームに出力される保障がないことに注意。

まぁ、ファイル先頭に移動するにはrewind()の方が判りやすいだろうね。

790:デフォルトの名無しさん
07/11/26 23:56:48
条件によって01を記録し、
記録した情報を順番に読み取って01を判別し、
条件分けをしたいのですが思ったとおりになりません。。
具体的には、書き込み
FILE *fp;
char output = 0;
int bit = 0;
fp = fopen("bitstream","rb");
for(i=0; i...... )
{
if(bit == 8)
{bit = 0; fputc(output,fp);}
if(条件)
{手順1; output = ((output<<1) | 0x01); bit++;}
else
{手順2; output <<= 1; bit++;}
}
output = (output<<(7-bit));
fputc(output,fp);
読み込み
char a;
for(i=0; ){
if(bit == 8)
{a = getc(fp); bit = 0;}
if( ( a >> (7-bit) ) & 0x01 )
{手順1; }
else
{手順2; }
bit++;}
こんな感じで書いてるんですが、どこかおかしいところがあればご指摘ください。

791:デフォルトの名無しさん
07/11/27 00:13:53
float *a;
a = new float();
*a = 120;
float *temp = a;

これはOKですよね

float *temp = 120

これはなんでダメなんですか?


792:デフォルトの名無しさん
07/11/27 00:29:03
tempが格納するのはアドレスだから。
120を変数に格納して、その変数のアドレスをtempに渡すなどする必要がある。

793:デフォルトの名無しさん
07/11/27 00:30:17
newはC++なんだけど

794:デフォルトの名無しさん
07/11/27 00:30:49
セミコロンが無いから。

795:デフォルトの名無しさん
07/11/27 00:32:19
つまり
float *tempは、ポインタとして宣言してる状態で、そこにaのアドレスが入って、
temp = a となっている、ということですか?上の例だと

で、3行目の
*a =120 は aのアドレスをもったところに120をぶち込んでる、ということで
float *tempとは別ものなんですよね?



796:デフォルトの名無しさん
07/11/27 00:47:27
564.1
451.6
154.1
[EOF]

こういう風になってるテキストファイルがあるときに
「EOFまで数字をテキストファイルから読み込む」という作業をする場合はどうすればいいんでしょうか?

i=0;
while(1){
if(fread(&c,sizeof(char),1,fp)==EOF) break;
else
{
data[i]=fscanf(fp,"%lf\n",&value);
i++;
}
}

こんな感じにかいたらdata[0][1][2]には564.1 451.6 154.1 が入っているんでしょうか?
よくfreadとfscanfなどがわかっていないのでよろしくお願いします。


797:デフォルトの名無しさん
07/11/27 00:47:38
別もの。
*a=120の*はデリファレンス、float *tempの*はポインタ宣言。

798:ワカメ高専
07/11/27 01:05:59
[-3,3] fx=1/(1+5x^2) 分点の数 10個(n=9)
これをラグランジュで求めて結果を出力するプログラムを作れって(c or c++)言われたけどさっぱりでしゅ

799:デフォルトの名無しさん
07/11/27 01:44:24
>>798
課題丸投げは宿題スレへ
スレリンク(tech板)

800:デフォルトの名無しさん
07/11/27 01:49:31
>>796
i=0;
while(1){
if (fscanf(fp, "%lf", &data[i]) == EOF) {
break;
}
i++;
}

801:デフォルトの名無しさん
07/11/27 01:55:32
>>795
そう。上の例は
float *a;
a = new float();
*a = 120;
float *temp;
temp = a;
に等しい。下の例は
float *temp;
temp = 120;
ということになる。floatポインタに整数120は代入できない(型が異なる)のでエラー。

802:デフォルトの名無しさん
07/11/27 02:14:26
エラーにはならないだろボケ


803:デフォルトの名無しさん
07/11/27 02:16:13
>>791
別に駄目じゃねーよ。
期待してるのとは違う動作だろうけどな。

804:801
07/11/27 02:19:44
本当だ、エラーにはならんね、すまそ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch