学校のコンピューターサイエンスのクラスで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]あたりから混乱してしまいました。どうしてこうなるのでしょう?どなたか初心者でも分かるように説明してもらえませんか?
No.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つのデータを交換するような処理を入れるとき、計算机上ではデータを上書きする
ことでメモリの内容を変更するので、上書きされるデータを一時的に退避する必要が
あります。
こんなところになります。的外れであれば申し訳ありません。
さっそくお返事有難うございました。確かに分けて見ると分かりやすいですね。私のインストラクターはとにかくものすごい速さで授業を進め、おまけに英語なので時々「?」という感じになってしまいます。彼はテキストにそって授業をしないので、テストなどは授業中にとったノートが命という感じで、ノートをとるのに必死になってしまいますし。次のセメスターでもC++を取る予定です。日本語のC++の本も一冊くらい持っていたいと思うのですが、何か初心者でも理解しやすいお勧めの本を知っておられたら教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 英語 「名詞+for...to不定詞句」で「for以降」が完全な文となる場合の名詞との関係について 4 2023/04/26 09:45
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- 英語 Elephants are the largest land animals. 10 2022/11/24 15:56
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
S9タイプからXタイプにデータ...
-
メモ帳(テキストデータ)をExc...
-
この行は既に別のテーブルに属...
-
VBにおいてフォーム間の変数の...
-
VBA 空白セルを削除ではない方...
-
大学のゼミのレポートがムカつ...
-
エクセルで2つの時系列のデー...
-
[C言語] コメント文字列を無視...
-
VBAを使ってOutlookメール本文...
-
ユーザーフォームのテキストボ...
-
シーケンサにパソコンからアク...
-
C# でDataTableの更新を高速化...
-
EXCELVBAでSQLserverからデータ...
-
Excelのマクロでワードのテキス...
-
0が含まれる幾何平均が「#NUM!」
-
WEBサイトの構築。表示データと...
-
CString型の文字列連結について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報