952 :
947 :2010/05/24(月) 23:19:13
しかし、お疲れ様。
プログラミングじゃないんですが、どこに書けばいいのかわからなかったので、スレチならすみません。 (1)4Byte machineでDouble PrecisionのReal Numberは何桁まであらわされるのかMemoryのStructureから計算せよ。 (2)4Byte machineでDouble PrecisionのReal Numberの計算でOverflow,Underflowのエラーが出た時,それぞれどのような大きさの計算でエラーが起こったのかMemoryのStructureから理論的に説明せよ。 お願いします。
"4Byte machine" から意味がわからん。 "MemoryのStructureから" っていうのも謎。
倍精度は 64 ビットでいいですかね。(IEEE754) 仮数部は 52ビット + 1 = 53 ビット相当で表現されるから 2^53 = 10^15.95すなわち 少なくとも10進16桁まで表現できる。
最大数を10進数表示したときの桁数を聞かれてるんじゃないのかなあ
958 :
デフォルトの名無しさん :2010/05/25(火) 13:17:27
#include <stdio.h> 14 15 unsigned DtoB(int a) 16 { 17 unsigned x=1,ans=0,k=1; 18 while(a>0) 19 { 20 if(x & a) ans += k; 21 a = a >> 1; 22 k*=10; 23 } 24 return ans; 25 } 26 27 int main() 28 { 29 int a; 30 31 do{ 32 scanf("%d",&a); 33 printf("Input a: (%d) \n",a); 34 }while(a < 0); 35 36 printf("a(decimal)=%d\n",a); 37 printf("a(binary)=%u\n",DtoB(a)); 38 39 return 0; 40 } このプログラムに注釈つけてください
958 :デフォルトの名無しさん :2010/05/25(火) 13:17:27
>>861 全部のコードを書いていただけませんか?
>>958 >>858 をお忘れなく
#include <stdio.h> /* a を1/2する毎に、k を10倍の値にする */ /* a の最下位ビットが 1 の場合、ans に k を足す */ unsigned DtoB(int a) // 関数の入力仮引数は、整数の a である。 { unsigned x=1,ans=0,k=1; while(a>0) // a が正の数の間繰り返す { if(x & a) // a の最下位ビットが 1 の場合 ans += k; // ans に k を足す a = a >> 1; // a を2で割る k *= 10; // k を10倍する } return ans; // DtoB() の戻り値は ans } int main() { int a; // 整数型の変数 a を定義 do{ scanf("%d",&a); // a の入力 printf("Input a: (%d) \n",a); // 入力した a の出力 }while(a < 0); // a が負の数の間は繰り返す printf("a(decimal)=%d\n",a); // 10進数での a の表示 printf("a(binary)=%u\n",DtoB(a)); // 2進数での a の表示 return 0; // main() の戻り値 }
条件 printf("行列AとベクトルBの積は次の通りです\n"); linear_trans(a, b, c); for ( i = 0 ; i < COLUMN ; i++) printf("%8.3f\n", c[i]);
>>966 なんで質問者を刺戟する様な名前をわざわざ使うの?
質問しづらくなるだろ。
>>962 が無防備すぎてつい
それに回答する側としては質問しづらくなっても関係ないしなあ
なんという自分勝手 でも質問者ももう少しひねって出して…
971 :
954 :2010/05/25(火) 22:31:54
>>956 ,
>>957 ありがとうございます。
いろいろな人に聞いたのですが,
>>956 がどうもあってるみたいです。
>>957 はその10進法であらわした数字を超えたらoverflowってことですかね?
972 :
デフォルトの名無しさん :2010/05/25(火) 22:58:19
スレを最初から最後まで読めば全部だと思う。
>>972 この関数を使って正しく動作するものを作ってみなさい、とでも先生に言われたの?
976 :
デフォルトの名無しさん :2010/05/26(水) 00:09:54
>>921 http://codepad.org/OVk5XcXl 便乗で質問なんですが、
コピーコンストラクタを
Matrix &Matrix::operator=(const Matrix &a) { }
とするとコンパイルできるのですが、教科書のとおりに
Matrix &Matrix::operator=(Matrix &a) { }
とすると、
Matrix::operator=(Matrix) に一致するものがみつからない(BCC32)
というエラーがでてコンパイルできません。
どうしてなのでしょうか
>>977 それ、コピーコンストラクタじゃなくてコピー代入演算子。
で、エラーになるのはテンポラリで非 const 参照を初期化できないという規則があるから。
979 :
デフォルトの名無しさん :2010/05/26(水) 04:13:40
>>974 はい、そうです…。よろしくお願いしますm(__)m
こんなんで、いいのかひ? #include<stdio.h> void linear_trans(double matA [2][2], double vecx[2], double vecy[2]) { vecy[0] = matA[0][0] * vecx[0] + matA[0][1] * vecx[1]; vecy[1] = matA[1][0] * vecx[0] + matA[1][1] * vecx[1]; } int main() { double matA [2][2], vecx[2], vecy[2]; printf("input matA [0][0]:"); scanf("%lf",&matA[0][0]); printf("input matA [0][1]:"); scanf("%lf",&matA[0][1]); printf("input matA [1][0]:"); scanf("%lf",&matA[1][0]); printf("input matA [1][1]:"); scanf("%lf",&matA[1][1]); printf("input vecx [0]:"); scanf("%lf",&vecx[0]); printf("input vecx [1]:"); scanf("%lf",&vecx[1]); linear_trans(matA, vecx, vecy); printf("vecy[0]=%lf\n",vecy[0]); printf("vecy[1]=%lf\n",vecy[1]); return 0; }
次スレ立てます
■■■■■■■■ ■■■■■■■■ ■■■■■■■■
[1] 授業単元: [2] 問題文 キーボードから読み込んだ整数のうちの偶数の和の計算を続け、もし2回連続して奇数が読み込まれたら、それ以降は奇数のみの和の計算に切り替える。 そして、次に偶数もしくは奇数が2回連続して読み込まれたら、読み込みを中止して偶数の和と奇数の和を表示させる。 [3] 環境 [3.1] OS: Mac [3.2] コンパイラ名とバージョン: cc [3.3] 言語: C [4] 期限: 5月27日
984の者です。 間違えて送信してしまったので追記します。 その他の制限: do whileまでしか教えてもらってないのでそれでお願いできますか
987 :
デフォルトの名無しさん :2010/05/26(水) 12:48:52
From: [758] デフォルトの名無しさん <sage> Date: 2010/05/26(水) 09:29:56
[1] 授業単元:プログラミング基礎
[2] 問題文 キーボードから読み込んだ整数のうちの偶数の和の計算を続け、もし2回連続して奇数が読み込まれたら、それ以降は奇数のみの和の計算に切り替える。
そして、次に偶数もしくは奇数が2回連続して読み込まれたら、読み込みを中止して偶数の和と奇数の和を表示させる。
From: [759] デフォルトの名無しさん <sage> Date: 2010/05/26(水) 09:31:06
>>758 宿題スレでやれ
From: [760] デフォルトの名無しさん <sage> Date: 2010/05/26(水) 09:59:31
宿題はスルーでお願いします
From: [761] デフォルトの名無しさん <sage>Date: 2010/05/26(水) 11:32:25
>>759 >>760 あ、わからないんだったら、無理して答えなくていいから
From: [762] デフォルトの名無しさん <sage>Date: 2010/05/26(水) 12:11:23
誰か答えられる賢い人いない?
>>759 >>760 は引き続き黙ってていいから
あらあら。向こうで時間みてびっくりしたの俺だけど、転載乙
989 :
デフォルトの名無しさん :2010/05/26(水) 22:52:08
[1] 授業単元:プログラミング演習 [2] 問題文 : 1.テキストファイル(file,txt)を読み込み、 goodという単語すべてをbadに置換し、filea.txtに出力せよ 2.テキストファイル(file,txt)を読み込み、文字数の多い行から順に並べかえてfileb.txtに出力せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語: C [4] 期限: 5月27日 お願いします
990 :
デフォルトの名無しさん :2010/05/26(水) 23:39:28
失礼します。 行列の積を計算するプログラムのコードを提出という課題が学校で出たのですが 自分は以下のように書いたのですが、何度実行しても出力されてくる数字が間違っているのですが どこがおかしいのでしょうか???? #include<stdio.h> int main (void) { int i,j,k,n; int a[10][10],b[10][10],c[10][10]; printf("n (n<=10) の値を入力して下さい。\n"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("行列aの%d行%d列の値を入力して下さい。\n",i,j);scanf("%d",&a[i-1][j-1]);}} for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("行列bの%d行%d列の値を入力して下さい。\n",i,j);scanf("%d",&b[i-1][j-1]);} } for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { for(k=0;k<=n;k++){ c[i][j] += a[i][k] * b[k][j];}}} for(i=0;i<=n;i++){for(j=0;j<=n;j++){ printf("c[%d][%d] = %d\n",i,j,c[i][j]);}} return 0; }
>>979 へぇ。大変だね。
回答に加えていくつかツッコミ入れたけどそれに対してノーリアクションだったなぁ、と思うのと、
多分そのツッコミ部分を理解しているかどうかを確認する為にその出題されたんだろうね。
スルーせずに先生に突っ込みを先に入れていれば勝てた勝負なのにな。
[1] 授業単元:Cプログラミング演習 [2] 問題文(含コード&リンク): ・文字列 computer を、ポインタを用いて大文字で表示するプログラムを作成せよ ・文字列 ABCD を変数に代入し、ポインタを用いて次のように表示するプログラムを作れ ABCD BCD CD D [3] 環境 [3.1] OS:win vista [3.2] コンパイラ名とバージョン:VB 2008 [3.3] 言語:C [4] 期限: [2010年5月28日まで] [5] その他の制限:なし よろしくお願いします
1000 :
デフォルトの名無しさん :2010/05/27(木) 11:22:39
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。