Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 53

I HC NNG

TRNG I HC BCH KHOA


KHOA CNG NGH THNG TIN
Tel. (84-511) 736 949, Fax. (84-511) 842 771
Website: itf.ud.edu.vn, E-mail: cntt@edu.ud.vn

BO CO THC HNH
LP TRNH MNG

GVHD: ThS.NGUYN VN NGUYN


SINH VIN : BI TN VIT
LP : 10T2
MSSV: 102152101166
NHM: 11B

NNG, 3/2014
Mc Lc
Chng 1: CC BI TP THC HNH.......................................................................................................1
1.1 BI THC HNH BUI 1..................................................................................................................1
1.1.1 Bi tp 1..........................................................................................................................................1
1.1.2 Bi tp 2..........................................................................................................................................3
1.2 BI THC HNH BUI 2..................................................................................................................6
1.2.1 bi:............................................................................................................................................6
1.2.2 Phn chng trnh Client:...............................................................................................................6
1.2.3 Phn chng trnh Server:..............................................................................................................7
1.2.4 Phn chng trnh x l ca Server:..............................................................................................7
1.2.5 Phn chng trnh x l biu thc:................................................................................................8
1.3 BI THC HNH BUI 3................................................................................................................14
1.3.1 bi............................................................................................................................................14
1.3.2 To cc class tnh ton ma trn.....................................................................................................14
1.3.3 Nhp ma trn:...............................................................................................................................14
1.3.4 Cng, tr ma trn..........................................................................................................................15
1.3.5 Nhn 2 ma trn.............................................................................................................................16
1.3.6 Chia 2 ma trn..............................................................................................................................17
1.3.7 Chng trnh Client......................................................................................................................22
1.3.8 Chng trnh Server:....................................................................................................................25
1.3.9 Demo............................................................................................................................................28
Chng 2: BI TP LM THM................................................................................................................30
2.1 BI................................................................................................................................................30
2.2 CHNG TRNH THM, SA, XA DANH SCH U VO...................................................30
2.2.1 Chun b........................................................................................................................................30
2.2.2 Tm kim trong danh sch............................................................................................................30
2.2.3 Sa d liu....................................................................................................................................31
2.2.4 Xa d liu...................................................................................................................................33
2.2.5 Thm d liu.................................................................................................................................34
2.2.6 Kim tra d liu............................................................................................................................36
2.3 TRUYN NHN d LIU GIA CLIENT SERVER...................................................................37
2.3.1 Bn Client.....................................................................................................................................37

Page | 1
2.3.2 Bn Server....................................................................................................................................40
2.4 X L CA CLIENT.........................................................................................................................42
2.5 X L CA SERVER........................................................................................................................43
2.6 THUT TON PHN CNG GIO VIN COI THI.......................................................................44
2.6.1 Lu danh sch gio vin v phng thi..........................................................................................44
2.6.2 Sp xp gim th...........................................................................................................................44
2.7 DEMO..................................................................................................................................................46

Page | 2
LI NI U
Lp trnh mng l mt trong nhng nhim v quan trong trong vic pht trin cc ng dng doanh
nghip. Mt chng trnh mng c vit ra cc chng trnh trn cc my tnh khc nhau c th truyn
tin vi nhau mt cch hiu qu v an ton cho d chng c ci t trn mng LAN, WAN hay mng ton
cu Internet, y l iu cn bn i vi s thnh cng ca nhiu h thng.
Java l ngn ng lp trnh hng i tng thun thy vi nhiu c trng u vit so vi cc ngn
ng lp trnh hng i tng khc nh tnh c lp vi nn, tnh bo mt, Java l ngn ng ngay t khi
ra i hng n lp trnh mng nn vic vit mt chng trnh lp trnh mng bng Java d dng hn
nhiu so vi cc ngn ng khc.

Page | 3
CHNG 1: CC BI TP THC HNH
1.1 BI THC HNH BUI 1
1.1.1 Bi tp 1
1.1.1.1 bi:
Dng Java xy dng chng trnh ly d liu sinh vin t Access v xut ra bng.

1.1.1.2 Thut ton:


B1: Np trnh iu khin:
Lp DriverManager chu trch nhim np driver v to kt ni n csdl: Class.forName(String)
Vi String l "sun.jdbc.odbc.JdbcOdbcDriver"
B2: To thng tin kt ni v i tng Connection:
Vi Access: Connection con = DriverManager.getConnection("jdbc:odbc:testDB");
B3: To i tng Statement thc thi cc lnh sql.
Statement stmt = (java.sql.Statement) con.createStatement();
String sql = "Select * from SinhVien";
ResultSet rs = ((java.sql.Statement) stmt).executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
B4: Ly s ct ca bng v tn cc ct lu vo mng Object header[];
B5: Ly s dng trong bng:
B5.1: Bin rows = 0;
B5.2: Di chuyn ti hng tip theo trong bng, mi ln di chuyn th tng rows ln 1. Lp cho
n khi ht dng.
B6: To mng d liu 2 chiu c s hng v s ct nh trong bng Access:
Object[][] data = new Object[rows][numberOfColumns];
B7: Di chuyn trn tng dng bng ca Access, c d liu ca cc trng v gn d liu vo v tr
tng ng trn mng data. Lp cho n khi ht dng.
B8: To i tng JTable hin th d liu trong data, c ni dung header cha trong header[], c
thanh trt JScrollBar v gn vo 1 i tng JFrame hin th.

1.1.1.3 Ci t

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 1


Bo co thc hnh lp trnh mng 2014

