• ベストアンサー

ソートのプログラム

100個の整数をファイル「int.txt」から出力して小さい順にソートして「out.txt」に書き込むC言語のプログラムなんですけど、自分で何回やってもできないのでどうか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

void input(void); void output(void); の方がいいと思います。 output()の挿入場所については、 return 0; の前でいいと思います

yoshiking
質問者

補足

ありがとうございます。できました。 さらにソート前の数字を表示させるにはどうすればいいのか教えていただきたいのです、あつかましいと思いますがどうかおねがいします。 #include <stdio.h> #include <stdlib.h> #define N 10 void input (); void output (); int a[N]; int comp(const void *, const void *); /*クイックソート*/ int main() { int i; input (); qsort(a, (size_t)N, sizeof(int), comp); printf("\n"); for (i = 0; i < N; i++){ printf("%d\n", a[i]); } output (); return 0; } int comp(const void *b, const void *c) { static int i = 1; i++; return (*(int *)b - *(int *)c); } /*ファイルからの入力*/ void input () { FILE *fp; int i; fp = fopen ("int.txt","r"); for (i=0;i<N;i++){ fscanf (fp,"%d",&a[i]); } fclose (fp); } /*ファイルへの出力*/ void output () { FILE *fp; int i; fp = fopen ("out.txt","w"); for (i=0;i<N;i++){ fprintf (fp,"%6d\n",a[i]); } fclose (fp); }

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3>ソート前の数字を表示させるには ソート後に for (i = 0; i < N; i++){ printf("%d\n", a[i]); } で表示していますよね だから 同じforループを qsort(ソート)の前に置けばいいですよね。

回答No.2

