Полезный инструмент в работе преподавателей и учителей - генератор контрольных заданий.
Список задач в "Кафедре" я постоянно наращиваю. Однако в виду прочей занятости эта работа идёт не так быстро, как хотелось бы. Поэтому для пользователей я предусмотрел возможность относительно легко добавить в программу свои собственные задачи. Быть профессиональным программистом для этого не обязательно. Чтобы иметь возможность написать свою задачу достаточно поверхностно знать:
Если все эти требования уже выполнены (или будут выполнены уже в ходе работы), то с чего начать?
Если говорить ещё короче, то смотрите сразу образец и просто заполняйте в нём помеченные строчки. Итак, пустой бланк:
<?php
#В эту строчку нужно вставить название вашей задачи
#===эту строчку пока оставьте пустой, к ней вы вернётесь чуть позже. Назовём её "Строчка Z"===
#Здесь напишите формулировку вашей задачи. Напоминаю, что условие задачи довольно короткое.
#Однако каким бы коротким оно ни было, оно может в одну строчку не поместиться.
#Поэтому разбейте его на несколько строчек. Вам главное соблюсти всего три ограничения:
#- каждая строчка не должна быть больше 120 символов
#- каждая строчка должна заканчиваться пробелом!
#- каждая строчка условия начинается с символа "#"
#Когда вы всё условие сюда записали, сосчитайте: сколько у вас получилось строчек?
#Допустим, у вас получилось одиннадцать, так же как вышло здесь у меня.
#Тогда возвращаемся к "Строчке Z", стираем оттуда весь текст кроме первого символа "#"
#Сразу, без пробелов, после "#" пишем туда цифру 11
#В "Строчке Z" кроме одной-единственной циферки и "#" не должно быть ни одного символа!
И вот тут можете писать свой алгоритм решения задачи. Это самая сложная часть.
Для её осуществления лучше ознакомтесь с примерами.
//вот здесь, когда ваше решение закончилось, напишите:
$otvet = имя_переменной,_в_которой_у_вас_сохранился_искомый_ответ;
print("А вот тут вы снова напишите условие вашей задачи, но только вместо цифр подставляйте имена переменных в стиле PHP: $skorost, $vremya, $temperatura и т. п. Соответствующие именам значения сами подставятся вместо этих имён");
?>
И вот, наконец, парочка примеров с комментариями после них:
<?php
#Перевод из байтов и мегабайтов в килобайты
#1
#Перевести в килобайты: 8346 байт и 2.38 Мб.
do {
//итак, генерируем килобайты:
$KiloOfByte = mt_rand(456, 37890)/100;
$Byte = $KiloOfByte*1024;//и тут же перевели их в байты
//будем отбраковывать те случаи, когда число байтов получилось нецелым:
$d = $Byte - round($Byte);
} while ( $d <> 0);//как только получили целое число - заканчиваем подбор.
//аналогично поступим теперь и с мегабайтами
do {
$KiloOfMega = mt_rand(1500,490000);
$Mega = $KiloOfMega/1024;
$d = $Mega*100 - round($Mega*100);
} while ( $d <> 0);
$otvet = $KiloOfByte.' и '.$KiloOfMega;
print("Перевести в килобайты: $Byte байт(а) и $Mega Мб.<br>Ответ:_______");
?>
Как видите, здесь всё соответсвует образу: в первой строчке открывающий php-тэг. Затем строчка, в которой после символа "#" идёт название задачи: "Перевод из байтов и мегабайтов в килобайты". Затем строчка, где написано "#1" - это означает, что условие всей задачи умещается в одну строчку. И следующей строчкой как раз написано это самое условие. Цифры 8346 и 2.38 в нём мною взяты с потолка. Именно этот текст будет выводиться во всплывающей подсказке в основной гармошке.
А вот дальше идёт код поинтересней - там два цикла. Вот какую стратегию решения задачи я придумал: я сначала выберу два случайных числа (функция mt_rand), которые и являются будущими ответами, а потом первое из них переведу в байты, второе - в мегабайты. Вот и всё - эти два новых числа я и помещу в условие задачи. Вдобавок, я наложил ограничения: число в байтах всегда должно получаться целым: $d = $Byte - round($Byte);, а количество мегабайт с точностью до двух знаков после запятой: $d = $Mega*100 - round($Mega*100);.
Обратите внимание, случайное число в первом случае я ищу в диапазоне от 456 до 37890 (делённые на сто каждое), а во втором - от 1500 до 490000 (ровно). Почему именно эти цифры? Сначала я поставил туда цифры с потолка - лишь бы работало. А когда заработало, начал с ними играться - то больше поставлю, то меньше. Таким путём я подобрал интервалы, в которых скорость работы скрипта была не слишком медленной.
Напоследок я скажу вам последние ограничения, о которых вы должны помнить:
Все предметы: Физика Информатика Математика
© Денис Петрович Сепетов
2007-2025