[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 21:47 / Filesize : 118 KB / Number-of Response : 352
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C,C++】 ちょっと問題解いて行け 【勉強】



1 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:16:00 ]
他人のソースを読むことは非常に勉強になります。
と言うわけで、初心者〜プロの方まで様々な人が書いたソースを見て、より良いプログラムを作れるようになろうと言う目論見です。
問題は未来アンカーで踏んだ人が空気を読んだ問題を出しましょう。

解答ソースを貼る人用テンプレ
【C言語歴】 (例)4年
【レベル】 (例)初心者、プロ、学校で習った程度 など
【コンセプト】 (例)処理速度重視、可読性重視、容量重視 など
【コメント】 (例)みっくみくにしてやんよ。など、有れば

長すぎるソースはこちらへ
ttp://codepad.org/

宿題は C/C++の宿題片付けます 130代目へ
pc12.2ch.net/test/read.cgi/tech/1250204272/
相談は C言語なら俺に聞け(入門篇)Part54などへ
pc12.2ch.net/test/read.cgi/tech/1254829314/

2 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:17:21 ]
言い出しっぺの法則

【問題】 5個の数を入力すると合計と平均を計算し出力するプログラムを作成してください。

次の問題は>>50

3 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:20:30 ]
【C言語歴】 1ヶ月
【レベル】  超初心者
【コンセプト】 ちゃんと動くように書くのが精一杯
【コメント】 先月からC言語を勉強しはじめました。一応講義受けてます・・。

#include<stdio.h>
#define BUF_SIZE (16)
#define COUNT (5)

int main(void){
int i;
double sum = 0;
char buf[BUF_SIZE];

printf("%d回、数を入力してください。\n",COUNT);
for(i=0;i<COUNT;i++){
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%lf",&sum);
sum +=sum;
}
printf("合計は%f、平均は%fです。",sum,sum/COUNT);
return (0);
}

4 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:21:48 ]
該当問題をアンカーしたほうがいいですね・・。

5 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:27:15 ]
ちょw
>

6 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:12:57 ]
霊長類研

7 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 05:39:25 ]
>>2
【C言語歴】 1年 【レベル】 学校で習った 【コンセプト】 普通に
#include <stdio.h>
int main(void)
{
char str[20];
int num1;
int num2;
int num3;
int num4;
int num5;
int sum;
puts( "整数を5回入力して下さい。" );
fgets( str, 20(str), stdin );
sscanf( str, "%d", &num1 );
fgets( str, 22(str), stdin );
sscanf( str, "%d", &num2 );
fgets( str, 24(str), stdin );
sscanf( str, "%d", &num3 );
fgets( str, 26(str), stdin );
sscanf( str, "%d", &num1 );
fgets( str, 28(str), stdin );
sscanf( str, "%d", &num1 );

sum = num1 + num2 + num3 + num4+ num5;

printf( "合計: %d\n", sum );
printf( "平均: %d\n", sum / 5 );

return 0;
}
これでどうですか?

8 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 07:50:45 ]
>7
わざと()にしたのかなアセンブリじゃないんだから[]使わないとだめだよ
20[str]みたいにね、と思ったがfgets(, size_t, )だったなぁ
脳内lintには引っかかったが、脳内コンパイルできなかった

9 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:32:38 ]
【C言語歴】 1ヶ月
【レベル】 超初心者
【コンセプト】 なし
【コメント】 なし

#include <stdio.h>
int main(){
int a[5];
scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
int b=a[0]+a[1]+a[2]+a[3]+a[4];
printf("%d\n%g\n",b,(float)b/5);
return 0;
}

10 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:42:32 ]
>>9

bが宣言されてなくない?
あとその書き方だと数が多いと大変



11 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:43:28 ]
おっと、b見落としてた

12 名前:デフォルトの名無しさん [2009/10/12(月) 19:45:13 ]
ageて置きますね(^^;)

13 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:52:38 ]
>>2
【C言語歴】 5〜6年
【レベル】 けど初心者
【コンセプト】 stl で書いてみた
【コメント】 プログラムがうまくなりたーい

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

