1

タスクは次のとおりです。

  • 2つの配列A(数値浮動小数点型)Bがあり、文字配列です。A には乱数が入力されます。
  • B配列A[i]の i 番目の文字に関連付けられている i 番目の値を とします。つまり、すべての一意の Ai が一意の Bi にマップまたは関連付けられます。したがって、類似の Ai が存在する場合、それらのそれぞれは、B から順番に同じ文字に関連付けられます。
  • 現在、New_AA の乱数とはわずかに異なるか、まったく同じ数がいくつかある可能性がある乱数によって設定される新しい配列があります。タスクは、次の仮定に基づいて文字配列 New_B を作成することです。
  • 最小のユークリッド距離、または と の間の任意のNew_A[j]尺度A[i]New_A[j]見つけA[i] >=New_A[j]ますNew_A[i] >= A[j]。条件が保持される最小small_Aのインデックス j を示すとします。A[j]
  • たとえば、A[2] に関連付けられた文字が「d」で、A[2] の値が 12.1、New_A[7] の値が 11.9 であるとします。A[2]> New_A[7],New_A[7] は、文字 'd' である A[2] に最初に関連付けられた文字にマップ/関連付けされるためです。この条件が満たされない残りの部分は変更されません。したがって、全体的な効果/目的は、New_A および A に従って、文字配列 B のバリエーションを新しい文字配列 New_B に作成することです。

今、これは私が立ち往生しているところです。最小のユークリッド値を見つける方法と、条件に従って B の文字を割り当てる方法。さらに、配列のデータ型が異なるため、関連付けはどのように行われますか。2D 配列の使用は単なる当て推量であり、私が正しいという保証はありません。

float A[10];
char B[10] = {'c','d','e','f','g','h','i','j','k','l'} ; 

for (i = 1; i <= 10; i++) {
  Val_A[i] = rand(); 
  Val_New[i] = rand();
  A[i] = Val_A[i]; 
  New_A[i][j] = Val_New[i]; 
}

max1 = New_A[0];
index1 = 0; 
for (i = 1; i < 10; i++) {
  if (A[i] > max1)
    extract_char = B[i];  
  New_A[i][j] = extract_char;  
  //assigning corresponding character to New_A, which was assigned earlier to A   
  index1 = i;
}
4

1 に答える 1

0

まず第一に、スカラーのユークリッド距離は、fabs(ab) のように「差の絶対値」を表現するための凝った方法です。

New_A の各要素 "i" について:

  1. 最小のユークリッド距離を持つ、A 内の "minA" でインデックス付けされた要素を ind
  2. New_B[i]をB[minA]に設定

最初のステップ 1:

int findminA(float A[], int sizeA, float compare)
{
  int i;
  int minA=0;
  float best=abs(a[0]-compare);
  for(i=1;i<sizeA;++i) {
    if(fabs(A[i]-compare)<best) {
       best=fabs(A[i]-compare)
       minA=i;
  }
  return i;
}

これにより、最小のユークリッド距離を持つ (A と B の) インデックスが取得されます。

于 2012-08-01T23:38:12.447 に答える