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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

Q&A

6回答

5447閲覧

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

kotarow1111

総合スコア8

C

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

0グッド

0クリップ

投稿2016/04/06 06:14

編集2016/04/06 06:26

一つの配列を並び替えた時、もう一つの配列もそれに対応して並び変える方法はありませんか。
例えば、一週間の体重を記録するとします。
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文を使っています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

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

struct record { int day; int weight; };

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

投稿2016/04/06 06:38

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

c

1 2struct record { 3 int day; 4 int weight; 5 int height; 6 int pulse; 7}; 8 9// 構造体の初期化は下記のようにできます。 10struct record rec[5] = { { 3, 56, 170.2, 54.3 }. 11 { 5, 54, 170.1, 52.8 }. 12 { /* 略 */ }. 13 { /* 略 */ }. 14 { /* 略 */ } }; 15 16// 日付を取得するときは下記のようにします。 17printf(%d \n”, rec[0].day ); 18

投稿2016/04/06 07:15

編集2016/04/07 01:08
Odacchi

総合スコア907

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

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

投稿2016/04/06 06:21

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/04/11 07:39

daishi38

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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 を埋めていく。

投稿2016/04/06 14:47

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/04/06 07:06

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問