![]() ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Преобразование одних массивов в другиеЗадачи этого типа тесно связаны с задачами выборок и суть их легко понять из рассмотрения соответствующих примеров. Пример 5.3. Пусть rsbi – рейтинговая сумма балов i–го студента за 1–й этап обучения (i=1..n). Студенты, набравшие сумму балов, не менее некоторой контрольной ks, образуют элитную группу и могут быть переведены на 2–й этап обучения. Допустим требуется проанализировать средние показатели успеваемости элитной и остальной групп по отдельности. Это означает, что общий массив rsb необходимо разделить на 2 массива rse и rso, отобрав в первый из них суммы балов program Rejting; Const n=150; ks=4800; Type mas= array [1..n] of integer; Var rsb,rse,rso:mas;i,j,k:integer; Begin { ввод массива rsb } j:=0; k:=0; for i:=1 to n do Begin if rsb[i]>=ks then Begin j:=j+1; rse[j]:=rsb[i]; End Else Begin k:=k+1; rso[k]:=rsb[i]; end; end; writeln(' Элитный массив '); for i:=1 to j do write(rse[i]:8); writeln; writeln(' Остальной массив'); for i:=1 to k do write(rso[i]:8); end. Рассмотрим аналогичный пример с двумерным массивом. Пример 5.4. В матрице А(10х10) выбрать числа больше 8 и меньше 2 и сформировать из них два одномерных массива – вектора B и C. Ниже приводится фрагмент программы в котором исходная пробная матрица формируется с помощью функции Random (см. раздел 2.2).Единственное, что требует пояснения в данном случае. это заказ количества элементов в описании формируемых массивов B и C. Оно, очевидно, должно указываться как и в предыдущем примере с "запасом", на случай, если все элементы матрицы попадут в один или другой массив B или C, т.е. должно быть равно 100. program MatrVec; Type vec= array [1..100] of real; Var a: array [1..10,1..10] of real; b,c:vec; i,j,k,l:integer; Begin writeln(' Исходная матрица '); for i:=1 to 10 do Begin for j:=1 to 10 do Begin a[i,j]:=9.999*Random; write(a[i,j]:5:2); end; writeln; end; k:=0; i:=0; for i:=1 to 10 do Begin for j:=1 to 10 do Begin if a[i,j]>8 then Begin k:=k+1; b[k]:=a[i,j]; End else if a[i,j]<2 then Begin l:=l+1; c[l]:=a[i,j]; End; end; end; writeln(' Вектор B '); for i:=1 to k do write(b[i]:5:2); writeln(' Вектор C'); for i:=1 to l do write(c[i]:5:2); end. К задачам преобразования массивов относятся и задачи слияния нескольких однородных массивов в один. Пример 5.5. Пусть, например, в эксперименте выполнено 3 серии измерений некоторой величины X. При этом в первой серии выполнено 25 измерений, во второй 30 и в третьей 15. Иными словами, получено 3 массива данных: X1 (i=1..25); X2 (i=1..30) и X3 (i=1..15). Требуется объединить три массива в один общий массив X, расположив в нем сначала элементы массива X1, затем X2, затем X3 и обеспечив общую сквозную нумерацию элементов массива X (i=1..70). В этом случае, очевидно, 25 первых элементов массива X совпадут с одноименными элементами массива X1, то есть перенумеровка элементов массива X1 в элементы массива X будет выполняться по формуле Xi = X1i (i=1..25). Затем первый элемент массива X2 должен стать 26–м элементом массива X и т.д. То есть каждый i–й элемент массива X2 должен переименоваться в 25+i –й элемент массива X. Иными словами, перенумеровка элементов массива X2 в элементы массива X должна выполняться по формуле X25+i= X2i (i=1..30). В конце этого цикла очевидно получим X55 = X230. Далее, первый элемент массива X3 должен стать 56–м элементом массива X и, рассуждая аналогично предыдущему, получим, что перенумеровка элементов массива X3 в элементы массива X должна выполняться по формуле X55+i = X3i (i=1..15). Соответствующий фрагмент программы слияния массивов, реализующий данный алгоритм представлен ниже. Отметим, что в данном случае описания всех четырех массивов целесообразно выполнить в разделе Type, заказав для каждого из них размер наибольшего, а именно массива X, включающего суммарное количество 70 элементов. program SliMas; Type vec= array [1..70] of real; Var X1,X2,X3,X:vec; i:integer; Begin Begin { ввод массивов X1,X2,X3 } end; Begin for i:=1 to 25 do X[i]:=X1[i]; for i:=1 to 30 do X[25+i]:=X2[i]; for i:=1 to 15 do X[55+i]:=X3[i]; end; { продолжение программы } Не нашли, что искали? Воспользуйтесь поиском:
|