Nguyễn Trường Vũ

Tài khoản 24800601098
Lớp 24DTHC1

Tổng số bài nộp 56
Số bài làm đúng 31
Tỷ lệ làm đúng 55.36%
Số bài làm sai 10
Số bài vượt giới hạn thời gian 1
Số bài bị lỗi biên dịch 13

#pragma once


// ham linh tinh

void clear() {

    printf("\033[2J\033[1;1H");

}


void pause() {

    printf("Press Enter to continue...");

    while (getchar() != '\n');

    getchar();

}


#define TN 0

#define XH 1


// dinh nghia cau truc bieu dien 1 cuon sach

typedef struct {

    unsigned ms;    // ma sach

    char tuasach[25]; // ten sach

    char tacgia[17]; // ten tac gia

    int loai;   // loai sach (TN = 0, XH = 1)

    unsigned nam;  // nam xuat ban

    unsigned sl;   // so luong

    unsigned dongia; // don gia ban

} SACH;


#define MAX 100 // so luong sach toi da

SACH ds[MAX]; // khai bao mang sach

int n = 0; // so luong sach hien co


// Cau 1: nhap thong tin 1 cuon sach

void nhapSach(SACH &s) {

    printf("Nhap ma sach: ");

    scanf("%u", &s.ms);

    printf("Nhap ten sach: ");

    scanf(" %[^\n]", s.tuasach);

    printf("Nhap ten tac gia: ");

    scanf(" %[^\n]", s.tacgia);

    printf("Nhap loai sach (TN = 0, XH = 1): ");

    scanf("%d", &s.loai);

    printf("Nhap nam xuat ban: ");

    scanf("%u", &s.nam);

    printf("Nhap so luong: ");

    scanf("%u", &s.sl);

    printf("Nhap don gia: ");

    scanf("%u", &s.dongia);

}


// Cau 2: xuat thong tin 1 cuon sach tren 1 dong

void xuatSach(SACH s) {

    printf( "%6u %-24s %-16s %2s %4u %6u %8u\n", 

            s.ms, s.tuasach, s.tacgia, 

            s.loai == TN ? "TN" : "XH", 

            s.nam, s.sl, s.dongia);

}


// Cau 3: them 1 cuon sach vao cuoi danh sach

void themSach() {

    int ch;

    do {

        if (n < MAX) {

            SACH s;

            printf("Nhap thong tin sach:\n");

            nhapSach(s);

            ds[n] = s;

            n++;

        } else {

            printf("Danh sach da day!\n");

        }

        printf("Ban co muon nhap sach khac khong? (0: N/1: Y): ");

        scanf("%d", &ch);

    } while (ch == 1);

}


// Cau 4: xuat danh sach cac cuon sach

void xuatDanhSach() {

    for (int i = 0; i < n; i++) {

        xuatSach(ds[i]);

    }

}


// Cau 5: sap thu tu danh sach theo ma sach tang dan

void sapXep() {

    for (int i = 0; i < n - 1; i++) {

        for (int j = i + 1; j < n; j++) {

            if (ds[i].ms > ds[j].ms) {

                SACH temp = ds[i];

                ds[i] = ds[j];

                ds[j] = temp;

            }

        }

    }

    xuatDanhSach();

}


#ifdef _WIN32

char * strcasestr(const char *haystack, const char *needle) {

    char *p = (char *)haystack;

    while (*p) {

        if (strnicmp(p, needle, strlen(needle)) == 0) {

            return p;

        }

        p++;

    }

    return NULL;

}

#endif


// Cau 6: tim kiem sach theo ten sach

void timSach() {

    char ten[25];

    bool timthay = false;

    printf("Nhap ten sach can tim: ");

    scanf(" %[^\n]", ten);

    for (int i = 0; i < n; i++) {

        // Windows: stricmp | Linux, macOS: strcasecmp

        // if (strcasecmp(ds[i].tuasach, ten) == 0) {


        // Windows: khong co ham strcasestr

        if (strcasestr(ds[i].tuasach, ten) != 0) {

            xuatSach(ds[i]);

            timthay = true;

        }

    }


    if (timthay == false) {

        printf("Khong tim thay sach co ten %s\n", ten);

    }

}



