30/09/2018, 19:09

Bài tập c++ (15 char)

Đây là bài tập được cô nhập môn lập trình cho em về nhà làm. Mà ai học thực hành bà cô này thì được chỉ em thì học thực hành khác lớp nên không biết gì luôn tụi học bã này được chỉ làm câu 1 như thế này. Em xin code sữa lại được như thế này mà có nhiều chỗ không hiểu với bị lỗi. Mây anh chị chỉ em với. Em bị sai ở 3 chỗ em làm dấu <> đáy ạ.
Năm nhất cntt xin dk cảm ơn trước ạ.

#include<iostream>
using namespace std;
#define max 50
struct date{
	int ngay;
	int thang;
	int nam;
};
struct thongtin{
	char malophoc[5];
	char chude[30];
	char hotengiaovien[30];
	int siso;
	date ngaybatdau;
	date ngayketthuc;
	int count;
};
struct lophoc{
	
	thongtin listlophoc[max];
};
void nhapngay(date &d){
	cout << "
Nhap ngay";
	cin >> d.ngay;//tại sao mình lại cần phải d.ngay có thể thay thế d bằng cái khác không
	cout << "
Nhap thang";
	cin >> d.thang;
	cout << "
Nhap nam";
	cin >> d.nam;
}
void xuatngay(date d)
{
	cout << d.ngay << "/" << d.thang<<"/" << "/" << d.nam;
}
void nhaplophoc(thongtin &a)
{
	cout << "
Nhap ma lop hoc:";
	fflush(stdin);//nghĩa của đoạn code này là gì thế ạ.
	cin.getline(a.malophoc, 11);/*nghĩa của đoạn code này là sao ạ. Còn số 11 tại sao lại là số 11 và nó                               có ý nghĩa gì*/
	cout << "
Nhap che du:";
	fflush(stdin);
	cin.getline(a.chude,51 );
	cout << "
Nhap ho va ten GVL";
	fflush(stdin);
	cin.getline(a.hotengiaovien, 11);
	cout << "
Nhap si so:";
	fflush(stdin);
	cin<.>getline(a.siso, 11);//SAI
	cout << "
Nhap ngay bat dau hoc:";
	nhapngay(a.ngaybatdau);
	cout << "
Nhap ngay ket thuc hoc:";
	nhapngay(a.ngayketthuc);
	}
void xuatlophoc(thongtin a){
	cout << "
" << a.malophoc << "
"
		<< a.chude << "
" << a.hotengiaovien
		<< "
" << a.siso;
	xuatngay(a.ngaybatdau);
	xuatngay(a.ngayketthuc);
}
void nhapdanhsachlophoc(thongtin &list){
	int count;
	cout << "
Nhap so luong lop hoc";
	cin >> list.count;//tại sao mình lại cần phải cần count ở đây dậy a.
	for (int i = 0; i <= list.count; i++)
	{
		nhaplophoc(list.count[<i>]);//sai
	}
}
void xuatdanhsachlophoc(thongtin &list){
	cout << "
Xuat danh sach lop hoc";
	cin >> list.count;
	for (int i = 0; i <= list.count; i++)
	{
		xuatlophoc(list.count[<i>])//SAI;
	}

}
void main(){
	thongtin a;
	nhapdanhsachlophoc(a);
	xuatdanhsachlophoc(a);
	system("pause");
}
Trần Hồng Phong viết 21:17 ngày 30/09/2018

Phần giải thích

d.ngay => cái này do em tự qui định trong struct của em mà

fflush(stdin) => xóa vùng nhớ đệm

cin.getline()

istream& cin.getline(char *str, int n, char delim = ‘\n’)
Đọc dãy ký tự tính cả khoảng trắng vào bộ nhớ do str trỏ tới, quá trình đọc kết thúc khi gặp ký tự kết thúc chuỗi ‘\0’ hoặc nhận đủ n-1 ký tự, ký tự Enter được loại bỏ không đưa vào dãy ký tự nhận được

