Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

PL/SQL: พิมพ์เลขคี่และผลรวมจาก 1 ถึง N

โจทย์

รับตัวเลข n พิมพ์เลขคี่ทั้งหมดจาก 1 ถึง n และคำนวณผลรวม

ตัวอย่าง: Input 7 → Output: 1, 3, 5,7 | Sum = 16

โค้ด PL/SQL (Oracle)

DECLARE
    num NUMBER(3) := 1;
    sumvar NUMBER(4) := 0;
BEGIN
    DBMS_OUTPUT.PUT_LINE('The odd numbers are: ');
    WHILE num <= 7 LOOP
        DBMS_OUTPUT.PUT_LINE(num);
        sumvar := sumvar + num;
        num := num + 2;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('Sum of odd numbers is ' || sumvar);
END;
/

ผลลัพธ์

The odd numbers are:
1
3
5
7
Sum of odd numbers is 16

อธิบายโค้ด

  • DECLARE ส่วนประกาศตัวแปร
  • num เริ่มที่ 1 (เลขคี่แรก)
  • sumvar สะสมผลรวม
  • WHILE num <= 7 LOOP ... END LOOP วนลูปจนกว่า num > 7
  • DBMS_OUTPUT.PUT_LINE พิมพ์แต่ละบรรทัด (ต้อง SET SERVEROUTPUT ON ใน SQL*Plus)
  • || ต่อสตริง (Concatenation)

แก้ไขโค้ดต้นฉบับ (มี Bug)

โค้ดต้นฉบับมีข้อผิดพลาด:

  • ใช้ num ใน WHILE แต่ประกาศชื่อ number (Oracle ไม่อนุญาตชื่อ Reserved Word)
  • ใช้ sum1 ใน PUT_LINE สุดท้าย แต่ตัวแปรชื่อ sumvar

โค้ดด้านบนแก้ไขแล้ว

รูปแบบ Parameterized (รับ n เข้ามา)

CREATE OR REPLACE PROCEDURE print_odd_sum(p_n IN NUMBER) AS
    v_num NUMBER := 1;
    v_sum NUMBER := 0;
BEGIN
    DBMS_OUTPUT.PUT_LINE('Odd numbers up to ' || p_n || ':');
    WHILE v_num <= p_n LOOP
        DBMS_OUTPUT.PUT_LINE(v_num);
        v_sum := v_sum + v_num;
        v_num := v_num + 2;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('Sum = ' || v_sum);
END;
/

-- เรียกใช้
SET SERVEROUTPUT ON
EXEC print_odd_sum(7);

MySQL Equivalent (Stored Procedure)

DELIMITER //
CREATE PROCEDURE print_odd_sum(IN p_n INT)
BEGIN
    DECLARE v_num INT DEFAULT 1;
    DECLARE v_sum INT DEFAULT 0;
    DECLARE v_output TEXT DEFAULT '';
    
    WHILE v_num <= p_n DO
        SET v_output = CONCAT(v_output, v_num, ', ');
        SET v_sum = v_sum + v_num;
        SET v_num = v_num + 2;
    END WHILE;
    
    SELECT TRIM(TRAILING ', ' FROM v_output) AS OddNumbers, v_sum AS SumOfOdds;
END //
DELIMITER ;

CALL print_odd_sum(7);

ทางคณิตศาสตร์ (ไม่ต้อง Loop)

ผลรวมเลขคี่ 1 ถึง n (n เป็นเลขคี่): ((n+1)/2)^2

  • n=7: ((7+1)/2)^2 = 4^2 = 16 ✓
  • n=9: ((9+1)/2)^2 = 5^2 = 25 (1+3+5+7+9=25) ✓