Bai3.cpp

 avatar
unknown
c_cpp
2 months ago
2.8 kB
5
Indexable
#include <iostream>
using namespace std;

struct SinhVien
{
    string hoTen;
    string gioiTinh;
    int namSinh;
    float diemTK;
};

int timKiemTuanTu(SinhVien arr[], int n, string hoTen, float diemTK) {
    for (int i = 0; i < n; i++) {
        if (arr[i].hoTen == hoTen && arr[i].diemTK == diemTK) {
            return i;
        }
    }
    return -1;
}

int timKiemNhiPhan(SinhVien arr[], int n, float x)
{
    int m, l = 0, r = n-1;
    while (l <= r) {
        m = (l + r) / 2;
        if (arr[m].diemTK == x) {
            return m;
        }
        else if (arr[m].diemTK < x) {
            l = m + 1;
        }
        else {
            r = m - 1;
        }
    }
    return -1;
}

void sapXep(SinhVien arr[], int n)
{
    for (int i = 0; i < n-1; i++) {
        for (int j = i+1; j < n; j++) {
            if (arr[i].diemTK > arr[j].diemTK) {
                SinhVien tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
}

main()
{
    int n = 6;
    SinhVien arr[] = {
        {"Nguyen Van A", "Nam", 2003, 9.5},
        {"Nguyen Van B", "Nam", 2003, 10},
        {"Nguyen Thi C", "Nu", 2002, 8},
        {"Nguyen Van D", "Nam", 2002, 9},
        {"Nguyen Thi E", "Nu", 2003, 8.5},
        {"Nguyen Thi F", "Nu", 2002, 9},
    };

    int chon;
    cout << "Nhap lua chon: \n";
    cout << "1. Tim kiem tuan tu    2. Tim kiem nhi phan\n";
    cin >> chon;
    switch(chon)
    {
    case 1:
        {
            string hoTen;
            cout << "Nhap ho ten can tim: ";    cin.ignore(); getline(cin, hoTen);
            float diemTK;
            cout << "Nhap diemTK can tim: ";    cin >> diemTK;
            int kq = timKiemTuanTu(arr, n, hoTen, diemTK);
            if (kq == -1) {
                cout << "Khong co sinh vien trong day\n";
            }
            else {
                cout << "Co sinh vien trong day\n";
            }
            break;
        }

    case 2:
        {
            float diemTK;
            cout << "Nhap diem TK can tim: ";    cin >> diemTK;
            // Sap xep truoc khi tim kiem
            sapXep(arr, n);
            int kp = timKiemNhiPhan(arr, n, diemTK);
            if (kp == -1) {
                cout << "Khong co sinh vien trong day\n";
            }
            else {
                cout << "Sinh vien can tim la: \n";
                cout << "Ho ten: "<< arr[kp].hoTen << endl;
                cout << "Gioi tinh: " << arr[kp].gioiTinh << endl;
                cout << "Nam sinh: " << arr[kp].namSinh << endl;
                cout << "Diem TK: " << arr[kp].diemTK << endl;
            }
        }

        break;
    default:
        cout << "Vui long nhap lai\n";
    }

}
Editor is loading...
Leave a Comment