Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 66 additions & 24 deletions starter/lab3_task1.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,58 +3,91 @@
* ICS 2371 — Lab 3: Control Structures I
* Task 1: Simple if and if-else — Warm-Up Exercises [5 marks]
*
* @author [Your Full Name]
* @student [Your Reg Number, e.g. SCT212-XXXX/2024]
* @author [Joshua Mativo]
* @student [ENE212-0071/2023]
* @lab Lab 3 of 14
* @unit ICS 2371
* @date [Date completed]
* @date [2/4/2026]
*/

echo "<h2>Task 1 — Warm-Up Exercises</h2>";
echo "<hr>";

// ══════════════════════════════════════════════════════════════
// EXERCISE A — Temperature Alert System
// ══════════════════════════════════════════════════════════════
// Declare $temperature = 39.2
// Use separate if statements (not if-else) to print:
// "Normal" if temp is between 36.1 and 37.5 inclusive
// "Fever" if temp > 37.5
// "Hypothermia Warning" if temp < 36.1
// Test with: 36.8, 39.2, 34.5 — screenshot each
echo "<h3>Exercise A — Temperature Alert System</h3>";

$temperature = 34.5; // change to 36.8 and 34.5 for other test screenshots

// TODO: Exercise A — your code here
echo "Temperature: {$temperature}°C &nbsp;→&nbsp; ";

if ($temperature >= 36.1 && $temperature <= 37.5) {
echo "<strong>Normal</strong>";
}
if ($temperature > 37.5) {
echo "<strong style='color:red;'>Fever</strong>";
}
if ($temperature < 36.1) {
echo "<strong style='color:blue;'>Hypothermia Warning</strong>";
}
echo "<br>";

// ══════════════════════════════════════════════════════════════
// EXERCISE B — Even or Odd
// ══════════════════════════════════════════════════════════════
// Declare $number = 47
// Use if-else to print "$number is EVEN" or "$number is ODD"
// Also check divisibility by 3, by 5, and by both 3 and 5 — one line each
echo "<h3>Exercise B — Even or Odd</h3>";

$number = 47;

// TODO: Exercise B — your code here
if ($number % 2 === 0) {
echo "$number is <strong>EVEN</strong><br>";
} else {
echo "$number is <strong>ODD</strong><br>";
}

// Divisibility checks
if ($number % 3 === 0) {
echo "$number is divisible by 3<br>";
} else {
echo "$number is NOT divisible by 3<br>";
}

if ($number % 5 === 0) {
echo "$number is divisible by 5<br>";
} else {
echo "$number is NOT divisible by 5<br>";
}

if ($number % 3 === 0 && $number % 5 === 0) {
echo "$number is divisible by both 3 and 5<br>";
} else {
echo "$number is NOT divisible by both 3 and 5<br>";
}

// ══════════════════════════════════════════════════════════════
// EXERCISE C — Comparison Chain
// ══════════════════════════════════════════════════════════════
// Run this code EXACTLY as written.
// Record all six outputs in your report and explain each result.
echo "<h3>Exercise C — Comparison Chain</h3>";
echo "<pre>";

$x = 10; $y = "10"; $z = 10.0;

var_dump($x == $y); // A: ?
var_dump($x === $y); // B: ?
var_dump($x == $z); // C: ?
var_dump($x === $z); // D: ?
var_dump($y === $z); // E: ?
var_dump($x <=> $y); // F: spaceship — what type? what value?
echo "x = 10 (int), y = \"10\" (string), z = 10.0 (float)\n\n";

// Your explanation of each result goes in your PDF report (not here).
echo "A: var_dump(\$x == \$y) → "; var_dump($x == $y); // bool(true)
echo "B: var_dump(\$x === \$y) → "; var_dump($x === $y); // bool(false)
echo "C: var_dump(\$x == \$z) → "; var_dump($x == $z); // bool(true)
echo "D: var_dump(\$x === \$z) → "; var_dump($x === $z); // bool(false)
echo "E: var_dump(\$y === \$z) → "; var_dump($y === $z); // bool(false)
echo "F: var_dump(\$x <=> \$y) → "; var_dump($x <=> $y); // int(0)

echo "</pre>";

// ══════════════════════════════════════════════════════════════
// EXERCISE D — Null & Default Values
// ══════════════════════════════════════════════════════════════
// Run this code as written, then extend it as instructed below.
echo "<h3>Exercise D — Null Coalescing Operator (??)</h3>";

$username = null;
$display = $username ?? "Guest";
Expand All @@ -68,3 +101,12 @@
echo "Config: $result<br>";

// TODO: Add one more chained ?? example of your own and explain it in your report.
// Custom example — simulating a user profile with fallback display name
$db_name = null; // not found in database
$session_name = null; // not set in session
$cookie_name = "Alice"; // found in cookie
$fallback = "Anonymous";

$display_name = $db_name ?? $session_name ?? $cookie_name ?? $fallback;
echo "Display name (db → session → cookie → fallback): <strong>$display_name</strong><br>";
echo "<small>Explanation: \$db_name and \$session_name are null, so PHP falls through to \$cookie_name = 'Alice'.</small><br>";
99 changes: 82 additions & 17 deletions starter/lab3_task2.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,23 @@
* report BEFORE writing any code below. Marks are awarded for all
* three components: pseudocode, flowchart, and working code.
*
* @author [Your Full Name]
* @student [Your Reg Number, e.g. SCT212-XXXX/2024]
* @author [Joshua Mativo]
* @student [ENE212-0071/2023]
* @lab Lab 3 of 14
* @unit ICS 2371
* @date [Date completed]
* @date [2/4/2026]
*/

