Настройка цикла If в цикле For

У меня есть две таблицы.

Таблица 1 = [0, 1, 2, 3, 4, 5]

Таблица 2 = [554, 543, 554, 544, 564, 553]

Все, что я пытаюсь сделать, это следующее:

(1) Я хочу взять Значение в Таблице 1, прочитать его, а затем идентифицировать его с тем же индексом в Таблице 2.

Так, например, Table1[0] = 0, и, следовательно, мы обнаружили бы, что Table2 [Table1 [0]] = 554

(2) Из заданного значения таблицы 1 я хотел бы просмотреть всю таблицу 2 и добавить значение, в котором данные сначала либо меньше, чем A = 541, либо больше, чем B = 553, и сохранить соответствующее значение соответственно в другой таблице.

Когда я читаю Таблицу 1, я начинаю с Таблицы 1 [0] = 0, затем я перехожу к этому 0 в качестве индекса для Таблицы 2 и продолжаю читать всю Таблицу 2, останавливаясь и добавляя всякий раз, когда значения в Таблице 2 равны B.

Например, начиная с Таблицы 1[1] = 1 -> я затем продолжу считывать все значения, следующие за Таблицей 2[1]: Таблица 2[2] = 554, ... и т. Д. В этом случае первое значение после Table2[1] равно 554, что> B, поэтому я добавляю его в другую таблицу и продолжаю, следующее значение Table2[3] = 544, которое не больше B или меньше A, поэтому я игнорирую и продолжаю и т. Д.

Мой код выглядит следующим образом, но я не уверен, что происходит не так. Я использую среду Игоря, но код в значительной степени читабелен, как C++:

Function Trial(Data1, Data2)
//Waves are just the tables that contain the data. Data1 = Table1, Data2 = Table2

Wave Data1 
Wave Data2

Variable A = 541;
Variable B = 553;
Variable i, j, k
Variable XScale, Invalid
Variable numPoints = numpnts(Data1) //Number of Points in the array 
Variable numPoints2 = numpnts(Data2)

for(i=0; i<numPoints; i+=1)
   XScale = Data1[i]
   Wave TrialCrossingA, TrialCrossingB
   Make /N=(numPoints2)/O TrialCrossingA, TrialCrossingB 
   //Makes new tables to append required values 
   for(j=Xscale; j<numPoints2; j+=1)
            If(Data2[j] <= Xa)
                TrialCrossingA[i] = XScale
            Elseif(Data2[j] >= Xb) 
                TrialCrossingB[i] = XScale
            Endif 
   endfor
endfor

End

2 ответа

Код не компилируется здесь. Переменные Xa а также Xb не определены.

Я думаю, что вы ошиблись здесь,

   for(j=Xscale; j<numPoints2; j+=1)
            If(Data2[j] <= Xa) // This is supposed to be Data2 I guess ?
                TrialCrossingA[i] = XScale
            Elseif(Data2[j] >= Xb) // This is supposed to be Data2 I guess ?
                TrialCrossingB[i] = XScale
            Endif 
   endfor
Другие вопросы по тегам