If statements (câu lệnh if)

Thư viện của Google: ctime library

3 Likes

17 posts were split to a new topic: Vấn đề về tạo số ngẫu nhiên

Bạn nên dùng kiểu int thay cho bool, nếu dữ liệu nhập sai thì làm những dữ liệu phía sau sai hàng loạt.

#include <iostream>

int main()
{
    bool x;
    int n;
    std::cin >> x;
    std::cout << "bool: " << x << std::endl;
    std::cin >> x;
    std::cout << x << std::endl;
    std::cin >> x;
    std::cout << x << std::endl;
    
    std::cin >> n;
    std::cout << "int: " << n << std::endl;
    return 0;
}

Như đoạn phía trên. Chỉ cần nhập 1 số khác 0 hoặc 1 hoặc kí tự chữ cái thì toàn bộ đoạn nhập (boolint) phía sau sẽ nhận sai dữ liệu.
Vd:
Nhập:

5

Xuất:

bool: 1
1
1
int: 0
2 Likes

bác cho e hỏi sao k cần gán giá trị của n= 1 hoặc 0 mà chương trình vẫn chạy đúng thế ạ

Chắc ý bạn là:

không cần so sánh n bằng 1 hoặc n bằng 0.

Vì bạn ấy lợi dụng cái này: (a < 50)
(a < 50) sẽ là 1 nếu a < 50, 0 trong trường hợp ngược lại. :slight_smile:

2 Likes

Bài 1)

#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
int main() {
	srand(time(NULL));
	int res = rand() % 101;
	cout << "A random number was generated" << endl;

	cout << "If you think the res < 50 enter 0, or it > 50 enter 1: " << endl;
	int choose;
	cin >> choose;
	cout << "Your guess: " << choose << endl;
	if (choose != 0 && choose != 1) {
		cout << "Not match" << endl;
		exit(1);
	}
	if (choose == 0 && res < 50) cout << "True. The random number is " << res << endl;
	else if (choose == 0 && res > 50) cout << "Wrong. The random number is " << res << endl;
	else if (choose == 1 && res < 50) cout << "Wrong. The random number is " << res << endl;
	else cout << "True. The random number is " << res << endl;


	system("pause");
	return 0;
}

Bài 2)

// VIẾT CHƯƠNG TRÌNH GIẢI PHƯƠNG TRÌNH BẬC 2 VỚI a,b,c nhập từ bàn phím
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
int main() {
	int a, b, c;
	do {
		cout << "Input a > 0 ,b,c: " << endl;
		cin >> a >> b >> c;
	}
	while (a <= 0);
	float delta;
	delta = b * b - 4 * a * c;
	if (delta < 0) cout << "Equation has no root." << endl;
	else if (delta == 0) {
		float x;
		cout << "Equation has 1 root." << endl;
		x = -b / (2 * a);
		cout << "x = " << x << endl;
	}
	else{
		float x1, x2;
		cout << "Equation has 2 distinguish roots." << endl;
		x1 = (-b + sqrt(delta)) / (2 * a);
		x2 = (-b - sqrt(delta)) / (2 * a);
		cout << "x1 = " << x1 << endl;
		cout << "x2 = " << x2 << endl;
	}
	system("pause");
	return 0;
}

CHẠY KẾT QUẢ ĐÚNG ANH EM THAM KHẢO THỬ ĐÚNG KHÔNG NHỈ! ^^ THANKS

Chào mọi người, em muốn hỏi lệnh if trong đoạn code sau có ý nghĩa như thế nào ạ:

int thi(unsigned int n) {
    int s=0,i;
    for (i=1;i<n;i++) if (!(n%i)) s=s+i; // Đoạn này
    return n==s;
}

Bạn có biết nó dùng trong trường hợp nào không?

3 Likes

Đoạn code này dùng để kiểm tra n có phải là số hoàn hảo hay không ạ.

Trong C/C++ và nhiều ngôn ngữ khác, 0 tương đương với false và 1 tương đương với true, thành ra !0 = !false = true. If ở trên chỉ đơn giản là nếu n chia i dư 0 nhưng viết theo kiểu đánh đố, tối nghĩa hơn.

