Разложить положительные и отрицательные числа по разным массивам

Задача

Случайные числа в диапазоне от -5 до 5 разложить по двум массивам: в одни помещать только положительные, во второй - только отрицательные. Числа, равные нулю, игнорировать. Вывести на экран все сгенерированные случайные числа и элементы обоих массивов.

Пояснение к задаче и алгоритм решения

  • Изначально оба массива пусты. Присвоим двум разным переменным-индексам массивов нули.
  • В цикле выполняем следующие действия.
    1. Генерируем случайное число и выводим его на экран.
    2. Если очередное число положительное, то увеличиваем индекс массива на единицу и записываем в соответствующую ячейку это число.
    3. Если же генерируется отрицательное число, то увеличиваем индекс массива отрицательных чисел и записываем в массив число.
  • В циклах от первого до последнего элемента выводим на экран содержимое массивов положительных и отрицательных чисел. Их переменные-индексы указывают на количество элементов в массивах.

Исходный код на языке программирования Pascal

const
    N = 21;
var
    b,c: array[1..N] of integer;
    num: integer;
    i, j, k: byte;
begin
    randomize;
    j := 0;
    k := 0;
    for i:=1 to N do begin
        num := random(11)-5;
        write(num:3);
        if num > 0 then begin
            j := j+1;
            b[j] := num;
        end
        else if num < 0 then begin
            k := k + 1;
            c[k] := num;            
        end;
    end;
 
    writeln;
    for i:=1 to j do write(b[i]:3);
    writeln;
    for i:=1 to k do write(c[i]:3);
    writeln;
end.

Пример(ы) выполнения программы на языке Pascal

  4 -2 -1  3 -4  5  3  0 -2 -2 -2  0  1 -5 -1  2  3 -2  5  0 -5
  4  3  5  3  1  2  3  5
 -2 -1 -4 -2 -2 -2 -5 -1 -2 -5

Исходный код на языке программирования C

#include <stdio.h>
#define N 20
main() {
    int a[N], b[N], i,j,k, n;
    srand(time(NULL));
    j = 0;
    k = 0;
    for (i=0; i<N; i++) {
        n = rand()%11 - 5;
        printf("%3d", n);
        if (n > 0) {
            a[j] = n;
            j += 1;
        } else
            if (n < 0) {
                b[k] = n;
                k += 1;
            }        
    }
    printf("\n");
    for (i=0; i<j; i++) printf("%3d", a[i]);
    printf("\n");
    for (i=0; i<k; i++) printf("%3d", b[i]);
    printf("\n");
}

Пример(ы) выполнения программы на языке C

  0 -2 -3  2 -2  5 -2  2  4 -1  2  1  5  0  2 -1 -1 -2 -4 -4
  2  5  2  4  2  1  5  2
 -2 -3 -2 -2 -1 -1 -1 -2 -4 -4

Исходный код на языке программирования Python

from random import random
a = []
b = []
for i in range(20):
    n = int(random() * 11) - 5
    print(n, end=', ')
    if n > 0:
        a.append(n)
    elif n < 0 :
        b.append(n)
print()
print(a)
print(b)

Пример(ы) выполнения программы на языке Python

-3, -5, -2, 2, -5, 5, -3, -3, 5, 2, 0, -4, 5, 1, -5, 2, -1, 5, 3, 4,
[2, 5, 5, 2, 5, 1, 2, 5, 3, 4]
[-3, -5, -2, -5, -3, -3, -4, -5, -1]

Особенности решения на языке программирования Python

На Питоне данная задача решается проще, т.к. можно опустить индексы списков и просто добавлять элементы в конец списков. Также можно вывести весь список на экран, вызвав переменную с которой он связан, а не обращаться к каждому элементу отдельно.

Исходный код на языке программирования КуМир

алг фильтрация
нач
  цел N = 10
  цел таб a[1:N], b[1:N]
  цел i, j, k, num
  j := 0
  k := 0
  нц для i от 1 до N
    num := int(rand(0,11)) - 5
    вывод num, " "
    если num > 0 то
      j := j + 1
      a[j] := num
     иначе если num < 0 то
        k := k + 1
        b[k] := num
      все
    все
  кц
  вывод нс
  нц для i от 1 до j
    вывод a[i], " "
  кц
  вывод нс
  нц для i от 1 до k
    вывод b[i], " "
  кц
кон

Пример(ы) выполнения программы на языке КуМир

2 1 3 0 5 -5 3 -4 1 0
2 1 3 5 3 1
-5 -4

Исходный код на языке программирования Basic

N = 20
dim a(N)
dim b(N)
j = 0
k = 0
for i=0 to N
        n = int(rand * 11) - 5
        print n + " ";
        if  n > 0 then
                a[j] = n
                j = j+1
        else
                if n < 0 then
                        b[k] = n
                        k = k+1
                endif
        endif
next i
print
 
for i=0 to j-1
        print a[i]+" ";
next i
print
for i=0 to k-1
        print b[i]+" ";
next i

Пример(ы) выполнения программы на языке Basic

-3 0 4 -3 3 5 4 -2 4 0 -4 2 -3 3 -2 -1 5 -5 4 -3 5
4 3 5 4 4 2 3 5 4 5
-3 -3 -2 -4 -3 -2 -1 -5 -3

Тема

Массивы

Уровень сложности

Средний

Дата публикации