int main()
{
std::vector<int> arr;
std::cout<< "整数を5回入力してね。"<<std::endl;
for( int i = 0; i < 5; ++i)
{
int input_tmp;
std::cin >> input_tmp;
arr.push_back( input_tmp );
}
int sum = std::accumulate(arr.begin(), arr.end(), 0);
std::cout << "Sum:" << sum <<std::endl;
std::cout << "Mean:"<< (double)sum/arr.size() << std::endl;
return 0;
}

14 名前: ◆yic3X9PxrE mailto:sage [2009/10/13(火) 00:29:00 ]
>3
・buf は for の中で宣言しても良いかも。(その方が後で改造しやすい)
・sscanf は「scanできた数」を返すから、それできちんと入力されたかチェックした方が好ましい。
 ※ >3だと空入力とかも1回とカウントされてしまう。
・%lfでsscanfしてるんだから、 printfも %lf で出力した方が好ましい。

>7,9
・個別に書く事は得になし。

>13
・c++なんだからキャストは static_cast の方が好ましい。
 (というか出題は整数限定じゃないのだから、double型にしときゃ良い気が。)

総評:
・初期化を書くクセを突けた方が良いと思われ。
・コンパイルが通るのを確認してから書いた方が良いと思われ。
 今やWindowsでもコンパイラはタダなのだし。

15 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:48:58 ]
>・%lfでsscanfしてるんだから、 printfも %lf で出力した方が好ましい。
これは論外。何故論外なのか判らないならprintf()とscanf()のマニュアルペー
ジを読め。
それでも判らないなら、人に物を教えようなどと言う烏滸がましいことは金輪際
止めた方がいい。

16 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 06:42:17 ]
っ C99

17 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 07:34:01 ]
shortだったらどうするんだろう……

18 名前:普通の名無しさん mailto:sage [2009/10/13(火) 16:10:40 ]
/*
【C言語歴】 22年 ソースにコメントされても、多分返事は無い
【レベル】 プロ
【コンセプト】 可読性重視
【コメント】 C++ は入出力がスマートで便利

*/
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

const int MAX_COUNT = 5;

int main(void) {
  double data[5];
  double total = 0.0;
  int i;

  for(i=0; i<MAX_COUNT; i++) {
    cout << "何かの数:";
    cin >> data[i]; cout << data[i] <<endl;
    total += data[i];
  }
  cout << "合計:" << total <<endl;
  cout << "平均:" << total/MAX_COUNT <<endl;
}

19 名前:別に返事は要らん mailto:sage [2009/10/13(火) 16:50:31 ]
通常、標準入力はエコーバックされていると言う前提だから、入力直後の出力は冗長だね。
一方、標準出力はバッファリングされている可能性があるからフラッシュしないと折角のプロンプト出力が無駄になる。

20 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:16:48 ]
const int MAX_COUNT = 5;



double data[5];

さすがプロ
つーか、配列の意味無し



21 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:32:55 ]
>>20
ありがちなミスだなw
というお前さんも問題解いて行ってくれよ?

22 名前: ◆yic3X9PxrE mailto:sage [2009/10/14(水) 00:45:18 ]
>15
失敬。そしてわざわざ指摘をありがとう。(思いっきり勘違いしてますねこりゃ。)
そして>13さんごめんなさい。

>18
先輩、忘れ物です。
つ return 0;

>19
一応どのように読み取ったかを確認できるので、冗長ではあるけど意味はあるかと。
(例えば 1,2 などと入力すると…)

23 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 06:24:20 ]
>>7 コンパイル済み
#include <stdio.h>
int main(void)
{
  char str[20];
  int num1;
  int num2;
  int num3;
  int num4;
  int num5;
  int sum;
  puts( "整数を5回入力して下さい。" );
  fgets( str, 20, stdin );
  sscanf( str, "%d", &num1 );
  fgets( str, 20, stdin );
  sscanf( str, "%d", &num2 );
  fgets( str, 20, stdin );
  sscanf( str, "%d", &num3 );
  fgets( str, 20, stdin );
  sscanf( str, "%d", &num4 );
  fgets( str, 20, stdin );
  sscanf( str, "%d", &num5 );

  sum = num1 + num2 + num3 + num4+ num5;

  printf( "合計: %d\n", sum );
  printf( "平均: %d\n", sum / 5 );

  return 0;
}

