30/09/2018, 16:10

Hỏi về Cấu trúc điều khiển(if else) và cấu trúc lặp (do while)

#include <iostream>
int main(){
	int maso;
	float doanhSo, luongCoBan, soGioLam, luongCongNhan, giaSanPham;
	std::cout << "Tinh luong cong nhan theo loi nhuan." << std::endl;
	std::cout << "Nhap doanh so(so hang ban ra trong tuan): ";
	std::cin >> doanhSo;
	std::cout << "Nhap gia tri doanh so(don gia 1 san pham): ";
	std::cin >> giaSanPham;
	do
	{
		do
		{
			if (0 <= doanhSo && 0 <= giaSanPham){
				luongCongNhan = 500 + doanhSo * giaSanPham * .07;
				std::cout << "Luong cong nhan la: " << luongCongNhan << std::endl;
			}
			else{
				std::cout << "Nhap sai thong tin, nhap lai:" << std::endl;
			}
		} while (0 > doanhSo);
	} while (0 > giaSanPham);

	return 0;
}
#include <iostream>
int main(){
	int maso;
	float doanhSo, luongCoBan, soGioLam, luongCongNhan, giaSanPham;
	std::cout << "Tinh luong cong nhan theo loi nhuan." << std::endl;
	std::cout << "Nhap doanh so(so hang ban ra trong tuan): "; 
	std::cin >> doanhSo;
	std::cout << "Nhap gia tri doanh so(don gia 1 san pham): "; std::
	cin >> giaSanPham;
	do
	{
		if (0 <= doanhSo && 0 <= giaSanPham){
			luongCongNhan = 500 + doanhSo * giaSanPham * .07;
			std::cout << "Luong cong nhan la: " << luongCongNhan << std::endl;
		}
		else{
			std::cout << "Nhap sai thong tin, nhap lai:" << std::endl;
		}
	} while (0 > doanhSo || 0 > giaSanPham);
	return 0;
}

Mình thấy 2 đoạn code trên đưa ra cùng 1 kết quả. Vậy cách mình sử dụng vòng lập do while như 2 đoạn code trên có chính xác không?
Tại sao khi mình nhập sai thông tin (doanhSo <0 hoặc giaSanPham < 0 hoặc cả doanhSo và giaSanPham đều < 0 ) thì vòng lặp cứ chạy mãi không ngừng?
Cái mình muốn là nhập sai thông tin thì nhập lại. Phải làm như thế nào các bạn chỉ giúp mình với.

Gió viết 18:21 ngày 30/09/2018

Thứ nhất: cin của bản theo như mình nghĩ sau khi nhập thì nó phải nhập tiếp ở trong while thứ 1.
Thứ hai: chương trình lúc nào cũng bắt nhập đung, mà nhập đúng thì nó bắt nhập tiếp thì khi nào chương trình mới dừng @@

Phạm Hoàng Tuấn viết 18:18 ngày 30/09/2018

Tại sao khi mình nhập sai thông tin (doanhSo <0 hoặc giaSanPham < 0 hoặc cả doanhSo và giaSanPham đều < 0 ) thì vòng lặp cứ chạy mãi không ngừng? Cái mình muốn là nhập sai thông tin thì nhập lại. Phải làm như thế nào các bạn chỉ giúp mình với.

mình chưa hiểu ý bạn, nếu bạn nhập sai thông tin thì nó phải lặp lại cho đến bao giờ bạn nhập đúng thì thôi vậy là thỏa điều kiện " Cái mình muốn là nhập sai thông tin thì nhập lại" của bạn rồi còn gì. Hay ban muốn nhập sai cái nào thì nhập lại cái đó thôi, nếu vậy bạn dùng 2 vòng lặp do...while

Bùi Thanh Tùng viết 18:19 ngày 30/09/2018

Thứ nhất: cin của bản theo như mình nghĩ sau khi nhập thì nó phải nhập tiếp ở trong while thứ 1. Thứ hai: chương trình lúc nào cũng bắt nhập đung, mà nhập đúng thì nó bắt nhập tiếp thì khi nào chương trình mới dừng @@