public class Database {


public static void main(String arg[]) {
Object header[];
Object data[][];
int rows, i, j;

try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:testDB");
Statement stmt = (java.sql.Statement) con.createStatement();
String sql = "Select * from SinhVien";
ResultSet rs = ((java.sql.Statement) stmt).executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();

header = new Object[numberOfColumns];

for (j = 1; j <= numberOfColumns; j++) {


header[j - 1] = rsmd.getColumnLabel(j);
}

rows = 0;
while (rs.next())
rows++;
data = new Object[rows][numberOfColumns];

i = 0;
rs = ((java.sql.Statement) stmt).executeQuery(sql);
while (rs.next()) {
for (j = 1; j <= numberOfColumns; j++) {
data[i][j - 1] = rs.getObject(j);
i++;
}
rs.close();
stmt.close();

JFrame frame = new JFrame("Hin th c s d liu");


JTable tb = new JTable(data, header);
tb.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane jsp = new JScrollPane(tb);
frame.add(jsp);
frame.setVisible(true);
frame.setSize(300, 300);

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

Page 2
1.1.1.4 Demo
D liu trong Access

D liu xut ra bng:

1.1.2 Bi tp 2
1.1.2.1 bi:
Dng Java xy dng giao din ca chng trnh scan IP.

1.1.2.2 Ci t:
import java.awt.*;
import javax.swing.*;

public class ScanIP extends JFrame {


JTextField myIP, IP1_1, IP1_2, IP1_3, IP1_4, IP2_1, IP2_2, IP2_3, IP2_4;
JTextArea result;
JScrollPane jsp;
JButton scanbt, cancelbt, exitbt;
JRadioButton jrb1, jrb2, jrb3;
ButtonGroup bg;
JPanel pn, pn1, pn2, pn3, pn4, pn5;

public ScanIP(String a) {
super(a);
myIP = new JTextField("192.168.1.3");
myIP.setPreferredSize(new Dimension(200, 25));
myIP.setEditable(false);
pn1 = new JPanel(new FlowLayout(FlowLayout.CENTER));
pn1.setPreferredSize(new Dimension(550, 35));
pn1.add(new JLabel("a ch IP ca my: "));
pn1.add(myIP);
IP1_1 = new JTextField();
IP1_1.setPreferredSize(new Dimension(35, 25));
IP1_2 = new JTextField();
IP1_2.setPreferredSize(new Dimension(35, 25));

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 3


Bo co thc hnh lp trnh mng 2014

IP1_3 = new JTextField();


IP1_3.setPreferredSize(new Dimension(35, 25));
IP1_4 = new JTextField();
IP1_4.setPreferredSize(new Dimension(35, 25));
IP2_1 = new JTextField();
IP2_1.setPreferredSize(new Dimension(35, 25));
IP2_2 = new JTextField();
IP2_2.setPreferredSize(new Dimension(35, 25));
IP2_3 = new JTextField();
IP2_3.setPreferredSize(new Dimension(35, 25));
IP2_4 = new JTextField();
IP2_4.setPreferredSize(new Dimension(35, 25));
pn2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
pn2.setPreferredSize(new Dimension(550, 40));
pn2.add(new JLabel("T a ch: "));
pn2.add(IP1_1);
pn2.add(new JLabel(":"));
pn2.add(IP1_2);
pn2.add(new JLabel(":"));
pn2.add(IP1_3);
pn2.add(new JLabel(":"));
pn2.add(IP1_4);
pn2.add(new JLabel(" n a ch: "));
pn2.add(IP2_1);
pn2.add(new JLabel(":"));
pn2.add(IP2_2);
pn2.add(new JLabel(":"));
pn2.add(IP2_3);
pn2.add(new JLabel(":"));
pn2.add(IP2_4);
jrb1 = new JRadioButton("S dng 16 thread", true);
jrb1.setPreferredSize(new Dimension(150, 35));
jrb2 = new JRadioButton("S dng 32 thread");
jrb2.setPreferredSize(new Dimension(150, 35));
jrb3 = new JRadioButton("S dng 64 thread");
jrb3.setPreferredSize(new Dimension(150, 35));
bg = new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
bg.add(jrb3);
pn3 = new JPanel(new FlowLayout(FlowLayout.CENTER));
pn3.setPreferredSize(new Dimension(550, 35));
pn3.add(jrb1);
pn3.add(jrb2);
pn3.add(jrb3);
result = new JTextArea();
result.setPreferredSize(new Dimension(500, 120));
result.setEditable(false);
jsp = new JScrollPane(result,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
pn4 = new JPanel(new FlowLayout(FlowLayout.CENTER));
pn4.setPreferredSize(new Dimension(520, 170));
pn4.add(new JLabel("Trnh hin th kt qu scan:"));
pn4.add(jsp);
scanbt = new JButton("Scan");
scanbt.setPreferredSize(new Dimension(100, 30));
cancelbt = new JButton("Cancel");
cancelbt.setPreferredSize(new Dimension(100, 30));
exitbt = new JButton("Exit");
exitbt.setPreferredSize(new Dimension(100, 30));

Page 4
pn5 = new JPanel(new FlowLayout(FlowLayout.CENTER));
pn5.setPreferredSize(new Dimension(520, 170));
pn5.add(scanbt);
pn5.add(cancelbt);
pn5.add(exitbt);
pn = new JPanel(new FlowLayout(FlowLayout.CENTER));
pn.add(pn1);
pn.add(pn2);
pn.add(new JLabel("La chn s thread thc hin cng vic"));
pn.add(pn3);
pn.add(pn4);
pn.add(pn5);
add(pn);
setTitle("Chng trnh scan ip mng lan");
setSize(550, 400);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}

public static void main(String arg[]) {


ScanIP tmp = new ScanIP("Scan ip");

}
}

1.1.2.3 Demo:

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 5


Bo co thc hnh lp trnh mng 2014

1.2 BI THC HNH BUI 2


1.2.1 bi:
Sa li chng trnh c sn Client c th gi 1 biu thc cho sn vi cc ton t +, -, *, /,
sin, cos, tan, cot ln cho Server x l v Server tr v kt qu cho Client.

1.2.2 Phn chng trnh Client:


1.2.2.1 Thut ton:
B1: To giao din GUI v socket kt ni n Server c a ch IP v cng cho trc.
B2: To dng vo ra d liu vo ra gn vo socket.
B3: Ly chui biu thc nhp vo.
B4: Gi c chui biu thc qua Server v ch kt qu nhn v.
B5: Hin th kt qu nhn v.

1.2.2.2 Ci t:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class client implements ActionListener {


public static Panel pn1, pn2, pn3, pn;
public static TextField tfnhap = new TextField(5);
public static TextField tfkq = new TextField();
public static Label lbnhap = new Label();
public static Label lbkq = new Label();
public static Button bt1, bt2;
public static String s = "";
Socket socket;
DataOutputStream outputStream;
DataInputStream inputStream;

public client() throws UnknownHostException, IOException {


JFrame fr = new JFrame("Client");
fr.setSize(400, 200);
fr.setLayout(new GridLayout());
lbnhap.setText("Nhap vao chuoi can tinh toan");
lbkq.setText("Ket qua");
pn = new Panel(new GridLayout(5, 1));
pn1 = new Panel(new GridBagLayout());
bt1 = new Button("send");
bt2 = new Button("Exit");
pn.add(lbnhap); pn.add(tfnhap); pn.add(lbkq);
pn.add(tfkq);
pn1.add(bt1); pn1.add(bt2); pn.add(pn1);
fr.add(pn);
bt1.addActionListener(this);
bt2.addActionListener(this);
fr.show();

socket = new Socket("127.0.0.1", 7777);


outputStream = new DataOutputStream(socket.getOutputStream());
inputStream = new DataInputStream(socket.getInputStream());
}

Page 6
@Override
public void actionPerformed(ActionEvent e) {
double nhan;

if (e.getSource() == bt1) {
try {
String s = tfnhap.getText();
outputStream.writeUTF(s);
nhan = inputStream.readDouble();
tfkq.setText("" + nhan);
} catch (UnknownHostException e1) {
} catch (IOException e1) {}
}
if (e.getSource() == bt2)
System.exit(0);
}
}

1.2.3 Phn chng trnh Server:


1.2.3.1 Thut ton:
B1: To ServerSocket kt ni vi cng cho sn.
B2: Server lng nghe lin tc ch cc client kt ni ti.
B2.1: Khi c Client kt ni ti th Server s to socket giao tip, ng thi to 1 i tng s
dng thread x l yu cu.

1.2.3.2 Ci t:

import java.net.*;

public class server {


public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(7777);
while (true) {
Socket socket = serverSocket.accept();
server_Process t = new server_Process(socket);
t.start();
}
}
}

1.2.4 Phn chng trnh x l ca Server:


1.2.4.1 Thut ton:
B1: To dng vo ra kt ni vi socket.
B2: Ch lin tc nhn d liu t Client:
B2.1: Khi nhn c d liu t Client th s tin hnh x l tnh ton ly kt qu.
B2.2: Truyn kt qu cho Client.

1.2.4.2 Ci t:

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 7


Bo co thc hnh lp trnh mng 2014

import java.io.*;

class server_Process extends Thread {


Socket socket;

public server_Process(Socket socket) {


this.socket = socket;
}

@Override
public void run() {
DataInputStream inputStream;
DataOutputStream outputStream;
double kq;

try {
inputStream = new DataInputStream(socket.getInputStream());
outputStream = new DataOutputStream(socket.getOutputStream());
while (true) {
String snhan;
try {
snhan = inputStream.readUTF();
TinhBieuThuc t = new TinhBieuThuc();
kq = t.TinhToan(snhan);
outputStream.writeDouble(kq);
} catch (IOException ex) {
Logger.getLogger(server_Process.class.getName()).log(
Level.SEVERE, null, ex);
}
}
} catch (IOException ex) {

Logger.getLogger(server_Process.class.getName()).log(Level.SEVERE,
null, ex);
}
}
}

1.2.5 Phn chng trnh x l biu thc:


1.2.5.1 Thut ton:
tnh biu thc nhp vo ta ng dng k php nghch o Ba Lan
B1: Ta chuyn biu thc dng trung t nhp vo thnh dng hu t.
B2: Tnh ton biu thc hu t theo k php nghch o Ba Lan.
- Chuyn t biu thc trung t sang biu thc hu t:

1.2.5.2 Thut ton:


Thut ton chuyn i ny c pht minh bi Edsger Dijkstra. Thut ton da theo c ch
ngn xp. tng chung ca thut ton l duyt biu thc t tri sang phi.
B1: Nu gp mt ton hng (con s hoc bin) th n ghi vo chui kt qu.
B2: Nu gp du m ngoc, a n vo ngn xp.
B3: Nu gp mt ton t O1, thc hin theo 2 bc:

Page 8
B3.1: Chng no cn c mt ton t O2 nh ngn xp v u tin ca O1 u tin ca
O2 th ly O2 ra khi ngn xp v ghi vo kt qu.
B3.2: Push O1 vo ngn xp
B4: Nu gp du ) th c ly cc ton t trong ngn xp ra v ghi vo chui kt qu cho n khi
ly c du ( ra khi ngn xp.
B5: Khi duyt ht biu thc trung t, ln lt ly tt c ton hng (nu c) t ngn xp ra v ghi
vo chui kt qu.
V d: Chuyn i biu thc: 3 + sin(4) * 2

Phn t Thao tc Stack Chui hu t


3 Ghi 3 vo kt qu 3
+ Push + + 3
sin Push sin + sin 3
( Push ( + sin ( 3
4 Ghi 4 vo kt qu + sin ( 34
Pop cho n khi ly
c ( ra khi ngn xp.
) + sin 34
Kt qu pop rag hi vo
kt qu
Pop sin ghi vo kt qu
* +* 3 4 sin
v push *
2 Ghi 2 vo kt qu +* 3 4 sin 2
Pop tt c ton t 3 4 sin 2 * +

1.2.5.3 Ci t:

public ArrayList<String> ChuyenDoi_HauTo(String str) {


String[] toanTu = { "+", "-", "*", "/", "sin", "cos", "tan",
"cot" };

// Loi b tt c du cch
str = str.replaceAll("\\s", "");
// Tch biu thc thnh cc phn t
StringTokenizer tk = new StringTokenizer(str, "()+-*/", true);
// Danh sch lu cc phn t
ArrayList<String> tkList = new ArrayList<String>();
// Ly danh sch cc ton t
List<String> operatorList = Arrays.asList(toanTu);
// To ngn xp
Stack<String> stack = new Stack<String>();
// To mng kt qu
ArrayList<String> resultList = new ArrayList<String>();

// Ly cc phn t ct ra a vo danh sch


while (tk.hasMoreTokens()) {
tkList.add(tk.nextToken());
}

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 9


Bo co thc hnh lp trnh mng 2014

// Chuyn i
for (String s : tkList) { // Ly ln lt cc phn t
if (operatorList.contains(s)) { // Ton t
while (!stack.isEmpty() && DoUuTien(stack.peek()) > 0
&& DoUuTien(stack.peek()) >= DoUuTien(s)) {
resultList.add(stack.pop());
}
stack.push(s);
} else if (s.equals("(")) { // '('
stack.push(s);
} else if (s.equals(")")) { // ')'
// Ly tt c ton t trong ngn xp cho n khi gp '('
while (!stack.peek().equals("("))
resultList.add(stack.pop());
stack.pop();
} else { // Ton hng
resultList.add(s);
}
}
while (!stack.isEmpty()) {
// a cc ton t cn li trong ngn xp vo kt qu
resultList.add(stack.pop());
}
return resultList;
}

public int DoUuTien(String toanTu) {


if (toanTu.equals("+") || toanTu.equals("-"))
return 1;
if (toanTu.equals("*") || toanTu.equals("/"))
return 2;
if (toanTu.equals("sin") || toanTu.equals("cos")
|| toanTu.equals("tan") || toanTu.equals("cot"))
return 3;
return 0;
}

- Tnh ton biu thc hu t:

1.2.5.4 Thut ton:


Qu trnh tnh ton biu thc hu t l c biu thc t tri sang phi:
B1: Nu gp mt ton hng (s hoc l bin) th push ton hng vo ngn xp;
B2: Nu gp ton t:
B2.1: Nu l ton t 1 ngi th pop 1 ton hng ra khi ngn xp, push kt qu ca ton hng
vi ton t vo ngn xp.
B2.2: Nu l ton t 2 ngi th pop 2 ton hng ra khi ngn xp, push kt qu ca 2 ton hng
vi ton t vo ngn xp.
B3: Qu trnh tnh kt thc khi con s cui cng cn li trong ngn xp chnh l gi tr ca biu thc
.
V d: Tnh biu thc: 3 4 sin 2 * +

Page 10
Phn t Thao tc Stack
3 Push 3 3
4 Push 4 34
sin Tnh sin(4), push ht qu 3 [sin(4)]
2 Push 2 3 [sin(4)] 2
* Tnh sin(4)*2, push kt qu 3 [sin(4)*2]
+ Tnh sin(4)*2 + 3, push kt qu [sin(4)*2+3]

1.2.5.5 Ci t:

public double TinhToan(String str) {


ArrayList<String> hauTo = ChuyenDoi_HauTo(str);
Stack<String> stack = new Stack<String>();

for (String token : hauTo) {


int priority = DoUuTien(token);
if (priority == 3) { // ton t: sin cos tan cot
String o = stack.pop();
stack.push(Double.toString(TinhLuongGiac(token, o)));

} else if (priority == 1 || priority == 2) {


String o2 = stack.pop();
String o1 = stack.pop();
stack.push(Double.toString(Tinh(token, o1, o2)));
} else {
stack.push(token);
}
}
return Double.parseDouble(stack.pop());
}

public double TinhLuongGiac(String toanTu, String toanHang) {


if (toanTu.equals("sin")) {
return sin(Double.parseDouble(toanHang));
}
if (toanTu.equals("cos")) {
return cos(Double.parseDouble(toanHang));
}
if (toanTu.equals("tan")) {
return (sin(Double.parseDouble(toanHang)) / cos(Double
.parseDouble(toanHang)));
}
if (toanTu.equals("cot")) {
return (cos(Double.parseDouble(toanHang)) / sin(Double
.parseDouble(toanHang)));
}
return 0;
}

public double Tinh(String toanTu, String toanHang1, String toanHang2) {


if (toanTu.equals("+")) {
return Double.parseDouble(toanHang1) +
Double.parseDouble(toanHang2);
}

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 11


Bo co thc hnh lp trnh mng 2014

if (toanTu.equals("-")) {
return Double.parseDouble(toanHang1) -
Double.parseDouble(toanHang2);
}
if (toanTu.equals("*")) {
return Double.parseDouble(toanHang1) *
Double.parseDouble(toanHang2);
}
if (toanTu.equals("/")) {
return Double.parseDouble(toanHang1) /
Double.parseDouble(toanHang2);
}
return 0;
}

- Tnh lng gic sin(x):

Thut ton:
Ta c cng thc trin khai tnh sin(x):

(1 )n x 2n +1 x3 x5 x7
sin ( x )= = x + +
n=0 ( 2 n+1 ) ! 3 ! 5! 7 !

Ta s dng 1 bin temp tnh gi tr tng phn t, sau cng vo kt qu chung, kt qu tnh
c ca phn t trc s c s dng tnh tip phn t pha sau, thut ton c trin khai theo
cng thc:
ketQua+ temp ; Vi ban u :ketQua=0, temp=x

(1 )x 2
temp+ Vi ban u :i=1
( ++ i )(++i)

5 5
Vic tm kt qu bng cch trn s lp lin tc v kt thc khi: 10 temp 10

Ci t:

public double sin(double x) {


double ketQua = 0;
double temp = x, i = 1;

do {
ketQua += temp;
temp = (-1) * temp * x * x / ((++i) * (++i));
} while (temp > 10E-10 || temp < -10E-10);

return ketQua;
}

- Tnh lng gic cos(x):


Thut ton:

Page 12
Ta c cng thc trin khai tnh cos(x):

(1 )n x 2 n x2 x4 x6
cos ( x )= =1 + +
n=0 ( 2 n) ! 2! 4 ! 6 !

Ta s dng 1 bin temp tnh gi tr tng phn t, sau cng vo kt qu chung, kt qu tnh
c ca phn t trc s c s dng tnh tip phn t pha sau, thut ton c trin khai theo
cng thc:
ketQua+ temp ; Vi ban u :ketQua=0, temp=1

(1 )x 2
temp+ Vi ban u :i=0
( ++ i )(++i)

5 5
Vic tm kt qu bng cch trn s lp lin tc v kt thc khi: 10 temp 10

Ci t:

public double cos(double x) {


double ketQua = 0;
double temp = 1, i = 0;

do {
ketQua += temp;
temp = (-1) * temp * x * x / ((++i) * (++i));
} while (temp > 10E-10 || temp < -10E-10);

return ketQua;
}

- Tnh lng gic tan(x) v cot:


Thut ton:
Tan(x) v cot(x) c suy ra t sin(x) v cos(x) t cng thc:
sin ( x) cos ( x)
tan ( x )= cot ( x )=
cos ( x) sin ( x)

1.2.5.6 Demo:
Chng trnh Client:

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 13


Bo co thc hnh lp trnh mng 2014

1.3 BI THC HNH BUI 3


1.3.1 bi
Gi 2 ma trn t Client qua Server. Server tnh ton +, -, *, / 2 ma trn ri gi kt qu v cho
Client.

1.3.2 To cc class tnh ton ma trn


tin cho vic thc hin bi ton, ta s nh ngha 2 lp l MaTran v PhepToan_MaTran:

1.3.2.1 Ci t:
a) Lp MaTran c nh ngha nh sau:

class MaTran {
double maTran[][];
int n, m; // S dng, s ct
public MaTran(int dong, int cot) {}
public MaTran(File file){}
public void Nhap_MaTran() {}
public void In_MaTran() {}
}

b) Lp PhepToan_MaTran c nh ngha nh sau:

public class PhepToan_MaTran {


public MaTran Cong(MaTran A, MaTran B) {}
public MaTran Tru(MaTran A, MaTran B) {}
public MaTran Nhan(MaTran A, MaTran B) {}
public MaTran DoiDong(int i, int j, MaTran X) {}
public double DinhThuc(MaTran Ori) {}
public double PhanTu_MaTran_PhuHop(MaTran B, int i, int j) {}
public MaTran ChuyenVi(MaTran C) {}
public MaTran Chia(MaTran A, MaTran B) {}
}

Page 14
1.3.3 Nhp ma trn:
Nhp bng file: Trong file, cc s ngn cch nhau bi k t tab - \t - v mi hng phn bit
nhau bi enter.

1.3.3.1 Thut ton:


B1: Ly 1 file ch nh.
B2: To 1 lung c vo ca file c chn.
B3: To 1 b m lu d liu cho lung c vo .
// Tip theo, c tng dng trong b m ly d liu di dng chui:
B4: c dng u tin trong b m ly gi tr hng v ct.
B4.1: Ct chui c vo da theo k t tab \t tch s, lu vo mng String token;
B4.2: i cc phn t trong mng token thnh kiu s thch hp ri gn vo s hng, s ct.
B5: To ma trn c s hng v s ct .
B6: Cho i = 0. c 1 dng trong b m cho mi ln lp.
Lp khi c cha ti dng cui cng trong b m v (i < s hng):
B6.1: Ct chui c vo da theo k t tab \t tch s, lu vo token;
B6.2: Cho j = 0. Lp khi (j < s ct) v (j < di mng ca token):
B6.2.1: i kiu s cho phn t token[j] v gn vo phn t maTran[i][j].
B6.2.2: j++;
B6.3: i++;

1.3.3.2 Ci t:
public void Nhap_MaTran(File file) {
Reader in;
BufferedReader br;
String token[],temp;

try {
in = new InputStreamReader(new FileInputStream(file.getPath()), "UTF-
8");
br = new BufferedReader(in);
temp = br.readLine();
token = temp.split("\t");
m = Integer.parseInt(token[0]);
n = Integer.parseInt(token[1]);

maTran = new double[m][n];


for (int i = 0; i < m && (temp = br.readLine()) != null; i++) {
token = temp.split("\t");
for (int j = 0; j < token.length && j < n; j++)
maTran[i][j] = Double.parseDouble(token[j]);
}
} catch (NullPointerException e) {
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null,
"Khng tm thy file", "Loi!",
JOptionPane.ERROR_MESSAGE);
} catch (UnsupportedEncodingException e) {
} catch (NumberFormatException e) {
} catch (IOException e) {
}
}
H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 15
Bo co thc hnh lp trnh mng 2014

1.3.4 Cng, tr ma trn


1.3.4.1 Thut ton:
Gi s c sn 2 ma trn A v B v ma trn C dng lu kt qu. Php ton cng v tr 2 ma
trn c thut ton tng t nhau, ch khc nhau du php ton.
B1: Kim tra s hng v s ct ca A v B c bng nhau, nu c:
B1.1: To ma trn C[s hng A][s ct A].
B1.2: Cho i = 0. Lp khi (i < s hng):
B1.2.1: Cho j = 0. Lp khi (j < s ct):
B1.2.1.1: C[i][j] = A[i][j] +/- B[i][j];
B1.2.1.2: j++;
B1.2.2: i++;
B2: Nu khng: 2 ma trn khng th thc hin php ton.

1.3.4.2 Ci t:

public MaTran Cong(MaTran A, MaTran B) {


MaTran C = new MaTran(0, 0);
if (A.n == B.n && A.m == B.m) {
C = new MaTran(A.m, A.n);
for (int i = 0; i < A.m; i++)
for (int j = 0; j < A.n; j++)
C.maTran[i][j] = A.maTran[i][j] + B.maTran[i][j];
} else {
System.out.println("Khng th thc hin c php cng 2 ma trn v
khc kch thc!");
}
return C;
}

public MaTran Tru(MaTran A, MaTran B) {


MaTran C = new MaTran(0, 0);
if (A.n == B.n && A.m == B.m) {

C = new MaTran(A.m, A.n);


for (int i = 0; i < A.m; i++)
for (int j = 0; j < A.n; j++)
C.maTran[i][j] = A.maTran[i][j] - B.maTran[i][j];
} else {
System.out.println("Khng th thc hin c php tr 2 ma trn v
khc kch thc!");
}
return C;
}

Page 16
1.3.5 Nhn 2 ma trn
1.3.5.1 Thut ton:
Gi s c sn 2 ma trn A v B v ma trn C dng lu kt qu. Php ton nhn ma trn A vi
ma trn B.
Phn t C[i][k] ca ma trn C c tnh bng cng thc:
j= s c t A
(ho c s hng B)
c [i] [ k ] = A [i][ j]B[ j][k ]
j=0

Khi m bo 2 ma trn A v B c th nhn vi nhau th s ct A = s hng B v ma trn C


c to ra s c s hng = s hng A v s ct = s ct B.

B1: Nu s ct ma trn A == s hng ma trn B:


B1.1: To ma trn C[s hng A][s ct B].
B1.2: Cho i = 0. Lp khi (i < s dng A):
B1.2.1: Cho k = 0. Lp khi (k < s ct B):
B1.2.1.1: C[i][k] = 0;
B1.2.1.2: Cho j = 0. Lp khi (j < s ct A):
B1.2.1.2.1: C[i][k] += A[i][j] * B[j][k];
B1.2.1.2.2: j++;
B1.2.1.3: k++;
B1.2.2: i++;
B2: Nu khng: 2 ma trn khng th thc hin php nhn.

1.3.5.2 Ci t:

public MaTran Nhan(MaTran A, MaTran B) {


MaTran C = new MaTran(0, 0);

if (A.n == B.m) {
C = new MaTran(A.m, B.n);

for (int i = 0; i < A.m; i++)


for (int k = 0; k < B.n; k++) {
C.maTran[i][k] = 0;
for (int j = 0; j < A.n; j++)
C.maTran[i][k] += A.maTran[i][j] * B.maTran[j][k];
}
} else {
System.out.println("Khng th thc hin c php tr 2 ma trn v s
ct ma trn A khng bng s hng ma trn B!");
}
return C;
}

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 17


Bo co thc hnh lp trnh mng 2014

1.3.6 Chia 2 ma trn


Trong ton hc, khng c php chia ma trn, nhng ta c th nh ngha php chia ma trn
thng qua php nhn ma trn:
Php chia ma trn A cho ma trn B:
A .B
1
, v i B1 l matr n kh ngh ch ( ngh ch o ) c a matr n B

1.3.6.1 Thut ton:


Gi s c sn 2 ma trn A v B v ma trn C dng lu kt qu. Php ton chia ma trn A vi
ma trn B.

thng qua ma trn B :


1
Cch tm ma trn kh nghch B

1
B1= P
|B| B

Trong : |B| l nh thc ca ma trn B.

PB
l ma trn ph hp ca B.

Ma trn B phi l ma trn vung cp n.


Ma trn B kh nghch khi v ch khi nh thc ma trn B != 0
bij PB
Ma trn vung B cp n, phn t . Ma trn ph hp ca B k hiu l v c xc
nh.
t
PB ( Bij )n
=

, ngha l B ij =(1) |M j|
B ij bij i+j i
Trong : l phn b i s ca phn t
t
Ma trn X l ma trn chuyn v ca ma trn X
ij
M l ma trn cp n - 1 c c t ma trn B bng cch b hng i v ct j ca B.
t
Ma trn chuyn v X bng cch i hng thnh ct hoc ct thnh hng ca ma trn X.

a) Tnh nh thc ca 1 ma trn vung:


Ta chuyn ma trn vung thnh ma trn tam gic trn ri tnh tch ng cho chnh ca ma trn
tam gic .
Gi s vi ma trn vung A cp n c phn t aij.
B1: Bin i ma trn vung A thnh ma trn tam gic trn

Page 18
B1.1: Lp i = 1n-:
B1.1.1: Nu aij == 0:

B1.1.1.1: Tm j sao cho aij 0, j = i+1n
B1.1.1.2: Nu j<= n th hon i dng i v dng j cho nhau
B1.1.1.3: Ngc li kt thc v d liu khng hp l
B1.1.2: Lp j = i+1n
B1.1.2.1: m = -aij / aii
B1.1.2.2: Lp k = in: ajk = ajk + aik * m
B2: Tnh nh thc
B2.1: dt = 1
B2.2: Lp i = 1n: dt = dt * aii
B3: Tr v kt qu:

Ci t:

public MaTran DoiDong(int i, int j, MaTran X) {


for (int k = 0; k < X.n; k++) {
X.maTran[i][k] += X.maTran[j][k];
X.maTran[j][k] = X.maTran[i][k] - X.maTran[j][k];
X.maTran[i][k] -= X.maTran[j][k];
}
return X;
}

public double DinhThuc(MaTran Ori) {


int i, j, k;
double m, dau = 1, dinhThuc;
// Sao chp ma trn
MaTran X = new MaTran(Ori.n, Ori.m);
for (i = 0; i < X.n; i++)
for (j = 0; j < X.m; j++)
X.maTran[i][j] = Ori.maTran[i][j];
dinhThuc = 1;
for (i = 0; i < X.n - 1; i++) {
if (X.maTran[i][i] == 0) {
for (j = i + 1; j < X.n; j++)
if (X.maTran[j][i] != 0) {
X = DoiDong(i, j, X);
dau *= -1;
break;
}
if (j == X.n)
return 0;
}
for (j = i + 1; j < X.n; j++) {
m = -X.maTran[j][i] / X.maTran[i][i];
for (k = i; k < X.n; k++)
X.maTran[j][k] += m * X.maTran[i][k];
}
}

for (i = 0; i < X.n; i++)


dinhThuc *= X.maTran[i][i];
dinhThuc *= dau;

return dinhThuc;
H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 19
}
Bo co thc hnh lp trnh mng 2014

b) Tnh B ij =(1) |M j| :
i+j i

ij
M
Vi ma trn vung B cp, loi b hng i v ct j ta s c

B1: Nhp vo ma trn B, i v j l dng v ct cn b trong ma trn B.


B2: To ma trn vung temp cp n 1.
B3: Cho x = 0, z = -1. Lp khi x < n:
B3.1: Nu z != i: z++;
B3.2: Cho y = 0, t = 0. Lp khi y < n:
B3.2.1: Nu x != i v y != j
B3.2.1: temp[i][j] = B[i][j];
B3.2.2: ++t;
B3.3.2: ++y;
B3.3: ++x
B4: Nu i + j l tr v kt qu DinhThuc(temp);
B5: Nu khng, tr v kt qu - DinhThuc(temp);
Ci t:

public double PhanTu_MaTran_PhuHop(MaTran B, int i, int j) {


MaTran temp = new MaTran(B.n - 1, B.n - 1);

for (int x = 0, z = -1; x < B.n; x++) {


if (x != i)
z++;
for (int y = 0, t = 0; y < B.n; y++) {
if (x != i && y != j) {
temp.maTran[z][t] = B.maTran[x][y];
t++;
}
}
}

if ((i + j) % 2 == 0)
return DinhThuc(temp);
else
return -DinhThuc(temp);
}

c) Tm ma trn chuyn vi:

Page 20
Vi ma trn vung C cp n, ma trn chuyn v ca n chnh l ma trn c to thnh bng cch
i ch hng v ct ca C.
B1: To ma trn vung temp cp n.
B2: Cho i = 0. Lp khi i < n:
B2.1: Cho j = 0, k = 0. Lp khi j < n:
B2.1.2: temp[i][j] = C[k][i];
B2.1.2: k++, j++;
B2.2: i++;
B3: tr v ma trn temp;

Ci t:

public MaTran ChuyenVi(MaTran C) {


MaTran temp = new MaTran(C.n, C.n);

for (int i = 0; i < C.n; i++) {


for (int j = 0, k = 0; j < C.n; j++, k++) {
temp.maTran[i][j] = C.maTran[k][i];
}
}
return temp;
}

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 21


Bo co thc hnh lp trnh mng 2014

d) Chia 2 ma trn A v B:
B1: To ma trn C(0, 0)
B2: Nu B l ma trn vung: // To ma trn kh nghch
B2.1: dinhThuc = nh thc ma trn B;
B2.2: Nu dinhThuc != 0:
B2.2.1: To mi ma trn C[B.n][B.n];
B2.2.1: Nu B.n == 1: C[0][0] = (1 / C[0][0]) / dinhThuc;
B2.2.2: Ngc li:
B2.2.2.1: Cho i = 0. Lp khi i < B.n:
B2.2.2.1: Cho j = 0. Lp khi j < B.n:
C[i][j] = PhanTu_MaTran_PhuHop(B, i, j) / dinhThuc;
B2.2.3: C= ChuyenVi(C);
B2.2.4: C = Nhan(A, C);
B3: Return C;

Ci t:

public MaTran Chia(MaTran A, MaTran B) {


double det;
MaTran C = new MaTran(0, 0);
if (B.n == B.m) {
det = DinhThuc(B);
if (det != 0) {
C = new MaTran(B.n, B.n);
if (B.n == 1)
C.maTran[0][0] = (1 / C.maTran[0][0]) / det ;
else {
for (int i = 0; i < B.n; i++) {
for (int j = 0; j < B.n; j++) {
C.maTran[i][j] = PhanTu_MaTran_PhuHop(B,i,j)
/ det;
}
}
}
C = ChuyenVi(C);
C = Nhan(A, C);
} else {
System.out.println("Khng th thc hin c php chia 2 ma trn
v ma trn B khng c ma trn nghch o!");
}
} else {
System.out.println("Khng th thc hin c php chia 2 ma trn v ma
trn B khng khng phi ma trn vung!");
}
return C;
}

Page 22
1.3.7 Chng trnh Client

1.3.7.1 X l khi yu cu tnh


ton ma trn:
Thut ton:
B1: Kim tra c d liu x l cha.
B2: Kim tra php ton nhp vo c ng n.
B3: To socket kt ni n server c a ch IP v cng cho trc.
B4: To i tng dng thread x l kt ni vi server.
Ci t:

public void jbStart_ActionPerformed(ActionEvent evt) {


Socket socket;

if (fileA != null && fileB != null) {


try {
operator = jtfOperator.getText().trim();

if (operator.charAt(0) == '+' || operator.charAt(0) == '-'


|| operator.charAt(0) == '*'
|| operator.charAt(0) == '/') {
socket = new Socket("localhost", 7777);
Process t = new Process(fileA, fileB, operator, socket);
t.start();
Print_Debug("\n kt ni ti server");
} else {
Print_Debug("\nLi ton t");
}
} catch (UnknownHostException e1) {
Print_Debug("\nNhp a ch IP chnh xc ca server");
} catch (NumberFormatException e) {
} catch (ConnectException e) {
Print_Debug("\nServer khng tn ti");
} catch (IOException e) {
}
} else {
JOptionPane.showMessageDialog(null,
"La chn file truyn d liu cho", "Thng bo",
JOptionPane.WARNING_MESSAGE);
}
}

1.3.7.2 Gi ma trn ln
Server:
Thut ton:
B1: Gi s hng.
B2: Ch nhn phn hi.
B3: Gi s ct.
B4: Ch nhn phn hi.

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 23


Bo co thc hnh lp trnh mng 2014

B5: Duyt tt c phn t ma trn t tri qua phi, t trn xung di:
B5.1: Gi phn t ma trn.
B5.2: Ch phn hi
Ci t:

public void GuiMaTran(MaTran X) throws IOException {


dos.writeInt(X.m); // Gui so hang
dis.read(); // Gui so cot
dos.writeInt(X.n);
dis.read(); // Gui ma tran
for (int i = 0; i < X.m; i++) {
for (int j = 0; j < X.n; j++) {
dos.writeDouble(X.maTran[i][j]); dis.read();
}
}
}

1.3.7.3 Thc hin php ton v


nhn kt qu
Thut ton:
B1: Gi k hiu php ton.
B2: Ch nhn phn hi.
B3: Ch nhn s hng ca ma trn kt qu.
B4: Phn hi nhn.
B5: Ch nhn s ct ca ma trn kt qu.
B6: Phn hi nhn.
B7: To i tng MaTran mi vi s hng v s ct c.
B8: Nu s hng v s ct khc 0:
B8.1: Ln lt nhn cc phn t ca ma trn t tri qua phi, t trn xung di. Mi ln nhn
thnh cng gi phn hi n server.
Ci t:
public void PhepToan() {
int n, m;
try {
dos.writeInt(operator); dis.read();

/* Nhan ket qua */


m = dis.readInt(); dos.write(1); // Lay so hang
n = dis.readInt(); dos.write(1); // Lay so cot
ketQua = new MaTran(m, n);
if (n * m != 0) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
ketQua.maTran[i][j] = dis.readDouble();
dos.write(1);
}
}
} else
Print_Debug("\nKhng th thc hin c php ton");
} catch (IOException e) {}
}
Page 24
1.3.7.4 Lp Thread x l vic
truyn ma trn v nhn kt
qu:

class Process extends Thread {


int operator;
MaTran A, B, ketQua;
DataInputStream dis;
DataOutputStream dos;
Socket socket;

public Process(File fileA, File fileB, String operator, Socket socket) {


A = new MaTran(fileA);
B = new MaTran(fileB);
In_MaTran(A);
In_MaTran(B);

if (operator.equals("+")) {
this.operator = 1;
} else if (operator.equals("-")) {
this.operator = 2;
} else if (operator.equals("*")) {
this.operator = 3;
} else if (operator.equals("/")) {
this.operator = 4;
}
this.socket = socket;
}
public void PhepToan() {
int n, m;
try {
dos.writeInt(operator); dis.read();

/* Nhan ket qua */


m = dis.readInt(); dos.write(1); // Lay so hang
n = dis.readInt(); dos.write(1); // Lay so cot
ketQua = new MaTran(m, n);
if (n * m != 0) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
ketQua.maTran[i][j] = dis.readDouble();
dos.write(1);
}
}
} else
Print_Debug("\nKhng th thc hin c php ton");
} catch (IOException e) {}
}

public void GuiMaTran(MaTran X) throws IOException {


dos.writeInt(X.m); // Gui so hang
dis.read(); // Gui so cot
dos.writeInt(X.n);
dis.read(); // Gui ma tran
for (int i = 0; i < X.m; i++) {
for (int j = 0; j < X.n; j++) {
dos.writeDouble(X.maTran[i][j]); dis.read();
}
}
}
H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 25
Bo co thc hnh lp trnh mng 2014

public void run() {


try {
dis = new DataInputStream(socket.getInputStream());
dos = new DataOutputStream(socket.getOutputStream());

GuiMaTran(A);
GuiMaTran(B);
PhepToan();
Print_Debug("\nKt qu php ton:");
In_MaTran(ketQua);

socket.close();
dis.close();
dos.close();
} catch (UnknownHostException e) {
} catch (IOException e) {}
// Cc thay i v giao din
}
}
}

