Задачи по 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
- 1213 reads
VladimirM
Wed, 11/15/2023 - 10:33
Permalink
Хочется уточнить некоторые общие моменты по оформлению
1. Нужно ли к каждой функции писать комментарий в формате PHPDoc? Или можно вовсе обойтись без комментария? Или оптимально сделать краткий комментарий типа "// Это функция, которая выводит на экран N случайных чисел"
2. Если функция одна, можно ли её для простоты называть "myFunction", или всё же лучше придумать для неё какое-то говорящее название?
vedro-compota
Thu, 11/16/2023 - 13:13
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)