4 Likes

Mọi người cho mình hỏi tí.
Mình có chạy riêng đoạn code mà để đưa ra 1 số random

    srand (time(NULL));
    int a = rand() % 100+1;
    cout <<a<<endl;

thì thấy rằng: tuy số là random nhưng có xu hướng tăng từ nhỏ đến lớn. Tăng đến ngưỡng 100 thì số mới lại quay về mức thấp.
Nếu như vậy thì ko thực sự random lắm.

Mong mọi người giải thích ạ

Mình cảm ơn

Tất cả các hàm thực hiện việc tạo ngẫu nhiên 1 số đều dùng 1 công thức toán dựa vào số seed bạn đầu. Bởi vậy, nó thực sự không ngẫu nhiên mà theo một tuần tư nhất định, để số có thể gọi là ngẫu nhiên thì nên thêm thời gian vào.
Bạn thử chạy đoạn mã sau nhiều lần:


Đoạn 1: kết quả các lần chạy đều giống nhau.
Đoạn 2: kết quả các lần chạy khác nhau, nhưng vẫn có điểm tương đồng và theo quy luật nào đó (công thức mà).
Đoạn 3: ngẫu nhiên hoàn toàn. Vì phụ thuộc thời gian hoàn toàn.

4 Likes

Mình đã hiểu phần nào.
Cảm ơn bạn nhiều ạ.

1 Like

cho em hỏi thế khi mình dùng là if (n % i) biết n = 5 và i = 1 thì nó trả về đúng hay sai ạ

cho em hỏi là muốn dùng if not thì phải làm sao ạ

@Quyet_Phan_Ngoc
Lệnh phủ định trong hầu hết các ngôn ngữ là dấu chấm than (!). Chắc chắn bạn đã học qua rồi, bạn đã quên hoặc không còn nhớ.

if(!done){
    print("Not done!")
}
3 Likes

Góp vui với anh em

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
	srand(time(0));
	cout << "A random number has been created" << endl;
        int randomNum = rand() % (100 - 0 + 1);
	int guessNum;
	cout << "Guess the number :0 is less than 50, 1 is bigger than 50" << endl;
	cin >> guessNum;
	cout <<"random num is : " << randomNum << endl;
	if ((randomNum >= 50 && guessNum == 1) || (randomNum <= 50 && guessNum == 0))
	{
		cout << "Correct bro" << endl;
	}
	else
	{
		cout << "Wrong bro" << endl;
	};
	system("pause");
	return 0;
}
1 Like

Giải bài if-else không cần if:

#include <random>
#include <iostream>
#include <compare>
#include <memory>

#define let const auto
#define lеt auto

template<class T>
let read = [](std::istream& is=std::cin){T r; is >> r; return r;};

template <class F, class T>
decltype(auto) operator&&(T&& t, F&& f){return f(std::forward<T>(t));}

int main()
{
    lеt make_a_number = std::mt19937{std::random_device{}()};
    lеt must_between_0_and_100 = std::uniform_int_distribution<>{0, 100};

    let me = make_a_number and must_between_0_and_100;
    let you = 50;

    let hope = std::strong_ordering::less;

    let need = me <=> you == hope;

    let the_world = need ^! read<int>();
    let of = {"Right", "Wrong"};

    std::cout << *std::next(begin (of), the_world) << "! "
              << "The number is " << me << " "
              << "("
              << me
              << need ["><"]
              << you
              << ")"
              << std::endl;
}

Demo: Wandbox

1 Like

cho mình hỏi tác dụng của đoạn code :
srand(time(NULL));
int random=rand()%101;
là gì ạ

https://cplusplus.com/reference/cstdlib/srand/
void srand (unsigned int seed);
=> Initialize random number generator

Có một thuật toán để sinh ra những số ngẫu nhiên, bắt đầu với một seed nào đó. Thông thường người ta truyền vào tham số seed giá trị là thời gian hiện tại bằng hàm time(), để không biết seed sẽ là bao nhiêu luôn.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?