📌"NHẬP VÀO BA GIÁ TRỊ SỐ ÉP BUỘC KIỂU NGUYÊN NHẬP LẠI ĐẾN KHI ĐÚNG THÌ HIỂN THỊ RA KẾT QUẢ TÍNH TỔNG 3 SỐ ĐÓ"❓
ONLINE
🚀PASCAL (Delphi)
program TinhTongBaSoVoiKiemTra;
uses SysUtils; // Cần dùng SysUtils (hoặc tương đương) cho hàm Val
var
s: string; // Biến để lưu chuỗi nhập liệu
soA, soB, soC, Tong: integer;
errorCode: integer; // Biến để Val() trả về mã lỗi
// Hàm lặp lại việc nhập liệu cho đến khi là số nguyên hợp lệ
procedure NhapSoNguyen(prompt: string; var value: integer);
begin
repeat
write(prompt);
readln(s); // Đọc đầu vào dưới dạng chuỗi
// Hàm Val cố gắng chuyển chuỗi s thành integer value.
// Nếu thành công, errorCode = 0. Nếu không, errorCode > 0.
Val(s, value, errorCode);
if errorCode <> 0 then
writeln('Loi: Hay nhap mot so nguyen hop le!');
until errorCode = 0; // Lặp lại cho đến khi không có lỗi
end;
begin
// 1. INPUT VÀ XÁC THỰC
NhapSoNguyen('Nhap so nguyen thu nhat (A): ', soA);
NhapSoNguyen('Nhap so nguyen thu hai (B): ', soB);
NhapSoNguyen('Nhap so nguyen thu ba (C): ', soC);
// 2. PROCESS: Tính toán
Tong := soA + soB + soC;
// 3. OUTPUT: Hiển thị kết quả
writeln('-----------------------------------');
writeln('Tong cua ba so nguyen la: ', Tong);
end.
🚀C++
#include
#include // Cần thiết cho std::numeric_limits
/* Hàm lặp lại việc nhập liệu cho đến khi là số nguyên hợp lệ */
int NhapSoNguyen(const std::string& prompt) {
int value;
while (true) { // Vòng lặp vô hạn
std::cout << prompt;
// Cố gắng đọc giá trị vào biến value KIỂU int
if (std::cin >> value) {
// 1. CHUYỂN ĐỔI THÀNH CÔNG: Thoát khỏi vòng lặp
break;
} else {
// 2. CHUYỂN ĐỔI THẤT BẠI (nhập chữ, số thực, v.v.)
std::cout << "Loi: Hay nhap mot so nguyen hop le!" << std::endl;
// Đặt lại cờ lỗi của luồng cin để có thể tiếp tục đọc
std::cin.clear();
// Bỏ qua phần còn lại của đầu vào hiện tại để tránh lặp vô hạn
std::cin.ignore(std::numeric_limits::max(), '\n');
}
}
return value;
}
int main() {
// 1. INPUT VÀ XÁC THỰC
int soA = NhapSoNguyen("Nhap so nguyen thu nhat (A): ");
int soB = NhapSoNguyen("Nhap so nguyen thu hai (B): ");
int soC = NhapSoNguyen("Nhap so nguyen thu ba (C): ");
// 2. PROCESS: Tính toán
int Tong = soA + soB + soC;
// 3. OUTPUT: Hiển thị kết quả
std::cout << "-----------------------------------" << std::endl;
std::cout << "Tong cua ba so nguyen la: " << Tong << std::endl;
return 0;
}
🚀PYTHON
# Chương trình Python nhận 3 số và lặp lại cho đến khi là số nguyên
def nhap_so_nguyen(prompt):
"""
Hàm lặp lại việc nhập liệu cho đến khi là số nguyên hợp lệ.
"""
while True: # Vòng lặp vô hạn
try:
# Cố gắng chuyển đổi đầu vào thành số nguyên
value = int(input(prompt))
# Nếu thành công, thoát khỏi vòng lặp
return value
except ValueError:
# Nếu int() thất bại (vì nhập chữ cái, số thực, v.v.),
# Python sẽ ném ra lỗi ValueError và khối except sẽ bắt lỗi đó.
print("Lỗi: Hãy nhập một số nguyên hợp lệ!")
# Vòng lặp tự động quay lại đầu
# 1. INPUT VÀ XÁC THỰC
soA = nhap_so_nguyen("Nhap so nguyen thu nhat (A): ")
soB = nhap_so_nguyen("Nhap so nguyen thu hai (B): ")
soC = nhap_so_nguyen("Nhap so nguyen thu ba (C): ")
# 2. PROCESS: Tính toán
Tong = soA + soB + soC
# 3. OUTPUT: Hiển thị kết quả
print("-" * 35) # In ra một đường ngang 35 ký tự
print(f"Tổng của ba số nguyên là: {Tong}")
×
HỎI THÀY
VUI LÒNG MỞ CỔNG GẶP THÀY NHÉ!
Bạn cần nhập mã xác thực từ hệ thống để xem tiếp phần hướng dẫn chi tiết bên dưới.
✅ Xác thực thành công!
HƯỚNG DẪN
HỎI THUẬT TOÁN❓
🚀 Tổng quan về Giải pháp (Thuật toán chi tiết)
Quá trình này sẽ được thực hiện cho từng số:
1. Khởi tạo biến cờ isValid = False.
2. LẶP: Trong khi isValid là False:
a. Yêu cầu người dùng nhập số.
b. Cố gắng chuyển đổi đầu vào thành số nguyên.
c. Nếu chuyển đổi thành công: Lưu giá trị và đặt isValid = True.
d. Nếu chuyển đổi thất bại (do nhập chữ cái hoặc số thực): Hiển thị thông báo lỗi.
3. Thực hiện bước 1 và 2 cho cả ba số.
4. Tính tổng và hiển thị.
1. Pascal
Pascal sử dụng cấu trúc repeat...until và cần phải đọc đầu vào dưới dạng chuỗi
và sau đó cố gắng chuyển đổi thành số nguyên bằng các hàm kiểm tra lỗi.
Khái niệm Giải thích
Lệnh Lặp repeat ... until
Hàm chuyển đổi Val() (chuyển chuỗi sang số, kiểm tra lỗi)
Thư viện Mặc định (System)
Thuật toán Lặp $\rightarrow$ Dùng readln đọc chuỗi $\rightarrow$
Dùng Val kiểm tra $\rightarrow$ Thoát nếu Code lỗi bằng 0.
Delphi
program TinhTongBaSoVoiKiemTra;
uses SysUtils; // Cần dùng SysUtils (hoặc tương đương) cho hàm Val
var
s: string; // Biến để lưu chuỗi nhập liệu
soA, soB, soC, Tong: integer;
errorCode: integer; // Biến để Val() trả về mã lỗi
// Hàm lặp lại việc nhập liệu cho đến khi là số nguyên hợp lệ
procedure NhapSoNguyen(prompt: string; var value: integer);
begin
repeat
write(prompt);
readln(s); // Đọc đầu vào dưới dạng chuỗi
// Hàm Val cố gắng chuyển chuỗi s thành integer value.
// Nếu thành công, errorCode = 0. Nếu không, errorCode > 0.
Val(s, value, errorCode);
if errorCode <> 0 then
writeln('Loi: Hay nhap mot so nguyen hop le!');
until errorCode = 0; // Lặp lại cho đến khi không có lỗi
end;
begin
// 1. INPUT VÀ XÁC THỰC
NhapSoNguyen('Nhap so nguyen thu nhat (A): ', soA);
NhapSoNguyen('Nhap so nguyen thu hai (B): ', soB);
NhapSoNguyen('Nhap so nguyen thu ba (C): ', soC);
// 2. PROCESS: Tính toán
Tong := soA + soB + soC;
// 3. OUTPUT: Hiển thị kết quả
writeln('-----------------------------------');
writeln('Tong cua ba so nguyen la: ', Tong);
end.
Giải thích:
• uses SysUtils;: Khai báo sử dụng Unit (thư viện) chứa hàm Val.
• procedure NhapSoNguyen...: Chúng ta tạo một thủ tục (hàm con)
để thực hiện lặp lại việc nhập liệu, giúp mã gọn gàng hơn.
• Val(s, value, errorCode);: Đây là cơ chế xử lý lỗi của Pascal.
o s: Chuỗi đầu vào từ người dùng.
o value: Biến kiểu số nguyên sẽ nhận kết quả.
o errorCode: Nếu thành công, bằng $0$. Nếu thất bại, lớn hơn $0$.
• repeat ... until errorCode = 0;: Vòng lặp này đảm bảo lời nhắc nhập
chỉ dừng lại khi đầu vào được chuyển đổi thành công sang số nguyên (errorCode = 0).
________________________________________
2. C++
C++ sử dụng vòng lặp while và kiểm tra trạng thái của luồng nhập (std::cin).
Khái niệm Giải thích
Lệnh Lặp while
Xử lý lỗi Kiểm tra trạng thái của luồng nhập (cin.fail())
Thư viện iostream (cần thiết)
Thuật toán Lặp while $\rightarrow$ Dùng cin nhập $\rightarrow$ Kiểm tra cin.fail() $\rightarrow$
Nếu thất bại, xóa cờ lỗi (cin.clear()) và bỏ qua đầu vào còn lại (cin.ignore()).
C++
#include
#include // Cần thiết cho std::numeric_limits
/* Hàm lặp lại việc nhập liệu cho đến khi là số nguyên hợp lệ */
int NhapSoNguyen(const std::string& prompt) {
int value;
while (true) { // Vòng lặp vô hạn
std::cout << prompt;
// Cố gắng đọc giá trị vào biến int
if (std::cin >> value) {
// 1. CHUYỂN ĐỔI THÀNH CÔNG: Thoát khỏi vòng lặp
break;
} else {
// 2. CHUYỂN ĐỔI THẤT BẠI (nhập chữ, số thực, v.v.)
std::cout << "Loi: Hay nhap mot so nguyen hop le!" << std::endl;
// Đặt lại cờ lỗi của luồng cin để có thể tiếp tục đọc
std::cin.clear();
// Bỏ qua phần còn lại của đầu vào hiện tại để tránh lặp vô hạn
std::cin.ignore(std::numeric_limits::max(), '\n');
}
}
return value;
}
int main() {
// 1. INPUT VÀ XÁC THỰC
int soA = NhapSoNguyen("Nhap so nguyen thu nhat (A): ");
int soB = NhapSoNguyen("Nhap so nguyen thu hai (B): ");
int soC = NhapSoNguyen("Nhap so nguyen thu ba (C): ");
// 2. PROCESS: Tính toán
int Tong = soA + soB + soC;
// 3. OUTPUT: Hiển thị kết quả
std::cout << "-----------------------------------" << std::endl;
std::cout << "Tong cua ba so nguyen la: " << Tong << std::endl;
return 0;
}
Giải thích:
• while (true): Tạo một vòng lặp vô hạn, chỉ bị dừng khi gặp break.
• if (std::cin >> value): Trong C++, việc cố gắng đọc dữ liệu vào một biến kiểu int
sẽ trả về true nếu thành công (số nguyên hợp lệ) và false nếu thất bại.
• std::cin.clear();: Xóa cờ lỗi (ví dụ: cờ failbit) đã được đặt khi quá trình nhập thất bại.
• std::cin.ignore(...): Xóa bộ đệm đầu vào, loại bỏ dữ liệu xấu mà người dùng đã nhập
(ví dụ: chuỗi ký tự) cho đến khi gặp ký tự xuống dòng (\n), ngăn chương trình lặp vô hạn với đầu vào lỗi cũ.
________________________________________
3. Python
Python sử dụng khối try-except (xử lý ngoại lệ) kết hợp với vòng lặp while để kiểm tra lỗi chuyển đổi kiểu dữ liệu.
Khái niệm Giải thích
Lệnh Lặp while
Xử lý lỗi try: ... except ValueError:
Thư viện Tích hợp sẵn
Thuật toán Lặp while $\rightarrow$ Dùng try để chuyển chuỗi thành int $\rightarrow$ Nếu thành công,
break $\rightarrow$ Nếu thất bại, except bắt lỗi ValueError và hiển thị thông báo.
Python
# Chương trình Python nhận 3 số và lặp lại cho đến khi là số nguyên
def nhap_so_nguyen(prompt):
"""
Hàm lặp lại việc nhập liệu cho đến khi là số nguyên hợp lệ.
"""
while True: # Vòng lặp vô hạn
try:
# Cố gắng chuyển đổi đầu vào thành số nguyên
value = int(input(prompt))
# Nếu thành công, thoát khỏi vòng lặp
return value
except ValueError:
# Nếu int() thất bại (vì nhập chữ cái, số thực, v.v.),
# Python sẽ ném ra lỗi ValueError và khối except sẽ bắt lỗi đó.
print("Lỗi: Hãy nhập một số nguyên hợp lệ!")
# Vòng lặp tự động quay lại đầu
# 1. INPUT VÀ XÁC THỰC
soA = nhap_so_nguyen("Nhap so nguyen thu nhat (A): ")
soB = nhap_so_nguyen("Nhap so nguyen thu hai (B): ")
soC = nhap_so_nguyen("Nhap so nguyen thu ba (C): ")
# 2. PROCESS: Tính toán
Tong = soA + soB + soC
# 3. OUTPUT: Hiển thị kết quả
print("-" * 35) # In ra một đường ngang 35 ký tự
print(f"Tổng của ba số nguyên là: {Tong}")
Giải thích:
• def nhap_so_nguyen(prompt):: Tạo một hàm để chứa logic nhập và xác thực, giúp mã chính dễ đọc.
• while True:: Vòng lặp vô hạn.
• try: ... except ValueError:: Đây là cơ chế xử lý ngoại lệ (Error Handling) của Python.
o try: Khối mã mà bạn cố gắng thực thi (trong trường hợp này là chuyển đổi sang int).
o int(input(prompt)): Nếu người dùng nhập một chuỗi không phải số nguyên (ví dụ: "abc"),
hàm int() sẽ không hoạt động và tạo ra một ngoại lệ (ValueError).
o except ValueError:: Nếu ngoại lệ ValueError xảy ra, chương trình nhảy đến khối này,
hiển thị thông báo lỗi, và sau đó vòng lặp while True lặp lại.
• return value: Nếu việc chuyển đổi thành công, hàm sẽ trả về giá trị và tự động thoát khỏi vòng lặp.
kỹ thuật kiểm tra chuỗi bằng câu lệnh if và phương thức isdigit() vào chương trình nhập ba số và tính tổng.
Vì phương thức isdigit() trong Python chỉ hoạt động với chuỗi đại diện cho số nguyên dương,
ví dụ này sẽ ép buộc người dùng phải nhập vào ba số nguyên dương.
________________________________________
🚀 Chương trình nhập 3 số nguyên dương (Dùng if và isdigit())
Thuật toán:
1. Tạo một hàm nhap_so_nguyen_if sử dụng vòng lặp while True.
2. Bên trong vòng lặp, nhận đầu vào dưới dạng chuỗi s bằng input().
3. Sử dụng câu lệnh if s.isdigit(): để kiểm tra.
4. Nếu là số nguyên dương hợp lệ, dùng int(s) để ép kiểu và trả về giá trị.
5. Nếu không, hiển thị lỗi và lặp lại.
6. Gọi hàm này ba lần để lấy ba số soA, soB, soC và tính tổng.
🐍 Mã Python sử dụng if và isdigit()
Python
def nhap_so_nguyen_if(prompt):
"""
Hàm lặp lại việc nhập liệu cho đến khi người dùng nhập
một số nguyên DƯƠNG hợp lệ.
"""
while True:
# 1. Nhận đầu vào dưới dạng chuỗi
s = input(prompt)
# 2. Kiểm tra bằng IF và phương thức isdigit()
if s.isdigit():
# isdigit() chỉ trả về True nếu chuỗi gồm các ký tự 0-9
# (tức là số nguyên dương)
# 3. Nếu hợp lệ, ép kiểu và trả về
value = int(s)
return value
else:
# 4. Nếu không hợp lệ, hiển thị lỗi và lặp lại
print(">>> LỖI: Vui lòng nhập một số nguyên DƯƠNG hợp lệ!")
# Vòng lặp while True sẽ tự động lặp lại
# --- CHƯƠNG TRÌNH CHÍNH ---
print("Chương trình tính tổng 3 số nguyên dương (sử dụng IF để xác thực)")
# 1. INPUT VÀ XÁC THỰC
soA = nhap_so_nguyen_if("Nhap so thu nhat (A): ")
soB = nhap_so_nguyen_if("Nhap so thu hai (B): ")
soC = nhap_so_nguyen_if("Nhap so thu ba (C): ")
# 2. PROCESS: Tính toán
Tong = soA + soB + soC
# 3. OUTPUT: Hiển thị kết quả
print("-" * 45)
print(f"Ba số bạn đã nhập là: A={soA}, B={soB}, C={soC}")
print(f"Tổng của ba số nguyên dương đó là: {Tong}")
Giải thích tập trung vào Lệnh if
1. s = input(prompt): Đầu vào từ người dùng, dù họ gõ gì,
cũng được lưu trữ dưới dạng một chuỗi ký tự (string) trong biến s.
2. if s.isdigit():: Đây là mấu chốt của kỹ thuật này.
o s.isdigit() kiểm tra:
Nếu nhập "123": isdigit() $\rightarrow$ True. Chương trình vào khối if.
Nếu nhập "-5": isdigit() $\rightarrow$ False (vì có dấu -). Chương trình vào khối else.
Nếu nhập "5.5": isdigit() $\rightarrow$ False (vì có dấu .). Chương trình vào khối else.
Nếu nhập "abc": isdigit() $\rightarrow$ False. Chương trình vào khối else.
3. value = int(s): Lệnh ép kiểu này chỉ được thực hiện khi chúng ta đã biết chắc chắn
chuỗi s chỉ chứa các chữ số (từ '0' đến '9'),
nên nó sẽ không gây ra lỗi ValueError và không cần dùng try-except.