24 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 09:33:04 ]
こういうのはイディオムとして覚えておこうよ。
fgets(str, sizeof(str), stdin);

25 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:12:37 ]
よう、友達じゃないんだから。

26 名前:普通の名無しさん mailto:sage [2009/10/15(木) 17:35:50 ]
/*
【C言語歴】 22年 ソースにコメントされても、返事は期待しないように
【レベル】 プロ
【コンセプト】 可読性重視
【コメント】 途中で数字以外を入れるとそこまでで計算を終わる
*/
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

const int MAX_COUNT = 5;
int main(void) {
  double data, sum=0.0;
  int i;

  for(i=0; i<MAX_COUNT; i++) {
//    cout << "何かの数:";
    if(!(cin >> data)) break;
//    cout << data <<endl;
    sum += data;
  }
  cout << "合計:" << sum <<endl;
  cout << "平均:" << sum/i <<endl;
}

27 名前:普通の名無しさん mailto:sage [2009/10/15(木) 17:36:35 ]
/*
【C言語歴】 22年 ソースにコメントされても、返事は期待しないように
【レベル】 プロ
【コンセプト】 可読性重視
【コメント】 途中で数字以外を入れるとそこまでで計算を終わる
*/
#include <stdio.h>

#define MAX_NUM 5
int main(){
  double data, sum=0.0;
  int i;

  for(i=0; i<MAX_NUM; i++){
//    printf("何かの数:");
    if(scanf("%lf", &data ) != 1) break;
//    printf("%g\n", data);
    sum += data;
  }
  printf( "合計:%g\n", sum);
  printf( "平均:%g\n", sum/i);
  return 0;
}

28 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 17:54:24 ]
/*
【C言語歴】 沢山
【レベル】 プロ
【コンセプト】 即興
【コメント】 >27に準拠、0件にも対応
*/
#include <stdio.h>

static const int MaxNum = 5;

int main()
{
double sumData = 0;
int ic;
for (ic = 0; ic < MaxNum; ++ic) {
double data;
fprintf(stderr, "Input a number:");
if (scanf("%lf", & data) != 1) break;
sumData += data;
}
if (ic) {
printf("Summation:%g\nAverage:%g\n", sumData, sumData / ic);
} else {
printf("There are no numbers.\n");
}
return 0;
}

29 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:02:18 ]
// 【C言語歴】 10年くらい
// 【レ ベ ル】 底辺SIerのPG
// 【コンセプト】 C++で。例外処理は省略。
// 【コメント】ベースは>18
#include <iostream>
#include <vector>
#include <numeric>
int main ( void )
{
const int MAX_COUNT = 5;
std::vector<double> buf;
std::cout << MAX_COUNT << "個の数値を入力してください。" << std::endl;
for( int count = 0; count < MAX_COUNT; ) {
double tmp = 0.0;
std::cin >> tmp;
if ( std::cin.fail() ) {
std::cin.clear(); // エラーを消す
std::cin.ignore(); // エラーとなった文字を読み飛ばす
}
else {
buf.push_back( tmp );
++count;
}
}
double sum = std::accumulate( buf.begin(), buf.end() , 0.0);
std::cout << "合計:" << sum << std::endl;
std::cout << "平均:" << (sum / MAX_COUNT) << std::endl;
return 0;
}

30 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 09:53:42 ]
int main( /**/ void /**/ )



31 名前:デフォルトの名無しさん mailto:age [2009/10/18(日) 18:22:00 ]
次の問題に行かずに沈みそうなのでage....

ゆ っ く り と い て い っ て ね

32 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:44:24 ]
>>24
カッコつけんなボケ

33 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 10:02:18 ]
別に格好悪いわけじゃないからいいじゃん。