1.3.8 Chng trnh Server:


1.3.8.1 X l yu cu ca
Client kt ni n:
Thut ton:
B1: Dng ServerSocket lng nghe ti cng cho sn.
B2: Lp lin tc ch yu cu kt ni t Client:
B2.1: Nhn yu cu kt ni t 1 Client:
B2.2: To lung vo ra ni vi socket kt ni vi Client.
B2.3: Nhn ma trn A.
B2.4: Nhn ma trn B.
B2.5: Nhn k hiu php ton.
public Server() {
B2.6: Phn loi php ton x l.
MaTran A = null, B = null, ketQua;
Ci t: PhepToan_MaTran pt = new PhepToan_MaTran();
int operator;

try {
ss = new ServerSocket(7777);
System.out.println("Server dang lang nghe tren cong 7777:");
while (true) {
socket = ss.accept();
dis = new DataInputStream(socket.getInputStream());
dos = new DataOutputStream(socket.getOutputStream());
A = Nhan_MaTran();
B = Nhan_MaTran();
In_MaTran(A);
Page 26 In_MaTran(B);
operator = dis.readInt();
dos.write(0);

switch (operator) {
case (1):
ketQua = pt.Cong(A, B);
Gui_KetQua(ketQua);
break;
case (2):
ketQua = pt.Tru(A, B);
Gui_KetQua(ketQua);
break;
case (3):
ketQua = pt.Nhan(A, B);
Gui_KetQua(ketQua);
break;
case (4):
ketQua = pt.Chia(A, B);
Gui_KetQua(ketQua);
}
}
} catch (IOException e) {}
}

