If statements (câu lệnh if)

Mình có viết code cho bài giải pt bậc 2 nhưng khi chạy nó không thực hiện các lệnh if :neutral_face:
Kiểu như là từ dòng nhập số a,b,c và hiện lên chương trình xong thì chỉ cho ra “Press any key to continue”
Mình không biết là mình sai chỗ nào nữa. Xin mọi người góp ý kiến!

#include <iostream> //iostream
#include <cmath> //cmath
#include <cstdlib> //cstdlib
using namespace std;

int main()
{
    float a,b,c;
    cout<<"Nhap so a: ";
    cin >> a;
    cout<<"Nhap so b: ";
    cin >> b;
    cout<<"Nhap so c: ";
    cin >> c;
    cout<< "\nPhuong trinh cua ban la: " << a <<"x^2 + "<< b <<"x + "<< c <<" = 0 ?" <<endl;
    system("pause");
    if (a!=0 && b!=0 ) //Mình nghĩ vấn đề là ở chỗ này, nó không thực hiện lệnh để in ra màn hình
    {
        float Denta = (sqrt(pow(b,2) - 4 * a * c));
        if (Denta > 0)
        {
            cout<< "Nghiem cua phuong trinh la: " << endl;
            cout<< "x1= " << (-b + Denta) / (2*a);
            cout<< "x2= " << (-b - Denta) / (2*a);
        }
        else
        {
            if (Denta == 0)
            {
                cout<< "Nghiem cua phuong trinh la x1=x2= "<< -(b)/(2*a) <<endl;
            }
            if (Denta < 0)
            {
                cout<< "Phuong trinh vo nghiem!"<<endl;
            }
        }
    }

    else
    {
        if (a==0 && b!=0)
        {
            cout<< "Nghiem cua phuong trinh la x= "<< -(c)/b <<endl;
        }
        if (a!=0 && b==0)
        {
            cout<< "Nghiem cua phuong trinh la: " << endl;
            cout<< "x1= " << sqrt((-c)/a);
            cout<< "x2= " << sqrt((-c)/a);
        }
    }
    system("pause");
    return 0;
}
Nhap so a: 4
Nhap so b: 2
Nhap so c: 3

Phuong trinh cua ban la: 4x^2 + 2x + 3 = 0 ?
Press any key to continue . . .
Press any key to continue . . .

Process return 0 (0x0)  execution time : 3.730 s
Press any key to continue.
-

Here’s my code for test 1 <3

#include <iostream> // iostream
#include <cstdlib> // cstdlib

using namespace std;

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int Number = rand() %100 + 0;
    bool Guess;
    cout <<"Please input your number: "; cin >> Guess;
    if (Number < 50)
    {
        if (Guess == true )
            cout<< "That is incorrect guest! The generating number is " << Number << " (" << Number <<"<50)" <<endl;
        else
            cout<< "That is the correct guest! The generating number is " << Number;
    }
    else
    {
        if (Guess == true)
            cout<< "That is the correct guest! The generating number is " <<Number;
        else
            cout<< "That is incorrect guest! The generating number is " << Number << " (" << Number <<">50)" <<endl;
    }
system("pause");
return(0);
}
1 Like
#include <iostream>;
#include <cstdlib>;
#include <ctime>;
#include <stdio.h>;
using namespace std;

int main()
{
	srand( time (0));
	float c1 = rand()% (100);
	float guess1 ;
//	cout<< "guess ( chi nhap 1 or 0 ( 1 la > 50 , 0 la < 50 ) = ";
//	cin >> guess1;
	printf ( "guess ( chi nhap 1 or 0 ( 1 la > 50 , 0 la < 50 ) = ");
	scanf_s ("%f", &guess1);
	if (guess1 != 0 && guess1 != 1)
		cout << "byebye - nhap tam bay , khong doc ky yeu cau "<< endl;
	if (guess1 == 0 or guess1 == 1)
	{
		if (guess1 == 0 && c1 < 50)
			cout << "ban da doan dung , so ngau nhien la : " << float(c1) << " nho hon 50" << endl;
		else if ( guess1 ==0 && c1 > 50)
			cout << "ban da doan sai , so ngau nhien la : " << float(c1) << " lon hon 50" << endl;
		else if (guess1 ==1  && c1 < 50)
			cout << "ban da doan sai , so ngau nhien la : " << float(c1) << " nho hon 50" << endl;
		else if (guess1 == 1 && c1 > 50)
			cout << "ban da doan dung , so ngau nhien la : " << float(c1) << " lon hon 50" << endl;
		else if ( c1 == 50)
			cout << " so ngau nhien la : " << c1 << " xin nhap lai " << endl;
	}
	system("pause");
	return 0;
} 

dùng cout , cin thì nhập số thập phân , dấu /.,;’\ … thì hiểu là bằng 0 , nên mình dung prinf , scanf

các bác cho mình hỏi ctime là thư viện gì thế

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
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?