echo "<h2>Task 2 — JKUAT Grade Classification System</h2>";
echo "<hr>";

// ── Test Data Set A (change values to run other test sets) ─────────────────
$name = "Your Name";
$cat1 = 8; // out of 10
$cat2 = 7; // out of 10
$cat3 = 9; // out of 10
$cat4 = 6; // out of 10
$exam = 52; // out of 60
$cat1 = 0; // out of 10
$cat2 = 0; // out of 10
$cat3 = 0; // out of 10
$cat4 = 0; // out of 10
$exam = 15; // out of 60

// ── Grade Rules (implement using if-elseif-else, ordered highest first) ────
// A (Distinction): Total >= 70
Expand All @@ -41,23 +44,85 @@
// Otherwise: "Not eligible for supplementary"

// ── STEP 1: Compute total ─────────────────────────────────────────────────
// TODO: compute $total

$total = $cat1 + $cat2 + $cat3 + $cat4 + $exam;

// ── STEP 2: Count CATs attended ───────────────────────────────────────────
// TODO: compute $cats_attended (each CAT > 0 counts as attended)

$cats_attended = 0;
if ($cat1 > 0) $cats_attended++;
if ($cat2 > 0) $cats_attended++;
if ($cat3 > 0) $cats_attended++;
if ($cat4 > 0) $cats_attended++;

// ── STEP 3: Eligibility check (nested if) ─────────────────────────────────
// TODO: nested if — eligibility → grade classification → supplementary ternary
$eligibility = "";
$grade = "";
$remark = "";
$supplementary = "";

if ($cats_attended >= 3 && $exam >= 20) {

// ── STEP 4: Display formatted HTML report card ────────────────────────────
// TODO: output a clear, formatted report card showing:
// student name, each CAT score, exam score, total,
// cats attended, eligibility status, grade, remark, supplementary status
// Grade classification — highest first
if ($total >= 70) {
$grade = "A";
$remark = "Distinction";
} elseif ($total >= 65) {
$grade = "B+";
$remark = "Credit Upper";
} elseif ($total >= 60) {
$grade = "B";
$remark = "Credit Lower";
} elseif ($total >= 55) {
$grade = "C+";
$remark = "Pass Upper";
} elseif ($total >= 50) {
$grade = "C";
$remark = "Pass Lower";
} elseif ($total >= 40) {
$grade = "D";
$remark = "Marginal Pass";
} else {
$grade = "E";
$remark = "Fail";
}

$eligibility = "ELIGIBLE";

// Supplementary ternary
$supplementary = ($grade === "D")
? "Eligible for Supplementary Exam"
: "Not eligible for supplementary";

} else {
$eligibility = "DISQUALIFIED — Exam conditions not met";
$grade = "N/A";
$remark = "N/A";
$supplementary = "N/A";
}

// ── STEP 4: Display formatted HTML report card ────────────────────────────
$eligible_color = str_starts_with($eligibility, "DISQ") ? "#c0392b" : "#27ae60";
?>
<div style="font-family:Arial;max-width:480px;border:2px solid #2E75B6;border-radius:8px;padding:20px;margin:20px auto;">
<h3 style="color:#1F3864;text-align:center;margin:0 0 12px;">JKUAT Grade Report Card</h3>
<hr style="border-color:#2E75B6;">
<table style="width:100%;border-collapse:collapse;font-size:14px;">
<tr><td><b>Student:</b></td><td><?= htmlspecialchars($name) ?></td></tr>
<tr><td><b>CAT 1:</b></td><td><?= $cat1 ?> / 10</td></tr>
<tr><td><b>CAT 2:</b></td><td><?= $cat2 ?> / 10</td></tr>
<tr><td><b>CAT 3:</b></td><td><?= $cat3 ?> / 10</td></tr>
<tr><td><b>CAT 4:</b></td><td><?= $cat4 ?> / 10</td></tr>
<tr><td><b>Final Exam:</b></td><td><?= $exam ?> / 60</td></tr>
<tr><td><b>Total:</b></td><td><?= $total ?> / 100</td></tr>
<tr><td><b>CATs Attended:</b></td><td><?= $cats_attended ?> of 4</td></tr>
<tr><td><b>Status:</b></td>
<td style="color:<?= $eligible_color ?>;font-weight:bold;"><?= $eligibility ?></td></tr>
<tr><td><b>Grade:</b></td><td style="font-size:1.3em;color:#2E75B6;"><b><?= $grade ?></b></td></tr>
<tr><td><b>Remark:</b></td><td><?= $remark ?></td></tr>
<tr><td><b>Supplementary:</b></td><td><?= $supplementary ?></td></tr>
</table>
</div>

<?php
// ── Required Test Data Sets — screenshot each ─────────────────────────────
// Set A: cat1=8, cat2=7, cat3=9, cat4=6, exam=52 → expect grade B
// Set B: cat1=9, cat2=8, cat3=0, cat4=9, exam=55 → expect grade A (check cats_attended)
Expand Down
Loading
Loading