Thư viện của Google: ctime library
If statements (câu lệnh if)
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 (bool
và int
) phía sau sẽ nhận sai dữ liệu.
Vd:
Nhập:
5
Xuất:
bool: 1
1
1
int: 0
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.
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?
Đ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.
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.
Mình đã hiểu phần nào.
Cảm ơn bạn nhiều ạ.
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!")
}
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;
}
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
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.