34 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:18:01 ]
そろそろ次の問題行かないと間が持たないな

35 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:35:57 ]
では少し早いですが問題を・・。

【問題】 100個の数字をランダムに並べ替えて出力するプログラムを作成してください。
     ※同じ数は出力しない。毎回違った実行結果を表示する。

アルゴニズムと処理の違いが楽しみです。

次の問題は 一応50レス先の >>85
スレが停滞したらまたその時。。

36 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:45:20 ]
>>35

問題訂正・・。
【問題】 1〜100までの数字をランダムに並べ替えて出力するプログラムを作成してください。
     ※同じ数は出力しない。毎回違った実行結果を表示する。

37 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:53:52 ]
$ cat a.cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
time_t t;
t = time(0);
srandom(t);

int a[100];
for (int i = 0; i < 100; ++i) a[i] = i;
for (int i = 0; i < 100; ++i) {
int k = i + random() % (100 - i);
printf("%d\n", 1 + a[k]);
a[k] = a[i];
}
return 0;
}

C99ってことで

38 名前:37 mailto:sage [2009/10/19(月) 21:58:41 ]
乱数は考えるのがめんどくさかったので、 random() でごまかした。
random()の剰余で求める範囲の値を取り出すのは、ほんとはよい習慣ではない。
割り算を使うほうがいい。

39 名前:37 mailto:sage [2009/10/19(月) 22:00:23 ]
いちおうテンプレ
【C言語歴】 かなり長い
【レベル】 プロ
【コンセプト】 KISS
【コメント】 たたき台ってことで、よろしく。


40 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:27:31 ]
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define MIN (1)
#define MAX (100)
#define LENGTH (MAX - MIN + 1)
int main()
{
int data[LENGTH];
// データの初期化
for(int i = MIN; i <= MAX; i++)
{
data[i - MIN] = i;
}
// データの並べ替え
srand(time(NULL));
for(int i = 0; i < LENGTH; i++)
{
int temp;
temp = data[i];
int selected_index = rand() % (MAX - i) + i;
data[i] = data[selected_index];
data[selected_index] = temp;
}
// 出力
for(int i = 0; i < LENGTH; i++)
{
printf("%d\n", data[i]);
}
return 0;
}



41 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:28:29 ]
>>37

はえー・・・・
さすがプロ・・。
問題作った言い出しっぺが作れてません。
コンパイル通るのに動かないょ。

42 名前:40 mailto:sage [2009/10/19(月) 22:32:14 ]
【C言語歴】 ほとんど書いたことない
【レベル】 Cは初級
【コンセプト】 変化を考慮
【コメント】 書き方などご指摘がありましたらよろしくお願いします。

43 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:20:43 ]
【C言語歴】 6年 【レベル】 仕事で使用 【コンセプト】 擬似乱数 【コメント】 PCは書き込み規制・・・
#include <stdio.h>
#include <string.h>
#include <time.h>
void main(){
 char map[100];
 time_t timer;
 int a, b, p, q, i = 0;
 memset(map, 0x02, sizeof(map)); time(&timer);
 a=timer%100000; p=(timer/7)%1000; q=(timer/3)%1000;
 while(1){
  a=(((a*p+q)/10)%100000); b=a/1000;
  if(0<map[b]){
   printf("%3d ",b); map[b]--; i++;
  }else{
   while(1){
    if(b<99) b++;
    else b = 0;
    if(0<map[b]){
     printf("%3d ", b); map[b]--; i++; break;
    }
   }
  }
  if(i>=200) break;
 }
}

44 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:23:36 ]
【C言語歴】 1ヶ月 【レベル】  超初心者 【コンセプト】 ちゃんと動くように書くのが精一杯
【コメント】 先月からC言語を勉強しはじめました。無限ループから抜け出せない。。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM (100)

