You are on page 1of 26

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

CƠ SỞ TP. HỒ CHÍ MINH

MATLAB VÀ ỨNG DỤNG

BÀI TẬP NHÓM

Giảng viên hướng dẫn: ThS. TRẦN QUANG THUẬN

Lớp: D19CQDT01-N

DANH SÁCH THÀNH VIÊN NHÓM :

1. Nguyễn Văn Đạt (N19DCDT009)


2. Vũ Tiến Đạt (N19DCDT010)
3. Thái Kim Đồng (N19DCDT011)
TP.HCM, tháng 10, năm 2020
BÀI TẬP ĐƯỢC PHÂN CÔNG:

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

Điểm sẽ được nhập một lần nếu nhập đúng

Và điểm sẽ được nhập lại nếu có điểm không thỏa điểm hệ 10

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)

Sau khi tạo function và cho chạy ta được như sau:

các thao tác nhập như vậy


sẽ được vòng lặp while lặp
lại liên tục. Giúp người
dùng nhập điểm của sinh
viên 1 cách dễ dàng

Đây là hàm nhập thông tin


sinh viên

b) Các function tính toán


− Function tinh_diem_he10: sử dụng vòng while và mảng tính điểm hệ 10
của các môn

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 tinh_diem_tb_tich_luy: sử dụng mảng để tính điểm trung bình


tích lũy của sinh viên.

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

c) Function hiển thị kết quá tính toán và nhập

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.

Sau đây là kết quả hiển thị:

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

Sau đây là kết quả xuất ra file .txt

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

ten_file=strcat(ten_sinh_vien,".txt");%tạo tên file.txt


filein=fopen(ten_file,'w');%mở file để ghi dữ liệu

− 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.

x=1;%tạo 1 biến tạm ( để kích hoạt vòng while vô hạn)


while x==1
if strcmpi(c,'Y')==1%thực hiện so sánh nếu y hoặc Y thì thực hiện tiếp sinh viên khác
clc; %xóa màng hình dữ liệu quá trình thực hiện trướ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

I Phương hướng làm bài :


thay vì cho phép người dùng nhập các vòng màu theo yêu cầu của bài ta sẽ dùng 3
nút lệnh popupmenu để cho người dùng chọn các vòng màu có sẵn của điện trở 3 vòng
màu , sử dụng các công thức tính giá trị điện trở sai số ở các nút popupmenu để khi
người dùng chọn ở các popupmenu các vòng màu có sẵn thì sẽ suất ra giá trị điện trở
và sai số tương ứng của nó.
II Cơ sở lý thuyết:
− Thao tác khi tạo GUI
− Các hàm thường gặp trong GUI
− Các hàm điều kiện( if,switch case,…)
III Code:
− Vùng khởi Tạo – Không chỉnh sửa:

function varargout = Doc_gia_tri_dien_tro(varargin)


% DOC_GIA_TRI_DIEN_TRO MATLAB code for Doc_gia_tri_dien_tro.fig
% DOC_GIA_TRI_DIEN_TRO, by itself, creates a new DOC_GIA_TRI_DIEN_TRO or
raises the existing
% singleton*.
%
% H = DOC_GIA_TRI_DIEN_TRO returns the handle to a new
DOC_GIA_TRI_DIEN_TRO or the handle to
% the existing singleton*.
%
% DOC_GIA_TRI_DIEN_TRO('CALLBACK',hObject,eventData,handles,...) calls the
local
% function named CALLBACK in DOC_GIA_TRI_DIEN_TRO.M with the given input
arguments.
%
% DOC_GIA_TRI_DIEN_TRO('Property','Value',...) creates a new
DOC_GIA_TRI_DIEN_TRO or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Doc_gia_tri_dien_tro_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
16
% stop. All inputs are passed to Doc_gia_tri_dien_tro_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Doc_gia_tri_dien_tro

% Last Modified by GUIDE v2.5 14-Oct-2020 20:18:10

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Doc_gia_tri_dien_tro_OpeningFcn, ...
'gui_OutputFcn', @Doc_gia_tri_dien_tro_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

− Vùng thực thi Trước khi Doc_dien_tro được hiển thị:

% --- Executes just before Doc_gia_tri_dien_tro is made visible.


function Doc_gia_tri_dien_tro_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Doc_gia_tri_dien_tro (see VARARGIN)

% Choose default command line output for Doc_gia_tri_dien_tro


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes Doc_gia_tri_dien_tro wait for user response (see UIRESUME)


% uiwait(handles.figure1);
global value1 value2 value3 resistor tolerance
value1=0;
value2=0;
17
value3=0;
resistor=0;
tolerance=0;

− 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)

% Get default command line output from handles structure


varargout{1} = handles.output;

− Thực hiện thay đổi lựa chọn trong hộp danh sách1:

% --- Executes on selection change in listbox1.


function listbox1_Callback(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns listbox1 contents as cell array


% contents{get(hObject,'Value')} returns selected item from listbox1

− 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:

% --- Executes during object creation, after setting all properties.


function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: listbox 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 hiện thay đổi lựa chọn trong menu_color_1:

% --- Executes on selection change in menu_color_1.


function menu_color_1_Callback(hObject, eventdata, handles)
% hObject handle to menu_color_1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

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:

% --- Executes during object creation, after setting all properties.


function menu_color_1_CreateFcn(hObject, eventdata, handles)
% hObject handle to menu_color_1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% 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 thay đổi lựa chọn trong menu_color_2:

% --- Executes on selection change in menu_color_2.


function menu_color_2_Callback(hObject, eventdata, handles)
% hObject handle to menu_color_2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns menu_color_2 contents as cell array


% contents{get(hObject,'Value')} returns selected item from menu_color_2
global value1 value2 value3 resistor tolerance
value2= get(handles.menu_color_2,'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_2:

% --- Executes during object creation, after setting all properties.


function menu_color_2_CreateFcn(hObject, eventdata, handles)
% hObject handle to menu_color_2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

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 thay đổi lựa chọn trong menu_color_3:

% --- Executes on selection change in menu_color_3.


function menu_color_3_Callback(hObject, eventdata, handles)
% hObject handle to menu_color_3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns menu_color_3 contents as cell array


% contents{get(hObject,'Value')} returns selected item from menu_color_3
global value1 value2 value3 resistor tolerance
value3= get(handles.menu_color_3,'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_3:

% --- Executes during object creation, after setting all properties.


function menu_color_3_CreateFcn(hObject, eventdata, handles)
% hObject handle to menu_color_3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% 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

IV Giao diện thiết kế trên GUI:


− Các thành phần được thiết kế trên GUI:
 3 lệnh static text được ghi là color
 3 lệnh popupmenu điền các vòng màu của điện trở
 1 lệnh edit text để hiển thị kết quả

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

Phương trình đa thức bậc 4 có dạng tổng quát: F ( x )=a X 4 +b X 3+ c X 2+ dX +e

Ta mô phỏng phương trình đa thức qua các bước như sau:

- 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

You might also like