// Cau 7: tinh tong thanh tien

void tinhTongThanhTien() {

    if (n == 0) {

        printf("Danh sach sach rong!\n");

        return;

    }

    clear();

    unsigned tong = 0;

    for (int i = 0; i < n; i++) {

        tong += ds[i].sl * ds[i].dongia;

    }

    printf("Tong thanh tien: %u\n", tong);

}


// Cau 8: liet ke sach co nam xuat ban <= x

void lietKeSachTheoNam() {

    unsigned nam;

    unsigned dem = 0;

    printf("Nhap nam xuat ban: ");

    scanf("%u", &nam);

    printf("Sach co nam xuat ban <= %u:\n", nam);

    for (int i = 0; i < n; i++) {

        if (ds[i].nam <= nam) {

            xuatSach(ds[i]);

            dem++;

        }

    }

    printf("Co %u sach thoa dieu kien", dem);

}


// Cau 9: liet ke sach co don gia > x

void lietKeSachTheoDonGia() {

    unsigned dongia;

    unsigned dem = 0;

    printf("Nhap don gia: ");

    scanf("%u", &dongia);

    printf("Sach co don gia > %u:\n", dongia);

    for (int i = 0; i < n; i++) {

        if (ds[i].dongia >= dongia) {

            xuatSach(ds[i]);

            dem++;

        }

    }

    printf("Co %u sach thoa dieu kien", dem);

}


// Cau 10: liet ke sach theo the loai

void lietKeSachTheoTheLoai() {

    int loai;

    unsigned dem = 0;

    printf("Nhap loai sach (TN = 0, XH = 1): ");

    scanf("%d", &loai);

    printf("Sach co loai %s:\n", loai == TN ? "TN" : "XH");

    for (int i = 0; i < n; i++) {

        if (ds[i].loai == loai) {

            xuatSach(ds[i]);

            dem++;

        }

    }

    printf("Co %u sach thoa dieu kien", dem);

}


// Cau 11: menu chinh thuc hien toan bo cac chuc nang

void menu() {

    int ch;

    do {

        clear();

        printf("=== CHUONG TRINH QUAN LY SACH ===\n");

        printf("1. Nhap sach\n");

        printf("2. Xuat danh sach sach\n");

        printf("3. Sap xep danh sach theo ma sach\n");

        printf("4. Tim kiem sach theo ten sach\n");

        printf("5. Tinh tong thanh tien\n");

        printf("6. Liet ke sach co nam xuat ban <= x\n");

        printf("7. Liet ke sach co don gia > x\n");

        printf("8. Liet ke sach theo the loai\n");

        printf("9. Thoat\n");

        printf("Chon chuc nang: ");

        scanf("%d", &ch);

        

        switch (ch) {

            case 1: themSach(); break;

            case 2: xuatDanhSach(); break;

            case 3: sapXep(); break;

            case 4: timSach(); break;

            case 5: tinhTongThanhTien(); break;

            case 6: lietKeSachTheoNam(); break;

            case 7: lietKeSachTheoDonGia(); break;

            case 8: lietKeSachTheoTheLoai(); break;

            case 9: return; // thoat

            default: printf("Chuc nang khong hop le!\n"); break;

        }

        pause();

    } while (true);

}


#include <stdio.h>

#include <string.h>


typedef struct {

    char mssv[11];

    char hoTen[41];

    struct {

        int d;

        int m;

        int y;

    } ngaySinh;

    int gioiTinh; // 0: nu, 1: nam

    float diemTB;

} SV;


#define MAX 60

SV ds[MAX]; // mang chua toi da 60 sinh vien

int siso = 0; // so luong sinh vien hien co trong mang


// Cau 1: Nhap thong tin cho mot sinh vien