int main (void){
int rnd[MAX_NUM] = {0};
int i, j, temp;
MORE:
for(i = 0; i < MAX_NUM; ){
temp = 0;
srand((unsigned)time(NULL));
temp = rand () % MAX_NUM;
if (0 < temp && temp < MAX_NUM){
for (j = 0; j = i; j++){
if (rnd[j] != temp){
rnd[i] = temp;
i++;
}else
goto MORE;
}
}else
goto MORE;
}
for ( i = 0; i <= MAX_NUM - 1 ; i++){
printf ("%d\n", rnd[i]);
}
return (0);
}

45 名前:43 mailto:sage [2009/10/19(月) 23:25:35 ]
100*2で出力になってる…
memsetは1でi>=100でbreak

これだと発生しにくい数が出るけど…

46 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:36:03 ]
>>37
目から鱗が・・。
コンパイル通りませんでしたが。
コピペだからでしょうか。

そのアルゴいただきます。

47 名前: ◆yic3X9PxrE mailto:sage [2009/10/19(月) 23:49:20 ]
>37
これは良いお手本。

>40
レベル考えりゃ上出来。叩き台にはむしろこちらが相応しい。
敢えてツッコミ入れるなら、
・稀に「1と1を交換」のような、無駄な操作が発生する辺りは要改善かも。
・並べ替えの部分は↓を先頭に持ってきて、swap処理を固めた方が好ましいかと。
 int selected_index = rand() % (MAX - i) + i;

48 名前: ◆yic3X9PxrE mailto:sage [2009/10/20(火) 00:42:15 ]
>43
・if(i>=100) break; は while の条件に書けば良いような。(効率気にするならdo〜while)
・1で初期化し-1するより、0で初期化し、1代入の方が良い気が。
 (「配列全体を0で初期化」なら char map[100] = {0}; のように書けるので。)
・アルゴリズムは中々凝ってるような。(一部良く分からないけど…)


>44
・まづはgoto使うのを止めれ。ループとかブロック脱出に使うのは絶対ダメ。
・else ケースに括弧を付けるべき。括弧の対応が分かり辛く、フローも追い難い。

ちなみに無限ループに陥るのは、i がMOREにジャンプする度リセットされるから。
かつ内側のforループ内でほぼ確実にMOREにジャンプする。

49 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 05:29:42 ]
この問題じゃ工夫の余地が無いよな。

50 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 06:10:06 ]
>> // データの並べ替え
>> srand(time(NULL));
>> for(int i = 0; i < LENGTH; i++)
>> >40
>> ・稀に「1と1を交換」のような、無駄な操作が発生する辺りは要改善かも。
for(int i = 0; i < LENGTH-1; i++)



51 名前: ◆yic3X9PxrE mailto:sage [2009/10/21(水) 23:21:31 ]
>50

それだけでは不足。
selected_index の範囲も要修正。


>46
>コンパイル通りませんでしたが。

c99対応のコンパイラ(gccなど)が必要。

52 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:59:05 ]
良う修正せん。どう修正する。

53 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 10:49:43 ]
>>52
何を?

54 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 11:09:17 ]
>>51

55 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 11:17:13 ]
>>54
どっちを?

56 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 11:23:14 ]
selected_index を修正する?

57 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:54:03 ]
>40
>int selected_index = rand() % (MAX - i) + i;

selected_index ⇒ i 〜 MAX-1

58 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 01:49:52 ]
>40
int selected_index = rand() % (LENGTH - i) + i;

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9999.c

59 名前:58 mailto:sage [2009/10/24(土) 13:54:06 ]
これをtemp省略前の状態にリバース!
pc12.2ch.net/test/read.cgi/tech/1255709298/229
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
  int i, k, n, *p, temp;

  srand(time(0));
  scanf("%d", &n);
  p = malloc(n * sizeof(int));
  if(!p) return 1;

  for(i=0; i<n; i++) {
    p[i] = i;
    k = rand() % (i + 1);
    temp = p[i]; p[i] = p[k]; p[k] = temp;
  }

  printf("[");
  for(i=0; i<n; i++) printf(" %d", p[i]);
  printf(" ]\n");

  free(p);
  return 0;
}

60 名前:>>1 mailto:sage [2009/11/08(日) 09:10:38 ]
C/C++/STL/MFC/CLI 共通問題

