Массив a вводится с клавиатуры, выводятся только нечетные элементы произвольного размера python
Обновлено: 21.11.2024
Вот простая программа под названием ArrayDemo , которая создает массив, помещает в него некоторые значения и отображает значения.
Объявление переменной для ссылки на массив
Как и объявления переменных других типов, объявление массива состоит из двух компонентов: типа массива и имени массива. Тип массива записывается type[] , где type — это тип данных элементов, содержащихся в массиве, а [] указывает, что это массив. Помните, что все элементы в массиве относятся к одному типу. В примере программы используется int[] , поэтому массив с именем anArray будет использоваться для хранения целочисленных данных. Вот объявления для массивов, содержащих другие типы данных:
Однако соглашение не одобряет эту форму, поскольку скобки определяют тип массива, поэтому они должны стоять рядом с обозначением типа, а не с именем массива.
Как и в случае объявлений переменных других типов, объявление переменной массива не создает массив и не выделяет память для хранения элементов массива. Код должен явно создать массив и присвоить его объекту anArray .
Создание массива
Вы создаете массив явным образом, используя новый оператор Java. Следующая инструкция в примере программы выделяет массив с объемом памяти, достаточным для десяти целочисленных элементов, и присваивает массив объявленной ранее переменной anArray.
Как правило, при создании массива вы используете новый оператор, плюс тип данных элементов массива, а также желаемое количество элементов, заключенное в квадратные скобки — [ и ].
Если бы новый оператор был опущен в примере программы, компилятор выдал бы ошибку, подобную следующей, и компиляция завершилась бы неудачей.
Инициализаторы массивов
Доступ к элементу массива
Теперь, когда для массива выделена память, программа присваивает значения элементам массива:
Эта часть кода показывает, что для обращения к элементу массива, чтобы либо присвоить ему значение, либо получить его значение, вы добавляете квадратные скобки к имени массива. Значение в квадратных скобках указывает (с помощью переменной или другого выражения) индекс элемента, к которому осуществляется доступ.
Получение размера массива
Будьте осторожны: у программистов, плохо знакомых с языком программирования Java, возникает искушение указать длину с пустым набором скобок. Это не работает, потому что длина не является методом. длина — это свойство, предоставляемое платформой Java для всех массивов.
Нам нужно иметь возможность считывать каждое входное значение дважды: один раз, чтобы вычислить среднее значение (кумулятивную сумму), и еще раз, чтобы подсчитать, сколько из них было выше среднего. Мы могли бы прочитать каждое значение в переменную, но мы не знаем, сколько дней потребуется для запуска программы, поэтому мы не знаем, сколько переменных нужно объявить.
Нам нужен способ объявить множество переменных за один шаг, а затем иметь возможность хранить их значения и обращаться к ним.
Задача: возможно ли решить вышеуказанную проблему, используя только методы из предыдущих заметок, без использования массивов? Как?
Массивы
массив — это объект, в котором хранится множество значений одного типа. Массив элемент — это одно значение в массиве. Массив index — это целое число, указывающее позицию в массиве. Как и String, массивы используют индексирование с отсчетом от нуля, то есть индексы массива начинаются с 0. Ниже показаны индексы и значения в массиве с 10 элементами типа < tt>целое.
индекс | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
value | 12 | 49 | -2 | 26 | 5 | 17 | -6 | 84 | 72 | 3 |
Объявление и создание массива
Это просто объявляет переменную, которая может содержать массив, но не создает сам массив.
Например, чтобы объявить переменную numbers, которая может содержать массив целых чисел, мы должны использовать:
Поскольку массивы являются объектами, мы создаем массивы с помощью new.
При создании массива вы указываете количество элементов в массиве следующим образом:
индекс | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
value | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Каждый элемент в массиве инициализируется нулем или любым значением, которое считается "эквивалентным" нулю для типа данных (false для boolean и null для String).
Сохранение значений и доступ к элементам
индекс | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
value | 27 | 0 | 0 | -6 | 0 | 0 | 0 | 0 | 0 | 0 |
При объявлении массива каждому элементу массива присваивается начальное значение по умолчанию.
Для целых чисел значение по умолчанию равно 0. Как вы думаете, какое значение по умолчанию используется для двойных чисел?
Упражнение: начальные значения массива по умолчанию
Напишите программу, которая объявляет массив double длины 4, печатает значения, присваивает значение каждому элементу и снова печатает значения.
Теперь сделайте то же самое для массива элементов String.
Массивы и циклы
Мы можем использовать целочисленную переменную в качестве индекса массива. Если мы используем цикл for для подсчета от 0 до самого высокого индекса, то мы можем обрабатывать каждый элемент массива. Например, следующий код суммирует элементы массива numbers.
Мы начинаем с 0, потому что индексы начинаются с 0. Мы заканчиваем сразу перед 10, потому что 10 — это длина нашего массива numbers, а последний индекс на единицу меньше длины массива.
[Массивы предоставляют много возможностей для ошибок один за другим из-за того, как работают индексы.]
Если бы мы изменили массив numbers, чтобы он содержал другое количество элементов, этот код больше не работал бы. К счастью, Java предоставляет простой способ получить длину массива, добавив .length после переменной массива, например:
Обратите внимание, что для массивов мы не используем круглые скобки после длины.
Это отличается от способа определения длины строк.
Упражнение: Инициализировать и показать целочисленный массив
Напишите программу, которая вводит длину массива int от пользователя и присваивает 1 по индексу 0, присваивает 2 по индексу 1, присваивает 3 по индексу 2 и так далее. Один цикл должен присваивать значения каждому элементу массива. Второй цикл должен печатать значения массива с пробелами между значениями.
Упражнение: Инициализировать и показать двойной массив
Напишите программу, которая вводит длину массива двойных от пользователя и значение для инициализации массива. Один цикл должен присвоить значение каждому элементу массива. Второй цикл должен печатать значения массива с пробелами между значениями.
Температурная программа
Рассмотрите взаимодействие в начале этих заметок. Вот псевдокод, который следует последовательности взаимодействий, используя массив для управления значениями, которые вводит пользователь. Обратите внимание, что мы не можем подсчитать, сколько элементов выше среднего, пока не вычислим среднее значение, и мы не можем вычислить среднее значение, пока не введем все элементы.
- Введите количество дней от пользователя.
- Объявите и создайте массив int с числом дней в качестве длины.
- Для каждого индекса в массиве:
- Введите температуру от пользователя.
- Сохранить температуру в массиве по этому индексу. ол>
- Добавьте значение этого индекса к сумме. ол>
- Если значение этого индекса больше среднего:
- Увеличить значение счетчика.
Мы могли бы объединить первые два цикла в один цикл, но чище делать их по отдельности.
Вот программа, соответствующая псевдокоду.Упражнение: дисперсия и стандартное отклонение
Измените программу температуры так, чтобы она также вычисляла дисперсию и стандартное отклонение температур.
Чтобы вычислить дисперсию, необходимо суммировать:Дополнительные функции массива
В Java есть множество других возможностей для программирования с массивами.Мы просто приводим здесь некоторые примеры и информацию. Дополнительную информацию см. в учебнике.
Если вы заранее знаете, какие значения будут в массиве, вы можете указать эти значения при объявлении массива, например:
Существует особый вид цикла (цикл for-each) для обработки каждого значения в массиве. Вот пример для программы «Температура». Конечно, лучше выбрать имя, чем foo.
Класс Arrays предоставляет несколько удобных статических методов для работы с массивами. Для их использования необходимо добавить Arrays. перед названием метода (и импортировать пакет java.util).
Имя метода Описание copyOf(array, newSize) возвращает копию массива с новым размером equals( array1, array2) возвращает true, если все элементы равны fill(массив, значение)< /td> присваивает каждому элементу массива значение sort(array) переставляет значения для перехода от наименьшего к наибольшему toString(array) возвращает String представление массив Задание: массив простых чисел
Напишите программу для инициализации массива первыми 10 простыми числами: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29.
Используйте цикл for-each для суммирования значений в массиве.
Выведите массив с помощью метода Arrays.toString.Массивы и методы
Как и другие типы, массивы можно передавать в качестве параметров методам. Предположим, нам нужен метод для суммирования значений в массиве double. Это потребует передачи массива в качестве параметра и возврата результата double.
В данном случае имя параметра — vals, но, как и для всех переменных параметров, вы можете выбрать любое имя по своему усмотрению. Обратите внимание, что [ ] является частью типа параметра. double[ ] vals следует читать как "двойной массив с именем vals".
Упражнение: Метод усреднения массива
Напишите метод, который возвращает среднее значение в массиве int. Включите и используйте этот метод в программе Температура.Массивы также могут быть возвращены методом. Предположим, нам нужен метод, который преобразует String в массив char. Это потребует передачи String в качестве параметра и возврата массива char.
Обратите внимание, что [ ] является частью типа возвращаемого значения, а токен является именем параметра String. Внутри метода нам нужно убедиться, что массив имеет ту же длину, что и String; код получает это значение с помощью метода length. Обратите внимание, что метод length используется дважды: один раз, чтобы указать длину нового массива, а другой — в проверке цикла.
Упражнение: Создайте метод массива int
Напишите метод, который возвращает новый массив int заданного размера и с инициализацией каждого элемента заданным значением. Обратите внимание, что этот метод требует два параметра. Включите и используйте этот метод в программе Температура.Ссылки
Когда вы передаете массив в качестве параметра, Java не создает новую копию массива. Это было бы очень неэффективно для больших массивов. Вместо этого переменная параметра хранит ссылку (или указатель) на тот же массив. Это означает, что если метод изменяет массив, то эти изменения будут видны коду, вызывающему метод. Рассмотрим следующую программу.
Вывод этой программы:
Обратите внимание, что метод setToZero не изменяет value1 на ноль. Когда параметр является примитивным типом, значение копируется. Это иллюстрирует ситуацию до и после оператора value2 = 0;. Значения для value1 и value2 хранятся в двух разных местах.До После value1 3.14 value1 tt> 3.14 value2 3.14 value2 0.0
Однако метод set2Zero изменил элемент array1 на ноль. Когда параметр является массивом, копируется ссылка, а не массив. Это иллюстрирует ситуацию до и после оператора array2[index] = 0;. И массив1, и массив2 ссылаются на один и тот же массив.- Сколько переменных целочисленного массива есть в этой программе?
- Сколько объектов целочисленного массива есть в этой программе?
- Что печатает эта программа?
- После вывода первой строки к скольким массивам может получить доступ эта программа?
- После того, как будет напечатана последняя строка, к скольким массивам может получить доступ эта программа?
- Допустим, мы добавим строку: в конце программы. Сколько массивов теперь может получить доступ к этой программе?
- Напишите метод doubleDoubleArray, который удваивает каждый элемент в массиве double.
Этот метод должен иметь параметр массива и возвращаемый тип void.
Напишите программу для проверки метода, печатающую массив до и после вызова метода. - Напишите аналогичный метод doubleIntArray, который удваивает каждый элемент в массиве int.
- Можете ли вы написать единственный метод, который может принимать массив double или массив int в качестве параметра и удваивать элементы массива?
Алгоритмы обхода массива
Дополнительная тема: Чтение файла в массив
Если вы выполняли некоторые действия, вы, вероятно, обнаружили, что вводить значения для массивов вручную утомительно. Программе было бы удобнее читать значения из файла. Дополнительную информацию об обработке файлов можно найти в главе 6 учебника.
файл — это набор информации, который хранится на компьютере и которому присвоено имя. Например, hamlet.txt может быть именем файла, содержащего текст Hamlet. Hello.java может быть именем файла с вашей программой "Hello World". Мы будем работать с текстовыми файлами, включая файлы с расширением .txt, а также файлы .java и .html. р>
- Открыть файл для чтения (или записи).
- Чтение данных из файла (или запись данных в файл).
- Закройте файл.
В Java мы будем использовать объекты File для представления файлов и объекты Scanner для открытия, чтения и закрытия файлов. Предположим, у нас есть файл temperature.txt, который содержит следующую информацию, необходимую программе Temperature.
Предполагая, что этот файл находится в той же папке, что и программа Temperature, объект File может быть создан с помощью этого оператора.
Для большинства целей нам не нужен объект File, за исключением создания объекта Scanner, поэтому два приведенных выше оператора можно закодировать в один оператор.
Мы можем использовать объект Scanner для файла так же, как объект Scanner для клавиатуры, за исключением того, что нам не нужно печатать подсказки. Вот программа Temperature, которая считывает информацию из файла.
Обратите внимание, что необходим дополнительный оператор импорта; это потому, что класс File является частью пакета java.io. Также обратите внимание, что в заголовке метода необходимо предложение throws. Это связано с тем, что Java требует, чтобы вы обращали внимание на возможность FileNotFoundException. Было бы лучше использовать оператор try/catch для решения этой проблемы, но это выходит за рамки данного курса.- Измените файл, чтобы он содержал недопустимые данные. Что происходит?
- Измените программу так, чтобы она считывала температуры из файла, пока есть допустимые записи для чтения, а затем отображала результаты.
- Измените программу, чтобы она печатала температуры по мере их считывания.
- Удалите первую строку (количество дней) из файла Temperature.txt.
- Замените первый цикл for на:
while(input.hasNextInt()) - Создайте массив размером MAX_SIZE, константой, инициализированной до 100.
- Сохраняйте подсчет количества прочитанных значений (переменная count уже занята).
Используйте его как индекс для хранения элементов в массиве и для вычисления среднего значения. Не используйте temps.length - Распечатайте количество считанных значений температуры вместе со средней температурой.
- Измените цикл while, чтобы не считывалось больше MAX_SIZE чисел.
Задание: Поиск Гамлета
Напишите программу, которая считывает 32230 токенов из hamlet.txt в массив String. Запросить у пользователя слово для поиска. Подсчитайте и распечатайте, сколько раз встречается это слово. Вы можете попробовать два слова: "haue" (более 100 раз) и "againe" (более 10 раз).Дополнительная тема: многомерные массивы
Во многих приложениях данные имеют несколько измерений. Таблицы, изображения. и видео являются тремя распространенными примерами. Здесь мы будем использовать пример файла iris.txt. Если вы хотите узнать больше о том, что означают эти числа, вы можете прочитать это.
Первая строка iris.txt указывает, что данные состоят из 150 строк (или строк) и 5 столбцов. Многомерный массив может быть объявлен так, чтобы мы могли получить доступ к элементу по строке и столбцу. Предполагая, что эти числа хранятся в переменных с именами rows и columns, мы можем объявить двумерный массив следующим образом:
Обратите внимание, что в объявлении есть две пары квадратных скобок. Также обратите внимание, что указаны две длины. Для трехмерного массива нам потребуются три пары скобок и так далее для более высоких измерений.
Элемент в десятой строке и третьем столбце будет назначен и доступен:
Для обоих параметров используется индексация с отсчетом от нуля. Конечно, было бы очень утомительно писать 750 строк кода для присвоения значения каждому элементу массива iris. Обычно используются вложенные циклы.
- Для каждого индекса строки:
- Для индекса каждого столбца:
- Что-то делать с элементом в этой строке и столбце
Если объект Scanner для чтения из iris.txt хранится в переменной input, то следующий код заполнит массив (при условии, что первые два числа были потреблены).
Подобный двойной цикл может быть закодирован для другой обработки данных. Предположим, вы хотите вычислить среднее значение каждого из столбцов. Для пяти столбцов можно объявить пять переменных, но для пяти средних лучше объявить массив с пятью элементами. В следующем коде дополнительный массив сначала используется для хранения сумм по каждому столбцу, а затем деление приводит к среднему значению.
Когда у вас много данных, часто полезно посмотреть, как они выглядят. В качестве последнего примера рассмотрим, как подсчитать, сколько раз каждое значение встречается в файле iris.txt. При проверке каждое значение имеет не более одного десятичного знака, поэтому, если мы умножим на 10 и округлим, то разные значения будут соответствовать разным целым числам. Все значения в файле iris.txt положительные, а наибольшее значение равно 7,9, поэтому целые числа будут находиться в диапазоне от 1 до 79. Это означает, что для подсчета каждого значения можно использовать массив целых чисел длиной 80.
Например, предположим, что значение равно 2,3. Умножение на 10 дает 23. Это означает, что мы должны добавить 1 к целочисленному массиву с индексом 23. Вот код, который подсчитывает все 750 значений.
Массив массивов называется двумерным массивом. Двумерный (2D) массив в программировании на C также известен как матрица. Матрица может быть представлена в виде таблицы строк и столбцов. Прежде чем мы подробнее обсудим двумерный массив, давайте взглянем на следующую программу на C.
Пример простого двумерного (2D) массива
Пока не беспокойтесь о том, как инициализировать двумерный массив, мы обсудим эту часть позже. Эта программа демонстрирует, как сохранить элементы, введенные пользователем, в двумерный массив и как отобразить элементы двумерного массива.
Инициализация 2D-массива
Есть два способа инициализировать двумерные массивы во время объявления.
Несмотря на то, что оба приведенных выше объявления допустимы, я рекомендую вам использовать первый метод, так как он более удобочитаем, поскольку в этом методе вы можете визуализировать строки и столбцы двумерного массива.
Что необходимо учитывать при инициализации двумерного массива
Мы уже знаем, что когда мы инициализируем обычный массив (или, можно сказать, одномерный массив) во время объявления, нам не нужно указывать его размер. Однако это не относится к 2D-массиву, вы всегда должны указывать второе измерение, даже если вы указываете элементы во время объявления. Давайте разберемся с этим на нескольких примерах –
Как сохранить введенные пользователем данные в 2D-массив
Мы можем рассчитать, сколько элементов может содержать двумерный массив, используя следующую формулу:
Массив arr[n1][n2] может содержать n1*n2 элементов. Массив, который у нас есть в приведенном ниже примере, имеет размеры 5 и 4. Эти измерения известны как индексы. Таким образом, этот массив имеет значение первого нижнего индекса, равное 5, и значение второго нижнего индекса, равное 4.
Таким образом, массив abc[5][4] может иметь 5*4 = 20 элементов.Для хранения элементов, введенных пользователем, мы используем два цикла for, один из которых является вложенным циклом. Внешний цикл выполняется от 0 до (первый индекс -1), а внутренний цикл for выполняется от 0 до (второй индекс -1). Таким образом, порядок, в котором пользователь вводит элементы, будет следующим: abc[0][0], abc[0][1], abc[0][2]… и так далее.
В приведенном выше примере у меня есть двумерный массив abc целочисленного типа. Концептуально вы можете визуализировать приведенный выше массив следующим образом:
Однако фактическое представление этого массива в памяти будет примерно таким:
Указатели и двумерный массив
Как мы знаем, имя одномерного массива работает как указатель на базовый элемент (первый элемент) массива. Однако в случае двумерных массивов логика немного отличается.Вы можете рассматривать двумерный массив как набор нескольких одномерных массивов.
Таким образом, abc[0] будет иметь адрес первого элемента первой строки (если мы рассмотрим приведенную выше диаграмму номер 1).
аналогично abc[1] будет иметь адрес первого элемента второй строки. Чтобы лучше понять это, давайте напишем программу на C –Фактическое представление адреса должно быть в шестнадцатеричном формате, для которого мы используем %p вместо %d, как указано в комментариях. Это просто для того, чтобы показать, что элементы хранятся в смежных ячейках памяти. Вы можете связать вывод с диаграммой выше, чтобы увидеть, что разница между этими адресами на самом деле является количеством байтов, потребляемых элементами этой строки.
Адреса, показанные в выходных данных, принадлежат первому элементу каждой строки abc[0][0], abc[1][0], abc[2][0], abc[3][0] и abc. [4][0].
Если задано значение шага, оно будет использоваться как приращение (или уменьшение) между элементами в последовательности. шаг не должен быть равен 0 и не должен превышать указанный диапазон. Если не указано, по умолчанию шаг будет равен 1.
Возвращаемые значения
Возвращает массив элементов от начала до конца включительно.
Примеры
// массив (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach (диапазон (0, 12) как $number) echo $номер ;
>// Параметр шага
// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
foreach ( range ( 0 , 100 , 10 ) как $number ) echo $number ;
>// Использование последовательностей символов
// array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', ' я');
foreach (диапазон ('a', 'i') как $letter) echo $letter;
>// массив('c', 'b', 'a');
foreach ( диапазон ( 'c' , 'a' ) как $letter ) echo $letter ;
>
?>Примечания
Примечание.
Значения последовательности символов ограничены единицей длины. Если введена длина больше единицы, используется только первый символ.
См. также
- shuffle() — перетасовка массива
- array_fill() — заполнение массива значениями
Примечания, внесенные пользователями 29 примечаний
Чтобы создать массив диапазонов, например
объединить два массива диапазонов с помощью array_combine:
Функция сгенерирует массив целых чисел, даже если ваши числовые параметры заключены в кавычки.
(диапазон ('1', '2')); // выводит массив(2) < [0]=>int(1) [1]=> int(2) >
?>
Простой способ получить массив строк состоит в том, чтобы сопоставить strval() с диапазоном:
( array_map ('strval', range ('1', '2'))); // выводит массив(2) < [0]=>строка(1) "1" [1]=> строка(1) "2" >
?>Если вы хотите заполнить массив, чтобы получить хеш с числовыми значениями от 0 до 9, использование
range(0,9);
является более быстрым решением по сравнению с
array_fill (0, 10, '');Чтобы создать простой массив или многомерный массив с определенным размером и нулевыми значениями, используйте это выражение:
= array_map (функция ($n) < return null; >, диапазон (1, 3));
$MultiArray = array_map (функция ($n) < return array_map (функция ($n) < return null; >, диапазон (1, 2)); >, диапазон (1, 3));var_dump ( $SimpleArray );
var_dump ($MultiArray);Поэтому с введением односимвольных диапазонов в функцию range() внутренняя функция пытается быть "умной" и (здесь я делаю вывод из поведения), по-видимому, проверяет тип входящих значений. Если один является числовым, включая числовую строку, то другой обрабатывается как числовой; если это нечисловая строка, она обрабатывается как ноль.
Если вы передаете числовую строку таким образом, что она принудительно распознается как строка типа, а не числовой тип, range() будет работать совсем по-другому.
эхо взрывается ("" , диапазон ( 9 , "Q" ));
// печатает 9876543210эхо взрывается ("" , диапазон ("9 " , "Q" )); //пробел после 9
// печатает 9:; ?@ABCDEFGHIJKLMNOPQecho implode( "" , range( "q" , "9 " ));
// печатает qponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@ ?> =Я бы не назвал это ошибкой, потому что, по моему мнению, это даже полезнее, чем стандартное использование функции.
Функция range очень полезна для получения массива символов, как это делает range('C','R').
На работе мне пришлось расширить функцию range($a,$b), чтобы она работала в этом особом случае: с двумя строками в верхнем регистре $a и $b она должна возвращать все возможные строки между $a и $b. .
Это можно использовать, например, для получения индексов столбцов Excel.
например, ('A', 'AD') ==> array('A', 'B', 'C'. 'Z', 'AA', 'AB', 'AC', 'AD') ?>
Поэтому я написал функцию getrange($min,$max), которая делает именно это.функция getcolumnrange ($min, $max) $pointer = strtoupper ($min);
$output =массив();
while(positionalcomparison($pointer, strtoupper($max)) 0) array_push($output, $pointer);
$указатель++;
>
возврат $output ;
>функция позиционного сравнения ($a, $b) $a1 = stringtointvalue ($a); $b1 = значение stringtointvalue ( $b );
если($a1 > $b1)возврат 1;
иначе если( $a1 $b1 )возврат - 1 ;
иначе вернуть 0 ;
>/*
* например. A=1 - B=2 - Z=26 - AA=27 - CZ=104 - DA=105 - ZZ=702 - AAA=703
*/
функция stringtointvalue ( $str ) $amount = 0 ;
$strarra = array_reverse ( str_split ( $str ));for( $i = 0 ; $i strlen ( $str ); $i ++) $amount +=( ord ( $strarra [ $i ])- 64 )* pow ( 26 , $i );
>
возврат $amount ;
>
?>foreach(range()) эффективен в других языках, таких как python, но не (по сравнению с for) в php*.
php — это язык, вдохновленный C, и поэтому он полностью соответствует эстетике языка для его использования
//эффективность
for( $i = $start ; $i $end ; $i += $step )
// что-то сделать с массивом
>//неэффективно
foreach( range ( $start , $end , $step ) as $i )
// что-то делать с массивом
>
?>
То, что в официальной документации не упоминается цикл for, странно.Обратите внимание, однако, что в PHP5 foreach выполняется быстрее, чем for, при итерации без увеличения переменной.
* Мои тесты с использованием микровремени и 100 000 последовательных итераций (~10 раз) показывают, что for в 4 раза быстрее, чем foreach(range()).
функция natural_prime_numbers (массив $range, bool $print_info = false) : array <
$start_time = time ();
$primes_numbers = array();
$print = '' ;
$count_range = количество ( $range );
foreach($range as $number) <
$values_division_number = array();
if( $number === 0 || $number === 1 || ! is_int ( $number )) < // исключаем 0, 1 и другие нецелые числа
continue;
>
if( $number != 2 && $number % 2 === 0 ) < // исключить 2 и пары чисел
continue;
>
for( $i = 1 ; $i $number ; $i ++) <
$resultado_divisao = $number / $i ;
$values_division_number [ $i ] = $resultado_divisao ;
if( $count_range 20 ) < // $count_range $print .= PHP_EOL ;
$info = 'Число' . $ число . 'делить на число'. $я. ' равно: ' .($number / $i);
$print .= $info ;
if( $i === $number ) $print .= PHP_EOL ;
>
>$values_division_number = массив_значений ( $values_division_number ); // переиндексировать массив
// здесь нам нужен только массив с 2 индексами со значениями 1 и собственным числом (правило до натурального простого числа)
if( count ( $values_division_number ) === 2 && $values_division_number [ 0 ] = == $number && $values_division_number [1] === 1) $primes_numbers [$number] = $number;
>>
>
вернуть массив(
'length_prime_numbers' => count ( $primes_numbers ),
'prime_numbers' => array_values ( $primes_numbers ),
'print' => $print,
'total_time_processing' => (time () - $start_time). 'seconds.',
);
>
var_dump ( natural_prime_numbers (диапазон ( 0 , 11 ))); // здесь функция range() ;-)// Результат:
// массив (размер=3)
// 'length_prime_numbers' => int 5
// 'prime_numbers' =>
// массив (size=5)
// 0 => int 2
// 1 => int 3
// 2 => int 5
// 3 => int 7 < br />// 4 => int 11
// 'print' => string '
// O número 2 dividido pelo número 1 é igual a: 2
// O número 2 Dividido pelo número 2 é igual a: 1// O número 3 dividido pelo número 1 é igual a: 3
// O número 3 dividido pelo número 2 é igual a: 1.5
// O número 3 dividido pelo número 3 é igual а: 1// O número 5 dividido pelo número 1 é igual a: 5
// O número 5 dividido pelo número 2 é igual a: 2.5
// O número 5 dividido pelo número 3 é igual a: 1.6666666666667
// O número 5 dividido pelo número 4 é igual a: 1.25
// O número 5 dividido pelo '.// ******************************* //
//
// * Помните, что функция является рекурсивной, то есть: диапазон 5000 занимает более 1 минуты на процессоре Intel® Core™ i5-8250U (3,40 ГГц).
//
// ******************************* //
?> р>Читайте также:
- Для индекса каждого столбца: