diff --git a/git b/git
new file mode 100644
index 0000000..e69de29
diff --git a/starter/lab3_task1.php b/starter/lab3_task1.php
index f396a7e..46162c9 100644
--- a/starter/lab3_task1.php
+++ b/starter/lab3_task1.php
@@ -3,11 +3,11 @@
* 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 [Michelle Muthoni Mwangi]
+ * @student [ENE212-0064/2023]
* @lab Lab 3 of 14
* @unit ICS 2371
- * @date [Date completed]
+ * @date [08/04/2026]
*/
// ══════════════════════════════════════════════════════════════
@@ -20,7 +20,20 @@
// "Hypothermia Warning" if temp < 36.1
// Test with: 36.8, 39.2, 34.5 — screenshot each
-// TODO: Exercise A — your code here
+// Exercise A implementation
+$temperature = 39.2;
+
+if ($temperature >= 36.1 && $temperature <= 37.5) {
+ echo "Normal
";
+}
+
+if ($temperature > 37.5) {
+ echo "Fever
";
+}
+
+if ($temperature < 36.1) {
+ echo "Hypothermia Warning
";
+}
// ══════════════════════════════════════════════════════════════
@@ -30,7 +43,20 @@
// 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
-// TODO: Exercise B — your code here
+// Exercise B implementation
+$number = 47;
+
+// Even or Odd
+if ($number % 2 === 0) {
+ echo "$number is EVEN
";
+} else {
+ echo "$number is ODD
";
+}
+
+// Divisibility checks
+echo ($number % 3 === 0) ? "$number is divisible by 3
" : "$number is not divisible by 3
";
+echo ($number % 5 === 0) ? "$number is divisible by 5
" : "$number is not divisible by 5
";
+echo ($number % 3 === 0 && $number % 5 === 0) ? "$number is divisible by both 3 and 5
" : "$number is not divisible by both 3 and 5
";
// ══════════════════════════════════════════════════════════════
@@ -67,4 +93,11 @@
$result = $config_val ?? $env_val ?? $default;
echo "Config: $result
";
+// Additional chained null coalescing example
+$user_pref = null; // user has not set a preference
+$system_pref = "dark"; // system-wide preference
+$fallback = "light"; // ultimate fallback
+$theme = $user_pref ?? $system_pref ?? $fallback;
+echo "Theme: $theme
";
+
// TODO: Add one more chained ?? example of your own and explain it in your report.
diff --git a/starter/lab3_task2.php b/starter/lab3_task2.php
index b03e13c..09eac5e 100644
--- a/starter/lab3_task2.php
+++ b/starter/lab3_task2.php
@@ -7,60 +7,83 @@
* 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 [Michelle Muthoni Mwangi]
+ * @student [ENE212-0064/2023]
* @lab Lab 3 of 14
* @unit ICS 2371
- * @date [Date completed]
+ * @date [08/04/2026]
*/
-// ── 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
+// ── Test Data Sets (A–E)
+$testSets = [
+ 'Set A' => [
+ 'name' => 'Michelle Muthoni Mwangi',
+ 'cat1' => 8, 'cat2' => 7, 'cat3' => 9, 'cat4' => 6, 'exam' => 52
+ ],
+ 'Set B' => [
+ 'name' => 'Michelle Muthoni Mwangi',
+ 'cat1' => 9, 'cat2' => 8, 'cat3' => 0, 'cat4' => 9, 'exam' => 55
+ ],
+ 'Set C' => [
+ 'name' => 'Michelle Muthoni Mwangi',
+ 'cat1' => 0, 'cat2' => 0, 'cat3' => 7, 'cat4' => 0, 'exam' => 48
+ ],
+ 'Set D' => [
+ 'name' => 'Michelle Muthoni Mwangi',
+ 'cat1' => 5, 'cat2' => 4, 'cat3' => 6, 'cat4' => 3, 'exam' => 22
+ ],
+ 'Set E' => [
+ 'name' => 'Michelle Muthoni Mwangi',
+ 'cat1' => 0, 'cat2' => 0, 'cat3' => 0, 'cat4' => 0, 'exam' => 15
+ ],
+];
-// ── Grade Rules (implement using if-elseif-else, ordered highest first) ────
-// A (Distinction): Total >= 70
-// B+ (Credit Upper): Total >= 65
-// B (Credit Lower): Total >= 60
-// C+ (Pass Upper): Total >= 55
-// C (Pass Lower): Total >= 50
-// D (Marginal Pass): Total >= 40
-// E (Fail): Total < 40
+function generate_report($label, $name, $cat1, $cat2, $cat3, $cat4, $exam) {
+ // STEP 1
+ $total = $cat1 + $cat2 + $cat3 + $cat4 + $exam;
-// ── Eligibility Rule (implement using nested if) ───────────────────────────
-// Must have attended at least 3 of 4 CATs (CAT score > 0 counts as attended)
-// AND exam score >= 20
-// Otherwise: "DISQUALIFIED — Exam conditions not met"
+ // STEP 2
+ $cats_attended = 0;
+ foreach ([$cat1, $cat2, $cat3, $cat4] as $cat) {
+ if ($cat > 0) $cats_attended++;
+ }
-// ── Supplementary Rule (implement using ternary) ──────────────────────────
-// If grade is D: "Eligible for Supplementary Exam"
-// Otherwise: "Not eligible for supplementary"
+ // STEP 3
+ if ($cats_attended >= 3 && $exam >= 20) {
+ $eligibility = 'ELIGIBLE';
-// ── STEP 1: Compute total ─────────────────────────────────────────────────
-// TODO: compute $total
+ 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'; }
+ $supplementary = ($grade === 'D') ? 'Eligible for Supplementary Exam' : 'Not eligible for supplementary';
-// ── STEP 2: Count CATs attended ───────────────────────────────────────────
-// TODO: compute $cats_attended (each CAT > 0 counts as attended)
+ } else {
+ $eligibility = 'DISQUALIFIED — Exam conditions not met';
+ $grade = 'N/A';
+ $remark = 'DISQUALIFIED';
+ $supplementary = 'Not eligible for supplementary';
+ }
+ // STEP 4: Output
+ echo "
$label
";
+ echo "Name: $name
";
+ echo "CAT1: $cat1 CAT2: $cat2 CAT3: $cat3 CAT4: $cat4
";
+ echo "Exam: $exam
";
+ echo "Total: $total
";
+ echo "CATs attended: $cats_attended
";
+ echo "Eligibility: $eligibility
";
+ echo "Grade: $grade
";
+ echo "Remark: $remark
";
+ echo "Supplementary: $supplementary
";
+}
-// ── STEP 3: Eligibility check (nested if) ─────────────────────────────────
-// TODO: nested if — eligibility → grade classification → supplementary ternary
-
-
-// ── 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
-
-
-// ── 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)
-// Set C: cat1=0, cat2=0, cat3=7, cat4=0, exam=48 → expect DISQUALIFIED
-// Set D: cat1=5, cat2=4, cat3=6, cat4=3, exam=22 → expect grade D + supp eligible
-// Set E: cat1=0, cat2=0, cat3=0, cat4=0, exam=15 → expect DISQUALIFIED
+// Run reports for all test sets
+foreach ($testSets as $label => $data) {
+ generate_report($label, $data['name'], $data['cat1'], $data['cat2'], $data['cat3'], $data['cat4'], $data['exam']);
+}
+?>
diff --git a/starter/lab3_task3.php b/starter/lab3_task3.php
index d9e00c8..e006f17 100644
--- a/starter/lab3_task3.php
+++ b/starter/lab3_task3.php
@@ -3,11 +3,11 @@
* ICS 2371 — Lab 3: Control Structures I
* Task 3: switch-case and match Expression [6 marks]
*
- * @author [Your Full Name]
- * @student [Your Reg Number, e.g. SCT212-XXXX/2024]
+ * @author [Michelle Muthoni Mwangi]
+ * @student [ENE212-0064/2023]
* @lab Lab 3 of 14
* @unit ICS 2371
- * @date [Date completed]
+ * @date [08/04/2026]
*/
// ══════════════════════════════════════════════════════════════
@@ -21,7 +21,31 @@
$day = 3; // change this to test all cases
-// TODO: switch-case for day classifier
+// Exercise A: switch-case for day classifier
+switch ($day) {
+ case 1:
+ echo "Monday — Lecture day
";
+ break;
+ case 2:
+ echo "Tuesday — Lecture day
";
+ break;
+ case 3:
+ echo "Wednesday — Lecture day
";
+ break;
+ case 4:
+ echo "Thursday — Lecture day
";
+ break;
+ case 5:
+ echo "Friday — Lecture day
";
+ break;
+ case 6:
+ case 7:
+ echo "Weekend
";
+ break;
+ default:
+ echo "Invalid day (must be 1–7)
";
+ break;
+}
// ══════════════════════════════════════════════════════════════
@@ -39,15 +63,54 @@
$status_code = 404;
-// TODO: switch-case for HTTP status
+// switch-case implementation
+switch ($status_code) {
+ case 200:
+ $explain = "OK — request succeeded";
+ break;
+ case 301:
+ $explain = "Moved Permanently — resource relocated";
+ break;
+ case 400:
+ $explain = "Bad Request — client error";
+ break;
+ case 401:
+ $explain = "Unauthorized — authentication required";
+ break;
+ case 403:
+ $explain = "Forbidden — access denied";
+ break;
+ case 404:
+ $explain = "Not Found — resource missing";
+ break;
+ case 500:
+ $explain = "Internal Server Error — server fault";
+ break;
+ default:
+ $explain = "Unknown status code";
+ break;
+}
+
+echo "Switch: $status_code -> $explain
";
// ══════════════════════════════════════════════════════════════
// EXERCISE C — PHP 8 match Expression
// ══════════════════════════════════════════════════════════════
-// Rewrite Exercise B using PHP 8 match instead of switch-case.
-// Note: match uses STRICT comparison (===). No break needed.
-// Observe the difference in syntax and behaviour.
+// Rewrite Exercise B using match (strict comparison)
+
+$explain_match = match ($status_code) {
+ 200 => "OK — request succeeded",
+ 301 => "Moved Permanently — resource relocated",
+ 400 => "Bad Request — client error",
+ 401 => "Unauthorized — authentication required",
+ 403 => "Forbidden — access denied",
+ 404 => "Not Found — resource missing",
+ 500 => "Internal Server Error — server fault",
+ default => "Unknown status code",
+};
+
+echo "Match: $status_code -> $explain_match
";
// TODO: match expression for HTTP status — same logic as Exercise B
diff --git a/starter/lab3_task4.php b/starter/lab3_task4.php
index 2a3d225..c160025 100644
--- a/starter/lab3_task4.php
+++ b/starter/lab3_task4.php
@@ -6,11 +6,11 @@
* IMPORTANT: You must complete pseudocode AND flowchart in your PDF
* report BEFORE writing any code below.
*
- * @author [Your Full Name]
- * @student [Your Reg Number, e.g. SCT212-XXXX/2024]
+ * @author [Michelle Muthoni Mwangi]
+ * @student [ENE212-0064/2023]
* @lab Lab 3 of 14
* @unit ICS 2371
- * @date [Date completed]
+ * @date [8/04/2026]
*/
// ── Problem: Student Loan Eligibility System ───────────────────────────────
@@ -37,23 +37,64 @@
// $previous_loan = true/false
// If eligible: use ternary to append "| Renewal application" or "| New application"
-// ── Test data (change to test all branches) ───────────────────────────────
-$enrolled = true;
-$gpa = 3.1;
-$annual_income = 180000;
-$previous_loan = false;
+// ── Test data sets A–E and runner ────────────────────────────────────────
+$testSets = [
+ 'Set A' => [
+ 'enrolled' => true, 'gpa' => 3.1, 'annual_income' => 180000, 'previous_loan' => false
+ ],
+ 'Set B' => [
+ 'enrolled' => true, 'gpa' => 1.8, 'annual_income' => 80000, 'previous_loan' => false
+ ],
+ 'Set C' => [
+ 'enrolled' => false, 'gpa' => 3.5, 'annual_income' => 60000, 'previous_loan' => true
+ ],
+ 'Set D' => [
+ 'enrolled' => true, 'gpa' => 2.5, 'annual_income' => 600000, 'previous_loan' => true
+ ],
+ 'Set E' => [
+ 'enrolled' => true, 'gpa' => 2.0, 'annual_income' => 50000, 'previous_loan' => true
+ ],
+];
-// ── STEP 1: Outer enrollment check ────────────────────────────────────────
-// TODO: nested if structure implementing all rules above
+function evaluate_set($label, $data) {
+ $enrolled = $data['enrolled'];
+ $gpa = $data['gpa'];
+ $annual_income = $data['annual_income'];
+ $previous_loan = $data['previous_loan'];
+ // decision logic
+ $decision = '';
+ if (!$enrolled) {
+ $decision = 'Not eligible — must be an active student';
+ } else {
+ if ($gpa < 2.0) {
+ $decision = 'Not eligible — GPA below minimum (2.0)';
+ } else {
+ if ($annual_income < 100000) {
+ $decision = 'Eligible — Full loan award';
+ } elseif ($annual_income < 250000) {
+ $decision = 'Eligible — Partial loan (75%)';
+ } elseif ($annual_income < 500000) {
+ $decision = 'Eligible — Partial loan (50%)';
+ } else {
+ $decision = 'Not eligible — household income exceeds threshold';
+ }
-// ── STEP 2: Display result ────────────────────────────────────────────────
-// TODO: output formatted result showing all input values and the decision
+ if (strpos($decision, 'Eligible') === 0) {
+ $decision .= ($previous_loan ? ' | Renewal application' : ' | New application');
+ }
+ }
+ }
+ // output
+ echo "
$label
";
+ echo "Enrolled: " . ($enrolled ? 'Yes' : 'No') . "
";
+ echo "GPA: $gpa
";
+ echo "Annual Income: KES $annual_income
";
+ echo "Previous Loan: " . ($previous_loan ? 'Yes' : 'No') . "
";
+ echo "Decision: $decision
";
+}
-// ── Required Test Data Sets — screenshot each ─────────────────────────────
-// Set A: enrolled=true, gpa=3.1, income=180000, previous=false → Partial 75%
-// Set B: enrolled=true, gpa=1.8, income=80000, previous=false → GPA fail
-// Set C: enrolled=false, gpa=3.5, income=60000, previous=true → Not enrolled
-// Set D: enrolled=true, gpa=2.5, income=600000, previous=true → Income fail
-// Set E: enrolled=true, gpa=2.0, income=50000, previous=true → Full | Renewal
+foreach ($testSets as $label => $data) {
+ evaluate_set($label, $data);
+}