【問題】 10進数を入力して2進数を表示する。
     ※入力は1回のみで、繰返しはしない。数字以外は入力しない。
     ※正数は先頭の0は表示しない。負数は32ビットを表示する、間に空白などは埋めない。
     ※入力にE又は小数点がある場合、浮動小数点数は32ビットで考える。

次の問題は 40 レス先の >>100



61 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 10:47:38 ]
頭の0を取るのは正規表現でも使ってください

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void dmp(unsigned char *b, int len)
{
int i;
for(i = len; --i >= 0; ){
int j;
/* printf(" %02x ", b[i]); */
for(j = 256; (j >>= 1) > 0; ){
printf("%d", (b[i] & j) ? 1 : 0);
}
}
printf("\n");
}


62 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 10:49:27 ]
int main(int ac, char **av)
{
char buf[4096];
int i, f;
printf("input: (123, 0.5, 3.4e-6, etc...) > ");
fgets(buf, sizeof(buf), stdin);
printf(buf);
f = 0;
for(i = 0; i < strlen(buf); i++){
char c = buf[i];
if((c == '.') || (c == 'E') || (c == 'e')){
f = 1;
break;
}
}
if(f){
double d;
sscanf(buf, "%lf", &d);
printf("%.16f\n", d);
dmp((unsigned char *)&d, sizeof(d) / sizeof(char));
}else{
sscanf(buf, "%d", &i);
printf("%d\n", i);
dmp((unsigned char *)&i, sizeof(i) / sizeof(char));
}
return 0;
}


63 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:27:06 ]
>>61
リトルエンディアンとビックリエンディアンの判別くらいしないといけないね

>>60
ここの人か
pc12.2ch.net/test/read.cgi/tech/1256818218/442

64 名前:60 mailto:sage [2009/11/08(日) 16:10:15 ]
 >>61
 リトルエンディアンとビックリエンディアンの判別くらいしないといけないね
C++ でコンパイルしてください。ビックリ→ビッグ。ワーニング→ウォーニング
bool is_little_endian(unsigned char *b)
{
  return b[0] ? true : false;
}

void dmp(unsigned char *b, int len, bool fill)
{
  int i, j; bool zero = false;
  if(i=1, is_little_endian( (unsigned char *)&i )){
    for(i = len; --i >= 0; )
      for(j = 256; (j >>= 1) > 0; ) {
        if(b[i] & j) zero = true;
        if(fill || zero) printf("%d", (b[i] & j) ? 1 : 0);
      }
  } else {
    for(i = -1; ++i < len; )
      for(j = 256; (j >>= 1) > 0; ) {
        if(b[i] & j) zero = true;
        if(fill || zero) printf("%d", (b[i] & j) ? 1 : 0);
      }
  }
  printf("\n");
}

65 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 14:52:05 ]
>>60
>     ※入力にE又は小数点がある場合、浮動小数点数は32ビットで考える。
整数はなんとなくわかるが、浮動小数点数の仕様がわからない。
具体例をあげてくれ。
0.0 =>
1.0 =>
0.1 =>
1E2 =>
1E-1 =>

ところで、回答してるやつはちゃんとテストしている?
0 => 0
1 => 1
-1 => 11111111111111111111111111111111 (1が32個)
65535 => 11111111111111 (1が16個)
-65536 => 111111111111110000000000000000 (1が16個と0が16個)
2147483647 => 1111111111111111111111111111111 (1が31個)
-2147483648 => 10000000000000000000000000000000 (1が1個、0が31個)
特にエンディアンがどうこう言ってるやつは、リトルエンディアンとビッグエンディアンの両方でテストしている?


66 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:56:34 ]
input: (123, 0.5, 3.4e-6, etc...) > 0.0
0
00000000000000000000000000000000
0
0000000000000000000000000000000000000000000000000000000000000000

input: (123, 0.5, 3.4e-6, etc...) > 1.0
1
00111111100000000000000000000000
1
0011111111110000000000000000000000000000000000000000000000000000