> int main() > { > input (); > int i; 変数宣言の前に関数呼び出しがあるので、コンパイルできてないとか? 入れ替えてビルドすれば、正常系の動作は出来るような気はします。

yoshiking
質問者

補足

すばやい返答ありがとうございます。 まだmain関数にoutputが挿入できたないので出力されませんで来たらそれについてもお願いします。

回答No.1

ご自分で何回かやってみたソースを見せていただければ、より的確なアドバイスが出来ると思います。 分からないのはファイル入出力の部分でしょうか。 それともソート処理の部分でしょうか。

yoshiking
質問者

補足

こんな感じです。そこらじゅうが間違ってると思いますが、よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #define N 10 void input (); void output (); int a[N]; int comp(const void *, const void *); int main() { input (); int i; qsort(a, (size_t)N, sizeof(int), comp); printf("\n"); for (i = 0; i < N; i++) printf("%d\n", a[i]); return 0; } int comp(const void *b, const void *c) { static int i = 1; i++; return (*(int *)b - *(int *)c); } /*ファイルからの入力*/ void input () { FILE *fp; int i; fp = fopen ("int.txt","r"); for (i=0;i<N;i++){ fscanf (fp,"%d",&a[i]); } fclose (fp); } /*ファイルへの出力*/ void output () { FILE *fp; int i; fp = fopen ("out.txt","w"); for (i=0;i<N;i++){ fprintf (fp,"%6d\n",a[i]); } fclose (fp); }

関連するQ&A

  • テキストファイルを読み込んでソートするプログラム

    英文のテキストファイルを読み込んで、単語を一行に一単語ずつ並べた後、それをアルファベット順にソートして、同じ単語を消去したテキストファイルを作るプログラミングを作りたいと思っています。 しかしテキストファイルを読み込むという命令がよくわかりません。 isalpha()などを使ってプログラム内に打ち込んだ英文を単語ごとに分けるプログラムは出来たのですが、テキストファイル(.txt)はどうやって読み込めばいいんでしょうか? プログラムはGNOMEのXEmacsで作っていて、C言語です。

  • 10個の整数を入力して小さい順にソートする

    C言語を使って、10個の整数を読み込んで小さい順にソートするプログラムを作っています。 #include<stdio.h> #include<stdlib.h> int main() { int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int i; for (i = 0; i < 9; ++i ) { printf("No. %d Please Enter!", a[i]); scanf("%d", &a[i]); } return(0); } これで、10個の整数を読み込んだ後、ソートする方法が分かりません。 どなたか教えていただけますでしょうか^^;

  • ソートプログラム

    ファイルから10個の整数が 29 45 11 2 86 91 33 62 77 59 のように一行に1個の形式で格納されている。このファイルから10個の整数を読み込み、選択法でソートし、この数字を小さい順に表示するプログラムを作成したのですが、ソート部分がうまくできません。どなたかどうすれば改善できるか教えてください。 <プログラム> #include<stdio.h> #include<stdlib.h> #define MAXN 100 int A[MAXN]; main() { _inputdata(); _selectionsort(1,10); _printdata(); } selectionsort(p,q) ___int p, q; { _int i, j, cmin, temp; _for(j = p; j <= q; j++){ __cmin = j; /* A[cmin]が現在の最小値 */ __for(i = j+1; i <= q; i++) ___if(A[cmin] > A[i]) cmin = i; __/* A[j]とA[cmin]との入れ換え操作 */ __swap(j, cmin); _} } swap(int x, int y) { _int temp; _temp = x; _x = y; _y = temp; } inputdata() { _FILE *fp; _if((fp=fopen("integers10.dat", "r"))==NULL) { __printf("ファイルが見つかりません: integers10.dat\n"); __exit(EXIT_FAILURE); _} _printf("データを入力\n"); _while(fscanf(fp, "%s", A)!=EOF) { ____printf("%s\n",A); _} _fclose(fp); } <コンパイル→実行> % gcc -o sort1 sort1.c % ./sort1 データを入力 29 45 11 2 86 91 33 62 77 59 ソート済みデータ 0 0 0 0 0 0 0 0 0 0 %

  • Sortプログラムについて2

    えっと、前回もSortのプログラムについて、質問させていただいたのですが、このプログラムでは、二つのファイルを使ってソートしてるのですが、一つのファイルだけを使って、それに上書きするためにはどうするればいいでしょうか? 下に、ソースを貼っておきます。 #include <iostream> #include <fstream> #include <list> #include <string> using namespace std; int main() { char Str[255]; list<string> str; int count = 0; ifstream in("ttest", ios::binary | ios::in); if (!in){ cout << "入力ファイルが読み込めない" << endl; exit(1); } ofstream out("out", ios::binary | ios::out); if (!out){ cout << "出力ファイルが読み込めない" << endl; exit(1); } while (!in.eof()){ //!!!! in.getline(Str,255); str.push_back(Str); count++; } str.sort(); list<string>::iterator p; p = str.begin(); while(p!=str.end()){ out << *p << endl; p++; } in.close(); out.close(); getchar(); return 0; } よろしくお願いします。

  • Sortプログラムについて

    自分で作成したプログラムなのですが、ソートしたあと、出力ファイルに書き込みたいのですが、書き込めません。 どこが、悪いのかわからないので教えてください。 ところどころに、出力がありますが、それはトレースしたやつなので、それはほっといてくださって構いません。 下にプログラムを載せます。 よろしくお願いします。 #include <iostream> #include <fstream> #include <list> #include <string> using namespace std; int main() { char Str[255]; list<string> str; ifstream in("ttest", ios::binary | ios::in); if (!in){ cout << "入力ファイルが読み込めない" << endl; exit(1); } ofstream out("out", ios::binary | ios::out); if (!out){ cout << "出力ファイルが読み込めない" << endl; exit(1); } while (!in.eof()){ //!!!! in.getline(Str,255); str.push_back(Str); } str.sort(); list<string>::iterator p; p = str.begin(); while (!in.eof()){ cout << *p; out << *p++; } in.close(); out.close(); getchar(); return 0; }

  • ソートプログラムについて

    ソートプログラムとして以下のように作成しました。 int main( ) { int i, j, temp; int ten[10] = { 98,34,67,89,99,23,54,21,10,65 }; for (i=0; i< 9; i++) { for(j=i+1; j<10; j++) { if (ten[i] < ten[j]) { temp = ten[i]; ten[i] = ten[j]; ten[j] = temp; } } } for (i = 0; i < 10; i++) { printf("SORT[%d] = %d\n",i,ten[i]); } } このプログラムを昇順で同じ数字が入力された場合、出力表示として 例: SORT[1]=99 SORT[2]=98 SORT[2]=98 SORT[3]=89 SORT[4]=70 というようにしたいのですが、プログラムをどのように 書いていけば良いのかわかりません。 例のような出力にするにはどのようにすればいいのでしょうか 教えて下さい。

  • プログラムのソート

    "英語のテキストを読みこんで、出現する文字数のカウントをする"というプログラムを作成しました。このプログラムの出力を出現頻度順(大きい順)に並べ換えたいのですが、どの位置からソートを開始して、関数をどうすればいいのかがよく解りません。どなたかご教授下さい。 ↓取り敢えず、出来たプログラムを載せておきます。 #include<stdio.h> int main(int argc,char *argv[]) { int ch; // 小文字用 int CH; // 大文字用 int a; // str[CH]+str[ch] FILE *fp; int str[128]={0}; fp = fopen(argv[1],"r"); if(fp == NULL){ printf("I can't find it. You need to write a file name ! \n"); exit(1); }else{ printf("指定されたファイル '%s' 内の各文字の個数は以下の通り. \n",argv[1]); while((ch=fgetc(fp)) != EOF){ if(ch < 128) str[ch]++; } for(ch=0; ch<128; ch++){ if(str[ch] != 0){ if(ch>=65 && ch<=90 || ch>=97 && ch<=122){ // A~Z, a~z if(ch>=97 && ch<=122){ // a~z CH = toupper(ch); // 小文字を大文字に a = str[CH]+str[ch]; printf(" (%c)%5d (%c)%5d (%c+%c)%5d \n",CH,str[CH],ch,str[ch],CH,ch,a); } } } } fclose(fp); } return 0; }

  • 何度もすいません。クイックソートのプログラムを教えてください。

    課題の丸投げです。本当にすいません。 学校の課題で、整数配列をクイックソートにより降順に並べる関数を実装したプログラムを作る。という課題で int qsort(int date[], int size)という関数が与えられていて、sizeは配列の大きさを示す。またソートが成功した場合は1を、失敗した場合は0を返値とする。ということなんですがsizeを使ってクイックソートをどうやったら良いのか分からないので教えてください。 課題の丸投げですが、すぐ返事ほしいです。 よろしくお願いします。

  • powershellでのソート

    powershellでのソート処理に関して教えてください。 list.csv F1,F2,F3 file01.txt,c:\dirA,100kb file20.txt,c:\dirC,100kb file100.txt,c:\dirG,100kb file200.txt,c:\dirG,100kb CSVで上記の様なデータがあり、F1のデータにおいて、 ファイル名の数字部分でソートしたいのですが、 意図したソートができません。 数字を考慮してのソートってどうやればよいでしょうか。 PS c:\>Get-Content .\list.csv|ConvertFrom-CSV |Sort-Object f1 F1 F2 F3 -- -- -- file01.txt c:\dirA 100kb file100.txt c:\dirG 100kb file20.txt c:\dirC 100kb file200.txt c:\dirG 100kb file01.txt→file02.txt→file100.txt→file200.txtの並びでソートさせたいです。 よろしくお願いします。

  • Java バブルソート

    テキストファイルに文字が書き込まれていて、その文をASCIIコード順に並び替えるのですがStringからintに変換してバブルソートを行えばよろしいのでしょうか 詳しくお願いいたします 1行は10文字  50行までです 別ファイルに書き込みます sample1.txt cfd cad fa sample2.txt ・・・ ・・・

専門家に質問してみよう