Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.
Dựa trên yêu cầu của bài toán, ta có thể đề xuất các bảng dữ liệu và các trường làm khoá chính và khoá ngoài như sau:
- Bảng HocSinh:
Trường: Mã số báo danh, Họ tên, Ngày sinh, Địa chỉ
Khoá chính: Mã số báo danh
Khoá ngoài: Không có
- Bảng MonHoc:
Trường: Tên môn học, Mã môn học
Khoá chính: Mã môn học
Khoá ngoài: Không có
- Bảng PhongThi:
Trường: Mã phòng thi, Tên phòng thi
Khoá chính: Mã phòng thi
Khoá ngoài: Không có
- Bảng ThiSinh_MonHoc:
Trường: Mã số báo danh, Mã môn học
Khoá chính: Mã số báo danh, Mã môn học
Khoá ngoài: Mã số báo danh tham chiếu đến bảng HocSinh, Mã môn học tham chiếu đến bảng MonHoc
- Bảng KetQuaThi:
Trường: Mã số báo danh, Mã môn học, Mã phòng thi, Điểm thi
Khoá chính: Mã số báo danh, Mã môn học, Mã phòng thi
Khoá ngoài:
Mã số báo danh tham chiếu đến bảng HocSinh
Mã môn học tham chiếu đến bảng MonHoc
Mã phòng thi tham chiếu đến bảng PhongThi
Lưu ý rằng, trong bảng ThiSinh_MonHoc, ta cần sử dụng một tập hợp các trường (Mã số báo danh, Mã môn học) để tạo thành khoá chính, bởi vì một thí sinh có thể đăng kí thi nhiều môn học khác nhau. Còn trong bảng KetQuaThi, ta cần sử dụng một tập hợp các trường (Mã số báo danh, Mã môn học, Mã phòng thi) để tạo thành khoá chính, bởi vì một thí sinh có thể thi cùng một môn học ở nhiều phòng thi khác nhau.
Để lưu trữ danh sách học sinh và thông tin điểm thi của họ, bạn có thể sử dụng một danh sách chứa nhiều danh sách con. Mỗi danh sách con sẽ chứa tên học sinh (dạng chuỗi) và ba điểm số (dạng số) của họ tương ứng với ba bài thi.
Ví dụ, để tạo một mảng danh sách học sinh với thông tin điểm số, ta có thể sử dụng mã như sau:
# Nhập danh sách học sinh và điểm số
students = []
n = int(input("Nhập số lượng học sinh: "))
for i in range(n):
name = input(f"Nhập tên học sinh thứ {i+1}: ")
mark1 = float(input(f"Nhập điểm bài thi 1 của {name}: "))
mark2 = float(input(f"Nhập điểm bài thi 2 của {name}: "))
mark3 = float(input(f"Nhập điểm bài thi 3 của {name}: "))
students.append([name, mark1, mark2, mark3])
# Tính điểm trung bình và in ra danh sách học sinh và điểm trung bình của họ
for student in students:
name = student[0]
mark1 = student[1]
mark2 = student[2]
mark3 = student[3]
avg_mark = (mark1 + mark2 + mark3) / 3
print(f"Học sinh {name} có điểm trung bình là {avg_mark}")
with open('XAU.INP', 'r') as input_file, open('XAU.OUT', 'w') as output_file:
for line in input_file:
length = len(line.strip())
output_file.write(f'{length}\n')
Hồ sơ học sinh một lớp được tổ chức theo dạng bảng: mỗi hàng chứa dữ liệu về một học sinh, mỗi cột chứa dữ liệu về một thuộc tính của học sinh như: họ và tên, ngày sinh, …Theo em, cách tổ chức như vậy để người sử dụng có thể khai thác dữ liệu, rút ra thông tin phục vụ các hoạt động hoặc đưa ra các quyết định phù hợp, kịp thời. Bản chất của việc khai thác một CSDL là tìm kiếm dữ liệu và kết xuất thông tin cần tìm, công việc này còn được gọi là truy vấn CSDL.
Program hotrotinhoc_hoc24;
const fi='DULIEU.XLS';
var a,b,c: array[1..10000] of real;
i,n: integer;
procedure ip;
begin
assign(f,fi);
reset(f);
readln(f,n);
for i:=1 to n do
begin
read(f,a[i],b[i],c[i]);
readln(f);
end;
close(f);
end;
begin
ip;
for i:=1 to n do
writeln('Tong diem cua hoc sinh thu ',i,' : ',a[i]+b[i]+c[i]:1:2);
readln
end.
Tham khảo:
Tổ chức thực hiện:
– Lập các nhóm dự án, mỗi nhóm khoảng 5 đến 6 học sinh; chọn nhóm trưởng. - Cả nhóm cùng thực hiện Nhiệm vụ 1:
+ Đọc hướng dẫn để biết cách phân tích, lựa chọn và thiết kế các hàm. Hướng dẫn chỉ là gợi ý, không bắt buộc phải theo.
+Thảo luận, đưa ra thiết kế cuối cùng sau các sửa đổi, điều chỉnh.
- Dựa trên danh sách các hàm cần thực hiện, xác định các nhiệm vụ cụ thể; phân công mỗi nhiệm vụ (các bài thực hành tiếp theo) cho 1 đến 2 học sinh đảm nhiệm.
– Nhóm trưởng phụ trách tích hợp các kết quả thành chương trình hoàn chỉnh với sự cộng tác của các thành viên khác, dưới sự hỗ trợ của thầy, cô giáo.
- Ta có thể đặt tên các phần tử của danh sách học sinh là họ tên của các học sinh. Ví dụ: nếu lớp có 30 học sinh, chúng ta có thể tạo một danh sách với 30 phần tử và lưu trữ họ tên của các học sinh tại các chỉ số tương ứng của danh sách. Ví dụ: tên học sinh thứ nhất được lưu trữ tại vị trí danh sách thứ 0, tên học sinh thứ hai được lưu trữ tại vị trí danh sách thứ 1, và cứ như vậy.
- Để tổ chức dữ liệu khảo sát, chúng ta có thể sử dụng một cấu trúc dữ liệu gọi là "bảng điểm" (scoreboard) hoặc "bảng đánh giá" (rating table). Cấu trúc này có thể được triển khai dưới dạng một mảng.
- Em sẽ dụng cấu trúc dữ liệu 2 chiều để mô tả danh sách các địa điểm này
Có thể tạo tệp “bangDiem.txt" bằng cách chỉnh sửa và bổ sung bảng trong Hình la ở Bài 2; từ Word hay Excel, thao tác Copy\Paste vào cửa sổ của Notepad hay cửa sổ soạn thảo của Python; ghi lưu thành tệp có định dạng text.
- Đọc từng dòng của tập đầu vào.
- Chuyển đổi mỗi mục của danh sách sang kiểu dữ liệu cần thiết và nối thêm vào danh sách tương ứng trong chương trình (tham khảo chương trình ở Hình 4).
Trong Python, nếu một dòng gồm nhiều mục khác kiểu dữ liệu, xen kẽ nhau, thì phải truy cập từng phần tử của danh sách và chuyển từ xâu kí tự thành kiểu dữ liệu đúng mô tả.
Các thao tác với tệp dữ liệu
Đầu vào là tệp thuần văn bản chữ và số (đuôi tên tệp “txt”) gồm nhiều dòng; mỗi dòng gồm nhiều từ, mỗi từ là một mục dữ liệu, phân cách bằng khoảng trống.
Các bước thực hiện như sau:
Bước 1. Mở tệp để đọc hay viết, sử dụng hàm open () như ví dụ ở Hình 5.
Bước 2. Đọc từ tệp, có thể dùng các phương thức read(), readline(), readlines() kết hợp với split():
read().split() : Đọc từng từ và nối liền toàn bộ các dòng thành một danh sách các từ. Sử dụng khi tệp ngắn và cần xử lí toàn bộ nội dung tệp.
readline().split() : Đọc một dòng, trả về danh sách các từ, thường dùng nhất. readlines() : Đọc toàn bộ tệp, trả về danh sách các dòng, mỗi dòng là một xâu kí tự, kết thúc bằng ‘\n (dấu xuống dòng).
Bước 3. Xuất ra tệp thuần văn bản: có thể dùng hàm print, sau khi đã chuyển đầu ra chuẩn từ màn hình sang tệp đã mở để viết vào như sau:
Bước 4. Đóng tệp, dùng phương thức close().
Lưu ý: Nếu giữa các từ được phân cách nhau bằng dấu phẩy thì ta có tệp kiểu “csv” (comma separated value) và cần dùng split(',') thay vì dạng mặc định split(). Cần chuyển thành kiểu danh sách (hay mảng) nên sẽ kết hợp xử lí bằng split(',').
uses crt;
const fi='vanban.txt';
var f1:text;
a,b,c,tb:array[1..100]of real;
ln:real;
n,i:integer;
begin
clrscr;
assign(f1,fi); reset(f1);
n:=0;
while not eof(f1) do
begin
n:=n+1;
readln(a[n],b[n],c[n]);
end;
for i:=1 to n do tb[i]:=(a[i]+b[i]+c[i])/3;
for i:=1 to n do
writeln(tb[i]:4:2);
ln:=0;
for i:=1 to n do
if ln<tb[i] then ln:=tb[i];
writeln(ln:4:2);
close(f1);
readln;
end.
Tham khảo:
# Đọc dữ liệu từ tệp điểm thi
with open("diemthi.inp", "r") as file:
data = file.readlines()
# Tạo danh sách lưu thông tin điểm thi của các thí sinh
scores = []
for line in data:
line = line.strip().split()# Tách dữ liệu trên mỗi dòng thành các từ
sbd = line[0]# Lấy số báo danh của thí sinh
diem1 = int(line[1])# Lấy điểm bài 1
diem2 = int(line[2])# Lấy điểm bài 2
diem3 = int(line[3])# Lấy điểm bài 3
tong_diem = diem1 + diem2 + diem3# Tính tổng điểm
scores.append((sbd, diem1, diem2, diem3, tong_diem))# Thêm thông tin vào danh sách
# Sắp xếp danh sách giảm dần theo tổng điểm
scores.sort(key=lambda x: x[4], reverse=True)
# Ghi kết quả vào tệp ketqua.out
with open("ketqua.out", "w") as file:
for score in scores:
sbd = score[0]
diem1 = score[1]
diem2 = score[2]
diem3 = score[3]
tong_diem = score[4]
file.write(f"{sbd}\t{diem1}\t{diem2}\t{diem3}\t{tong_diem}\n")