input: (123, 0.5, 3.4e-6, etc...) > 0.1
0.1000000014901161
00111101110011001100110011001101
0.1
0011111110111001100110011001100110011001100110011001100110011010

input: (123, 0.5, 3.4e-6, etc...) > 1E2
100
01000010110010000000000000000000
100
0100000001011001000000000000000000000000000000000000000000000000

input: (123, 0.5, 3.4e-6, etc...) > 1E-1
0.1000000014901161
00111101110011001100110011001101
0.1
0011111110111001100110011001100110011001100110011001100110011010

67 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:18:26 ]
>>66
>【問題】 10進数を入力して2進数を表示する。
題意にそえば、10進数の0.5は2進数では0.1になるはずだが。
0.75(decimal)ならば0.11(binary)

68 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:00:57 ]
IEEEの仕様があるのは知ってるか?

69 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:00:40 ]
>>67
それはただの少数であって浮動小数点数ではないから題意に添わない

70 名前:デフォルトの名無しさん [2009/11/10(火) 23:25:18 ]
参考資料
ttp://ja.wikipedia.org/wiki/IEEE_754




71 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:31:45 ]
>>67
しったか乙

72 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 01:56:45 ]
>>69
基の問題文は、浮動小数点数と明記していないから、67のような捉え方もできると思う。
もっとも、その後の※を読めば浮動小数点数なのだろうとは考えられるけど。

73 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 00:53:29 ]
捕手

74 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 07:57:49 ]
次のようなデータがテキストファイルで1ギガ程度あり、これを数値順にソートしたいです。
どのようにすればいいですか。

文字列 タブ文字1個 数値
・・・・・・・・・・ ・・
・・・・・ ・・
[参考]文字列は可変長です、文字列にタブは含みません。
数値範囲は32ビットunsigned intの整数です。
課題の要点ではないので、ソートはqsort等ライブラリを使用して下さい。
速度の為、malloc, newを使うなら、1024個を1回にとか、まとめてして下さい。

75 名前:74 mailto:sage [2009/12/06(日) 07:59:40 ]
次のレス番は>100くらい

76 名前:74 mailto:sage [2009/12/06(日) 12:08:24 ]
> 文字列は可変長です、文字列にタブは含みません。
文字列の長さは固定長の間違いでした。

77 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:00:12 ]
> 文字列の長さは固定長
そんなら OS で用意されている sort 使うよw
※"文字列は可変長"でも sort 使うが

78 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:53:38 ]
sort -n +1

79 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 08:34:04 ]
題目:宝くじの「還元率計算」
入力:標準ストリーム(テキストファイル)
1行目 1枚の金額 "," 発売総枚数
2行目以降 順位 "," 当選金額 "," 当選本数
最終行 改行
出力:標準ストリーム
タイトル行
入力データ、各行毎の期待値
合計期待値、還元率

ヒント:当選確率*当選金額=期待値(予想配当額)
    期待値/1枚の金額=還元率

CUI/GUIどちらでも可
次スレは>>100あたり

80 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 10:00:24 ]
宝くじって売り切れる訳じゃないんだろ
売れ残った部分に当りくじがあったら
還元率は大幅に下がるんじゃね?



81 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 10:13:23 ]
>>80
あなた、いつ議員に「当選」したんだ?

82 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:50:26 ]
[1] 授業単元:
[2] 問題文(含コード&リンク):

一次方程式y=a*x+bにおいて、A[x1,y1]とB[x2,y2]が与えられた時、
方程式の係数a,bを求めよ。
x1 y1: 450 454.4
x2 y2: 452 454.8
y=0.2*x+364.4

[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (Visual C++)
 [3.3] 言語: (C++/CLI C/Win32API C++/MFC いづれか)
[4] 期限: ( なし )
[5] その他の制限: ( GUIまたはgetc()で終わること)

83 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:41:01 ]
>>82
宿題はスレ違い

