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); +}