1.3.8.2 Nhn ma trn Client


gi n:
Thut ton:
B1: Nhn s hng.
B2: Gi xc nhn.
B3: Nhn s ct.
B4: Gi xc nhn.
B5: To ma trn vi s hng, s ct va nhn.
B6: Ln lt nhn cc phn t ca ma trn t tri qua phi, t trn xung di. Mi ln nhn thnh
cng giMaTran
public phn hi.
Nhan_MaTran() throws IOException {
Ci t: MaTran X;
int n, m;

m = dis.readInt(); dos.write(1); // Nhan so hang


n = dis.readInt(); dos.write(1); // Nhan so cot

X = new MaTran(m, n);


for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
X.maTran[i][j] = dis.readDouble(); dos.write(1);
}
}
return X;
H} v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 27
Bo co thc hnh lp trnh mng 2014

1.3.8.3 Gi kt qu cho Client:


Thut ton:
B1: Nu s hng v s ct ca ma trn khc 0:
B2: Gi s hng ma trn.
B3: Gi s ct ma trn.
B4: Nu s hng v s ct ca ma trn khc 0 th:
B5: Duyt tt c phn t ma trn t tri qua phi, t trn xung di:
B5.1: Gi phn t ma trn.
B5.2: Ch phn hi
Ci t:

public void Gui_KetQua(MaTran ketQua) {


try {
dos.writeInt(ketQua.m); dis.read(); // Gui so hang
dos.writeInt(ketQua.n); dis.read(); // Gui so cot
if (ketQua.m * ketQua.n != 0) {
// Gui ma tran
for (int i = 0; i < ketQua.m; i++) {
for (int j = 0; j < ketQua.n; j++) {
dos.writeDouble(ketQua.maTran[i][j]);
dis.read();
}
}
}
} catch (IOException e) {}
}

Page 28
1.3.9 Demo

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 29


Bo co thc hnh lp trnh mng 2014

Page 30
CHNG 2: BI TP LM THM
2.1 BI
Client gi cho Server vo danh sch n phng v m gim th, v k gim th s coi thi. Sao cho s
gim th s coi thi phi ln hn 2 ln s phng v b hn hoc bng m gim th. Server chia ngu nhin
2n gim th vo n phng, s gim th cn li l gim th hnh lang.
iu kin chia sao cho khng c gim th no coi 1 phng 2 ln v khng gim th no coi cng
vi nhau hn 1 ln.
Client c th thm, sa xa vo danh sch gim th.
D liu u vo v u ra l file Excel.

2.2 CHNG TRNH THM, SA, XA DANH SCH U VO


2.2.1 Chun b
File excel c 2 sheet, sheet u tin l danh sch phng, sheet th 2 l danh sch gim th:
- Trong danh sch phng c trng: Phng
- Trong danh sch gim th c cc trng: MGV, H tn, Ngy sinh, n v cng tc
D liu c vo c Client lu tr trong cc mng v danh sch:
List<Object[]> dsGV; // Lu danh sch gio vin
Object[] headerGV; // Lu header danh sch gio vin c thm trng STT
List<Object[]> dsP; // Lu danh sch phng
Object[] headerP; // Lu header danh sch phng c thm trng STT

2.2.2 Tm kim trong danh sch


thun tin, ta s dng 1 danh sch s Integer lu v tr ca cc b d liu ng vi kt qu
tm kim. Khi truy xut, ch cn truy cp vo danh sch s Integer ny nh x vo danh sch ca
gio vin hoc phng ly d liu.

List<Integer> kq;

Thut ton:
B1: Ly t kha tm kim.
B3: Loi b cc khong trng trc v sau t kha v chuyn t kha thnh chui thng.
B2: Nu chn danh sch phng tm kim:
B2.1: Duyt danh sch t trn xung di:
B2.2.1: Chuyn tn phng thnh chui thng v kim tra vi t kha.
B2.2.2: Nu ng, lu v tr ca b d liu vo kq.
B2.2: Hin th d liu ra bng.
B3: Nu chn danh sch gio vin:
B2.1: Duyt danh sch t trn xung di:
B2.2.1: Chuyn m gio vin, tn gio vin thnh chui thng v kim tra vi t kha.

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 31


Bo co thc hnh lp trnh mng 2014

B2.2.2: Nu ng m gio vin hoc tn gio vin ng, lu v tr ca b d liu vo kq.


B2.2: Hin th d liu ra bng.
Ci t:

public void jbSearch_ActionPerformed(ActionEvent evt) {


Object key;
int STT = 1;

key = jtfSearch.getText();
key = key.toString().toLowerCase();

kq = new ArrayList<Integer>();
if (isRoom == true) {
// Tm trong danh sch phng
for (int i = 0; i < soP; i++) {
if (dsP.get(i)[0].toString().toLowerCase().equals(key)) {
kq.add(i);
}
}
ViewTabel(headerP, dsP);
} else {
// Tm trong danh sch gio vin
for (int i = 0; i < soGV; i++) {
if (dsGV.get(i)[0].toString().toLowerCase().equals(key)
|| dsGV.get(i)[1].toString().toLowerCase().equals(key))
kq.add(i);
ViewTabel(headerGV, dsGV);
}
}
}

