Разделение в цикле

У меня проблема с делением в цикле. У меня есть комбинированная форма со множественным выбором, которая содержит урок. Эта форма используется для хранения данных о часах обучения для учителей. Каждый учитель может преподавать более одного урока.

<form class="form-vertical" method="POST" action="http://localhost/penjadwalan/administrator/jammengajar/add_process">
<fieldset>
<legend>Tambah Data</legend>
<div class="col-lg-6">
<div class="form-group">
<label for="order">Guru</label>
<input id="teacher" name="teacher" value="TI" type="text">
</div>
<div class="form-group">
<label for="order">Mata Pelajaran</label>
<select name="lesson[]" multiple class="form-control chosen-select">
<option value="108">Teknik Informatika - Prakarya</option>
<option value="107">Antropologi</option>
<option value="81">Sosiologi</option>
<option value="74">Seni Budaya</option>
<option value="70">Bahasa Sunda</option>
<option value="68">Seni Musik</option>
</select>
</div>
<div class="form-group">
<label for="order">Total Hours</label>
<input id="total_jam" name="total_hours" value="" type="text" placeholder="" class="form-control input-md">
</div>
<div class="form-group">
<button id="" name="" class="btn btn-primary"><i class="fa fa-save"></i> Simpan Data</button>
</div>
</div>
</fieldset>
</form>

Каждый урок имеет квоту часов в диапазоне от 1 до 4. Я приведу пример

  • учитель: энди
  • урок: математика (4 часа), химия (2 часа)
  • всего часов: 30 часов

По данным выше, учитель имеет 2 урока. Итак, для математики должно быть 16 часов, для химии — 14 часов. Теперь, как автоматически разделить ее на общее количество часов и уроков?

Сценарий процесса, который я сделал

if ($lesson > 1) {
$class = $total_hours / $lesson;

if ($class % 2 == 0) {
$class = $class;
} else {
$class = $class + 1;
$remaining_class = $total / $lesson - 1;
}
} else {
$class = $total_hours;
}

if (count($lesson) > 1) {
foreach ($lesson as $v) {
$lesson_data = $this->pelajaran->getIdLesson($v);
$class = $this->kelas->getAllClassByFaculty($mappel->kelompok_mapel)->result();
$total_class = count($class);
$n = $class / $lesson_data->jumlah_jam;
foreach ($kelas_jurusan as $vals) {
if ($i < $n) {
$jammengajar = array('kode_guru' => $kode_guru,
'id_mapel' => $mappel->id_mapel,
'jumlah_jam' => $mappel->jumlah_jam,
'id_kelas' => $vals->id_kelas
);
$this->jammengajar->addJamMengajar($jammengajar);
} else {

}
$i++;
}
}
} else {

}

-3

Решение

Если я правильно понимаю, есть несколько способов сделать это.

Самый простой подход, рассматривая его как вектор:

Добавьте свои часы для каждого класса, разделите на общее количество. Итак, из вашего примера:

учитель: энди
урок: математика (4 часа), химия (2 часа)
всего часов: 30 часов

Вы должны взять 30 / (4 + 2) = 5, а затем умножить каждый класс на числовое значение, что даст вам 4 * 5 = 20 часов математики и 2 * 5 = 10 часов химии.

Проблема, с которой вы столкнетесь при использовании этого или любого другого решения, заключается в том, что часы не могут работать (если это возможный сценарий), например 31 час, и в этом случае вы захотите принять «минимальное» значение вашего коэффициента ( то есть 31 / (4 + 2) = 5,16, так что вы все равно просто сделаете 5).

Оттуда вы можете взять любой остаток, проверить, меньше ли он, чем меньший класс, и, если это так, заполнить меньший класс (за 32 часа вы получите 32 / (4 + 2), что составляет 5,33333, до 5, затем повторите с оставшимися двумя часами, что даст вам 20 часов математики и 12 часов химии).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]