数字データを高い順に番号を付けて並び替え
Posted: 2012年7月13日(金) 22:25
初めて利用させて頂きます。
大学の授業中に出た課題で、内容も基礎中の基礎になります。
参考書を読んで自分なりにやってみたのですが、
難しく考えすぎて何から修正すればいいのかよく分からない状態なので、宜しくお願いします。
課題の内容は、
「ファイル(suuzi.txtにしています)に保存している数字のデータを一次元配列に読み込み、
点数の高い順番に番号を割り付けて出力せよ」と言った、読み込みデータのソートになります。
(出力結果の例) ※左:番号 右:数字データ(中身は「140 87 32 45 54」にしています)
1 140
2 87
3 54
4 45
5 32
6 87
課題として載せられていたプログラムコードは下記になります。
以上がプログラムコードになります。
「//この部分を埋めよ//」と書かれている部分に
配列データ内の数字を高い順に並び替える処理を追加する所は分かっているのですが
並び替えた際に数字の横に番号も同時に付けないといけないらしいので
それを並び替えの処理にどう組み込めばいいのかで、悩んでいます。
今現在は番号の割り振りだけ行っている状態で、
その部分のコードがこちらになります。
この状態で起動させると、番号は無事に振り分けられたのですが
並び替えの処理をまったく組み込んでいないので、数字データは高い順に並びませんでした。
並び替えに関する処理が書いてあるページもいくつか参考にさせて頂いたのですが
関数がどのように動いているのかが分からず、完全に手が詰まってしまいました…。
OSはVistaを使用しており、Visual Vasic stdio2003のC++を使用しています。
プログラミング知識は、まだif文,for文、While文などが使える程度しかありません。
一次元配列に関しても本格的に使用されている課題は今回が初めてです。
現状では、番号を組み込む処理に並び替えをどう組み込めばいいのか悩んでいる状態です。
基礎的な事で申し訳ありませんが、宜しければご回答をお願いします。
大学の授業中に出た課題で、内容も基礎中の基礎になります。
参考書を読んで自分なりにやってみたのですが、
難しく考えすぎて何から修正すればいいのかよく分からない状態なので、宜しくお願いします。
課題の内容は、
「ファイル(suuzi.txtにしています)に保存している数字のデータを一次元配列に読み込み、
点数の高い順番に番号を割り付けて出力せよ」と言った、読み込みデータのソートになります。
(出力結果の例) ※左:番号 右:数字データ(中身は「140 87 32 45 54」にしています)
1 140
2 87
3 54
4 45
5 32
6 87
課題として載せられていたプログラムコードは下記になります。
#include <stdio.h>
#include <stdlib.h>
int input_file(int a[]);
void main(void)
{
int i,N;
int a[10];
N=input_file(a);
for(i=0; i<=N; i++)
//この部分を埋めよ//
}
/*関数の定義 */
int input_file(int a[])
{
char FileName[20];
int i,j,N;
FILE *fp;
printf("FILE NAME?");
scanf("%s", FileName);
printf("File Name is = %s\n", FileName);
if((fp=fopen(FileName, "r")) ==NULL)
{
printf("Cant't open file \n");
exit(1);
}
i=0;
while(fscanf(fp, "%d", &a[i]) != EOF){
i++;
}
N=i-1;
fclose(fp);
return(N);
}
「//この部分を埋めよ//」と書かれている部分に
配列データ内の数字を高い順に並び替える処理を追加する所は分かっているのですが
並び替えた際に数字の横に番号も同時に付けないといけないらしいので
それを並び替えの処理にどう組み込めばいいのかで、悩んでいます。
今現在は番号の割り振りだけ行っている状態で、
その部分のコードがこちらになります。
int j,w; //追加
printf("点数の高い順に表示\n");
for(i=0; i<=N-1; i++){
printf("%d %d\n",i,a[i]);
for(j=i+1; j<=N; j++){
if(a[i] > a[j]){
w = a[i];
a[i] = a[j];
a[j] = w;
}
}
並び替えの処理をまったく組み込んでいないので、数字データは高い順に並びませんでした。
並び替えに関する処理が書いてあるページもいくつか参考にさせて頂いたのですが
関数がどのように動いているのかが分からず、完全に手が詰まってしまいました…。
OSはVistaを使用しており、Visual Vasic stdio2003のC++を使用しています。
プログラミング知識は、まだif文,for文、While文などが使える程度しかありません。
一次元配列に関しても本格的に使用されている課題は今回が初めてです。
現状では、番号を組み込む処理に並び替えをどう組み込めばいいのか悩んでいる状態です。
基礎的な事で申し訳ありませんが、宜しければご回答をお願いします。