ページ 11

課題について至急アドバイスをお願いします!

Posted: 2017年1月16日(月) 18:29
by ottochang
C言語初心者です。
仮想Linuxで挿入法というソートを作成途中ですが、プログラムがコンパイルできなくて困っています。
コンパイルは
$ gcc -lm sounyuuhou.c -o sounyuuhou
sounyuuhou.c: In function ‘main’:
sounyuuhou.c:23: error: expected expression before ‘)’ token
sounyuuhou.c:29: error: expected declaration or statement at end of input
とでるのですが、どこが間違っているのでしょうか?




コード:

 
#include <stdio.h>
#include <math.h>
int main(void)
{
	int N;
	int a[300];
	int i,j;	//jは最小値順に並べた時の順番の変数
	int dummy;

	FILE *fp;


	fp=fopen("testsoat.txt","r");
         fscanf(fp,"%d",&N);
	for(i=0;i<N;i++)       {
	 fscanf(fp,"%d",&(a[i]));
//	 printf("%3d\n",a[i]);  
	}
	fclose(fp);

	for(j=1;j<N;j++){
	  dummy = a[j];
	  for(i=j-1;i>=0;--i){
	    if(a[i]>=dummy){
		a[i]=dummy;
	      }
	  }
		else{
			break;
		}
        }
	}

return 0;
}

Re: 課題について至急アドバイスをお願いします!

Posted: 2017年1月16日(月) 20:20
by box
ottochang さんが書きました: sounyuuhou.c:23: error: expected expression before ‘)’ token
sounyuuhou.c:29: error: expected declaration or statement at end of input
とでるのですが、どこが間違っているのでしょうか?
if文の勢力範囲が終わった後にelseが来ているのがよろしくなさそうです。
また、どうも閉じカッコ } の数が多いように見えます。それもエラーの原因だと思います。

Re: 課題について至急アドバイスをお願いします!

Posted: 2017年1月16日(月) 21:02
by とキンちゃん
ここまでは出来てる。あとソートだけです。

コード:

#include <stdio.h> //[挿入ソート]
#include <math.h>  //testsoat.txt
int main(void)
{
    int N;      //ファイルから読み込む[個数]
    int a[300]; //300個の整数配列
    int i,j;    //jは最小値順に並べた時の順番の変数
    int dummy;  //dummy
    //-----------------------------------------------File
    FILE *fp;   //ファイルポインタ
 
    fp=fopen("testsort.txt","r");//ファイルオープンx[testsoat.txt]
    fscanf(fp,"%d",&N);          //Nを読む

    for(i=0;i<N;i++){            //N個の
        fscanf(fp,"%d",&(a[i])); //整数をa[i]に読む
        printf("%3d\n",a[i]);    //チェック用
    }
    fclose(fp);                  //クローズ
    //-----------------------------------------------Sort
    for(j=1;j<N;j++){
        dummy = a[j];
        for(i=j-1;i>=0;--i){
            if(a[i]>=dummy){
                 a[i]=dummy;
            }
        }
        //else{-------------------------------------
            break;
        //}
        //}
    }
    //----------------------------------------------
return 0;
}

Re: 課題について至急アドバイスをお願いします!

Posted: 2017年1月16日(月) 21:02
by とキンちゃん
ここまでは出来てる。あとソートだけです。

コード:

#include <stdio.h> //[挿入ソート]
#include <math.h>  //testsoat.txt
int main(void)
{
    int N;      //ファイルから読み込む[個数]
    int a[300]; //300個の整数配列
    int i,j;    //jは最小値順に並べた時の順番の変数
    int dummy;  //dummy
    //-----------------------------------------------File
    FILE *fp;   //ファイルポインタ
 
    fp=fopen("testsort.txt","r");//ファイルオープンx[testsoat.txt]
    fscanf(fp,"%d",&N);          //Nを読む

    for(i=0;i<N;i++){            //N個の
        fscanf(fp,"%d",&(a[i])); //整数をa[i]に読む
        printf("%3d\n",a[i]);    //チェック用
    }
    fclose(fp);                  //クローズ
    //-----------------------------------------------Sort
    for(j=1;j<N;j++){
        dummy = a[j];
        for(i=j-1;i>=0;--i){
            if(a[i]>=dummy){
                 a[i]=dummy;
            }
        }
        //else{-------------------------------------
            break;
        //}
        //}
    }
    //----------------------------------------------
return 0;
}

Re: 課題について至急アドバイスをお願いします!

Posted: 2017年1月16日(月) 23:49
by とキンちゃん

コード:

#include <stdio.h> //[挿入ソート]
#include <math.h>  //testsort.txt
int main(void)
{
    int N;      //ファイルから読み込む[個数]
    int a[300]; //300個の整数配列
    int i,j;    //jは最小値順に並べた時の順番の変数
    int dummy;  //dummy
    //-----------------------------------------------File
    FILE *fp;   //ファイルポインタ
 
    fp=fopen("testsort.txt","r");//ファイルオープン
    fscanf(fp,"%d",&N);          //Nを読む

    for(i=0;i<N;i++){            //N個の
        fscanf(fp,"%d",&(a[i])); //整数をa[i]に読む
        printf("%3d\n",a[i]);    //チェック用
    }
    fclose(fp);                  //クローズ
    //-----------------------------------------------Sort
    for (i = 1; i < N; i++) {
        dummy = a[i];
        if (a[i - 1] > dummy) {
            j = i;
            do {
                a[j] = a[j - 1];
            j--;
         } while (j > 0 && a[j - 1] > dummy);
         a[j] = dummy;
      }
   }
    //----------------------------------------------
    for(i=0;i<N;i++){            //N個の
        printf("%3d\n",a[i]);    //チェック用
    }
    return 0;
}

Re: 課題について至急アドバイスをお願いします!

Posted: 2017年1月17日(火) 13:16
by ottochang
<とキンチャンさん、boxさん

ご協力ありがとうございます!これを元に作って見ます!