php Учебные задачи для начинающих

Эти задачи выбраны для данного учебного курса по PHP.

Как решать задачи (ознакомьтесь, прежде чем начать решать):

  1. Следуйте рекомендациям оформления решения задачи.
  2. В конечном итоге каждую задачу следует оформлять в виде функции и использующего эту функцию кода - т.е. функция должна принимать некоторые параметры. Для формирования массивов, заданных случайным образом, используйте отдельную функцию (с поправкой на условие конкретной задачи). Не забудьте про область видимости переменных внутри функции.
    Если у вас не получается сразу решить очередную задачу в виде функции (или вообще не получается) -- публикуйте вопрос (оформляем как и решение, только без кода, с указанием того, что непонятно) или то решение, которое получилось, опять же, с вашими вопросами.
  3. Читать примечания к конкретным задачам (см. ниже) стоит только после того, как вы потратили на её решение какое-то время (т.е. сначала пробуйте решить самостоятельно) и/или после того как уже решили задачу, чтобы узнать больше.
  4. ОБЯЗАТЕЛЬНО ЗАПУСКАЙТЕ КОД перед тем как опубликовать своё решение, чтобы на практике убедиться, что оно рабочее. Можно так. Если Вы используете локальную среду разработки, настройте полное отображение ошибок.

Учебные задачи -- PHP

Примечания по тексту условий:

  • Далее под "N значений" подразумеваются как минимум: ноль и все остальные натуральные числа (ноль важен, так как часто в прикладном программировании мы имеем дело с пустыми списками, напр. когда пользователь не заполнил ни одно значение -- программа должна корректно работать и в этом случае).

Задачи:

  1. Вывести на экран N случайных чисел (каждое с новой строки) из диапазона [-21, 35]

    ПРИМЕЧАНИЕ: подразумевается, что вы должны организовать цикл, который выполнится N раз и при этом в каждом своём витке выведет на экран случайное число.

  2. Вывести на экран сумму N случайных чисел.
  3. Вывести на экран N случайных чисел (каждое с новой строки). Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше. например:
    -1
    20 больше -1
    -5 меньше 20
    -6 меньше -5
    и т.д.
  4. Вывести на экран n-ное число Фибоначчи. Пример последовательности:
    0 
    1
    1 
    2 
    3
    5
    8 
    13
    21...и т.д.
  5. Дано некоторое число длиной от 1 до 5 цифр - вывести его цифры в обратном порядке.
    Например:
    3567=
    7
    6
    5
    3 

    Подсказка: используйте цикл while и операцию получения остатка.

  6. Дано некоторое число длиной от 1 до 5 символов, вывести все его "нечётные" цифры в обратном порядке (аналогично предыдущей задаче), если же таких цифр не найдёт, вывести сообщение "Нечетных цифр не обнаружено!"
  7. Задать массив из 7-ми элементов через предварительное описание типа, заполнить его случайными значениями в одном цикле, а в другом цикле вывести эти значения на экран.
  8. Задать двумерный массив размерностью m на n (MxN) элементов (m и n вынести в область определения констант), заполнить его случайными значениями и вывести их на экран уже после того, как весь массив будет заполнен (т.е. заполнять и выводить в разных группах циклов).
  9. Задайте случайным образом массив из N элементов. Выведите его на экран "ёлочкой". Вот начало такого вывода:
    1
    2 3
    4 5 6
    7 8 9 10
    11 12 ......
  10. Задайте случайным образом массив из N элементов (целых чисел). Найдите максимальное число и напечатайте его.
  11. Задайте случайным образом массив из 20-ти элементов (целых чисел). Найдите минимальное число и напечатайте его.
  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-ом массиве больше нет.

    Если у вас не получается решить/понять -- почитайте [Примечания к задаче].

  13. Создайте функцию, которая принимает на вход массив случайных чисел из диапазона [5..12]. Обходит этот массив и делает для каждого элемента следующее (пусть она оказывает побочный эффект прямо в своём теле):
    Если это число равно 5 -- то выведете на экран строку "пять", если 6 -- то строку "шесть", если 7 то число "7", иначе -- строку "какое-то другое число".

    Используйте для решения задачи оператор switch (или см. книгу Стивена Хольцнера стр. 60).

  14. На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20. Задача: вывести на экран все числа, которые не содержатся в массиве
    $b = [12, 5, 17, 6, 4];

    Решите эту задачу двумя способами:

    1. Без использования in_array()
    2. С использованием in_array() (что проще)
fgh's picture

Скажите пожалуйста, в задаче №7 , что имеется ввиду под объявлением массива через тип? Это тоже самое,что в Pascal ?

$a = array(
    0  => $value,
    1 => $value2,
    2 => $value3,
     3 => $value4,
	 4 => $value3,
	 5 => $value3,
	 6 => $value3,
) ;


vedro-compota's picture

В PHP хотя и нет формального объявления типа, тем не менее можно задавать значения по-умолчанию присваиванием (да какой-то реальной работы с переменной), например, для строки:

$s = ''; // пустая строка, в будущем может запишем сюда что-то другое

Для массива -- в том числе, чтобы показать другим программиста в коде, что эта переменная будет использоваться как массив, пишут обычно так:

$a = array(); // пустой массив

При этом надо помнить, что:

Начиная с PHP 5.4 возможно использовать короткий синтаксис определения массивов, который заменяет языковую конструкцию array() на []

А значит в современно стиле достаточно написать так:

$a = [];

Насчёт Паскаля

Это тоже самое,что в Pascal ?

Нет, всё же в Паскале типы действительно задаются заранее, а массивы требуют заранее задать диапазон индексов. По сути массивы в php намного гибче их можно расширять или сужать "на ходу", по мере надобности. И объявлять заранее не нужно.

Ещё раз о задаче

Действием типа:

$a = [];

-- вы по сути просто объявляете тип (так как в PHP есть типы, но они формируются "на лету" в зависимости от того какие операции выполнены -- например при присваивании, это называется динамической типизацией), а потому слово объявление в всё уместно, хотя смысл его иной (в сравнении с Паскалем).

_____________
матфак вгу и остальная классика =)

moberaptor's picture

1. В задаче 2 имеет смысл добавить условие про границы, например:
Вывести на экран N случайных чисел (каждое с новой строки) из диапазона [-21, 35] (включая границы). Чтобы избежать неоднозначности толкования.

2. В задаче 3 имеет смысл уточнить формулировку, добавив условие равенства:
Повторить предыдущее, но для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше, или равно.

3. При автонумерации пунктов номер невозможно скопировать - это можно пофиксить?

vedro-compota's picture

При автонумерации пунктов номер невозможно скопировать - это можно пофиксить?

не уверен. Разве это не стандартное поведение браузера с при копировании hmtl-списка?

_____________
матфак вгу и остальная классика =)

moberaptor's picture

Да, всё правильно, глянул исходник, без вариантов.
исходник
А что по первым двум пунктам?

P.S.
Если кому-то, кто это читает потребуется скопировать всё с номером - ABBYY Screenshot reader в помощь.

Pages