質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • C

    3821questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

二つの配列を対応(?)させたい。(C言語)

受付中

回答 6

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,119

kotarow1111

score 2

一つの配列を並び替えた時、もう一つの配列もそれに対応して並び変える方法はありませんか。
例えば、一週間の体重を記録するとします。
int day[7]={3,5,4,2,6,1,7};
int weight[7]={56,54,58,52,53,60,50};
dayは何日目かを表し、weight[i]がday[i]の体重を表しているとして、
dayを昇順に並べ替えた時、それに対応してweightも並べ替えたいです。
どうすればよいでしょうか。知恵を拝借したいです。

昇順の並べ替えはfor文を使っています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+5

day[], weight[] という別々の配列を作るというやり方があまりC言語的でありません。

struct record {
  int day;
  int weight;
};


という構造体を作り、この構造体の配列をソートする(dayを基準に)というのがC言語でのやり方になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

先の方が解答されている内容どちらも正しいと思います。
ただ、一般的にはyubaさんの解答が保守性、拡張性、可読性といった点でベターだとはおもいます。
(そして、オブジェクト指向言語っぽい考え方も身につきます)

考え方としては、下記のような違いがあります。
・日付の配列、体重の配列をそれぞれ用意し、日付の配列のソートに合わせて体重の配列をソートする。
・1つのレコード(日付、体重)を配列に格納し、日付でソートする。

後者であれば、レコードに身長や、脈拍なども追加したい。。。といったときに改修が簡単です。
ソートを意識しなくても、レコードに追加すれば、自動的にソートされるからです。

struct record {
  int day;
  int weight;
  int height;
  int pulse;
};

// 構造体の初期化は下記のようにできます。
struct record  rec[5] = { { 3, 56, 170.2, 54.3 }.
                          { 5, 54, 170.1, 52.8 }.
                          { /*  略  */ }.
                          { /*  略  */ }.
                          { /*  略  */ } };

// 日付を取得するときは下記のようにします。
printf(“%d \n”, rec[0].day );

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

こんにちは。

単純には、dayを並び替える時にdayに施すのと同じ操作をweightにも施します。
例えば、day[5]とday[3]を入れ替えて、先頭に1を持ってくる時、一緒にweight[5]とweight[3]も入れ替えるということです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

/* スタンダードなのは出てるようなので… */
int idx[7]={0,1,2,3,4,5,6};
こんなのを用意して、ソート結果はこいつに反映させます。
で、dayやweightを参照する際はidxを介しておこなう、と。
メリットは配列(dayやweight)の入れ替えが発生しないとこ。
デメリットは処理がちょぃと複雑になるってとこでしょか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

質問文の状況なら、"ソートをする必要は無い" と思います。
day の配列と wieght の配列から、次の配列をつくることにするのです。
  dayWeigt の配列 
  (配列の添字を日付けにして、値を体重にする。体重の記録がなければ 値は -1 などとする。)

問題文のデータからなら次の配列を生成します。
dayWeight[0] = -1
dayWeight[1] = 60
dayWeight[2] = 52
dayWeight[3] = 56
dayWeight[4] = 58
dayWeight[5] = 54
dayWeight[6] = 53
dayWeight[7] = 50
dayWeight[8] = -1
....

作成方法例:
* dayWeight としてサイズ 31 の配列を用意して、全部の要素の値を -1 に初期設定する。
* for ループで dayWeight を埋めていく。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

同じfor文の中で処理をかけばイイのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • C

    3821questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。