Задачи по php
Primary tabs
Задача №1 из этого списка.
Вывести на экран N случайных чисел (каждое с новой строки) из диапазона [-21, 35]
ПРИМЕЧАНИЕ: подразумевается, что вы должны организовать цикл, который выполнится N раз и при этом в каждом своём витке выведет на экран случайное число.
Решение:
define('N', 7); /** * Это функция, которая выводит на экран N случайных чисел * * @param int $n количество выводимых на экран чисел */ function myFunction($n) { $min = -21; $max = 35; $result = ''; for ($i = 0; $i < $n; $i++) { $result .= rand($min, $max) . '<br>'; } return $result; } echo myFunction(N);
Задача №2 из этого списка.
Вывести на экран сумму N случайных чисел.
Решение:
define('N', 7); function displaySumOfRandomNumbers($n) { $min = -21; $max = 35; $result = 0; for ($i = 0; $i < $n; $i++) { $result += rand($min, $max); } return $result; } echo displaySumOfRandomNumbers(N);
Задача №3 из этого списка.
Вывести на экран N случайных чисел (каждое с новой строки). Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше. например:
-1 20 больше -1 -5 меньше 20 -6 меньше -5 и т.д.
Решение:
define('N', 7); function displayAndCompareRandomNumbers($n) { $min = -21; $max = 35; $arr = []; $result = ''; for ($i = 0; $i < $n; $i++) { $currentNum = rand($min, $max); $arr[] = $currentNum; $result .= $currentNum; if ($i > 0) { $prevNum = $arr[$i - 1]; if ($currentNum > $prevNum) $result .= ' больше ' . $prevNum; elseif ($currentNum < $prevNum) $result .= ' меньше ' . $prevNum; else $result .= ' равно ' . $prevNum; } $result .= '<br>'; } return $result; } echo displayAndCompareRandomNumbers(N);
Задача №4 из этого списка.
Вывести на экран n-ное число Фибоначчи.
Решение:
define('N', 7); function fibonacci($n) { $a = 0; // это первое число Фибоначчи $b = 1; // это второе число Фибоначчи if (!is_int($n) || $n <= 0) { return 'Значение N должно быть целым положительным числом!'; } if ($n == 1) { return $a; } if ($n == 2) { return $b; } for ($i = 2; $i < $n; $i++) { $nextFib = $a + $b; $a = $b; $b = $nextFib; } return $nextFib; } echo 'Число Фибоначчи с порядковым номером ' . N . ':<br>' . fibonacci(N);
Задача №5 из этого списка.
Дано некоторое число длиной от 1 до 5 цифр - вывести его цифры в обратном порядке.
Например:3567= 7 6 5 3Подсказка: используйте цикл while и операцию получения остатка.
Решение:
function reverseNumber($n) { $result = ''; while ($n > 0) { $result .= $n % 10 . '<br>'; $n = intdiv($n, 10); } return $result; } $randomNum = rand(1, 99999); echo "Случайное число: $randomNum <br>" . reverseNumber($randomNum);
Задача №6 из этого списка.
Дано некоторое число длиной от 1 до 5 символов, вывести все его "нечётные" цифры в обратном порядке (аналогично предыдущей задаче), если же таких цифр не найдёт, вывести сообщение "Нечетных цифр не обнаружено!"
Решение:
function showOddNumbers($n) { $flag = false; $result = ''; while ($n > 0) { $num = $n % 10; $n = intdiv($n, 10); // если число нечётное if (($num % 2) != 0) { $result .= $num . '<br>'; $flag = true; } } if (!$flag) { $result = 'Нечетных цифр не обнаружено!<br>'; } return $result; } $randomNum = rand(1, 99999); echo "Случайное число: $randomNum <br>" . showOddNumbers($randomNum);
Задача №7 из этого списка.
Задать массив из 7-ми элементов, заполнить его случайными значениями в одном цикле, а в другом цикле вывести эти значения на экран.
Решение:
define('N', 7); function fillArray($n) { $arr = []; for ($i = 0; $i < $n; $i++) { $arr[] = rand(0, 99); } return $arr; } function showArray($arr) { foreach ($arr as $value) { echo $value . '<br>'; } } $arrRandomNumber = fillArray(N); showArray($arrRandomNumber);
Задача №8 из этого списка.
Задать двумерный массив размерностью m на n (MxN) элементов (m и n вынести в область определения констант), заполнить его случайными значениями и вывести их на экран уже после того, как весь массив будет заполнен (т.е. заполнять и выводить в разных группах циклов).
Решение:
define('M', 4); define('N', 7); function fillDoubleArray($m, $n) { $arr = []; for ($i = 0; $i < $m; $i++) { for ($j = 0; $j < $n; $j++) { $arr[$i][$j] = rand(0, 99); } } return $arr; } function showDoubleArray($arr) { foreach ($arr as $value1) { foreach ($value1 as $value2) { echo $value2 . ' '; } echo '<br>'; } } $doubleArray = fillDoubleArray(M, N); showDoubleArray($doubleArray);
Задача №9 из этого списка.
Задайте случайным образом массив из N элементов. Выведите его на экран "ёлочкой". Вот начало такого вывода:
1 2 3 4 5 6 7 8 9 10 11 12 ......Второй вариант - сделайте то же самое, но не используйте массив: у вас есть переменная N, выведете на экран, все числа до N, по тому же принципе что и выше, например, если N=9, то получим:
1 2 3 4 5 6 7 8 9
Решение, вариант 1:
define('N', 20); function fillArray($n) { $arr = []; for ($i = 0; $i < $n; $i++) { $arr[] = rand(0, 99); } return $arr; } function showFirArray($arr) { $k = 2; for ($i = 0; $i < count($arr); $i++) { echo $arr[$i] . ' '; // вычислим, после каких по счёту элементов массива // нужно делать перенос строки if ($i == ($k * ($k - 1) / 2 - 1)) { $k++; echo '<br>'; } } } $firArray = fillArray(N); showFirArray($firArray);
Решение, вариант 2:
define('N', 9); function displayFirArray($n) { $k = 2; for ($i = 1; $i <= $n; $i++) { echo $i . ' '; // вычислим, после каких по счёту элементов массива // нужно делать перенос строки if ($i == $k * ($k - 1) / 2) { $k++; echo '<br>'; } } } displayFirArray(N);
Задача №10 из этого списка.
Задайте случайным образом массив из N элементов (целых чисел). Найдите максимальное число и напечатайте его.
Решение:
define('N', 9); function fillArray($n) { $arr = []; for ($i = 0; $i < $n; $i++) { $arr[] = rand(0, 99); } return $arr; } function showArr($arr) { foreach ($arr as $value) { echo $value . ' '; } echo '<br>'; } $arrMax = fillArray(N); showArr($arrMax); echo 'Максимальный элемент массива: ' . max($arrMax);
Задача №11 из этого списка.
Задайте случайным образом массив из 20-ти элементов (целых чисел). Найдите минимальное число и напечатайте его.
Решение:
define('N', 20); function fillArray($n) { $arr = []; for ($i = 0; $i < $n; $i++) { $arr[] = rand(0, 99); } return $arr; } function showArr($arr) { foreach ($arr as $value) { echo $value . ' '; } echo '<br>'; } $arrMin = fillArray(N); showArr($arrMin); echo 'Минимальный элемент массива: ' . min($arrMin);
Задача №12 из этого списка.
Даны два массива по 20 элементов каждый (заполните случайными числами, так чтобы среди элементов массива при очередном запуске программы могли встретиться и отрицательные и положительные числа).
Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов 2-ого массива - сравнение проводите пока не закончится та выборка, которая короче.
Например пусть мы имеем два массива (запишу лишь начальные элементы):
1 | 2 | -10 | 5 | 0 | 12 | 2 | 8 ....
0 | 3 | 4 | 9 | 7 | 5 | -8 | 3.....
для них программа должна вывести:-10 меньше 3 12 больше 9- других сравнений не последует, так как новых из "каждых третьих элементов" в 1-ом массиве больше нет.
Решение:
function fillArray20elem() { $arr = []; for ($i = 0; $i < 20; $i++) { $arr[] = rand(-99, 99); } return $arr; } function showArr($arr) { foreach ($arr as $value) { echo $value . ' '; } echo '<br>'; } function compareElementsOfArrays($arr1, $step1, $arr2, $step2) { $result = ''; for ($i = $step1 - 1; $i < count($arr1); $i += $step1) { $numberFromCurrentArray = $arr1[$i]; // вычислим, с каким по счёту элементом второго массива // сравнивать текущий элемент из первого массива $j = $step2 / $step1 * ($i + 1) - 1; if (isset($arr2[$j])) { $numberFromSecondArray = $arr2[$j]; if ($numberFromCurrentArray > $numberFromSecondArray) $sign = ' больше '; elseif ($numberFromCurrentArray < $numberFromSecondArray) $sign = ' меньше '; else $sign = ' равно '; $result .= $numberFromCurrentArray . $sign . $numberFromSecondArray . '<br>'; } else { $result .= 'Закончились элементы для сравнения во втором массиве<br>'; break; } } return $result; } $arr1 = fillArray20elem(); $step1 = 3; // каждый 3-ий элемент из первого массива $arr1 $arr2 = fillArray20elem(); $step2 = 2; // каждый 2-ой элемент из второго массива $arr2 showArr($arr1); showArr($arr2); echo compareElementsOfArrays($arr1, $step1, $arr2, $step2);
Задача №13 из этого списка.
Создайте функцию, которая принимает на вход массив случайных чисел из диапазона [5..12]. Обходит этот массив и делает для каждого элемента следующее (пусть она оказывает побочный эффект прямо в своём теле):
Если это число равно 5 -- то выведете на экран строку "пять", если 6 -- то строку "шесть", если 7 то число "7", иначе -- строку "какое-то другое число".
Используйте для решения задачи оператор switch(link is external) (или см. книгу Стивена Хольцнера стр. 60).
Решение:
define('N', 7); function fillArrayFromRange512($n) { $arr = []; for ($i = 0; $i < $n; $i++) { $arr[] = rand(5, 12); } return $arr; } function showArr($arr) { foreach ($arr as $value) { echo $value . ' '; } echo '<br>'; } function displayElemsAsStringsOfArray($arr) { foreach ($arr as $value) { switch ($value) { case 5: echo "пять"; break; case 6: echo "шесть"; break; case 7: echo "семь"; break; default: echo "какое-то другое число"; break; } echo '<br>'; } } $arr512 = fillArrayFromRange512(N); showArr($arr512); displayElemsAsStringsOfArray($arr512);
Задача №14 из этого списка.
Есть два массива "a" и "b". На вход вашей программе подаётся массив "a" случайных чисел (10 элементов) из диапазона от 1 до 20. Задача: вывести на экран все числа, которые не содержатся в массиве "b"
$b = [12, 5, 17, 6, 4];Решите эту задачу двумя способами:
1. Без использования in_array()
2. С использованием in_array() (что проще.
Решение:
function fillArrayFromRange120($n) { $arr = []; for ($i = 0; $i < $n; $i++) { $arr[] = rand(1, 20); } return $arr; } function showDiffArr($arr) { if ($arr) { foreach ($arr as $value) { echo $value . ' '; } } else { echo 'Нет элементов'; } echo '<br>'; } // Решение, первый вариант (без использования in_array()): function displayElemsOfFirstArray1($arr1, $arr2) { $arrUnique = array_unique($arr1); $arrDiff = array_diff($arrUnique, $arr2); return $arrDiff; } // Решение, второй вариант (с использованием in_array()): function displayElemsOfFirstArray2($arr1, $arr2) { $arrUnique = array_unique($arr1); $arrDiff = []; foreach ($arrUnique as $value) { if (!in_array($value, $arr2)) { $arrDiff[] = $value; } } return $arrDiff; } // Решение, третий вариант (совсем без использования модных функций): function displayElemsOfFirstArray3($arr1, $arr2) { $arrUnique = array_unique($arr1); $arrDiff = []; foreach ($arrUnique as $value1) { $flag = false; foreach ($arr2 as $value2) { // если текущему значению первого массива соответствует // какое-нибудь значение из второго массива if ($value1 == $value2) { $flag = true; break; } } if ($flag == false) { $arrDiff[] = $value1; } } return $arrDiff; } $a = fillArrayFromRange120(10); $b = [12, 5, 17, 6, 4]; $arrDiff1 = displayElemsOfFirstArray1($a, $b); $arrDiff2 = displayElemsOfFirstArray2($a, $b); $arrDiff3 = displayElemsOfFirstArray3($a, $b); echo 'Исходный массив: '; showDiffArr($a); echo 'Вычитаемый массив: ' . implode(' ', $b) . '<br>'; // Убедимся, что все варианты решений дают одинаковый результат: showDiffArr($arrDiff1); showDiffArr($arrDiff2); showDiffArr($arrDiff3);
- Log in to post comments
- 684 reads
VladimirM
Wed, 11/15/2023 - 10:33
Permalink
Хочется уточнить некоторые общие моменты по оформлению
1. Нужно ли к каждой функции писать комментарий в формате PHPDoc? Или можно вовсе обойтись без комментария? Или оптимально сделать краткий комментарий типа "// Это функция, которая выводит на экран N случайных чисел"
2. Если функция одна, можно ли её для простоты называть "myFunction", или всё же лучше придумать для неё какое-то говорящее название?
vedro-compota
Thu, 11/16/2023 - 13:13
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)