- 締切済み
プログラム 課題
14.1と16の組み合わせと、32と33.9の組み合わせを分けて取り出す プログラムを作りたいのですが、正直どんなプログラムになるのかわかりません。 (予想としては、ifを使ったりするのではないかと思うのですが。) 以下の配列がファイルのデータです 32 33.9 14.1 14.1 16 16 16 14.1 33.9
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- ryukak
- ベストアンサー率0% (0/0)
課題の意味が少しわかりにくいですね。 単純に値を取り出すだけならデータを読み込んで配列に格納して出力するだけでいいかと
「桁落ち」はなんか違うような・・・ http://www.cc.kyoto-su.ac.jp/~yamada/programming/float.html
- yama5140
- ベストアンサー率54% (136/250)
「課題」の主旨は、#4 さんの「桁落ち誤差」についてなのか、 「ファイルのデータ」って、「入力処理」も?とか、 共に差が 1.9 ( 33.9 - 32.0, 16.0 - 14.1 )なのは意味があるのか、 「組み合わせを分けて取り出す」とは、・・などと考えたんだけど???。 判らず終いで、・・・ やっぱ #1 さんの言う「マトモな回答」ではないな・・。 #include <stdio.h> #define DIM 9 #define SUMI 0.0 double dgData[ DIM ] = { 32.0, 33.9, 14.1, 14.1, 16.0, 16.0, 16.0, 14.1, 33.9 }; void Toridasu( double dA, double dB ) { int i, j; printf( "%4.1f:%4.1f", dA, dB ); for( i = 0; i < ( DIM - 1 ); i++ ){ if( dA != dgData[ i ] ) continue; for( j = ( i + 1 ); j < DIM; j++ ){ if( dB != dgData[ j ] ) continue; printf( " #%d:#%d", ( i + 1 ), ( j + 1 ) ); dgData[ i ] = SUMI; // 用済み dgData[ j ] = SUMI; // 〃 break; } } for( i = 0; i < ( DIM - 1 ); i++ ){ if( dB != dgData[ i ] ) continue; for( j = ( i + 1 ); j < DIM; j++ ){ if( dA != dgData[ j ] ) continue; printf( " #%d:#%d", ( j + 1 ), ( i + 1 ) ); dgData[ i ] = SUMI; // 用済み dgData[ j ] = SUMI; // 〃 break; } } printf( "\n" ); } void main() { int i; for( i = 0; i < DIM; i++ ) printf( "#%d=%4.1f\n", ( i + 1 ), dgData[ i ] ); printf( "\n" ); Toridasu( 14.1, 16.0 ); Toridasu( 32.0, 33.9 ); printf( "\n残り" ); for( i = 0; i < DIM; i++ ){ if( SUMI != dgData[ i ] ) printf( " #%d", ( i + 1 ) ); } printf( "\n" ); } 実行結果 #1=32.0 #2=33.9 #3=14.1 #4=14.1 #5=16.0 #6=16.0 #7=16.0 #8=14.1 #9=33.9 14.1:16.0 #3:#5 #4:#6 #8:#7 32.0:33.9 #1:#2 残り #9
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
組み合わせを分けて取り出す #include <stdio.h> #define N 9 void picup(int, int *, float *); int main(void) { float array[N]={32.0,33.9,14.1,14.1,16.0,16.0,16.0,14.1,33.9}; int integer[N],i; //桁落ち誤差回避のための整数変換 for(i=0;i<N;i++) integer[i]=10.0*array[i]; //事業仕分け? printf("Case of 14.1 and 16.0\n"); picup((int)(10.0*(14.1+16.0)),integer,array); printf("Case of 32.0 and 33.9\n"); picup((int)(10.0*(32.0+33.9)),integer,array); return 0; } void picup(int judge, int integer[], float array[]) { int i,j,temp; for(i=0;i<N-1;i++){ for(j=i;j<N;j++){ temp=integer[i]+integer[j]; if(temp==judge){ printf("%d(%.1f) : %d(%.1f)\n", i,array[i],j,array[j]); } } } } ----- 実行結果 ----- Case of 14.1 and 16.0 2(14.1) : 4(16.0) 2(14.1) : 5(16.0) 2(14.1) : 6(16.0) 3(14.1) : 4(16.0) 3(14.1) : 5(16.0) 3(14.1) : 6(16.0) 4(16.0) : 7(14.1) 5(16.0) : 7(14.1) 6(16.0) : 7(14.1) Case of 32.0 and 33.9 0(32.0) : 1(33.9) 0(32.0) : 8(33.9)
- kakuritsu
- ベストアンサー率23% (62/261)
>14.1と16の組み合わせと、32と33.9の組み合わせを分けて取り出す これがどういう意味なのか、教えてください。 何がしたいのでしょうか?
- SaKaKashi
- ベストアンサー率24% (755/3136)
はて、このデータでどのような回答が出ることを期待しているのか? あなたは、自分の質問内容で答えられると思いますか?
- D-Matsu
- ベストアンサー率45% (1080/2394)
「プログラム」以前の話なので、手でやる場合にどう解決するかをまずは考えましょう。 そうして、手で解決する手段を考えたらそれをプログラムに変換することを考えましょう。 その段階になってわからないところがあったら、そこを提示してください。 それくらいしないとマトモな回答つきませんよ。