void nhapSV(SV &sv) {

    printf("Nhap MSSV: ");

    scanf("%s", sv.mssv);

    printf("Nhap ho ten: ");

    scanf(" %[^\n]", sv.hoTen);

    printf("Nhap ngay sinh (dd mm yyyy): ");

    scanf("%d %d %d", &sv.ngaySinh.d, &sv.ngaySinh.m, &sv.ngaySinh.y);

    printf("Nhap gioi tinh (0: nu, 1: nam): ");

    scanf("%d", &sv.gioiTinh);

    printf("Nhap diem TB: ");

    scanf("%f", &sv.diemTB);

}


// Cau 2: Xuat thong tin cho mot sinh vien tren mot dong

void xuatSV(SV sv) {

    printf("%-10s %-40s %02d/%02d/%04d %-3s %.2f\n", 

            sv.mssv, sv.hoTen, 

            sv.ngaySinh.d, sv.ngaySinh.m, sv.ngaySinh.y, 

            sv.gioiTinh == 0 ? "Nu" : "Nam",

            sv.diemTB);

}


// Cau 3: them sinh vien moi vao cuoi danh sach lop

void themSV() {

    do {

        if (siso < MAX) {

            SV s;   

            nhapSV(s);      // nhap sinh vien s

            ds[siso] = s;   // them sinh vien s vao cuoi danh sach

            siso++;         // tang so luong sinh vien

        } else {

            printf("Danh sach da day!\n");

        }

        printf("Ban co muon nhap them sinh vien khong? (0: khong/1: co): ");

        int chon;

        scanf("%d", &chon);

        if (chon == 0) {

            break; // thoat khoi vong lap

        }

        // Neu chon 1 thi tiep tuc nhap sinh vien

        // Neu chon khac 0 va 1 thi yeu cau nhap lai

    } while (1);

}


// Cau 4: Xuat danh sach sinh vien

void xuatDS() {

    printf("Danh sach sinh vien:\n");

    for (int i = 0; i < siso; i++) {

        xuatSV(ds[i]);

    }

    printf("Tong so sinh vien: %d\n", siso);

}


// Cau 5: sap thu tu danh sach sinh vien theo diem TB giam dan

void sapXep() {

    // thuat toan Interchange Sort (Doi cho truc tiep)

    for (int i = 0; i < siso - 1; i++) {

        for (int j = i + 1; j < siso; j++) {

            if (ds[i].diemTB < ds[j].diemTB) {

                SV temp = ds[i];

                ds[i] = ds[j];

                ds[j] = temp;

            }

        }

    }

}


// Cau 6: Tim kiem sinh vien theo MSSV

void timSVTheoMSSV() {

    char mssv[11];

    printf("Nhap MSSV can tim: ");

    scanf("%s", mssv);

    // tim kiem sinh vien co MSSV = mssv

    for (int i = 0; i < siso; i++) {

        if (strcmp(ds[i].mssv, mssv) == 0) {

            xuatSV(ds[i]);

            return;

        }

    }

    printf("Khong tim thay sinh vien co MSSV %s\n", mssv);

}


// Cau 7: tim sinh vien dua tren ho ten

