воскресенье, 13 октября 2013 г.

Основы программирования и алгоритмы

Пришло время познакомиться с базовыми понятиями программирования. В качестве вступления напишем коротенькую программу, которая будет выполнять элементарные математические действия и научимся описывать работу программ с помощью алгоритмов.


Создаем недокалькулятор

Компьютер - это прежде всего вычислитель, перевести это слово с английского можно как "считатель". На заре своего существования он мог только считать. Благодаря применению очень сложных алгоритмов и выполнению миллионов элементарных операций в секунду инженеры заставили ЭВМ рисовать, проигрывать мелодии и воспроизводить музыку. Никто не мешает нам сделать так, чтобы компьютер для нас что-то посчитал. Давайте попробуем.
Создайте новый документ с шаблоном, рассмотренным в посте о разметке страницы. Можете сохранить его в отдельном файле, так как он вам еще не раз понадобится. Вот этот шаблон:

<html>
<head>
<meta charset="UTF-8">
  <meta http-equiv="cache-control" content="no-cache">
</head>

<body>

</body>
</html>

В тело документа вставьте следующий код (цифры перед строчками писать не надо. Они нужны для комментирования кода):

 <?php
1 $a = 2;
2 $b = 2;
3 $result = $a + $b;
4 echo "Сумма чисел $a и $b равна $result <br>";
5 $result = $a - $b;
6 echo "Разность чисел $a и $b равна $result";
 ?>

Сохраните документ в папке веб-сервера с именем "primer4". Не забудьте указать правильное расширение имени файла - php. Иначе сервер будет рассматривать команды программы как простой текст.
Откройте страничку в браузере и полюбуйтесь результатом. Здорово, не правда ли?



Рассмотрим созданный нами код. В программе появились элементы, с которыми мы раньше не сталкивались. Это конструкции "$a", "$b" и "$result" в строках 1, 2 и 3. Такие элементы языка, начинающиеся с символа "$" называют "переменными". Такое название они получили благодаря своему функционалу - менять свое содержимое. Наиболее просто для понимания представить переменную как некий ящик, в котором может храниться необходимая нам информация. Такой информацией могут быть числа, отдельные символы или строки, значения даты или времени и т.д. Символ "$" указывает обработчику команд PHP (интерпретатору) что перед ним переменная. После символа "$" без пробела указывают имя переменной (название ящика). В примере это имена "a", "b" и "result".
В третьей строке мы просуммировали содержимое переменных $a и $b и результат поместили в переменную "$result".
Для переменных характерно множественное их использование. На то они и переменные. Иллюстрация тому - пятая строка. До этого мы хранили в переменной $result значение суммы переменных. Но когда результат вывели на экран, применив ранее рассмотренную команду "echo" (строка 4), информация, хранящаяся в переменной $result, перестала нам быть нужна. Поэтому мы использовали "$result" еще раз, поместив в нее значение разности. Другими словами $result ПЕРЕМЕНила свое значение.
Подробнее о переменных почитайте на этой странице руководства по PHP.

Алгоритмы


Последовательность, в которой выполняются команды программы, называют "алгоритм". В нашем примере последовательность линейная - команды выполнялись одна за другой как они идут в исходном коде страницы.
Для понимания логики работы сложных программ разработчики используют графическое представление алгоритмов. Элементы алгоритма (шаги) изображаются в виде геометрических фигур. Так, простое действие обозначается прямоугольником. Операции ввода-вывода (когда программа выводит что то на экран, принтер, или получает данные от клавиатуры, мыши) изображают параллелограммом. Любой алгоритм должен иметь конечное количество шагов и обязательно начало и конец. На рисунке ниже приведено графическое представление алгоритма работы программы из примера.



Разберем работу программы по представленному выше алгоритму:
Пункт 1 - начало работы алгоритма;
Пункты 2-3 - присваивание значений переменным $a и $b;
Пункт 4 - вычисление суммы значений переменных;
Пункт 5 - вывод на экран результата вычислений;
Пункт 6 - вычисление разности значений переменных;
Пункт 7 - вывод на экран результата вычислений;
Пункт 1 - окончание работы алгоритма.

