プロが教える店舗&オフィスのセキュリティ対策術

学校のコンピューターサイエンスのクラスでC++を使ってプログラミングを勉強し始めたばかりです。課題で、成績表をアルファベットの名前順と成績の高いもの順にSelectionSortとBubbleSortを使ってプログラミングを書きなさいというのがでました。成績順の方はインストラクターがプログラミングを書いて、それを参考に名前順をBubbleSortを使って書いてくるというのが課題です。
void SelectionSort(Str names[ ],int grades[ ],int count)
{
int i, j, largest, tmp;
Str tmpName;
for(i=0; i<count-1; i++)
{
largest=i;
for(j=i+1; j<count-1; j++)
if(grades[j]>grades[largest]) largest=j;
tmp=gramdes[i];
strcpy(tmpName, names[i]);
grades[i]=grades[largest]);
strcpy(names[i],names[largest]);
grades[largest]=tmp;
strcpy(names[i],tmpName);
}
}
というのが成績順のプログラミングですが、どうもtmp=grades[i]あたりから混乱してしまいました。どうしてこうなるのでしょう?どなたか初心者でも分かるように説明してもらえませんか?

A 回答 (1件)

インデントをつけて、ちょっと内容がおかしい箇所を修正すると


次のようになると思います。

void SelectionSort(Str names[ ],int grades[ ],int count)
{
 int i, j, largest, tmp;
 Str tmpName;
 for(i=0; i<count-1; i++)
 {
  largest=i;
  for(j=i+1; j<count; j++)
   if(grades[j]>grades[largest]) largest=j;
  // 番号iのデータを一時的に保持する
  tmp=gramdes[i];
  strcpy(tmpName, names[i]);
  // 最大と判定された位置に番号iの位置にあるデータをコピーする
  grades[i]=grades[largest];
  strcpy(names[i],names[largest]);
  // 一時的に保持したデータを先に最大と判定された位置にコピーする
  grades[largest]=tmp;
  strcpy(names[largest],tmpName);
 }
}

コメントをつけた箇所は、位置iと、最大と判定した位置(largest)のそれぞれの
データを入れ替える処理になります。

2つの変数の内容を同じタイミングで処理するようになっているので混乱するのかも
しれません。
それぞれ分けてみると、わかりやすいです。

tmp=gramdes[i];
grades[i]=grades[largest];
grades[largest]=tmp;

2つのデータを交換するような処理を入れるとき、計算机上ではデータを上書きする
ことでメモリの内容を変更するので、上書きされるデータを一時的に退避する必要が
あります。

こんなところになります。的外れであれば申し訳ありません。
    • good
    • 0
この回答へのお礼

さっそくお返事有難うございました。確かに分けて見ると分かりやすいですね。私のインストラクターはとにかくものすごい速さで授業を進め、おまけに英語なので時々「?」という感じになってしまいます。彼はテキストにそって授業をしないので、テストなどは授業中にとったノートが命という感じで、ノートをとるのに必死になってしまいますし。次のセメスターでもC++を取る予定です。日本語のC++の本も一冊くらい持っていたいと思うのですが、何か初心者でも理解しやすいお勧めの本を知っておられたら教えてください。

お礼日時:2002/12/09 22:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!