2.2.3 Sa d liu
Sau khi tm kim trong danh sch, ta c th sa phn t c chn ang hin th trong bng.
Thut ton:
B1: Tm kim trong danh sch.
B2: Ly v tr hng trong bng c chn (hng c sa i).
B3: a xc nhn mun sa d liu hay khng.
B5: Kim tra s ct c d liu ng trong hng.
B6: Nu tt c cc ct u ng d liu th:
B6.1: Tm v tr tng ng ca b d liu trong file v trong danh sch lu t danh sch ghi v
tr kq thng qua v tr hng trong bng c chn.
B6.2: Cp nht d liu.
Ci t:
public void jbEdit_ActionPerformed(ActionEvent evt) {
WorkbookSettings ws;
Workbook wb;
WritableWorkbook wwbCopy;

Page 32
WritableSheet wsPhong, wsGiaoVien;
int rowSelect, col;

rowSelect = jtData.getSelectedRow();

int dialogResult = JOptionPane.showConfirmDialog(this,


"Bn c mun sa dng ny?", "Cnh bo",
JOptionPane.YES_NO_OPTION);

if (dialogResult == JOptionPane.YES_NO_OPTION) {
// Chun b cho sa i file
ws = new WorkbookSettings();
ws.setEncoding("CP1252");
try {
if (isRoom == true) {
col = KiemTra_BoDuLieu_Phong(rowSelect);
if (col != headerP.length - 1) {
JOptionPane.showMessageDialog(null,
"D liu sa i b li!");
return;
} else {
wb = Workbook.getWorkbook(file, ws);
wwbCopy = Workbook.createWorkbook(file, wb);
wsPhong = wwbCopy.getSheet(0);

for (int i = 1; i < headerP.length; i++) {


Label label = new Label(i - 1,
kq.get(rowSelect) + 1, jtData.getValueAt(
rowSelect, i).toString());
wsPhong.addCell(label);
dsP.get(kq.get(rowSelect))[i - 1] = jtData
.getValueAt(rowSelect, i).toString();
}

wwbCopy.write(); wwbCopy.close(); wb.close();

JOptionPane.showMessageDialog(null
," sa thnh cng!");
jbReset.doClick();
}
} else {
col = KiemTra_BoDuLieu_GiaoVien(rowSelect);
if (col != headerGV.length - 1) {
JOptionPane.showMessageDialog(null,
"D liu sa i b li!");
return;
} else {
wb = Workbook.getWorkbook(file, ws);
wwbCopy = Workbook.createWorkbook(file, wb);
wsGiaoVien = wwbCopy.getSheet(1);

for (int i = 1; i < headerGV.length; i++) {


Label label = new Label(i - 1,
kq.get(rowSelect) + 1, jtData.getValueAt(
rowSelect, i).toString());
wsGiaoVien.addCell(label);
dsGV.get(kq.get(rowSelect))[i - 1] =
jtData.getValueAt(rowSelect, i).toString();
JOptionPane.showMessageDialog(null,
}
" sa thnh cng!");
} wwbCopy.write(); wwbCopy.close(); wb.close();
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Li!");
}
}
} v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 33
H
Bo co thc hnh lp trnh mng 2014

2.2.4 Xa d liu
Sau khi tm kim trong danh sch, ta c th xa phn t c chn ang hin th trong bng.
Thut ton:
B1: Tm kim trong danh sch.
B2: Ly v tr hng trong bng c chn (d liu cn xa).
B3: a xc nhn mun xa d liu hay khng.
B4: Tm v tr tng ng ca b d liu trong file v trong danh sch lu t danh sch ghi v tr kq
thng qua v tr hng trong bng c chn.
B5: Xa d liu.
Ci t:

public void jbDel_ActionPerformed(ActionEvent evt) {


WorkbookSettings ws;
Workbook wb;
WritableWorkbook wwbCopy;
WritableSheet wsPhong, wsGiaoVien;
int STT = 1;
int rowSelect;

rowSelect = jtData.getSelectedRow();
int dialogResult = JOptionPane.showConfirmDialog(this,
"Bn c mun xa dng ny?", "Cnh bo",
JOptionPane.YES_NO_OPTION);

if (dialogResult == JOptionPane.YES_NO_OPTION) {
// Chun b cho sa i file
ws = new WorkbookSettings();
ws.setEncoding("CP1252");
try {
wb = Workbook.getWorkbook(file, ws);
wwbCopy = Workbook.createWorkbook(file, wb);
wsPhong = wwbCopy.getSheet(0);
wsGiaoVien = wwbCopy.getSheet(1);

if (isRoom == true) {
// Xa hng trong file
wsPhong.removeRow(kq.get(rowSelect) + 1);
// Xa hng trong danh sch lu
dsP.remove(kq.get(rowSelect));
// Xa hng trong bng hin th
kq.remove(rowSelect);
ViewTabel(headerP, dsP);

Page 34
// Cp nht li s lng
soP--;
// Ghi vo file v ng
try {
wwbCopy.write();
wwbCopy.close();
wb.close();
} catch (IOException e) {
} catch (WriteException e) {}
} else {
// Xa hng trong file
wsGiaoVien.removeRow(kq.get(rowSelect) + 1);
// Xa hng trong danh sch lu
dsGV.remove(kq.get(rowSelect));
// Xa hng trong bng hin th
kq.remove(rowSelect);

ViewTabel(headerGV, dsGV);
// Cp nht li s lng
soGV--;
// Ghi vo file v ng
try {
wwbCopy.write();
wwbCopy.close();
wb.close();
} catch (IOException e) {
} catch (WriteException e) {}
}
} catch (BiffException | IOException e1) {}
}
}

2.2.5 Thm d liu


D liu c thm trc tip vo bng
Thut ton:
B1: Kim tra tnh ng n ca cc d liu nhp vo.
B2: M file ghi.
B2: Duyt tt c cc hng trong bng.
B2.1: Kim tra s ct c d liu ng trong hng.
B2.2: Nu tt c cc ct u ng:
B2.2.1: Ghi d liu ca hng vo hng cui cng ca file v danh sch lu.
B2.2.2: Tng bin s lng ln 1.
Ci t:
public void jbCreate_ActionPerformed(ActionEvent evt) {
WorkbookSettings ws;
Workbook wb;
WritableWorkbook wwbCopy;
WritableSheet wsPhong, wsGiaoVien;
int i, j, row, col;
int dialogResult = JOptionPane.showConfirmDialog(this,
"Bn c mun thm d liu vo danh sch?", "Xc nhn",
JOptionPane.YES_NO_OPTION);

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 35


Bo co thc hnh lp trnh mng 2014

if (dialogResult == JOptionPane.YES_NO_OPTION) {
ws = new WorkbookSettings();
ws.setEncoding("CP1252");
try {
if (isRoom == true) {
if (!KiemTra_DuLieuVao_Phong()) {
JOptionPane.showMessageDialog(null,
"D liu nhp vo li!");
} else {
wb = Workbook.getWorkbook(file, ws);
wwbCopy = Workbook.createWorkbook(file, wb);
wsPhong = wwbCopy.getSheet(0);

for (i = 0; i < jtData.getRowCount(); i++) {


row = wsPhong.getRows();
col = KiemTra_BoDuLieu_Phong(i);
if (col == headerP.length - 1) {
dsP.add(new Object[headerP.length - 1]);
soP++;
for (j = 1; j < headerP.length; j++) {
Label label = new Label(j - 1, row, jtData.getValueAt(i,
j).toString());
wsPhong.addCell(label);
dsP.get(soP-1)[j-1] = jtData.getValueAt(i,j).toString();
}
}
}
wwbCopy.write(); wwbCopy.close(); wb.close();
JOptionPane.showMessageDialog(null,
" thm thnh cng!");
}
} else {
if (!KiemTra_DuLieuVao_GiaoVien()) {
JOptionPane.showMessageDialog(null,
"D liu nhp vo li!");
} else {
wb = Workbook.getWorkbook(file, ws);
wwbCopy = Workbook.createWorkbook(file, wb);
wsGiaoVien = wwbCopy.getSheet(1);

for (i = 0; i < jtData.getRowCount(); i++) {


row = wsGiaoVien.getRows();
col = KiemTra_BoDuLieu_GiaoVien(i);
if (col == headerGV.length - 1) {
dsGV.add(new Object[headerGV.length - 1]);
soGV++;
for (j = 1; j < headerGV.length; j++) {
Label label = new Label(j - 1, row, jtData
.getValueAt(i, j).toString());
wsGiaoVien.addCell(label);
dsGV.get(soGV - 1)[j - 1] = jtData
.getValueAt(i, j).toString();

}
}
}
wwbCopy.write(); wwbCopy.close(); wb.close();
JOptionPane.showMessageDialog(null,
" thm thnh cng!");
}
}

Page 36
} catch (WriteException e) {
JOptionPane.showMessageDialog(null, "Li!");
} catch (BiffException e) {
JOptionPane.showMessageDialog(null, "Li!");
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Li!");
}
}
}

2.2.6 Kim tra d liu


D liu nhp vo bng c thm vo file hoc cc b d liu c sa i cp nht. Tt
c u cn phi kim tra tnh ng n ca d liu trc khi lu.
Thut ton kim tra d liu trong bng:
B1: row = 0. Duyt tng hng trong bng.
B1.1: Vi mi hng, kim tra c bao nhiu ct ng d liu.
B1.2: Nu tt c s ct u ng d liu th row++;
B1.3: Ngc li. Nu s ct ng d liu > 0 th tr v false.
B2: Nu row == 0: tr v false;
B3: Ngc li, tr v true;
Ci t:
public boolean KiemTra_DuLieuVao_Phong() {
int row = 0, col;

for (int i = 0; i < jtData.getRowCount(); i++) {


col = KiemTra_BoDuLieu_Phong(i);
if (col == headerP.length - 1) {
row++;
} else if (col > 0) {
return false;
}
}
if (row == 0)
return false;
return true;
}

public boolean KiemTra_DuLieuVao_GiaoVien() {


int row = 0, col;
for (int i = 0; i < jtData.getRowCount(); i++) {
col = KiemTra_BoDuLieu_GiaoVien(i);
if (col == headerGV.length - 1) {
row++;
} else if (col > 0) {
return false;
}
}
if (row == 0)
return false;
return true;
}

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 37


Bo co thc hnh lp trnh mng 2014

// Kim tra d liu thm vo c y ko?


public int KiemTra_BoDuLieu_GiaoVien(int row) {
int col = 0;
String DATE_FORMAT = "dd/MM/yyyy";
for (int i = 1; i < headerGV.length; i++) {
if (i == 3) { // Trng ngy sinh
try {
DateFormat df = new SimpleDateFormat(DATE_FORMAT);
df.setLenient(false);
df.parse(jtData.getValueAt(row, i).toString());
col++;
} catch (Exception e) {
}
} else {
try {
if (!jtData.getValueAt(row, i).toString().equals(""))
col++;
} catch (Exception e) {}
}
}
return col;
}

public int KiemTra_BoDuLieu_Phong(int row) {


int col = 0;
for (int i = 1; i < headerP.length; ++i) {
try {
if (!jtData.getValueAt(row, i).toString().equals(""))
col++;
} catch (Exception e) {}
}
return col;
}

2.3 TRUYN NHN D LIU GIA CLIENT SERVER


2.3.1 Bn Client
2.3.1.1 Truyn d liu ban u
qua Server
Thut ton:
B1: Truyn tn file qua Server. Ch nhn phn hi.
B2: Truyn kch thc file qua Server. Ch nhn phn hi.
B4: M lung c file.
B3: c file vo mng 1024 byte cho n khi ht:
B3.1: Gi mng cho Server. Ch phn hi.
B4: ng lung c file.
B4: Gi s gim th coi thi qua Server. Ch nhn phn hi.
B5: Gi s ln phn cng qua Server. Ch nhn phn hi.
Ci t:

Page 38
public void TransData() throws IOException {
long sizeFile;
fis = new FileInputStream(file);

// Gi tn file qua server


dos.writeUTF(file.getName());
dis.read();
Print_Debug("Tn file: " + file.getName());

// Gi kch thc file


sizeFile = file.length();
dos.writeLong(sizeFile);
dis.read();
Print_Debug("Kch thc file: " + sizeFile);

int x;
x = fis.read(part);
// Gi d liu
while (x > -1) {
dos.write(part);
dis.read();
x = fis.read(part);
}
fis.close();

// Gi s gim th coi thi


dos.writeInt(soGiamThi_CoiThi);
dis.read();

Print_Debug("Gi s ln phn cng");


GuiSoLan();

// Hon thnh vic gi


Print_Debug(" hon thnh vic gi");
Print_Debug("----------------------------");
}

public void GuiSoLan() throws IOException {


RandomAccessFile rf;

try {
rf = new RandomAccessFile("s ln phn cng.txt", "r");
soLanPhanCong = rf.readInt();
} catch (FileNotFoundException e) {
soLanPhanCong = 0;
} catch (IOException e) {
soLanPhanCong = 0;
}

Print_Debug("S ln phn cng: " + soLanPhanCong);


dos.writeInt(soLanPhanCong);
dis.read();
}

2.3.1.2 Nhn d liu t Server


Thut ton:
B1: Nhn tn file. Gi xc nhn.

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 39


Bo co thc hnh lp trnh mng 2014

B2: To file vi tn file nhn. M lung ghi.


B3: Nhn kch thc file. Gi xc nhn.
B4: Lp khi cha nhn s byte ca file: c d liu vo mng byte 1024 phn t
B4.1: Nu s byte cn li < 1024:
B4.1.1: Ch nhn ng s lng byte cn li t lung vo.
B4.1.2: Ghi vo file s byte cn li.
B4.2: Ngc li:
B4.2.1: Nhn s byte trong mng t lung vo.
B4.2.2: Ghi vo file s byte va nhn.
B4.3: Gi xc nhn.
B5: ng lung ghi file.
Ci t:
public void ReceiveFile() throws IOException {
long remainSize;
String nameFile;
int byteRead = 0;
long sizeFile;

// Nhn tn file
nameFile = dis.readUTF();
dos.write(1);
Print_Debug("Tn file kt qu: " + nameFile);

// To file
fileResult = new File(file.getParent() + "\\" + nameFile);
fos = new FileOutputStream(fileResult);
Print_Debug("ng dn: " + fileResult.getPath());

// Nhn kch thc file


sizeFile = dis.readLong();
dos.write(1);
Print_Debug("Kch thc file kt qu: " + sizeFile);

// Nhn d liu
remainSize = sizeFile;
while (remainSize > 0) {
if (remainSize < 1024) {
byteRead = dis.read(part, 0, (int) remainSize);
fos.write(part, 0, (int) remainSize);
} else {
byteRead = dis.read(part);
fos.write(part);
}
remainSize -= byteRead;
dos.write(1);
}
fos.close();

// Hon thnh vic nhn


Print_Debug(" hon thnh vic nhn");
Print_Debug("----------------------------");
}

Page 40
2.3.2 Bn Server
2.3.2.1 Nhn d liu t Client
Thut ton:
B1: Nhn tn file. Gi xc nhn.
B2: To file vi tn file nhn. M lung ghi.
B3: Nhn kch thc file. Gi xc nhn.
B4: Lp khi cha nhn s byte ca file: c d liu vo mng byte 1024 phn t
B4.1: Nu s byte cn li < 1024:
B4.1.1: Ch nhn ng s lng byte cn li t lung vo.
B4.1.2: Ghi vo file s byte cn li.
B4.2: Ngc li:
B4.2.1: Nhn s byte trong mng t lung vo.
B4.2.2: Ghi vo file s byte va nhn.
B4.3: Gi xc nhn.
B5: ng lung ghi file.
B6: Nhn s gim th coi thi. Gi xc nhn.
B7: Nhn s ln phn cng. Gi xc nhn.
Ci t:

public void ReceiveFile() throws IOException {


long remainSize, sizeFile;
String nameFile;
int byteRead = 0;

// Nhn tn file
nameFile = dis.readUTF();
dos.write(1);
Print_Debug("Tn file: " + nameFile);

// To con tr file
file = new File(nameFile);
fos = new FileOutputStream(file);

// Nhn kch thc file


sizeFile = dis.readLong();
dos.write(1);
Print_Debug("Kch thc: " + sizeFile);

// Nhn d liu
remainSize = sizeFile;
while (remainSize > 0) {
if (remainSize < 1024) {
byteRead = dis.read(part, 0, (int) remainSize);
fos.write(part, 0, (int) remainSize);
} else {
byteRead = dis.read(part);
fos.write(part);
}

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 41


Bo co thc hnh lp trnh mng 2014

remainSize -= byteRead;
dos.write(1);
}
fos.close();

// Nhn s gim th coi thi


soGiamThi_CoiThi = dis.readInt();
dos.write(1);
Print_Debug("S cn b coi thi: " + soGiamThi_CoiThi);

// c s ln phn cng
soLan_PhanCong = dis.readInt();
dos.write(1);
Print_Debug("S ln phn cng: " + soLan_PhanCong);
Print_Debug("----------------------------");

// Hon thnh vic nhn


Print_Debug(" hon thnh vic nhn");
Print_Debug("----------------------------");
}

2.3.2.2 Truyn d liu cho


Client
Thut ton:
B1: Truyn tn file qua Server. Ch nhn phn hi.
B2: Truyn kch thc file qua Server. Ch nhn phn hi.
B4: M lung c file.
B3: c file vo mng 1024 byte cho n khi ht:
B3.1: Gi mng cho Server. Ch phn hi.
B4: ng lung c file.
Ci t:

public void TransFile() throws IOException {


long sizeFile;

fis = new FileInputStream(fileResult);


// Gi tn file
dos.writeUTF(fileResult.getName());
dis.read();
Print_Debug("Tn file: " + fileResult.getName());

// Gi kch thc file


sizeFile = fileResult.length();
dos.writeLong(sizeFile);
dis.read();
Print_Debug("Kch thc file: " + sizeFile);

int x;
x = fis.read(part);
// Gi d liu
while (x > -1) {
dos.write(part);
dis.read();
x = fis.read(part);
}

Page 42
// Hon thnh vic gi
Print_Debug(" hon thnh vic gi");
Print_Debug("----------------------------");
fis.close();
}

2.4 X L CA CLIENT
Thut ton:
B1: Gi d liu ln Server.
B2: Ch hi p kt qu t Server.
B3: Nu c kt qu:
B3.1: Nhn d liu tr v t Server.
B3.2: Ghi s ln phn cng vo file.
B4: Nu khng, thng bo li.
Ci t:

public void run() {


boolean complete = false;
int soLan;

try {
Print_Debug("Gi file ln server");
TransData();

// c kt qu tr v
Print_Debug("Ch nhn kt qu");
complete = dis.readBoolean();
Print_Debug("----------------------------");

if (complete) {
Print_Debug("Server x l thnh cng");
Print_Debug("Nhn kt qu tr v...");
ReceiveFile();
Luu_SoLanPhanCong(++soLanPhanCong);
} else {
Print_Debug("Server x l khng thnh cng");
Print_Debug("----------------------------");
}
Print_Debug("ng tt c kt ni");
Print_Debug("----------------------------");
dis.close();
dos.close();
} catch (IOException e) {}
}

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 43


Bo co thc hnh lp trnh mng 2014

2.5 X L CA SERVER
Thut ton:
B1: Nhn file t Client.
B2: Ly d liu vo v kim tra cc iu kin u vo.
B3: Nu cc iu kin u vo tha:
B3.1: Phn cng danh sch.
B3.2: To file kt qu lu.
B3.4 Ghi vo file.
B3.5: Thng bo cho Client l x l xong.
B3.6: Truyn file v cho Client.
B4: Nu khng:
B4.1: Thng bo cho Client l tht bi.
B5: ng cc lung vo ra v socket.
Ci t:

public void run() {


try {
Print_Debug("Nhn file t client");
ReceiveFile();

if (GetData() == true) {
PhanCong();
fileResult = new File("Danh sch phn cng.xls");
GhiVaoFile();

Print_Debug(" x l xong");
Print_Debug("----------------------------");
dos.writeBoolean(true);
Print_Debug("Gi kt qu v cho client");
TransFile();
} else {
dos.writeBoolean(false);
Print_Debug("Server x l khng thnh cng");
Print_Debug("----------------------------");
}
Print_Debug("ng tt c kt ni");
Print_Debug("----------------------------");
socket.close();
dis.close();
dos.close();
} catch (IOException | WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Page 44
2.6 THUT TON PHN CNG GIO VIN COI THI
2.6.1 Lu danh sch gio vin v phng thi
Danh sch gio vin c lu vo mng giamThi = new String[][].Th t cc ct
trong mng tng ng vi cc trng trong danh sch v cc hng tng ng vi cc trng trong danh
sch.
Danh sch phng thi c lu vo mng 1 chiu: phongThi = new String[]. Th t
tng ng vi phng thi trong danh sch.

2.6.2 Sp xp gim th
S dng mng 1 chiu Xep_GiamThi = new int[] lu cc ch s c sp xp. Cc ch
s ny s nh x n hng ca mng giamThi ly thng tin gim th.
- Mng Xep_GiamThi tnh t phn t th 0 2n 1 (n l s phng thi) th c 2 gim th s
chung 1 phng. Phn t th t chn l gim th 1 v phn t th t l l gim th 2.
- S cn li t 2n m 1 l gim th hnh lang (m l s gim th coi thi).
Gi s c 10 gim th v 5 phng thi. Xt 1 phng thi, mi phng thi s c 10 lt gim th i
vo. V v mi ln vo phng l 2 lt gim th ng thi khng gim th no vo 1 phng 2 ln nn ta
s c ti a tng cng 5 ln i vo 1 phng. Nu s gim th l 11 th vn ch c ti a l 5 ln i vo 1
phng, v nu l 6 ln th s c 12 lt i vo phng nn suy ra phi c 1 gim th i vo phng 2 ln.
Chnh v th ta ch quan tm s gim th l chn. Nu s gim th l th ta tr i 1 gim th ny c th
lm gim th hnh lang.
T ta rt ra, s cch xp gim th vo cc phng ti a c: Tng s gim th / 2 cch
Ta xp gim th s dng phng php quay vng:
- Gim th 1 phng i + 1 s qua phng i.
- Gim th 1 phng u tin s chuyn v gim th 1 phng cui cng.
- Gim th 2 phng i + 2 s qua phng i.
- Gim th 2 phng u tin s chuyn v gim gim th 2 phng k cui.
- Gim th 2 phng th 2 s chuyn v gim th 2 phng cui cng.
Gi s c 5 phng v 10 gim th

Ln Phng 1 Phng 2 Phng 3 Phng 4 Phng 5


1 AB CD EF GH IJ
2 CF EH GJ IB AD
3 EJ GB ID AF CH
4 GD IF AH CJ EB
5 IH AJ CB ED GF
6 AB CD EF GH IJ
Vi cch xp xoay vng th ta s m bo khng gim th no coi 1 phng hn 2 ln v khng ai
coi cng vi nhau 2 ln.

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 45


Bo co thc hnh lp trnh mng 2014

Ci t:

public void PhanCong() {


int n, n1, n2;

n = soGiamThi;
if (soGiamThi % 2 == 1) {
--n;
}

if (n > 3) {
for (int k = 0; k < soLan_PhanCong; k++) {
// i v tr cc gim th 1
// Lu gim th u tin
n1 = Xep_GiamThi[0];
for (int i = 2; i < n; i += 2) {
Xep_GiamThi[i - 2] = Xep_GiamThi[i];
}

// a gim th 1 u tin vo v tr th 2 tnh t cui


Xep_GiamThi[n - 2] = n1;
// i v tr cc gim th 2
n1 = Xep_GiamThi[1];
n2 = Xep_GiamThi[3];
for (int i = 5; i < n; i += 2) {
Xep_GiamThi[i - 4] = Xep_GiamThi[i];
}

// a gim th 2 u tin vo v tr th 3 tnh t cui


Xep_GiamThi[n - 3] = n1;
// a gim th 2 th 2 vo v tr cui cng
Xep_GiamThi[n - 1] = n2;
}
}
}

Page 46
2.7 DEMO

H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 47


Bo co thc hnh lp trnh mng 2014

Page 48
H v tn: Bi Tn Vit Lp: 10T2 Nhm 11BPage 49

You might also like