配列になったfloat型のデータに対して,中央値(メジアン)を戻り値として返す関数を作成.ただし,引数は配列ポインタ(float型)と配列個数(int型)の2種類を用いる.

Dependencies:   mbed

Committer:
RyotaNakamura
Date:
Sun Feb 26 04:09:47 2017 +0000
Revision:
0:ac4681bf247f
??????float????????????????????????????????????????????????float????????int?)?2???????; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RyotaNakamura 0:ac4681bf247f 1 /*配列になったfloat型のデータに対して,中央値(メジアン)を戻り値として返す関数を作成せよ.*/
RyotaNakamura 0:ac4681bf247f 2 /*ただし,引数は配列ポインタ(float型)と配列個数(int型)の2種類を用いよ.*/
RyotaNakamura 0:ac4681bf247f 3
RyotaNakamura 0:ac4681bf247f 4 #include "mbed.h"
RyotaNakamura 0:ac4681bf247f 5
RyotaNakamura 0:ac4681bf247f 6 Serial pc(USBTX, USBRX);
RyotaNakamura 0:ac4681bf247f 7
RyotaNakamura 0:ac4681bf247f 8 void Median(float *date,int n);
RyotaNakamura 0:ac4681bf247f 9
RyotaNakamura 0:ac4681bf247f 10 int n; //配列要素数
RyotaNakamura 0:ac4681bf247f 11 float *array; //float型のポインタ
RyotaNakamura 0:ac4681bf247f 12
RyotaNakamura 0:ac4681bf247f 13 int main(int argc, char* argv[]){
RyotaNakamura 0:ac4681bf247f 14 pc.printf("The element of array : n = ");
RyotaNakamura 0:ac4681bf247f 15 pc.scanf("%d\n",&n); //配列要素数を入力
RyotaNakamura 0:ac4681bf247f 16
RyotaNakamura 0:ac4681bf247f 17 array=new float[n]; //実数n個分の配列を確保
RyotaNakamura 0:ac4681bf247f 18
RyotaNakamura 0:ac4681bf247f 19 for(int i=0;i<n;i++){
RyotaNakamura 0:ac4681bf247f 20 pc.scanf("%f\n",&array[i]); //配列要素を入力
RyotaNakamura 0:ac4681bf247f 21 }
RyotaNakamura 0:ac4681bf247f 22
RyotaNakamura 0:ac4681bf247f 23 pc.printf("_______________\n");
RyotaNakamura 0:ac4681bf247f 24 Median(array,n); //関数へ飛ぶ
RyotaNakamura 0:ac4681bf247f 25
RyotaNakamura 0:ac4681bf247f 26 delete[] array; //配列を削除
RyotaNakamura 0:ac4681bf247f 27
RyotaNakamura 0:ac4681bf247f 28 return 0;
RyotaNakamura 0:ac4681bf247f 29 }
RyotaNakamura 0:ac4681bf247f 30
RyotaNakamura 0:ac4681bf247f 31 void Median(float *date,int n){
RyotaNakamura 0:ac4681bf247f 32 float median;
RyotaNakamura 0:ac4681bf247f 33 for(int i=0;i<n;i++){ //昇順に並び替え
RyotaNakamura 0:ac4681bf247f 34 for(int j=i+1;j<n;j++){
RyotaNakamura 0:ac4681bf247f 35 if(array[i]>array[j]){
RyotaNakamura 0:ac4681bf247f 36 float *x;
RyotaNakamura 0:ac4681bf247f 37 float *y;
RyotaNakamura 0:ac4681bf247f 38 x=&array[i];
RyotaNakamura 0:ac4681bf247f 39 y=&array[j];
RyotaNakamura 0:ac4681bf247f 40 float tmp;
RyotaNakamura 0:ac4681bf247f 41 tmp=*x;
RyotaNakamura 0:ac4681bf247f 42 *x=*y;
RyotaNakamura 0:ac4681bf247f 43 *y=tmp;
RyotaNakamura 0:ac4681bf247f 44 }
RyotaNakamura 0:ac4681bf247f 45 }
RyotaNakamura 0:ac4681bf247f 46 }
RyotaNakamura 0:ac4681bf247f 47
RyotaNakamura 0:ac4681bf247f 48 for(int i=0;i<n;i++) //並び替えた結果の出力
RyotaNakamura 0:ac4681bf247f 49 pc.printf("%f\n",array[i]);
RyotaNakamura 0:ac4681bf247f 50
RyotaNakamura 0:ac4681bf247f 51 if(n % 2==0){ //配列要素数が偶数のとき
RyotaNakamura 0:ac4681bf247f 52 median=(array[n/2]+array[n/2-1])/2;
RyotaNakamura 0:ac4681bf247f 53 pc.printf("Median= %f\n",median);
RyotaNakamura 0:ac4681bf247f 54 }else{ //配列要素数が奇数のとき
RyotaNakamura 0:ac4681bf247f 55 median=array[(n-1)/2];
RyotaNakamura 0:ac4681bf247f 56 pc.printf("Median= %f\n",median);
RyotaNakamura 0:ac4681bf247f 57 }
RyotaNakamura 0:ac4681bf247f 58 }