Линейная последовательность выполнения программы - самая простая. Рассмотрим более сложную конструкцию.

Условный оператор


Допустим, в зависимости от каких-либо условий, нам нужно принять какое-то определенное решение. С такой задачей мы сталкиваемся в повседневной жизни постоянно. Если на улице идет дождь, то нужно взять зонт, иначе зонт не нужен. Если хочется кушать, надо что-то приготовить, иначе посмотреть телевизор (или позаниматься PHP). Такая конструкция в языках программирования называется условием. Графически условие изображается в виде ромба. В одном условном операторе можно комбинировать несколько условий с помощью алгебры логики (И, ИЛИ).




В PHP условный оператор описывается следующей конструкцией

if (условие) {
операторы, если условие выполняется
} else {
операторы, если условие не выполняется
}

В посте об основах PHP мы рассматривали оператор вывода значения текущей даты. Напишем такую программу, которая в зависимости от времени суток приветствовала нас соответствующей фразой. Утром - "Доброе утро!", вечером - "Добрый вечер" и т.д.
Ниже алгоритм программы, выполняющий такую задачу.



В начале определим час и создадим переменную, в которой содержится приветствие по умолчанию. Если полученное значение часа меньше 5, то сообщение не изменится. Затем нужно последовательно сравнить значение текущего часа граничными значениями. В результате выполнения алгоритма переменная $message будет содержать необходимое приветствие.
Код, соответствующий описанному алгоритму:

$hour = date('H');
$message = "Доброй ночи!";
if ($hour > 5) {
    $message = "Доброе утро!";
    if ($hour > 10) {
         $message = "Добрый день!";
         if ($hour > 17) {
             $message = "Добрый вечер!";
             if ($hour > 22) {
                $message = "Доброй ночи!";
             }
         }
    }
}
echo $message;

Разбор работы программы будет заданием для самостоятельной работы. В действительности, код достаточно избыточен. При больших значениях переменной $hour происходят лишние присваивания переменной $message. Чтобы избежать этого, можно применить конструкцию условия, когда проверяется попадание в интервал. Например, попаданию в интервал дня будет соответствовать такой код:

if ($hour > 10 AND $hour < 17) {
   $message = "Добрый день!";
}
Попробуйте переписать алгоритм и программу, с использованием в условии алгебры логики.

6 комментариев:

  1. При выполнении задания не работает... =(

    ОтветитьУдалить
  2. Что не работает? Какие ошибки выдает?

    ОтветитьУдалить
  3. Сутра не не пожелал мне доброго утра.

    ОтветитьУдалить
  4. Невежливо как-то... А что пожелал?
    Можно попробовать вывести промежуточные значения. Вставь например, после присвоения часа
    echo "Текущий час - $hour";
    или в какой переменной хранится час?

    ОтветитьУдалить
  5. Вот код твоей программы:

    $hour = date('H');
    $m0 = "Доброй ночи!";
    if ($hour > 5 AND $hour < 10) {
    $m0 = "Доброе утро!";
    if ($hour > 10 AND $hour < 17) {
    $m0 = "Добрый день!";
    if ($hour > 17 AND $hour < 22) {
    $m0 = "Добрый вечер!";
    }
    }
    }
    echo $m0;

    Никита, после проверки первого условия в нем же ты пытаешься провести проверку попадание во второй диапазон, а это уже не сработает, т.к. произошло попадание в первый. Нужно использовать конструкцию "иначе" (else):
    $hour = date('H');
    $m0 = "Доброй ночи!";
    if ($hour > 5 AND $hour < 10) {
    $m0 = "Доброе утро!";
    } else {
    if ($hour > 10 AND $hour < 17) {
    $m0 = "Добрый день!";
    }else {
    $m0 = "Добрый вечер!";
    }
    }

    ОтветитьУдалить
  6. ну я догадался что else не хватает, только не знал как его применить правильно =)

    ОтветитьУдалить