Задать вопрос
@iceman2112

Как сделать такой сайт по примеру сайтом по олимпиадному программированию?

Есть такой сайт
acmp.ru/index.asp?main=tasks

Моя задача очень похожа, написать веб-ресурс для студентов университета для тестирования их программ по вычислительным методам.
Ну т.е. есть комплекс задач по вычислительным методам, которые студенты пишут в нашем университете на языке с++ нужно сделать, чтобы студент отправлял свой cpp файл, на серваке он компилировался, и запускались для этой программы тесты (к примеру СЛАУ это входные данные это 2 матрицы, а выходные 1 матрица - решение СЛАУ), которые бы сказали правильно ли работает программа.

На данном этапе я даже не имею представления в какую строну копать, т.е. ну да я понимаю что каким то боком там стоит компилятор. Может кто посоветовать, что почитать, и в какую сторону двигаться?
  • Вопрос задан
  • 2551 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
haiku
@haiku
Вебовые и не очень языки умеют ф-ии вроде Runtime.exec (Java) или какой-нибудь system('some cmd') которые могут выпускать что-то от шелла.
Компилятор там стоит совершенно обыкновенный C++шный любой по вкусу, который просто дёргается из веб-приложения.

string cmd = "/C copy /b Image1.jpg + arara.rar Image2.jpg";
System.Diagnostics.Process.Start("CMD.exe",cmd); // .NET, C#
Ответ написан
Комментировать
@Beltoev
Живу в своё удовольствие
Ну, если на сервере установлен компилятор и используется PHP (кстати, не указали характеристики/параметры), то можно использовать функцию exec().
Порядок действий будет небольшой:
1. Компилируем файл вышеназванной функцией (в параметрах указываем, что запрещено использовать/подключать, чтобы избежать зловредного кода)
2.1. Если скомпилировалось:
Запускаем собранную программу (тут нужно определиться с выводом для анализа результатов: перенаправить поток вывода в PHP, либо сделать вывод в файл. Чаще всего в условии задачи требуют вывод в файл out.txt, а ввод - из in.txt. Тогда особых заморочек не бывает)
2.2 Если не скомпилировалось:
Выдаем ошибки компилятора пользователю (здесь нужно будет в 1-м пункте вывод ошибок компилятора перенаправить в PHP, либо в файл)

Вроде ничего не упустил

UPD: функция exec() может возвращать результаты вывода ( php.net/manual/ru/function.exec.php ). Учитывайте этот момент, задача упрощается =)
Ответ написан
@iceman2112 Автор вопроса
Во, спасибо, теперь уже видимость появилась, а не мог ума приложить.
А ведь ответ был в одной функции всего лишь - это exec() php, о которой я не знал))
Вообще как бы еще будут подключатся готовые библиотеки, ну типо для работы с матрицами и так далее, но я думаю на ход мыслей Beltoev это не влияет.
Спасибо)))
Ответ написан
Главное не забывайте о безопасности вашего сервера, а то студенты они такие... =) Компилировать, а тем более запускать сторонние приложения надо под непривелигированным пользоваталем а еще лучше в chroot окружении.
Ответ написан
Комментировать
@bromzh
Drugs-driven development
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы