Заполните массив случайным образом нулями и единицами так, чтобы количество единиц было больше количества нулей на языке Pascal
Мы используем cookie-файлы, чтобы получить статистику, которая помогает нам улучшить сервис для Вас с целью персонализации сервисов и предложений. Вы можете прочитать подробнее о cookie-файлах или изменить настройки браузера. Продолжая пользоваться сайтом без изменения настроек, вы даёте согласие на использование ваших cookie-файлов.
speech bubble

Заполните массив случайным образом нулями и единицами так, чтобы количество единиц было больше количества нулей на языке Pascal

Заполните массив случайным образом нулями и единицами так, чтобы количество единиц было больше количества нулей

 

Задание: Pascal. Заполните массив случайным образом нулями и единицами так, чтобы количество единиц было больше количества нулей

 

1 способ решения 

Заполнить массив чуть меньше половины нулями и перемешать

Дано:

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

N - количество элементов в массиве

randomize - используется в Паскаль для включения генератора случайных чисел с помощью random()

returnArray - тип данных массива

arrayBinary  - массив

arrayFill(): returnArray - функция, заполняющая массив единицами. Возвращает обратно массив.

arrayFillZero(var a: returnArray): returnArray - функция, заполняющая массив меньше половины нулями. Возвращает обратно массив.

nNew - максимальное количество допустимых нулей в arrayBinary.

Решение:

program shuffleArrayBinary;
CONST 
    N = 15;
type 
    returnArray = array [1..N] of integer;
var 
    arrayBinary: returnArray;
    i: integer;

function arrayFill(): returnArray;
var
  i: integer;
  a: returnArray;
begin
  for i := 1 to N do 
    a[i] := 1;
  arrayFill :=a;        
end;

function arrayFillZero(var a: returnArray): returnArray;
var
  i: integer;
  nNew: integer;
begin
  nNew := round(N/2) - 1;       
  for i := 1 to nNew do 
    a[i] := 0;
  arrayFillZero :=a;        
end;

function shuffleArray(var a: returnArray): returnArray;
var
  i, index, temp: integer;
begin
  for i := N downto 1 do 
    begin
        index:= random(i) + 1;
        temp:= a[index];
        a[index]:= a[i];
        a[i]:= temp;
    end;
  shuffleArray :=a;        
end;

begin
  randomize;  
  arrayBinary:= arrayFill(); //Заполнение массива единицами
  arrayBinary:= arrayFillZero(arrayBinary); //Заполнение массива нулями
  arrayBinary:= shuffleArray(arrayBinary); //Перемешивание массива случайным образом
  
  for i := 1 to N do //Вывод массива
     write(arrayBinary[i], ' ');
end.

Результат:

1 0 1 0 0 1 0 1 1 0 1 0 0 1 1 

 

2 способ решения 

Заполнить массив единицами и случайным образом на каждой ячейке массива(либо через одну) расставлять нули. Если количество нулей равно количеству единиц -1, то цикл завершается

Дано:

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

N - количество элементов в массиве

returnArray - тип данных массива

randomize - используется в Паскаль для включения генератора случайных чисел с помощью random()

round - округление числа в большую сторону до целого числа

arrayBinary  - массив

arrayFill(): returnArray - функция, заполняющая массив единицами. Возвращает обратно массив.

arrayFillZero(var a: returnArray): returnArray - функция, заполняющая массив нулями. Возвращает обратно массив.

nNew - максимальное количество допустимых нулей в arrayBinary.

nReal - реальное количество нулей в arrayBinary.

Решение:

program shuffleArrayBinary;
CONST 
    N = 15;
type 
    returnArray = array [1..N] of integer;
var 
    arrayBinary: returnArray;
    i: integer;

function arrayFill(): returnArray;
var
  i: integer;
  a: returnArray;
begin
  for i := 1 to N do 
    a[i] := 1;
  arrayFill :=a;        
end;

function arrayFillZero(var a: returnArray): returnArray;
var
  i: integer;
  nNew: integer;
  nReal: integer;
begin
  nNew := round(N/2) - 1;   
  nReal := 0;
  for i := 1 to N do 
    begin
        a[i] := random(2);
        if a[i]=0 then
            nReal := nReal + 1;
        if nReal=nNew then
            break;
    end;
  arrayFillZero :=a;        
end;


begin
  randomize;  
  arrayBinary:= arrayFill(); //Заполнение массива единицами
  arrayBinary:= arrayFillZero(arrayBinary); //Заполнение массива нулями

  for i := 1 to N do
     write(arrayBinary[i], ' ');
end.

Результат:

1 1 0 1 1 1 1 0 0 0 1 0 0 0 1

 

3 способ решения

Заполнить случайно массив единицами и нулями. В случае превышения нулей, расставить недостающие единицы

Дано:

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

N - количество элементов в массиве

returnArray - тип данных массива

randomize - используется в Паскаль для включения генератора случайных чисел с помощью random()

round - округление числа в большую сторону до целого числа

arrayBinary  - массив

arrayFill(): returnArray - функция, заполняющая массив единицами и нулями случайным образом. Возвращает обратно массив.

nNew - максимальное количество допустимых нулей в arrayBinary.

nReal - реальное количество нулей в arrayBinary.

rand - случайное число от 0 до 1 включительно.

Решение:

program shuffleArrayBinary;
CONST 
    N = 15;
type 
    returnArray = array [1..N] of integer;
var 
    arrayBinary: returnArray;
    i: integer;

function arrayFill(var a: returnArray): returnArray;
var
  i: integer;
  nNew: integer;
  nReal: integer;
  rand: integer;
begin
  nNew := round(N/2) - 1;   
  nReal := 0;
  rand := 0;
  for i := 1 to N do 
    begin
        if nReal>=nNew then
            rand := 1
        else
            rand:=random(2);
        a[i] := rand;
        if rand=0 then
            nReal := nReal + 1;
    end;
  arrayFill :=a;        
end;


begin
  randomize;  
  arrayBinary:= arrayFill(arrayBinary); //Заполнение массива единицами и нулями

  for i := 1 to N do
     write(arrayBinary[i], ' ');
end.

Результат:

1 0 1 0 1 0 0 0 1 1 1 0 1 1 1

 

Для комментирования необходимо авторизоваться