void timSVTheoHoTen() {

    char hoten[41];

    printf("Nhap Ho ten can tim: ");

    scanf("%[^\n]", hoten);

    for (int i = 0; i < siso; i++) {

#ifdef _WIN32   // kiem tra neu chay tren Windows

        if (stricmp(ds[i].hoTen, hoten) == 0) {

#else           // neu khong phai Windows thi dung strcasecmp

        if (strcasecmp(ds[i].hoTen, hoten) == 0) {

#endif

            xuatSV(ds[i]);

            return;

        }

    }

    printf("Khong tim thay sinh vien co ho ten %s\n", hoten);

}


// Cau 8: liet ke theo gioi tinh

void lietKeGioiTinh() {

    int gt;

    printf("Nhap gioi tinh (0: nu, 1: nam): ");

    scanf("%d", &gt);

    printf("Danh sach sinh vien gioi tinh %s:\n", gt == 0 ? "Nu" : "Nam");

    for (int i = 0; i < siso; i++) {

        if (ds[i].gioiTinh == gt) {

            xuatSV(ds[i]);

        }

    }

}


// Cau 9: liet ke theo nam sinh

void lietKeNamSinh() {

    int nam;

    printf("Nhap nam sinh: ");

    scanf("%d", &nam);

    printf("Danh sach sinh vien co nam sinh %d:\n", nam);

    for (int i = 0; i < siso; i++) {

        if (ds[i].ngaySinh.y == nam) {

            xuatSV(ds[i]);

        }

    }

}


// Cau 10: menu chinh thuc hien cac chuc nang da thuc hien

void menu() {

    int chon;

    do {

        // xoa man hinh

        printf("\033[H\033[J"); // cho Linux/macOS

        printf("\033[38;5;118mM\033[38;5;196me\033[38;5;222mn\033[38;5;231mu\033[38;5;5m:\n");

        printf("\033[0m");

        printf("1. Nhap danh sach sinh vien\n");

        printf("2. Xuat danh sach sinh vien\n");

        printf("3. Sap xep danh sach sinh vien theo diem TB giam dan\n");

        printf("4. Tim kiem sinh vien theo MSSV\n");

        printf("5. Tim kiem sinh vien theo ho ten\n");

        printf("6. Liet ke danh sach sinh vien theo gioi tinh\n");

        printf("7. Liet ke danh sach sinh vien theo nam sinh\n");

        printf("8. Thoat\n");

        printf("Chon chuc nang: ");

        scanf("%d", &chon);

        switch (chon) {

            case 1: themSV(); break;

            case 2: xuatDS(); break;

            case 3: sapXep(); break;

            case 4: timSVTheoMSSV(); break;

            case 5: timSVTheoHoTen(); break;

            case 6: lietKeGioiTinh(); break;

            case 7: lietKeNamSinh(); break;

            case 8: printf("Thoat chuong trinh.\n"); break;

            default: printf("Chuc nang khong hop le!\n"); break;

        }

        // cho nguoi dung nhan phim de tiep tuc

        if (chon != 8) {

            printf("Nhan phim bat ky de tiep tuc...\n");

            getchar(); // doc ki tu '\n' con ton lai

            getchar(); // cho nguoi dung nhan phim

        }

    } while (chon != 8);

}


SV test[] = 

{

    {"123456789", "Nguyen Van A", {1, 1, 2000}, 1, 8.5},

    {"987654321", "Tran Thi B", {2, 2, 2001}, 0, 9.0},

    {"111222333", "Le Van C", {3, 3, 2000}, 1, 7.5},

    {"444555666", "Pham Thi D", {4, 4, 2000}, 0, 6.0},

    {"777888999", "Hoang Van E", {5, 5, 2001}, 1, 8.0},

    {"000111222", "Nguyen Thi F", {6, 6, 2001}, 0, 9.5},

    {"333444555", "Tran Van G", {7, 7, 2000}, 1, 7.0},

    {"666777888", "Le Thi H", {8, 8, 2000}, 0, 8.2},

    {"999000111", "Pham Van I", {9, 9, 2000}, 1, 6.5},

    {"222333444", "Hoang Thi J", {10, 10, 2001}, 0, 7.8},

    {"555666777", "Nguyen Van K", {11, 11, 2001}, 1, 8.1},

    {"888999000", "Tran Thi L", {12, 12, 2001}, 0, 9.3}

};

#define TEST_SIZE (sizeof(test) / sizeof(SV))


int main() {

    // them ds sv tu mang test

    for (int i = 0; i < TEST_SIZE; i++) {

        ds[siso] = test[i];

        siso++;

    }

    menu(); // goi menu de thuc hien cac chuc nang

    return 0;

}


#include <stdio.h>

#include <stdlib.h>

#include <time.h>


// Cau a

int * taoMatran(int & m, int & n) {

    printf("Nhap so dong: ");

    scanf("%d", &m);

    printf("Nhap so cot: ");

    scanf("%d", &n);

    int * a = new int[m * n];

    if (a == NULL) {

        printf("Khong du bo nho cap phat\n");

        exit(1);

    }

    srand(time(NULL));

    for (int i = 0; i < m * n; i++) {

        a[i] = rand() % 50 + 1;

    }

    return a;

}


// Cau f

void huyMatran(int * a) {

    delete[] a;

}


// Cau b

void xuatMatran(int * a, int m, int n) {

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            printf("%3d ", a[i * n + j]);

        }

        printf("\n");

    }

}


// Cau c

void xuatBien(int * a, int m, int n) {

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {

                printf("%3d ", a[i * n + j]);

            } else {

                printf("    ");

            }

        }

        printf("\n");

    }

}


// Cau d

void timGiaTri(int * a, int m, int n) {

    int k;

    bool timthay = false;

    printf("Nhap gia tri can tim: ");

    scanf("%d", &k);

    for (int i = 0; i < m * n; i++) {

            if (a[i] == k) {

                int d = i / n; // Tinh chi so dong

                int c = i % n; // Tinh chi so cot

                printf("Tim thay tai vi tri [%d][%d]\n", d, c);

                timthay = true;

            }

    }

    if (!timthay) {

        printf("Khong tim thay gia tri %d trong ma tran\n", k);

    }

}


// Cau e

void xuatDong(int * a, int m, int n) {

    int r;

    printf("Nhap dong can xuat: ");

    scanf("%d", &r);

    if (r >= 0 && r < m) {

        for (int j = 0; j < n; j++) {

            printf("%3d ", a[r * n + j]);

        }

        printf("\n");

    } else {

        printf("Dong khong hop le\n");

    }

}


// Cau g

void tongDong(int * a, int m, int n) {

    int r;

    printf("Nhap dong can tinh tong: ");

    scanf("%d", &r);

    if (r >= 0 && r < m) {

        int tong = 0;

        for (int j = 0; j < n; j++) {

            tong += a[r * n + j];

        }

        printf("Tong cac phan tu o dong %d la: %d\n", r, tong);

    } else {

        printf("Dong khong hop le\n");

    }

}


// cau h

void tongCot(int * a, int m, int n) {

    int c;

    printf("Nhap cot can tinh tong: ");

    scanf("%d", &c);

    if (c >= 0 && c < n) {

        int tong = 0;

        for (int i = 0; i < m; i++) {

            tong += a[i * n + c];

        }

        printf("Tong cac phan tu o cot %d la: %d\n", c, tong);

    } else {

        printf("Cot khong hop le\n");

    }

}


int main() {

    int m, n;

    int * a = taoMatran(m, n);


    printf("Ma tran vua tao:\n");

    xuatMatran(a, m, n);

    tongDong(a, m, n);

    tongCot(a, m, n);

    printf("Cac phan tu bien cua ma tran:\n");

    xuatBien(a, m, n);

    timGiaTri(a, m, n);

    xuatDong(a, m, n);

    huyMatran(a);

    return 0;

}


#include <stdio.h>

#include <stdlib.h>

#include <time.h>


typedef struct {

    int x;

    int y;

} Point;


Point * taoDanhSach(int & n) {

    printf("Nhap so luong diem: ");

    scanf("%d", &n);

    Point * ds = (Point *) malloc(n * sizeof(Point));

    if (ds == NULL) {

        printf("Khong du bo nho cap phat\n");

        exit(1);

    }

    srand(time(NULL));

    for (int i = 0; i < n; i++) {

        ds[i].x = rand() % 10 + 1; // Gia tri x ngau nhien

        ds[i].y = rand() % 10 + 1; // Gia tri y ngau nhien

    }

    return ds;

}


void huyDanhSach(Point * ds) {

    free(ds);

}


void inDanhSach(Point * ds, int n) {

    printf("Danh sach diem:\n");

    for (int i = 0; i < n; i++) {

        printf("Diem %d: (%d, %d)\n", i + 1, ds[i].x, ds[i].y);

    }

}


