Cプログラミングに関して質問します。
この問題で中央値を出力するプログラムは作成できたのですが、配列の初期配置とソート結果も出力するプログラムはどうなりますか。
問題文 : 以下の配列をソートして中央値を求めるプログラムを作成せよ。
int a[21] = {25, 19, 46, 9, 20, 18, 39, 63, 4, 29, 3, 19, 23, 62, 57, 13, 23, 58, 24, 2, 29};
その他制限など : 宣言時に初期化してよい(scanfしなくてよい)
以下のような内容を画面に出力する
1. 初期配置
2. ソート結果
3. 中央値
以下、中央値を求めるプログラム
#include <stdio.h>
#include <string.h>
#define DATA_NUM 21 // データ数
#define MAX_DATA 63 // データの最大値
int main()
{
// 変数定義
int data[DATA_NUM] = {25, 19, 46, 9, 20, 18, 39, 63, 4, 29, 3, 19, 23, 62, 57, 13, 23, 58, 24, 2, 29};
int i, j, tmp;
double med; // 中央値
// 変数の初期化
i = 0;
j = 0;
tmp = 0;
med = 0;
//データを大きさの順に並べ替え
for(i = 1; i < DATA_NUM; i++)
{
for(j = 0; j < DATA_NUM - i; j++)
{
if(data[j] > data[j + 1])
{
tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
}
// メジアンを求める
if(DATA_NUM % 2 == 1) // データ数が奇数個の場合
{
med = data[(DATA_NUM - 1) / 2]; // 中央値
}
else // データ数が偶数の場合
{
med = (data[(DATA_NUM / 2) - 1] + data[DATA_NUM / 2]) / 2.0; // 中央値
}
printf("中央値は %0.2f\n", med);
return 0;
}
お礼
for(i = 0; i < COUNT; i++) { for(j = 0; j < THREAD; i++) pthread_create(&handle[i], NULL, (void *)thread_func, NULL); for(j = 0; j < THREAD; i++) pthread_join(handle[i], NULL); を for(i = 0; i < COUNT; i++) { for(j = 0; j < THREAD; j++) pthread_create(&handle[j], NULL, (void *)thread_func, NULL); for(j = 0; j < THREAD; j++) pthread_join(handle[j], NULL); に直したら動きました。 しょうもないミスでした・・・。 今後はこんなミスをしないようにと思います。 ご回答ありがとうございました。