Bạn ơi bạn chạy thử code chưa? Cả 2 đoạn code mình viết ở trên:

  1. Khi nhập đúng 0 <= doanhSo && 0 <= giaSanPham thì chương trình sẽ tính toán và in ra màn hình lương của công nhân theo câu lệnh:
    std::cout << "Luong cong nhan la: " << luongCongNhan << std::endl;
  2. Khi nhập sai 1 trong 2 thông tin hoặc cả 2 thông tin thì màn hình sẽ chạy mãi:

    Mình k hiểu tại sao lại như vậy.
    Mình muốn khi nhập sai thì nhập lại! Chứ k phải cứ chạy mãi như trong hình.
Bùi Thanh Tùng viết 18:14 ngày 30/09/2018

mình chưa hiểu ý bạn, nếu bạn nhập sai thông tin thì nó phải lặp lại cho đến bao giờ bạn nhập đúng thì thôi vậy là thỏa điều kiện " Cái mình muốn là nhập sai thông tin thì nhập lại" của bạn rồi còn gì. Hay ban muốn nhập sai cái nào thì nhập lại cái đó thôi, nếu vậy bạn dùng 2 vòng lặp do…while

Compile k cho mình nhập lại mà cứ chạy mãi như trong hình ở trên. Bạn xem code mình lỗi ở đâu với.

Phạm Hoàng Tuấn viết 18:14 ngày 30/09/2018

hi, bạn phải cho các dòng

std::cout << "Nhap doanh so(so hang ban ra trong tuan): ";
std::cin >> doanhSo;
std::cout << "Nhap gia tri doanh so(don gia 1 san pham): ";
std::cin >> giaSanPham;

vào trong vòng lặp chứ, thêm vào chỗ do ấy bạn. Với lại mình thấy hình như bnaj thừa 1 vòng do

Mình sửa lại, bước đầu chạy thấy ổn

int main(){
	int maso;
	float doanhSo, luongCoBan, soGioLam, luongCongNhan, giaSanPham;
	std::cout << "Tinh luong cong nhan theo loi nhuan." << std::endl;
	
	
	do
	{
		std::cout << "Nhap doanh so(so hang ban ra trong tuan): ";
		std::cin >> doanhSo;
		std::cout << "Nhap gia tri doanh so(don gia 1 san pham): ";
		std::cin >> giaSanPham;

		if (0 <= doanhSo && 0 <= giaSanPham){
			luongCongNhan = 500 + doanhSo * giaSanPham * .07;
			std::cout << "Luong cong nhan la: " << luongCongNhan << std::endl;
		}
		else{
			std::cout << "Nhap sai thong tin, nhap lai:" << std::endl;
		}
	} while (0 > doanhSo || 0 > giaSanPham);
	return 0;
}


Bùi Thanh Tùng viết 18:11 ngày 30/09/2018

Uhm đúng rồi mình cũng vừa mới hiểu ra xong. Nếu để

#include <iostream>
int main(){
	int maso;
	float doanhSo, luongCoBan, soGioLam, luongCongNhan, giaSanPham;
	std::cout << "Tinh luong cong nhan theo loi nhuan." << std::endl;
	std::cout << "Nhap doanh so(so hang ban ra trong tuan): "; 
	std::cin >> doanhSo;
	std::cout << "Nhap gia tri doanh so(don gia 1 san pham): "; std::
	cin >> giaSanPham;
	do
	{
		if (0 <= doanhSo && 0 <= giaSanPham){
			luongCongNhan = 500 + doanhSo * giaSanPham * .07;
			std::cout << "Luong cong nhan la: " << luongCongNhan << std::endl;
		}
		else{
			std::cout << "Nhap sai thong tin, nhap lai:" << std::endl;
		}
	} while (0 > doanhSo || 0 > giaSanPham);
	return 0;
}

Thì khi nhập sai giá trị. Các giá trị ấy sẽ được lưu lại bên trong vòng lặp nên nó chạy mãi không ngừng.
Mình cũng sửa lại như bạn nói và thành công luôn. Cảm ơn bạn nhiều nhé.

Bài liên quan
0