84 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 08:23:12 ]
#include <malloc.h>
#define MAXSIZE 20
typedef double WORD;
main(){
WORD (*b)[100];
WORD *a[2];
int i=1,j=1;

b = malloc(sizeof(WORD)*MAXSIZE*2);
a[0] = malloc(sizeof(WORD)*MAXSIZE);
a[1] = malloc(sizeof(WORD)*MAXSIZE);

b[i][j] = 0;
a[i][j] = 0;
/* [と]を使わない方法は?*/
b[i][j] = 0;
a[i][j] = 0;
}

85 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 17:47:41 ]
>>84
b??(i??)??(j??) = 0;
a??(i??)??(j??) = 0;

86 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 19:14:14 ]
b<:i:><:j:> = 0;
a<:i:><:j:> = 0;

87 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 03:08:44 ]
>>86
すげー、ほんとにコンパイル通る。
それなんて名前なの?記号だけなのでググりようがない。

88 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 22:31:16 ]
memset() すりゃいいんでないの?w


89 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 09:47:49 ]
0で初期化したいんならcalloc()でいいだろw

*(*(b + i) + j) = 0;
*(*(a + i) + j) = 0;

90 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:52:47 ]
>>87
ダイグラフ



91 名前:84 mailto:sage [2010/03/04(木) 23:36:37 ]
>>89
WORD (*b)[2]; // まちがえた

92 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 02:46:41 ]
>>90
とんくす
日本語じゃ情報少ないのな。英語だとWikipediaにのってるが

93 名前:84 mailto:sage [2010/03/07(日) 08:18:53 ]
Trigraph
× トリグラフ
○ トライグラフ
dic.yahoo.co.jp/dsearch?p=trigraph&dtype=1

94 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 09:38:47 ]
コンパイラ名とバージョン: (Visual C++)

作業用フォルダの所は空白、ソースと同じフォルダにショートカットは有ります。
ショートカット「Visual Studio 2005」
から cl xxx.cpp するのが面倒な場合はどのようにするのでしょうか。
PATHをずらっと並べるのは無しで.batのみで可能でしょうか?

95 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 01:04:08 ]
>>94
まず、ここは質問スレじゃない。
さらに、それはC/C++の問題ではない。

96 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 10:09:52 ]
C#, C♯, C#相談室 Part55
>>95 返信サンキュこちらで聞いてきます。

97 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 21:58:00 ]
>>2
【C++言語歴】 15時間
【レベル】 超ド素人
【コンセプト】 えっ・・と・・・
【コメント】 参照?ポインタ?構造体?クラス?イミフ

#include <iostream>
using namespace std;

int main() {
double a, b, c, d, e, sum;

cout << "5つの数の合計と平均値を出力します。" << endl;
cin >> a >> b >> c >> d >> e;

sum = a + b + c + d + e;

cout << "合計は" << sum << "で、平均は" << sum/5 << "です。" << endl;
}

98 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 08:36:40 ]
>>2
【レベル】 プロ
#include <iostream>
using namespace std;
struct Average {
  int count;
  double total;
  Average() : count(0), total(0.0) {}
};
int main(){
  Average a;
  double data;

  for(int i=0; i<5; i++){
    cout << "Input Number:";
    cin >> data;
    a.total += data;
    a.count++;
  }
  cout << "total=" << a.total << endl;
  cout << "average=" << a.total/a.count << endl;
}

99 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:21:22 ]
次の問題は>>100

100 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 10:53:12 ]
【問題】
点A、点B、点Cがあり、点Aと点C、点Cと点Bがそれぞれ線分ac、線分bcで結ばれている。
点A、点Bの座標(Pa(xa, ya), Pb(xb, yb))と線分の長さ(Lac, Lbc)が与えられたとき、点Cの座標を求めよ。
但し、解は一つとは限らない。
また、与えられた座標または長さが不適切で求められない場合はそれと判るようにすること。
# 作図的には点A、点Bからそれぞれ半径Lac、Lbcの円を書いて交点を求めればいいが……



101 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 15:59:04 ]
もっとゆとりでも解けるような問題が欲しいよ

102 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 16:14:25 ]
ユークリッド平面でいいの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<118KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef