Tài liệu Bài tập lập trình mạng

MꢀC LꢀC  
1
 
2
 
DANH MꢀC THUẬT NGỮ TIẾNG ANH  
Từ  
Nghĩa của từ  
abstract  
break  
catch  
Trừu tượng  
Dừng vòng lặp  
Từ khóa đầu của một khối bắt ngoại lệ  
Bỏ qua phần cuối vòng lặp, tiếp tục sang bước tiếp theo.  
Giá trị mặc định của phương thức switch()  
Kế thừa  
continue  
default  
extends  
final  
Một hằng số, phương thức hay một lớp không được ghi đè  
Một phần của khối xử lý ngoại lệ try luôn được thực hiện  
finally  
implements  
import  
Thực hiện giao diện  
Khai báo một gói thư viện  
Kiểm tra một đối tượng là một thể hiện của lớp  
Giao diện  
instanceof  
interface  
new  
Tạo một đối tượng mới của lớp  
Tham chiếu rỗng  
null  
package  
private  
Gói  
Tiền tố chỉ được truy cập bởi phương thức của lớp  
Tiền tố được truy cập bởi phương thức của lớp, lớp con của  
và các lớp khác trong cùng một gói  
protected  
public  
Tiền tố có thể được truy cập bởi phương thức của tất cả các lớp  
Trả về của một phương thức  
return  
super  
Gọi phương thức khởi tạo của lớp cha  
đồng bộ  
synchronized  
this  
Sử dụng như một tham chiếu đến đối tượng hiện tại  
3
4
 
DANH MꢀC CHỮ VIẾT TꢁT  
Chꢂ viꢃt tꢄt  
UDP  
ꢅ nghĩa  
User Datagram Protocol  
Transmission Control Protocol  
Internet Protocol  
TCP  
IP  
URL  
Uniform Resource Locator  
Cơ Sở Dꢈ Liệu  
CSDL  
JDBC  
CNTT  
HĐH  
MVC  
DNS  
Java Database Connectivity  
Công Nghệ Thông Tin  
Hệ Điều Hành  
Model-View-Control  
Domain Name System  
Application Programming Interface  
File Transfer Protocol  
Java Development Kit  
GigaByte  
API  
FTP  
JDK  
GB  
UCLN  
BCNN  
RAM  
RMI  
Ước Chung Lớn Nhất  
Bội Chung Nhỏ Nhất  
Random Access Memory  
Remote Method Invocation  
Java Virtual Machine  
Network Interface Card  
Đại học Kinh tế Kꢉ thuật Công nghiệp  
JVM  
NIC  
ĐH KTKT CN  
5
6
 
MꢀC LꢀC HꢆNH  
7
8
 
LꢇI NꢈI ĐꢉU  
Ngày nay do nhu cầu thực tế và do sự phát triển mạnh mẽ của nhiều công nghệ tꢋch hợp,  
dẫn đến các chương trꢊnh ứng dụng hiện này hầu hết đều có khả năng thực hiện trên môi  
trường mạng. Ngôn ngꢈ JAVA là ngôn ngꢈ phù hợp để viết các ứng dụng mạng. So với  
lập trꢊnh thông thường, lập trình mạng đòi hỏi người lập trình hiểu biết và có kꢉ năng tốt  
để tạo giao tiếp và trao đổi dꢈ liệu giꢈa các máy tính với nhau.  
Để hỗ trợ sinh viên chuyên ngành CNTT trong nhà trường tiếp cận với kꢉ thuật lập trꢊnh  
mới này, tiếp theo cuốn tài liệu học tập lý thuyết “Công nghꢊ JAVA”, chꢌng tôi xây dựng  
cuốn “Bꢋi tꢌp lꢌp trꢍnh mꢎng”, nhằm cung cấp cho sinh viên nhꢈng kiến thức và kꢉ thuật  
cơ bản nhất để phát triển các chương trꢊnh ứng dụng mạng, thông qua các dạng bài tập từ  
cơ bản đến nâng cao qua các chủ đề: lập trꢊnh cơ bản, lập trꢊnh hướng đối tượng, lập trꢊnh  
CSDL JDBC, lập trꢊnh mạng dùng socket, lập trꢊnh phân tán với RMI. Sinh viên sẽ thực  
hiện các bài thực hành này trên phòng máy nhà trường.  
Nội dung cuốn tài liệu bao gồm 12 bài lab chia thành các chủ đề khác nhau. Trong mỗi chủ  
đề chꢌng tôi đưa ra tóm tắt lý thuyết, bài tập mẫu, sau đó là bài tập tương tự, và bài tập áp  
dụng. Kết quả qua nhꢈng bài lab, sinh viên được rèn và thành thạo các kꢉ năng lập trꢊnh  
hướng đối tượng, lập trꢊnh CSDL, lập trình với giao thức truyền thông có sẵn và khả năng  
tích hợp trong các ứng dụng khác nhau, nhất là các giao thức truyền thông thời gian thực,  
từ đó sinh viên có thể viết được các phần mềm quản lý theo mô hꢊnh MVC, xây dựng được  
các ứng dụng mạng, các ứng dụng tích hợp và triệu gọi lẫn nhau trên mạng Intranet (mạng  
cục bộ), mạng Internet (mạng toàn cầu), các hệ thống xử lý truy xuất dꢈ liệu phân tán hoàn  
chỉnh.  
Chúng tôi xin chân thành cảm ơn Thầy Nguyễn Hoàng Chiến, phó chủ nhiệm, phụ  
trách khoa CNTT trường ĐH KTKT CN cùng với các đồng nghiệp đã đóng góp ý kiến cho  
cuốn tài liệu này. Vꢊ tài liệu được biên soạn lần đầu, chꢌng tôi đã cố gắng hoàn chỉnh, song  
không tránh khỏi thiếu sót. Rất mong nhận được sự góp ý của bạn đọc để tài liệu học tập  
được hoàn thiện hơn.  
Xin trân trọng cảm ơn!  
Nhóm tác giả  
9
10  
 
LAB 1. LẬP TRꢆNH CƠ BẢN[1,2]  
A. MꢀC TIÊU  
Trang bị cho sinh viên kꢉ năng lập trꢊnh cơ bản trong java: cấu trꢌc if, vòng lặp while…do,  
for.., khai báo mảng, xử lý trên mảng.  
B. NỘI DUNG  
- Lệnh rẽ nhánh (if), lệnh lựa chọn (switch).  
- Lệnh lặp, sử dụng mảng để thao tác trên các phần tử cùng kiểu.  
C. YÊU CꢉU PHꢉN CỨNG, PHꢉN MỀM  
- Máy tꢋnh cài HĐH windows, RAM tối thiểu 256MB.  
- Phần mềm NETBEAN IDE 8.0, JDK 1.8.  
D. KẾT QUẢ SAU KHI HOÀN THÀNH  
Sinh viên thành thạo các câu lệnh : rẽ nhánh, lựa chọn, lệnh lặp, thao tác trên mảng, áp  
dụng giải các bài tập từ đơn giản đến phức tạp.  
E. HƯỚNG DẪN CHI TIẾT  
1. Cấu trúc rẽ nhánh if…else  
if (boolean_expr){ //Nếu boolean_expression là true  
//do task1  
}
else { //Nếu boolean_expression là false  
//do task2  
}
Bài 1. Tꢊm max, min của 2 số nguyên nhập vào từ bàn phꢋm  
Hướng dẫn:  
public class Bai1 {  
public static void main(String[] args) {  
int a,b,max,min;  
Scanner sc = new Scanner(System.in); //Phím tắt CTRL + Space  
System.out.println("Nhap so nguyen a:");  
a = sc.nextInt();  
System.out.println("Nhap so nguyen b:");  
b = sc.nextInt();  
max = (a>b)?a:b;  
min = (a>b)?b:a;  
11  
System.out.println("Max la:"+max);  
System.out.println("Min la:"+min);  
}
}
Bài 2. Giải phương trꢊnh bậc 2 ax2 + bx + c = 0  
Hướng dẫn:  
Sử dụng Scanner nhập 3 số nguyên.a, b, c. Tꢋnh delta=b*b-4*a*c.  
Sử dụng if kiểm tra từng trường hợp của delta.  
if(delta<0)  
System.out.println("PT vo nghiem");  
else if(delta==0){  
float x = (float)-b/(2*a);  
System.out.printf("PT co nghiem kep x1=x2=%.2f",x);  
}else{  
float x1 = (float) (-b-Math.sqrt(delta))/(2*a);  
float x2 = (float) (-b+Math.sqrt(delta))/(2*a);  
}
2. Cấu trúc switch  
switch (controlling_expr){  
case value1: //do task1  
break;  
case value2: //do task2  
break;  
...  
case valueN: //do taskN  
break;  
default:  
Bài 3. Viết chương trꢊnh java cho phép tạo và thực hiện theo menu sau:  
1. Nhập vào một số nguyên dương n.  
2. Tꢋnh tổng các số từ 1 đến n  
3. Kiểm tra n có là số nguyên tố  
4. Kiểm tra n có là số hoàn hảo.  
5. Hiển thị số n thành tꢋch các thừa số nguyên tố.  
6. Thoát  
12  
(Hiển thị 1 số nguyên dương thành tꢋch các thừa số nguyên tố: n = 24 in ra: n = 23 x3  
Hướng dẫn:  
)
Phương thức nhꢌp: Dùng Scanner  
Phương thức kiꢏm tra hoꢋn hảo  
boolean sohh(int a){  
int tong=0;  
for (int i = 1; i < a; i++) {  
if(a%i==0)  
tong+=i;  
}
if(tong==a)  
return true;  
else  
return false;  
}
Phương thức hiꢏn thꢐ sꢑ hoꢋn hảo  
public void hienThisHH(int a){  
for (int i = 0; i < a; i++) {  
if(sohh(i)==true)  
System.out.print(i+" ");  
}
}
Phương thức kiꢏm tra nguyên tꢑ  
boolean songt(int a){  
if (a < 2)  
return false;  
for (int i = 2; i <= Math.sqrt(a); i ++)  
{
if (a%i==0)  
{
return false;  
}
}
13  
return true;  
}
Phương thức hiꢏn thꢐ sꢑ nguyên tꢑ  
public void hienThisNT(int a){  
for (int i = 1; i < a; i++) {  
if(songt(i)==true){  
System.out.print(i +" ");  
}
}
}
Phương thức phân tꢒch thꢋnh thừa sꢑ  
void tichthuaso(int a){  
int i=2;  
int dem=0;  
System.out.println("Tich thua so");  
while(a!=1){  
if(a%i==0){  
a/=i;  
dem++;  
}
else {  
if(dem==0||dem==1)  
System.out.print(i+"*");  
else  
System.out.print(i+"*"+dem+"*");  
i++;  
dem=0;  
}
}
}
Viết phương thức main dùng switch case để tạo menu. Tổ chức chương trꢊnh theo sơ đồ  
sau:  
14  
main()  
nhap()  
hienthisohh()  
tichts()  
hienthisont()  
3. Vꢓng lꢔp while, do…while, for  
Dạng 1  
while(boolean_expr){  
//do something  
}
Dạng 2  
do {  
//do something  
} while(boolean_expr);  
Bài 4. Tìm UCLN, BCNN của 2 số được nhập vào từ bàn phꢋm.  
Hướng dẫn:  
public class Bai4{  
int a;  
int b;  
public int getA() {  
return a;  
}
public int getB() {  
return b;  
}
void nhap() {  
Nội dung phương thức nhập.  
}
int USCLN(int a, int b) {  
while (a != b) {  
if (a > b) {  
a = a - b;  
15  
} else {  
b = b - a;  
}
}
return a;  
}
int BSCNN(int a,int b){  
return a*b/USCLN(a, b);  
}
public static void main(String[] args) {  
Bai4 bai=new Bai4();  
bai.nhap();  
System.out.println("UCLN:" + bai.USCLN(bai.getA(), bai.getB()));  
System.out.println("BCNN :" + bai.BSCNN(bai.getA(), bai.getB()));  
}
}
4. Mảng  
Khai báo: DataType[ ] array = new DataType[size];  
DataType[ ] array = {value1, value2,..., valueN};  
Bài 5. Nhập dãy n phần tử. Xóa các phần tử có giá trị bằng x nhập từ bàn phím.  
Hướng dẫn:  
import java.util.Scanner;  
public class Delete{  
public static void main(String[] args){  
int n, x, flag = 1, loc = 0;  
Scanner s = new Scanner(System.in);  
System.out.print("Enter no. of elements you want in array:");  
n = s.nextInt();  
int a[] = new int[n];  
System.out.println("Enter all the elements:");  
for (int i = 0; i < n; i++){  
a[i] = s.nextInt();  
}
System.out.print("Enter the element you want to delete:");  
16  
x = s.nextInt();  
for (int i = 0; i < n; i++){  
if(a[i] == x){  
flag =1;  
loc = i;  
break;  
}
else{  
flag = 0;  
}
}
if(flag == 1){  
for(int i = loc+1; i < n; i++) {  
a[i-1] = a[i];  
}
System.out.print("After Deleting:");  
for (int i = 0; i < n-2; i++){  
System.out.print(a[i]+",");  
}
System.out.print(a[n-2]);  
}
else{  
System.out.println("Element not found");  
}
}
}
Bꢋi 6. Nhập một mảng nguyên từ bàn phꢋm  
a) Sắp xếp và in lại dãy đã sắp ra màn hꢊnh.  
b) In ra màn hꢊnh phần tử có giá trị nhỏ nhất  
c) Tꢋnh trung bꢊnh cộng các phần tử chia hết cho 3.  
Hướng dẫn:  
▪ Sử dụng Array.sort (mang) để sắp xếp, sau đó dùng vòng lặp for duyệt từng phần  
tử in ra màn hꢊnh.  
▪ Cho số nhỏ nhất là số đầu tiên, sau đó so sánh số nhỏ nhất đó với các số còn lại nếu  
số đó được so sánh nhỏ hơn thꢊ lấy số đó làm số nhỏ nhất.  
17  
Min=Math.min(Min,a[i])  
▪ Duyệt mảng kiểm tra từng phần tử, nếu phần tử thứ i chia hết cho 3:  
if(A[i] %3==0) thꢊ thực hiện cộng vào tổng, tăng số đếm các số chia hết cho 3.  
▪ Lấy tổng chia cho số đếm được kết quả  
Bài 7. Nhập mảng có n phần tử các số nguyên.  
a. In ra các phần tử là số nguyên tố của mảng.  
b. In ra các phần tử là số hoản hảo của mảng.  
c. In ra các phần tử là số chẵn.  
Hướng dẫn:  
Khai báo mảng n phần tử nguyên. Sau đó sử dụng các phương thức sau:  
Phương thức kiꢏm tra hoꢋn hảo: tương tự các bài trước.  
Phương thức kiꢏm tra chẵn/lẻ  
public static boolean kiemTraChan(int n){  
if(n % 2 == 0){  
return true;  
}
else{  
return false;  
}
}
Bài 8. Nhập mảng có n phần tử các số nguyên, sắp xếp mảng tăng dần bằng thuật toán  
chèn và hiển thị mảng đã sắp xếp ra màn hꢊnh.  
Hướng dẫn:  
import java.util.Arrays;  
public class InsertionSort {  
void InsertionSort(int[] nums){  
for(int i = 1; i < nums.length; i++){  
int value = nums[i];  
int j = i - 1;  
while(j >= 0 && nums[j] > value){  
nums[j + 1] = nums[j];  
j = j - 1;  
}
nums[j + 1] = value;  
}
18  
}
public static void main(String args[]){  
InsertionSort ob = new InsertionSort();  
int nums[] = {7, -5, 3, 2, 1, 0, 45};  
System.out.println("Original Array:");  
System.out.println(Arrays.toString(nums));  
ob.InsertionSort(nums);  
System.out.println("Sorted Array");  
System.out.println(Arrays.toString(nums));  
}
}
Bài 9.  
Dãy số Fibonacci được định nghĩa như sau: F0 =1, F1 = 1; Fn = Fn-1 + Fn-2 với n>=2. Nhập  
một số tự nhiên n.  
a) Hãy viết chương trꢊnh tꢊm số Fibonacci thứ n.  
b) Hãy liệt kê các số Fibonaci nhỏ hơn n là số nguyên tố.  
Hướng dẫn:  
Viết phương thức ktnt (int n): tương tự các bài trên  
Viết phương thức trả về số fibonacci thứ n  
int fibonacci(int n) {  
if (n < 2) {  
return n;  
}
return fibonacci(n - 1) + fibonacci(n - 2);  
}
Trong phương thức main(), nhập số nguyên n, gọi phương thức fibonacci(int n) để tꢊm số  
Fibonacci thứ n.  
Sử dụng vòng lặp để in ra các số Fibonacci nhỏ hơn n và là số nguyên tố  
for (int i = 0; i < n; i++){  
if (ktnt(i) == true) {  
for (int j = 0; j < n; j++) {  
if (i == fibonacci(j)) {  
System.out.print(i + " ");  
}
19  
}
}
}
Bꢋi 10. Viết chương trꢊnh tꢊm điểm trung bꢊnh của hai học sinh trong ba môn học.  
Cho điểm của học sinh thứ nhất là 60, 55 và 70, điểm của học sinh thứ hai là 80, 60 và 41  
Hướng dẫn: Lưu trꢈ điểm của hai học sinh trong một mảng 2 chiều có 2 hàng và 3 cột.  
Các hàng sẽ đại diện cho học sinh và các cột sẽ giꢈ điểm của học sinh.  
class Array2DExample {  
public static void main(String args[]) {  
int[][] score = {  
{60, 55, 70},  
{80, 60, 41}  
};  
int[] sum = new int[2];  
// tꢀng mꢁng  
sum[0] = 0; // tꢀng cꢂa sinh viên 1  
sum[1] = 0; // tꢀng cꢂa sinh viên 2  
float[] avg = new float[2]; // trung bꢃnh mꢁng  
for (int r = 0; r < 2; r++) {  
for (int c = 0; c < 3; c++) {  
sum[r] += score[r][c];  
}
}
avg[0] = (float)sum[0] / 3; // trung bꢃnh cꢂa sinh viên 1  
avg[1] = (float)sum[1] / 3; // trung bꢃnh cꢂa sinh viên 2  
System.out.println("Average score of 1st student = " + avg[0]);  
System.out.println("Average score of 2nd student = " + avg[1]);  
}
}
20  
Tải về để xem bản đầy đủ
pdf 254 trang yennguyen 21160 Free
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu Bài tập lập trình mạng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdftai_lieu_bai_tap_lap_trinh_mang.pdf