cin >> list.count; để lưu số lượng phần tử của list chứ chi, int count nằm trong struct thongtin do em tự tạo ra đó Mà làm vậy sai đề, và cái int count em khai báo trong hàm đó là vô nghĩa

Phần sai
cin.getline(a.siso, 11);//SAI => a.siso là kiểu int

nhaplophoc(list.count[i]);//sai
xuatlophoc(list.count[i])//SAI; => list.count là kiểu int trong khi đó hai hàm nhập xuất truyền vào kiểu thongtin

Thêm một cái sai nữa là khi nhập danh sách lớp học (lẽ ra là thêm mới lớp học đó) em nhập nó vào một biến kiểu thongtin => đúng ra phải nhập vào một mảng (hoặc tương đương mảng) thongtin (tức là kiểu lophoc đó). Ví dụ:

void themLopHoc(lophoc &DanhSachLopHoc){
        int count;
	cout << "\nNhap so luong lop hoc muon them";
        cin >> count;
	for (int i = DanhSachLopHoc.count; i <= DanhSachLopHoc.count + count; i++)
	{
		nhaplophoc(DanhSachLopHoc.listlophoc[i]);
	}
	DanhSachLopHoc.count += count;
}

À struct lophoc sửa thành như dưới (còn cái int count của thongtin thì bỏ đi)

struct lophoc{
	int count = 0;
	thongtin listlophoc[max];
};

Nhận xét cuối
Em bị hỏng kiến thức nhiều quá, học lâu chưa? Bài này còn thiếu xót nhiều lắm, không chỉ bấy nhiêu sai đâu. Chuyện bà cô TH có dạy e hay không cũng có quan trọng lắm đâu, nên học lại nhiều kiến thức nha. Cố lên

Buồn ngủ quá, lỡ có sửa cái nào sai cao nhân nào nhắc dùm nha hihi

Trần Hồng Phong viết 21:11 ngày 30/09/2018

Mà code này là do thằng bạn em viết hết hả? Bài này khá là cơ bản và thuộc dạng dễ, cố gắng luyện lại kiến thức nhé. Có thể xem sơ-ri của anh Đạt về C và C++

thanh viết 21:14 ngày 30/09/2018

cái này là nhiều bài tập giống nhau chỉ dổi phần ngoài còn code thì giống nhau. Em lấy về đổi cho giống với bài tập của em.

thanh viết 21:15 ngày 30/09/2018

Em chỉ chưa học tới struct mà anh. Cái này em chỉ mới tìm hiểu trên mạng thôi còn video của anh Đạt không có struct chỉ có lass thôi. Anh cho em xin địa chỉ liên lạc để em có thể hỏi thêm được không anh.

thanh viết 21:17 ngày 30/09/2018
cin.getline(a.hotengiaovien, 11);//dậy a.hotengiaovien là a lấy kiểu dữ liệu hotengiao viên còn số 11 ngoài sau có nghĩa là gì dậy anh
Trần Hồng Phong viết 21:11 ngày 30/09/2018

Có giải thích rồi mà, 11 là giới hạn lượng kí tự đọc vào, nó nhận được 10 kí tự thôi, nhập nhiều hơn thì cũng nhận 10 thôi

Còn vụ địa chỉ liên lạc thì … địa chỉ này nè hehe. Mà a cũng ít lên đây lắm, em có thể mở topic hỏi mà, nhiều a/c sẽ vô trả lời class thì cũng giống struct thôi, dĩ nhiên có khác chỗ class mặc định là private nên muốn giống struct thì thêm public: mà sau này cũng chỉ dùng class thôi. PR tí: em có thể mua sách Nhập môn lập trình, Kĩ thuật lập trình, Phương pháp lập trình hướng đối tượng ở ĐH KHTN để đọc. Còn sau này giỏi TA rồi thì tài liệu hay sẽ vô số.

Anh đang trong thời kì chán code hoho

thanh viết 21:12 ngày 30/09/2018

em sợ đăng nhiều quá máy a/c không thèm trả lời em thôi với em cũng ngại nữa.

Bài liên quan
0