Задача №14 - Вывести на экран все числа, которые не содержатся в массиве

Задачи из этого списка

Решение задачи с использованием in_array()

<?php
/*На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
Задача: вывести на экран все числа, которые не содержатся в массиве
$b = [12, 5, 17, 6, 4] */
          
// Объявление функции создания массива и заполнения его случайными числами
 
function сreateArray($N)
{
    for ( $i = 0; $i < $N; $i++ ) {
         $source[] = rand( 1, 20 ); 
    }
    return $source;   
}
 
// Объявление функции фильтрации массива случайных чисел
 
function filterateArray($source, $forbidden)
{
    for ( $i = 0; $i < count($source); $i++ ) {
        
        if (in_array($source[$i], $forbidden)) {
            return NULL;
        } else {
            echo $source[$i]." "; 
        }
     
    }
}

$restrictedNumbers = [12, 5, 17, 6, 4]; // Массив чисел, которые не должны выводиться на экран
$sourceArray = сreateArray(10); // Вызов функции создания массива случайных чисел
filterateArray($sourceArray, $restrictedNumbers);   // Вызов функции вывода на экран чисел, которые не содержатся в массиве 
?>

Key Words for FKN + antitotal forum (CS VSU):

melisa's picture

  1. $source[] = rand( 1, 20 );

    $source - неудачное название. Внутри области видимости функции createArray() нет ограничивающего массива вообще. Внутри функции существует только 1 массив, и непонятно, почему он называется "исходный".

Pavel1989's picture

Решение с использованием функции in_array()

<?php
/*На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
Задача: вывести на экран все числа, которые не содержатся в массиве
$b = [12, 5, 17, 6, 4] */
          
// Объявление функции создания массива и заполнения его случайными числами
 
function сreateArray($N)
{
    for ( $i = 0; $i < $N; $i++ ) {
         $array[] = rand( 1, 20 ); 
    }
    return $array;   
}
 
// Объявление функции фильтрации массива
 
function filterateArray($array, $forbidden)
{
    for ( $i = 0; $i < count($array); $i++ ) {
        
        if (in_array($array[$i], $forbidden)) {
            return NULL;
        } else {
            echo $array[$i]." "; 
        }
     
    }
}

$restrictedNumbers = [12, 5, 17, 6, 4]; // Массив чисел, которые не должны выводиться на экран
$sourceArray = сreateArray(10); // Вызов функции создания массива случайных чисел
filterateArray($sourceArray, $restrictedNumbers);   // Вызов функции вывода на экран чисел, которые не содержатся в массиве 
?>
Pavel1989's picture

<?php
/*На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
Задача: вывести на экран все числа, которые не содержатся в массиве
$b = [12, 5, 17, 6, 4] */
          
// Объявление функции создания массива и заполнения его случайными числами
 
function сreateArray($N)
{
    for ( $i = 0; $i < $N; $i++ ) {
         $array[] = rand( 1, 20 ); 
    }
    return $array;   
}
 
// Объявление функции фильтрации массива

function filterateArray($array)
{
    for ( $i = 0; $i < count($array); $i++ ) {
        
        // Условие запрещающее вывод на экран чисел из массива $b = [12, 5, 17, 6, 4]
        
        if ($array[$i] != 12 && $array[$i] != 5 && $array[$i] != 17 && $array[$i] != 6 && $array[$i] != 4 ) {
            echo $array[$i]." "; 
        } else {
            return null;     
        }    
    }
}
                      
$sourceArray = сreateArray(10); // Вызов функции создания массива случайных чисел
filterateArray($sourceArray);   // Вызов функции вывода на экран чисел, которые не содержатся в массиве   
?>
melisa's picture

  1. В вашем коде происходит выход из функции после первого попавшегося числа из "запрещённых". А значит, остальные незапрещённые числа выведены не будут. Добавьте вывод на экран созданного вами массива и массива запрещённый чисел перед выводом результата функции: так вам будет удобно отслеживать, корректен ли результат.
  2. if ($array[$i] != 12 && $array[$i] != 5 && $array[$i] != 17 && $array[$i] != 6 && $array[$i] != 4 ) {}

    В целом верно, но более красивое решение можно написать с помощью оператора switch. Это стандартное решение, когда у вас много условий.

Pavel1989's picture

<?php
/*На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
Задача: вывести на экран все числа, которые не содержатся в массиве
$b = [12, 5, 17, 6, 4] */
          
// Объявление функции создания массива и заполнения его случайными числами
 
function сreateArray($N)
{
    for ( $i = 0; $i < $N; $i++ ) {
         $array[] = rand( 1, 20 ); 
    }
    return $array;   
}
 
// Объявление функции фильтрации массива
 
function filterateArray($array, $forbidden)
{
    for ( $i = 0; $i < count($array); $i++ ) {
        
        if (in_array($array[$i], $forbidden)) {
            echo NULL;
        } else {
            echo $array[$i]." "; 
        }
    }
}

$restrictedNumbers = [12, 5, 17, 6, 4]; // Массив чисел, которые не должны выводиться на экран
$sourceArray = сreateArray(10); // Вызов функции создания массива случайных чисел
filterateArray($sourceArray, $restrictedNumbers);   // Вызов функции вывода на экран чисел, которые не содержатся в массиве 
?>
Pavel1989's picture

<?php
/*На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
Задача: вывести на экран все числа, которые не содержатся в массиве
$b = [12, 5, 17, 6, 4] */
          
// Объявление функции создания массива и заполнения его случайными числами
 
function сreateArray($N)
{
    for ( $i = 0; $i < $N; $i++ ) {
         $array[] = rand( 1, 20 ); 
    }
    return $array;   
}
 
// Объявление функции фильтрации массива

function filterateArray($array)
{
    for ($i = 0; $i < count($array); $i++ ) {
         
         switch ($array[$i]) {
             case 12:
                echo null;
                break;
             case 5:
                echo null;
                break;
             case 17:
                echo null;
                break;
             case 6:
                echo null;
                break;
             case 4:
                echo null;
                break;    
             default:
                echo $array[$i]." ";        
        }
    }
}
                      
$sourceArray = сreateArray(10); // Вызов функции создания массива случайных чисел
filterateArray($sourceArray);   // Вызов функции вывода на экран чисел, которые не содержатся в массиве  
?>
melisa's picture

  1. echo null;

    бесполезная строка

  2. break;

    почитайте здесь, какие варианты switch могут быть. возможно, без некоторых break можно обойтись

Pavel1989's picture

<?php
/*На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
Задача: вывести на экран все числа, которые не содержатся в массиве
$b = [12, 5, 17, 6, 4] */
          
// Объявление функции создания массива и заполнения его случайными числами
 
function сreateArray($N)
{
    for ( $i = 0; $i < $N; $i++ ) {
         $array[] = rand( 1, 20 ); 
    }
    return $array;   
}
 
// Объявление функции фильтрации массива

function filterateArray($array)
{
    for ($i = 0; $i < count($array); $i++ ) {
         
        switch ($array[$i]) {
            case 12:
            case 5:
            case 17:
            case 6:
            case 4:
               break;
            default:
               echo $array[$i]." "; 
        }           
    }
}                      
$sourceArray = сreateArray(10); // Вызов функции создания массива случайных чисел
filterateArray($sourceArray);   // Вызов функции вывода на экран чисел, которые не содержатся в массиве  
?>
melisa's picture

принято