Professional Documents
Culture Documents
Lớp: D19CQDT01-N
I. M-FILE
Bài 18: Viết một hàm (function) tính điểm trung bình học kỳ (hệ 4), số tín chỉ
tích lũy và xếp loại học tập cho sinh viên PTIT theo quy định hiện hành. Giả sử
SV chỉ học từ 4 đến 8 môn và điểm nhập vào cho từng môn là điểm hệ 10.
II. GUIDE
Bài 24: Viết chương trình tạo giao diện người dùng (GUI) đọc giá trị và sai số
của điện trở 3 vòng màu. Chương trình cho phép nhập màu các vòng của điện
trở (đen, nâu, đỏ,...), xuất giá trị và sai số của điện trở ra giao diện.
III. SIMULINK
Câu 39: Dùng Simulink mô phỏng phương trình đa thức bậc 4 tổng quát. Quan
sát x trên cope ứng với 3 bộ giá trị khác nhau của hệ số các phương trình.
IV.
1
Bài 18: Viết một hàm (function) tính điểm trung bình học kỳ (hệ 4), số tín chỉ tích lũy
và xếp loại học tập cho sinh viên PTIT theo quy định hiện hành. Giả sử SV chỉ học từ
4 đến 8 môn và điểm nhập vào cho từng môn là điểm hệ 10.
Bài làm
I. Phương hướng làm bài:
− Tạo các function cho phép người dùng nhập các thông tin như ( tên sinh viên, mã
số sinh viên, lớp, môn học, điểm, phần trăm hệ điểm,…).
− Tạo thêm các function thực hiện các phép tính toán điểm các hệ và các function để
xếp lại của từng môn.
− Cho hiển thị các yêu câu của đề bài ra của sổ Command Window và xuất dữ liệu
vào file . txt.
II. Các cơ sở lý thuyết.
− Lý thuyết của hàm function.
− Lý thuyết nhập, xuất dữ liệu trong matlab.
− Lý thuyết của mảng và các phương thức hoạt động trong xử lí mảng cũng như
chuỗi trong matlab. Chú ý đến các hàm xử lý chuỗi và ma trận có sẵn trong
matlab.
− Lý thuyết về các vòng lập (while,for,…), hàm điều kiện(if else, switch case,…)
trong matlab
− Lý thuyết thao tác với file
III. Hướng dân chi tiết.
− Tạo các function
a) Function nhập dữ liệu
− Các function con có chức năng nhập
Function thong_tin_sinh_vien: người dùng nhập các thông tin của sinh viên (Tên, mã số sinh
viên, lớp) bằng cách sử dụng lệnh input(‘…………’,’s’);
function [ten_sinh_vien,MSSV,lop]=thong_tin_sinh_vien
ten_sinh_vien=input('nhap ten sinh vien: ','s');
MSSV=input('nhap ma so sinh vien: ','s');
lop=input('nhap lop: ','s');
end
Function nhap_mon_hoc: người dùng sẽ nhập môn học của sinh viên
function [mon_hoc]=nhap_mon_hoc
mon_hoc=input('nhap mon hoc: ','s');
end
Function nhap_tin_chi: người dùng nhập tín chỉ của môn học
function [tin_chi]=nhap_so_tin_chi
tin_chi=input('nhap so tin chi: ');
while tin_chi<0
tin_chi=input('nhap so tin chi: ');
end
end
2
Function nhap_diem: người dùng nhập điểm của sinh viên. Ngoài dùng input, function này có
thêm 1 vòng lập while để bắt người dùng nhập lại điểm khi có điểm số trên 10 và dưới 4
function [diem]=nhap_diem
diem(1,1)=input('diem chuyen can: ');
diem(1,2)=input('diem bai tap: ');
diem(1,3)=input('diem giua ki: ');
diem(1,4)=input('diem thi: ');
while diem(1,1)>10||diem(1,2)>10||diem(1,3)>10||diem(1,4)>10||diem(1,1)<0||diem(1,2)<0||
diem(1,3)<0||diem(1,4)<0%người dùng sẽ phải nhập lại nếu điểm nhâp ra trên 10 và dưới0
diem(1,1)=input('diem chuyen can: ');
diem(1,2)=input('diem bai tap: ');
diem(1,3)=input('diem giua ki: ');
diem(1,4)=input('diem thi: ');
end
end
Vd: sau đây là một trường hợp nhập điểm bài tập 11đ nên chương trình sẽ bắt người dùng
nhập lại lần nữa
Function nhap_phan_tram: người dùng nhập phần trăm điểm của mỗi môn học. Ngoài dùng
input, function này có thêm 1 vòng while để bắt người dùng nhập lại phần trăm khi tổng phần
trăm điểm các hệ không bằng100%
function [phan_tram]=nhap_phan_tram
phan_tram(1,1)=input('nhap phan tram diem chuyen can: ')/100;
phan_tram(1,2)=input('nhap phan tram diem bai tap: ')/100;
phan_tram(1,3)=input('nhap phan tram diem kiem tra: ')/100;
phan_tram(1,4)=input('nhap phan tram diem thi: ')/100;
while phan_tram(1,1)+phan_tram(1,2)+phan_tram(1,3)+phan_tram(1,4)~=1
phan_tram(1,1)=input('nhap phan tram diem chuyen can: ')/100;
3
phan_tram(1,2)=input('nhap phan tram diem bai tap: ')/100;
phan_tram(1,3)=input('nhap phan tram diem kiem tra: ')/100;
phan_tram(1,4)=input('nhap phan tram diem thi: ')/100;
end
end
Phần trăm sẽ được nhập một lần nếu tổng phần trăm các hệ điểm bằng 100%
Và nếu người nhập không thỏa điều kiện trên thì chương trình sẽ bắt người dùng nhập đến khi
nào thỏa.
Vd: đây là phần trăm các điểm chỉ bằng 14 nên chương trình đã bắt người dùng nhập lại và
lần thứ 2 người dùng nhập đúng
− Fun
function[ten_sinh_vien,MSSV,lop,mon_hoc,tin_chi,diem,phan_tram]=nhap(mon_hoc,tin_chi,
diem,phan_tram )
h=1;
[ten_sinh_vien,MSSV,lop]=thong_tin_sinh_vien;
while h<=4
mon_hoc=[mon_hoc,nhap_mon_hoc];%sử dụng kĩ thuật ghép mảng để thêm dữ
tin_chi=[tin_chi,nhap_so_tin_chi]; liệu vào mảng trước đó sau mỗi vòng
diem=[diem;nhap_diem]; while
phan_tram=[phan_tram;nhap_phan_tram];
h=h+1;%sau mỗi lần nhập liệu thì h sẽ tăng lên 1 giá trị để kết thúc vòng while
end
vì yêu cầu đề bài là SV chỉ học từ 4 đến 8 môn vòng lặp đâu sẽ cho nhập 4 lần và vòng
lặp sau thì sẽ có một lệnh input để hỏi thử xem người dùng có muốn nhập tiếp không
4
tại đây biến h vẫn sẽ tăng và mỗi lần nhập nên vòng lặp sẽ kết thúc h=8 hoặc là nhấn
‘n’ khi lệnh input chạy
while h<=8
c=input('ban co muon nhap nua khong [Y/n]: ', 's');
if strcmpi(c,'Y')==1
mon_hoc=[mon_hoc,nhap_mon_hoc];
tin_chi=[tin_chi,nhap_so_tin_chi];
diem=[diem;nhap_diem];
fprintf('\n');
phan_tram=[phan_tram;nhap_phan_tram];
fprintf('\n');
h=h+1;
elseif strcmpi(c,'n')==1
break;
end
end
end
đây là function tổng dùng để gọi lại các function con có chức năng nhập và các function này
được đặt trong vòng while để người dùng nhập liên tục các dữ liệu môn học và các mảng chứa
dữ diệu (mon_hoc, tin_chi, diem, phan_tram)
Và
5
function [diem_he10]=tinh_diem_he10(diem,phan_tram)
a=1;
diem_he10=[];
while a<=size(diem,1)
diem_he10(a)=diem(a,:)*phan_tram(a,:)';
a=a+1;
end
end
− Function tinh_diem_he4: sử dụng mảng để tính điểm hệ 4 của các môn.
function [diem_he4]=tinh_diem_he4(diem_he10)
diem_he4=diem_he10*4/10;
end
function [diem_tb_tich_luy]=tinh_diem_tb_tich_luy(diem_he4,tin_chi)
S=(diem_he4.*tin_chi);
diem_tb_tich_luy=sum(S)/sum(tin_chi);
end
− Function tong_ket_CH: sử dụng vòng lặp while để xét hết tất cả các môn
câu lệnh điều kiện if elseif... end để xét điểm tổng kết. Ngoài ra còn sử
dụng mảng để chứa dữ liệu và xét dữ liệu.
function [tong_ket_CH]=tinh_tong_ket_CH(diem_he4)
a=1;
while a<=size(diem_he4,2)
if diem_he4(a)<=4 &&diem_he4(a)>=3.7
tong_ket_CH(1,a)="A+";
elseif diem_he4(a)<3.7 && diem_he4(a)>=3.5
tong_ket_CH(1,a)="A";
elseif diem_he4(a)<3.5 && diem_he4(a)>=3.2
tong_ket_CH(1,a)="B+";
elseif diem_he4(a)<3.2 && diem_he4(a)>=2.8
tong_ket_CH(1,a)="B";
elseif diem_he4(a)<2.8 && diem_he4(a)>=2.5
tong_ket_CH(1,a)="C+";
elseif diem_he4(a)<2.5 && diem_he4(a)>=2.2
tong_ket_CH(1,a)="C";
elseif diem_he4(a)<2.2 && diem_he4(a)>=2
tong_ket_CH(1,a)="D+";
elseif diem_he4(a)<2 && diem_he4(a)>=1.6
tong_ket_CH(1,a)="D";
elseif diem_he4(a)<1.6
tong_ket_CH(1,a)="F";
end
tong_ket_CH=[tong_ket_CH,tong_ket_CH(1,a)];
a=a+1;
end
6
end
− Function xet_ket_qua: tiếp tục sử dụng vòng lặp, câu lệnh điều kiện để xét
kết quả.
function [ket_qua,S]=xet_ket_qua(diem_he4,tin_chi)
a=1;
S=0;
while a<=size(diem_he4,2)
tin_chi_tich_luy=0;
if diem_he4(a)>=1.6
ket_qua(1,a)="DAT";
tin_chi_tich_luy=tin_chi(1,a);
else
ket_qua(1,a)="KHONG DAT";
end
ket_qua=[ket_qua,ket_qua(1,a)];
a=a+1;
S=S+tin_chi_tich_luy;
end
end
function
hien_thi(mon_hoc,tin_chi,diem_he10,tong_ket_CH,ket_qua,diem_he4,diem_tb_tich_luy,tin_chi_t
ich_luy,ten_sinh_vien,MSSV,lop)
a=1;
fprintf(' THONG TIN SINH VIEN\n');
fprintf('Ten sinh vien: %s\nMSSV: %s\nLop: %s\n',ten_sinh_vien,MSSV,lop);%xuất dữ liệu sinh
viên
fprintf('___________________________________BANG
DIEM___________________________________\n');
fprintf('MON HOC SO TC TONG KET(10) TONG KET(CH) KET QUA\n');
while a<=size(diem_he4,2)
fprintf('%-20s%-13.d%-18.2f%-18s%-
s\n',mon_hoc(1,a+1),tin_chi(a),diem_he10(1,a),tong_ket_CH(1,a),ket_qua(1,a));%xuất dữ liện
môn học
a=a+1;
end
fprintf('________________________________________________________________________
_______\n');
fprintf('\n');
fprintf('Diem trung binh he 10: %.2f\n',mean(diem_he10));
fprintf('Diem trung binh he 4: %.2f\n',mean(diem_he4));
fprintf('Diem trung binh tich: %.2f\n',diem_tb_tich_luy);
fprintf('So tin chi tich luy: %.f\n',tin_chi_tich_luy);
fprintf('________________________________________________________________________
_______\n');
end
7
sử dụng fprintf tại function này để xuất các dữ liệu cần thiết và trang trí tại của sổ command
windows.
d) Function xuất dữ liệu ra file text: ngoài ra còn một chức năng là xuất
dữ liệu qua qua file .txt để người dùng có thể thuận tiện trong việc tìm
kiếm lại dữ liệu sinh viên đó. Sau đây là code của chức năng đó:
function
nhap_file(filein,mon_hoc,tin_chi,diem_he10,tong_ket_CH,ket_qua,diem_he4,diem_tb_tich_l
uy,tin_chi_tich_luy,ten_sinh_vien,MSSV,lop)
a=1;
fprintf(filein,' THONG TIN SINH VIEN\n');
fprintf(filein,'Ten sinh vien: %s\nMSSV: %s\nLop: %s\n',ten_sinh_vien,MSSV,lop);
fprintf(filein,'___________________________________BANG
DIEM___________________________________\n');
fprintf(filein,'MON HOC SO TC TONG KET(10) TONG KET(CH) KET
QUA\n');
while a<=size(diem_he4,2)
fprintf(filein,'%-20s%-13.d%-18.2f%-18s%-
s\n',mon_hoc(1,a+1),tin_chi(a),diem_he10(1,a),tong_ket_CH(1,a),ket_qua(1,a));
a=a+1;
end
fprintf(filein,'________________________________________________________________
_______________\n');
fprintf('\n');
fprintf(filein,'Diem trung binh he 10: %.2f\n',mean(diem_he10));
fprintf(filein,'Diem trung binh he 4: %.2f\n',mean(diem_he4));
fprintf(filein,'Diem trung binh tich: %.2f\n',diem_tb_tich_luy);
8
fprintf(filein,'So tin chi tich luy: %.f\n',tin_chi_tich_luy);
fclose(filein);%đóng file sau khi mở
end
Lưu ý: code mở file được đặc trong một function tổng hợp, sẽ được trình bày trong mục sau
Và file.txt sẽ được tạo tại file.m được lưu. Tên file sẽ được lưu theo tên của sinh viên.
e) Function tổng hợp: sau khi tạo các function con có tính năng khác
nhau đây là một function tổng hợp các function con.
− Tạo các mảng để chứa dữ liệu: dữ liệu nhập vào và xuất ra thì phải có vị trí
để lưu và các mảng được chọn để lưu dữ liệu trong bài này.
mon_hoc=string();
tin_chi=[];
diem=[];
phan_tram=[];
ket_qua=string();
9
tong_ket_CH=string();
ten_sinh_vien=string();
MSSV=string();
lop=string();
lưu ý: cần tạo các mảng có thể chứa dữ liệu phù hợp.
vd: mảng chuối kí tự(string): để chứa một chuói kí tự như tên môn học, tên sinh viên,MSSV,
lớp,…
− Gọi các function đã tạo và đưa các mảng vào các function con để dữ liệu
được đưa vào, xử lí và xuất ra
[ten_sinh_vien,MSSV,lop,mon_hoc,tin_chi,diem,phan_tram]=nhap(mon_hoc,tin_chi,diem,ph
an_tram);
[diem_he10]=tinh_diem_he10(diem,phan_tram);
[diem_he4]=tinh_diem_he4(diem_he10);
[diem_tb_tich_luy]=tinh_diem_tb_tich_luy(diem_he4,tin_chi);
[tong_ket_CH]=tinh_tong_ket_CH(diem_he4);
[ket_qua,tin_chi_tich_luy]=xet_ket_qua(diem_he4,tin_chi);
− Tạo tên cho file.txt và mở file để ghi dữ liệu vào
− Gọi function nhap_file và function hiển thị( đã được trình bày ở phần
trước): tại đây chú ý đưa các mảng dữ liệu đã gọi vào các function này để
có dữ liệu cho các hàm này xuất ra.
nhap_file(filein,mon_hoc,tin_chi,diem_he10,tong_ket_CH,ket_qua,diem_he4,diem_tb_tich_l
uy,tin_chi_tich_luy,ten_sinh_vien,MSSV,lop);
hien_thi(mon_hoc,tin_chi,diem_he10,tong_ket_CH,ket_qua,diem_he4,diem_tb_tich_luy,tin_
chi_tich_luy,ten_sinh_vien,MSSV,lop);
− Và vào những dòng của function này thì đã được tạo thêm 1 tính năng nhỏ
giúp người dùng có thế nhập được dữ liệu của nhiều sinh viên trong 1 lần
khởi động chương trình. Đây là code chức năng này:
Dùng input: hỏi người dung muốn nhập nữa hay không.
c=input('ban co muon nhap sinh vien khac khong nua khong [Y/n]: ', 's');
Dùng 1 vòng while vô hạn: giúp người dùng nhập tới khi người
người dùng ngừng nhập dữ liệu sinh viên kết hợp với 1 câu lệnh
điều kiện if … elseif … end và lệnh so sánh chuỗi không phân biệt
in hoa strcmpi(): nhập tiếp hoặc là kêt thúc. Và cuối mỗi điều kiện
có kèm lệnh break; để kết thúc vòng while và kết thúc tại cửa sổ
command windows.
Ngoài ra còn dùng đệ quy ( gọi lại function đó trong chính nó) để
thực hiện nhập sinh viên khác.
10
profile_sinh_vien; %gọi lại function đó trong chính thân nó
break;
elseif strcmpi(c,'n')==1%thực hiện so sánh nếu n hoặc N thì kết thúc quá trình sử dụng
chương trình
break;%kết thúc vòng lập while và kết thúc chương trình
end
end
Code của bài này
function profile_sinh_vien
mon_hoc=string();
tin_chi=[];
diem=[];
phan_tram=[];
ket_qua=string();
tong_ket_CH=string();
ten_sinh_vien=string();
MSSV=string();
lop=string();
[ten_sinh_vien,MSSV,lop,mon_hoc,tin_chi,diem,phan_tram]=nhap(mon_hoc,tin_chi,diem,ph
an_tram);
[diem_he10]=tinh_diem_he10(diem,phan_tram);
[diem_he4]=tinh_diem_he4(diem_he10);
[diem_tb_tich_luy]=tinh_diem_tb_tich_luy(diem_he4,tin_chi);
[tong_ket_CH]=tinh_tong_ket_CH(diem_he4);
[ket_qua,tin_chi_tich_luy]=xet_ket_qua(diem_he4,tin_chi);
fprintf('\n------------------------------------------------------\n');
ten_file=strcat(ten_sinh_vien,".txt");
filein=fopen(ten_file,'w');
nhap_file(filein,mon_hoc,tin_chi,diem_he10,tong_ket_CH,ket_qua,diem_he4,diem_tb_tich_l
uy,tin_chi_tich_luy,ten_sinh_vien,MSSV,lop);
hien_thi(mon_hoc,tin_chi,diem_he10,tong_ket_CH,ket_qua,diem_he4,diem_tb_tich_luy,tin_
chi_tich_luy,ten_sinh_vien,MSSV,lop);
c=input('ban co muon nhap sinh vien khac khong nua khong [Y/n]: ', 's');
fprintf('\n');
x=1;
while x==1
if strcmpi(c,'Y')==1
profile_sinh_vien;
break;
elseif strcmpi(c,'n')==1
fprintf('\n');
disp('----------------------GOOD BYE!-----------------------');
break;
end
end
end
11
function [ten_sinh_vien,MSSV,lop]=thong_tin_sinh_vien
disp('-----------------NHAP TEN SINH VIEN!------------------');
ten_sinh_vien=input('nhap ten sinh vien: ','s');
MSSV=input('nhap ma so sinh vien: ','s');
lop=input('nhap lop: ','s');
end
function
hien_thi(mon_hoc,tin_chi,diem_he10,tong_ket_CH,ket_qua,diem_he4,diem_tb_tich_luy,tin_
chi_tich_luy,ten_sinh_vien,MSSV,lop)
a=1;
clc;
fprintf(' THONG TIN SINH VIEN\n');
fprintf('Ten sinh vien: %s\nMSSV: %s\nLop: %s\n',ten_sinh_vien,MSSV,lop);
fprintf('___________________________________BANG
DIEM___________________________________\n');
fprintf('MON HOC SO TC TONG KET(10) TONG KET(CH) KET
QUA\n');
while a<=size(diem_he4,2)
fprintf('%-20s%-13.d%-18.2f%-18s%-
s\n',mon_hoc(1,a+1),tin_chi(a),diem_he10(1,a),tong_ket_CH(1,a),ket_qua(1,a));
a=a+1;
end
fprintf('_____________________________________________________________________
__________\n');
fprintf('\n');
fprintf('Diem trung binh he 10: %.2f\n',mean(diem_he10));
fprintf('Diem trung binh he 4: %.2f\n',mean(diem_he4));
fprintf('Diem trung binh tich: %.2f\n',diem_tb_tich_luy);
fprintf('So tin chi tich luy: %.f\n',tin_chi_tich_luy);
fprintf('_____________________________________________________________________
__________\n');
end
function
nhap_file(filein,mon_hoc,tin_chi,diem_he10,tong_ket_CH,ket_qua,diem_he4,diem_tb_tich_l
uy,tin_chi_tich_luy,ten_sinh_vien,MSSV,lop)
a=1;
fprintf(filein,' THONG TIN SINH VIEN\n');
fprintf(filein,'Ten sinh vien: %s\nMSSV: %s\nLop: %s\n',ten_sinh_vien,MSSV,lop);
fprintf(filein,'___________________________________BANG
DIEM___________________________________\n');
fprintf(filein,'MON HOC SO TC TONG KET(10) TONG KET(CH) KET
QUA\n');
while a<=size(diem_he4,2)
fprintf(filein,'%-20s%-13.d%-18.2f%-18s%-
s\n',mon_hoc(1,a+1),tin_chi(a),diem_he10(1,a),tong_ket_CH(1,a),ket_qua(1,a));
a=a+1;
end
12
fprintf(filein,'________________________________________________________________
_______________\n');
fprintf('\n');
fprintf(filein,'Diem trung binh he 10: %.2f\n',mean(diem_he10));
fprintf(filein,'Diem trung binh he 4: %.2f\n',mean(diem_he4));
fprintf(filein,'Diem trung binh tich: %.2f\n',diem_tb_tich_luy);
fprintf(filein,'So tin chi tich luy: %.f\n',tin_chi_tich_luy);
fprintf(filein,'________________________________________________________________
_______________\n');
fclose(filein);
end
function
[ten_sinh_vien,MSSV,lop,mon_hoc,tin_chi,diem,phan_tram]=nhap(mon_hoc,tin_chi,diem,ph
an_tram )
h=1;
disp('--------------------NHAP THONG TIN--------------------');
[ten_sinh_vien,MSSV,lop]=thong_tin_sinh_vien;
while h<=4
disp('---------------NHAP MON HOC VA TIN CHI!---------------');
mon_hoc=[mon_hoc,nhap_mon_hoc];
tin_chi=[tin_chi,nhap_so_tin_chi];
fprintf('\n');
diem=[diem;nhap_diem];
fprintf('\n');
phan_tram=[phan_tram;nhap_phan_tram];
disp('---------------Moi ban nhap mon ke tiep---------------');
h=h+1;
end
while h<=8
c=input('ban co muon nhap nua khong [Y/n]: ', 's');
if strcmpi(c,'Y')==1
mon_hoc=[mon_hoc,nhap_mon_hoc];
tin_chi=[tin_chi,nhap_so_tin_chi];
diem=[diem;nhap_diem];
fprintf('\n');
phan_tram=[phan_tram;nhap_phan_tram];
fprintf('\n');
disp('---------------Moi ban nhap mon ke tiep---------------');
h=h+1;
elseif strcmpi(c,'n')==1
break;
end
end
end
function [mon_hoc]=nhap_mon_hoc
mon_hoc=input('nhap mon hoc: ','s');
end
13
function [tin_chi]=nhap_so_tin_chi
tin_chi=input('nhap so tin chi: ');
while tin_chi<0
disp('---------------Moi ban nhap tinh chi lai!---------------');
tin_chi=input('nhap so tin chi: ');
end
end
function [diem]=nhap_diem
disp('----------------------NHAP DIEM!----------------------');
diem(1,1)=input('diem chuyen can: ');
diem(1,2)=input('diem bai tap: ');
diem(1,3)=input('diem giua ki: ');
diem(1,4)=input('diem thi: ');
while diem(1,1)>10||diem(1,2)>10||diem(1,3)>10||diem(1,4)>10||diem(1,1)<0||diem(1,2)<0||
diem(1,3)<0||diem(1,4)<0
disp('---------------Moi ban nhap diem lai!---------------');
diem(1,1)=input('diem chuyen can: ');
diem(1,2)=input('diem bai tap: ');
diem(1,3)=input('diem giua ki: ');
diem(1,4)=input('diem thi: ');
end
end
function [phan_tram]=nhap_phan_tram
disp('--------------------NHAP PHAN TRAM!-------------------');
phan_tram(1,1)=input('nhap phan tram diem chuyen can: ')/100;
phan_tram(1,2)=input('nhap phan tram diem bai tap: ')/100;
phan_tram(1,3)=input('nhap phan tram diem kiem tra: ')/100;
phan_tram(1,4)=input('nhap phan tram diem thi: ')/100;
fprintf('\n');
while phan_tram(1,1)+phan_tram(1,2)+phan_tram(1,3)+phan_tram(1,4)~=1
fprintf('----------GIA TRI PHAN TRAM KHONG HOP LE!-------------\n');
fprintf('---------------Moi ban nhap diem lai!-----------------\n');
phan_tram(1,1)=input('nhap phan tram diem chuyen can: ')/100;
phan_tram(1,2)=input('nhap phan tram diem bai tap: ')/100;
phan_tram(1,3)=input('nhap phan tram diem kiem tra: ')/100;
phan_tram(1,4)=input('nhap phan tram diem thi: ')/100;
fprintf('\n');
end
end
function [diem_he10]=tinh_diem_he10(diem,phan_tram)
a=1;
diem_he10=[];
while a<=size(diem,1)
diem_he10(a)=diem(a,:)*phan_tram(a,:)';
a=a+1;
end
end
14
function [diem_he4]=tinh_diem_he4(diem_he10)
diem_he4=diem_he10*4/10;
end
function [diem_tb_tich_luy]=tinh_diem_tb_tich_luy(diem_he4,tin_chi)
S=(diem_he4.*tin_chi);
diem_tb_tich_luy=sum(S)/sum(tin_chi);
end
function [tong_ket_CH]=tinh_tong_ket_CH(diem_he4)
a=1;
while a<=size(diem_he4,2)
if diem_he4(a)<=4 &&diem_he4(a)>=3.7
tong_ket_CH(1,a)="A+";
elseif diem_he4(a)<3.7 && diem_he4(a)>=3.5
tong_ket_CH(1,a)="A";
elseif diem_he4(a)<3.5 && diem_he4(a)>=3.2
tong_ket_CH(1,a)="B+";
elseif diem_he4(a)<3.2 && diem_he4(a)>=2.8
tong_ket_CH(1,a)="B";
elseif diem_he4(a)<2.8 && diem_he4(a)>=2.5
tong_ket_CH(1,a)="C+";
elseif diem_he4(a)<2.5 && diem_he4(a)>=2.2
tong_ket_CH(1,a)="C";
elseif diem_he4(a)<2.2 && diem_he4(a)>=2
tong_ket_CH(1,a)="D+";
elseif diem_he4(a)<2 && diem_he4(a)>=1.6
tong_ket_CH(1,a)="D";
elseif diem_he4(a)<1.6
tong_ket_CH(1,a)="F";
end
tong_ket_CH=[tong_ket_CH,tong_ket_CH(1,a)];
a=a+1;
end
end
function [ket_qua,S]=xet_ket_qua(diem_he4,tin_chi)
a=1;
S=0;
while a<=size(diem_he4,2)
tin_chi_tich_luy=0;
if diem_he4(a)>=1.6
ket_qua(1,a)="DAT";
tin_chi_tich_luy=tin_chi(1,a);
else
ket_qua(1,a)="KHONG DAT";
end
ket_qua=[ket_qua,ket_qua(1,a)];
a=a+1;
S=S+tin_chi_tich_luy;
15
end
end
Bài 24: Viết chương trình tạo giao diện người dùng (GUI) đọc giá trị và sai số của
điện trở 3 vòng màu. Chương trình cho phép nhập màu các vòng của điện trở (đen,
nâu, đỏ,...), xuất giá trị và sai số của điện trở ra giao diện.
Bài làm
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
− Kết quả đầu ra từ chức năng này được trả về dòng lệnh:
% --- Outputs from this function are returned to the command line.
function varargout = Doc_gia_tri_dien_tro_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
− Thực hiện thay đổi lựa chọn trong hộp danh sách1:
− Thực thi trong quá trình tạo đối tượng, sau khi thiết lập tất cả các thuộc tính ở trong hộp
danh sách1:
18
% Hints: contents = cellstr(get(hObject,'String')) returns menu_color_1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from menu_color_1
global value1 value2 value3 resistor tolerance
value1= get(handles.menu_color_1,'value')-1;
resistor= (10*value1+value2)*10^value3;
tolerance= resistor*0.2;
set(handles.textOutput,'string', sprintf('Gia tri dien tro: %d om\nSai so: %.2f om', resistor,
tolerance));
− Thực thi trong quá trình tạo đối tượng, sau khi thiết lập tất cả các thuộc tính ở
trong menu_color_1:
− Thực thi trong quá trình tạo đối tượng, sau khi thiết lập tất cả các thuộc tính ở
trong menu_color_2:
19
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
− Thực thi trong quá trình tạo đối tượng, sau khi thiết lập tất cả các thuộc tính ở
trong menu_color_3:
20
− Giao diện GUI khi hoàn chỉnh:
21
V Kết quả chạy chương trình:
Khi ta nhập giá trị của điện trở 3 vong màu là : đen-nâu-đỏ
22
Câu 39: Dùng Simulink mô phỏng phương trình đa thức bậc 4 tổng quát. Quan sát x
trên cope ứng với 3 bộ giá trị khác nhau của hệ số các phương trình.
bài làm
- Trong thư viện Mtah, chọn khối Algebric Constraint để giải phương trình đa thức
- Tạo hệ số e
Trong thư viện Sources, chọn khối Constant để tạo giá trị của e
- Tạo dX
Trong thư viện Math, chọn khối Gain để tạo giá trị của d, ta được dX
- Tạo cX2
Trong thư viện Math, chọn khối Math Function, tại dòng Function chọn square để tạo
hàm X2
Trong thư viện Sources, chọn khối Constant để tạo giá trị của c
Trong thư viện Math, chọn khối Product để tạo cX2
- Tạo bX3
Trong thư viện Math, chọn khối Math Function, tại dòng Function chọn Pow để tạo
khối là hàm Xv
Trong thư viện Sources, chọn khối Constant để tạo giá trị mũ v là 3
Trong thư viện Sources, chọn khối Constant để tạo giá trị b
Trong thư viện Math, chọn khối Product để tạo bX3
- Tạo aX4
Trong thư viện Math, chọn khối Math Function, tại dòng Function chọn Pow để tạo
khối là hàm Xv
Trong thư viện Sources, chọn khối Constant để tạo giá trị mũ v là 4
Trong thư viện Sources, chọn khối Constant để tạo giá trị a
Trong thư viện Math, chọn khối Product để tạo aX4
- Trong thư viện Math, chọn khối Sum để tạo dấu của các hệ số, tạo thành đa thức
- Trong thư viện Sink chọn khối Display để hiển thị trị số của nghiệm
- Trong thư viện Sink chọn Scope để quan sát giá trị nghiệm X
Hướng dẫn:
Nhấn dúp vào các khối để thay đổi giá trị a, b, c, d, e, dấu hệ số
Đếm số dấu (+) và (-) để điền vào khối Sum, nối các phần đúng vào vị trí dấu để được
đa thức theo yêu cầu
23
Sơ đồ mô phỏng được biểu hiện qua đa thức mẫu như sau:
F ( x )=2 X 4 +2 X 3−3 X 2 +3 X +1
Ta có : a = 2, b = 2, c = -3, d = 3, e = 1
HẾT
24