void timDiem(Point * ds, int n) {

    int x, y;

    bool found = false;

    printf("Nhap toa do diem can tim (x y): ");

    scanf("%d %d", &x, &y);

    for (int i = 0; i < n; i++) {

        if (ds[i].x == x && ds[i].y == y) {

            printf("Tim thay diem tai vi tri %d: (%d, %d)\n", i + 1, ds[i].x, ds[i].y);

            found = true;

            break;

        }

    }

    if (!found) {

        printf("Khong tim thay diem (%d, %d) trong danh sach\n", x, y);

    }

}


void daoNguocDanhSach(Point * ds, int n) {

    int left = 0, right = n - 1;

    while (left < right) {

        Point temp = ds[left];

        ds[left] = ds[right];

        ds[right] = temp;

        left++;

        right--;

    }

}


int main() {

    int n;

    Point * ds = taoDanhSach(n);

    inDanhSach(ds, n);

    timDiem(ds, n);

    daoNguocDanhSach(ds, n);

    printf("Danh sach diem sau khi dao nguoc:\n");

    inDanhSach(ds, n);

    huyDanhSach(ds);

    return 0;

}


// Tinh tong 2 da thuc

#include <stdio.h>

#include <stdlib.h>


typedef struct {

    float * heSo; // Mang luu he so cua da thuc

    int bac;       // Bac cua da thuc

} DaThuc;


void nhapDaThuc(DaThuc & dt) {

    printf("Nhap bac cua da thuc: ");

    scanf("%d", &dt.bac);

    dt.heSo = (float *)calloc((dt.bac + 1), sizeof(float));


    // nhap va luu cac he so theo chieu nguoc cua bac

    printf("Nhap cac he so cua da thuc:\n");

    for (int i = dt.bac; i >= 0; i--) {

        printf("He so bac %d: ", i);

        scanf("%f", &dt.heSo[i]);

    }

}


void huyDaThuc(DaThuc & dt) {

    free(dt.heSo);

    dt.heSo = NULL;

    dt.bac = -1; // Dat bac ve -1 de biet da thuc da bi huy

}


void xuatSoHang(float heso, int bac) {

    if (heso == 0) return; // Khong xuat so hang bang 0

    if (bac == 0) {

        printf("%.2f", heso);

    } else if (bac == 1) {

        printf("%.2f*x", heso);

    } else {

        printf("%.2f*x^%d", heso, bac);

    }

}


void xuatDaThuc(DaThuc p) {

    if (p.bac == -1) return;

    for (int i = p.bac; i >= 0; i--) {

        if (i < p.bac) {

            if (p.heSo[i] > 0) {

                printf(" + ");

            } else if (p.heSo[i] < 0) {

                printf(" - ");

            }

        }

        xuatSoHang(abs(p.heSo[i]), i);

    }

    printf("\n");

}


void congDaThuc(DaThuc p, DaThuc q, DaThuc & r) {

    r.bac = (p.bac > q.bac) ? p.bac : q.bac;

    r.heSo = (float *)calloc((r.bac + 1), sizeof(float));


    // Cong he so tuong ung

    for (int i = 0; i <= r.bac; i++) {

        float hesoP = (i <= p.bac) ? p.heSo[i] : 0;

        float hesoQ = (i <= q.bac) ? q.heSo[i] : 0;

        r.heSo[i] = hesoP + hesoQ;

    }

}


int main() {

    DaThuc p, q;

    nhapDaThuc(p);

    nhapDaThuc(q);

    printf("Da thuc p: ");

    xuatDaThuc(p);

    printf("Da thuc q: ");

    xuatDaThuc(q);

    DaThuc r;

    congDaThuc(p, q, r);

    printf("Tong cua da thuc p va q: ");

    xuatDaThuc(r);

    huyDaThuc(r);

    huyDaThuc(p);

    huyDaThuc(q);

    return 0;

}

Chưa hoàn thành 0 bài
Không tìm thấy dữ liệu nào