#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", >);
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;
}