Выбор элементов массива

Задача

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

Решение

 

Алгоритм решения задачи: 

Допустим, у нас будет исходный массив из 50 элементов, значения которых формируются функцией random и лежат в диапазоне от -50 до 49 включительно. Условием, при котором значения одного массива должны быть скопированы в другой, будет попадание значения в диапазон от -5 до 5 включительно.

Программа на языке Паскаль: 

 

const
    m = 50;
 
type
    arr = array[1..m] of shortint;
 
var
    arr1, arr2: arr;
    k, i: byte;
 
begin
    randomize;
 
    writeln ('Исходный массив: ');
    for i := 1 to m do begin
        arr1[i] := random(100)-50;
        write (arr1[i]:4);
    end;
    writeln; writeln;
 
    k := 0;
 
    for i := 1 to m do
        if (arr1[i] >= -5) and (arr1[i] <= 5) then begin
            k := k + 1;
            arr2[k] := arr1[i];
        end;
 
    write ('Отфильтрованный массив: ');
    for i := 1 to k do
        write (arr2[i]:3);
 
    writeln;
    writeln ('Количество элементов: ', k);
 
readln
end.

 

Примечания: 

В переменной k хранится количество элементов второго массива, а также она используется при занесении очередного удовлетворяющего условию элемента в массив.

 

Тема

Одномерные массивы

Уровень

Комбинированные задачи

Комментарии

более компактный вариант )

uses crt;
var
mas,h:array[1..50] of integer;
i,n,k:integer;
begin
randomize;
k:=0;
n:=50;
for i:=1 to n do begin
    mas[i]:=random(100)-50;
end;
for i:=1 to n do begin
    if (mas[i]<=5) and (mas[i]>=-5) then
    begin
    k:=k+1;
    h[k]:=mas[i];
    end;
end;
writeln('filtr massiv = ');
    for i:=1 to k do
        write(h[i]:4);
writeln;
writeln('kol-vo =',k);
readln;
end.