ここから本文です

マージソートの入出力なんですけどエラーがでてがうまく表示できません。 教えて...

rug********さん

2010/1/2619:51:34

マージソートの入出力なんですけどエラーがでてがうまく表示できません。
教えてください。

test1.txt
1000
2000
3000
4000
5000
1111
2222
3333
4444
5555
6666
7777
8888
9999
1234
1235
1236
1337
1238
1240

このtxtデータを入出力したいのですが


#include<stdio.h>
#include<time.h>
#define NUM 20

void merge(int a[],int na,int b[],int nb,int c[])
{
int pa=0;
int pb=0;
int pc=0;

while(pa<na && pb<nb)
c[pc++]=(a[pa]<=b[pb]) ? a[pa++] : b[pb++];

while(pa<na)
c[pc++]=a[pa++];

while(pb<nb)
c[pc++]=b[pb++];
}

int main(void)
{
clock_t start,end;

FILE *fp;
int test [NUM];
int i;
int a[6]={1,3,5,7,9,10};
int b[7]={0,1,2,3,8,15,19};
int c[13];

fp =fopen("test1.txt","r");
if(fp==NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}
else{
printf("ファイルをオープンしました。\n");
}
printf("%d個のデータを入力してください\n",nx);

for(i=0; i<NUM; i++){
fscanf(fp, "%d", &x[i]);
printf("x[%d]:%d\n",i,x[i]);
}
start=clock();
merge(a,6,b,7,c);
end=clock();

puts("配列aとbをmergeして配列cに格納しました。");

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

printf("%.8f秒かかりました\n",(double)(end=start)/CLOCKS_PER_SEC);

return (0);
}

閲覧数:
343
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

fle********さん

2010/1/2621:12:04

>エラーがでてがうまく表示できません。
そもそもこのプログラム、コンパイル通らないんじゃ・・・。
>printf("%d個のデータを入力してください\n",nx);
のnxってどこで宣言されてます?
>fscanf(fp, "%d", &x[i]);
テキストから読み出したデータを格納する配列xはどこで宣言されてます?

nxは他に使ってる場所がないのでとりあえず省いて、
配列xは恐らくTEST配列だと予想します。
なんで見づらくしてまで条件演算子を使っているかもとりあえず置いておいて・・・。

恐らく、マージソートの方法のソースとファイルからの読み出しのソースをそのまま合わせたのだと予想します。
このままだと、上のnxと配列xの部分を合わせてもファイルから読み取った内容をまったく使わないままマージソートが行われますね。

これだけヒントがあればあとは分かるでしょう。

この質問は投票によってベストアンサーに選ばれました!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる