Top 12 # Bài Tập Xml Schema Có Lời Giải / 2023 Xem Nhiều Nhất, Mới Nhất 12/2022 # Top Trend | Caffebenevietnam.com

Xml: Bài 4.1. Lược Đồ Xml / 2023

Đăng ký nhận thông báo về những video mới nhất

Tổng quan về mô-đun

Trong mô-đun này, bạn sẽ tìm hiểu về:

Lược đồ XML

Khám phá các lược đồ XML

Làm việc với các loại phức tạp

Làm việc với các loại đơn giản

4.1. Lược đồ XML

Trong bài học đầu tiên này, Lược đồ XML, bạn sẽ học cách:

Xác định và mô tả ý nghĩa của lược đồ.

Xác định sự cần thiết của lược đồ.

So sánh và phân biệt các đặc điểm của ĐDDH và lược đồ.

4.1.1. Lược đồ

DTD xác định cấu trúc tài liệu và xác thực tài liệu XML, nhưng có một số hạn chế. Do đó, một giải pháp thay thế dựa trên XML cho DTD, được gọi là lược đồ XML đã được giới thiệu, với mục tiêu khắc phục những hạn chế của DTD.

Từ lược đồ (schema) có nguồn gốc từ một từ Hy Lạp tượng trưng cho hình thức hoặc hình dạng. Nghĩa từ điển của lược đồ là: “Biểu diễn theo sơ đồ; phác thảo hoặc mô hình”. Ban đầu, từ lược đồ được sử dụng bởi các triết gia cho đến khi nó đi vào lĩnh vực khoa học máy tính. Trong ngữ cảnh của phần mềm, lược đồ thường được hiểu là một mô hình được sử dụng để mô tả cấu trúc của cơ sở dữ liệu. Nó xác định các cấu trúc bên trong như bảng, trường và mối quan hệ giữa chúng.

Tuy nhiên, trong ngữ cảnh của XML, như được định nghĩa bởi W3C, một lược đồ là “một tập hợp các quy tắc để ràng buộc cấu trúc và trình bày rõ ràng tập thông tin của các tài liệu XML”. Một lược đồ mô tả một mô hình cho toàn bộ lớp tài liệu. Mô hình mô tả cách dữ liệu được đánh dấu và cũng chỉ định cách sắp xếp các thẻ và văn bản có thể có trong một tài liệu hợp lệ. Một lược đồ có thể được coi là một từ vựng phổ biến cần thiết để trao đổi tài liệu giữa các tổ chức khác nhau.

Lược đồ XML xác định các khối xây dựng hợp lệ của một tài liệu XML. Có thể coi đây là vốn từ vựng chung mà các tổ chức khác nhau có thể dùng chung để trao đổi tài liệu. Ngôn ngữ lược đồ XML được gọi là Định nghĩa lược đồ XML (XML Schema Definition-XSD).

Hình 4.1 mô tả xác thực dữ liệu XML.

Hình 4.1: Xác thực dữ liệu XML

Đoạn mã XML sau thể hiện một thực thể ‘BOOK’. Khi tài liệu này được truy cập thông qua trình duyệt, nó sẽ đại diện cho các chi tiết của một cuốn sách.

Đoạn mã:

Suy luận logic sẽ so sánh các thuộc tính của ‘SÁCH’ này với các thuộc tính của một cuốn sách nói chung. Nói cách khác, kiến ​​thức trước đây của một người về cuốn sách là gì và các thuộc tính của nó có thể là một loại lược đồ, dùng để so sánh với ‘SÁCH’ này. Điều này sẽ giúp xác thực các thuộc tính của cuốn sách.

4.1.2. Định nghĩa Lược đồ XML

Mục tiêu của một Lược đồ XML là xác định cấu trúc hợp lệ của một tài liệu XML, tương tự như một DTD. Lược đồ XML định nghĩa:

các phần tử và thuộc tính có thể xuất hiện trong tài liệu

phần tử nào là phần tử con

thứ tự và số lượng phần tử con

liệu một phần tử trống hay có thể bao gồm văn bản

kiểu dữ liệu cho các phần tử và thuộc tính

giá trị mặc định và cố định cho các phần tử và thuộc tính

Các lược đồ khắc phục những hạn chế của DTD và cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn mà không cần dựa vào các công cụ xác thực đặc biệt.

Một số tính năng cơ bản mà lược đồ XML cung cấp là:

Cú pháp XML được sử dụng làm cơ sở để tạo các tài liệu lược đồ XML. Nó không yêu cầu học một ngôn ngữ khó hiểu mới như trường hợp của các DTD.

Các lược đồ XML có thể được thao tác giống như bất kỳ tài liệu XML nào khác.

Hình 4.2 mô tả lược đồ XML.

Hình 4.2: Lược đồ XML

4.1.3. Viết một lược đồ XML

Để bắt đầu khám phá các lược đồ với ví dụ Hello World, ta cần hai tệp sau:

Ø Tệp XML

Ø Tệp XSD

Để lưu trữ tài liệu lược đồ, tệp được lưu với ”.xsd” làm phần mở rộng. Tài liệu lược đồ là tài liệu XML và có thể có các khai báo DTD, DOCTYPE.

Hình 4.3 mô tả tệp XSD.

Hình 4.3: Tệp XSD

Đoạn mã sau thể hiện các thuộc tính của lược đồ XML.

Đoạn mã :

Tệp message.xml

Chào thế giới! Tệp: message.xsd 4.1.4. Các đặc điểm của lược đồ

4.1.4. Các đặc điểm của lược đồ

Lược đồ XML cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn bằng cách sử dụng một loạt các tính năng mới như sau:

Ø Hỗ trợ các kiểu dữ liệu

Sự hỗ trợ của lược đồ XML đối với các kiểu dữ liệu và khả năng tạo các kiểu dữ liệu cần thiết đã khắc phục được những hạn chế của DTD. Nó có nghĩa là dễ dàng xác định và xác nhận nội dung tài liệu hợp lệ và các định dạng dữ liệu. Một nhà phát triển có thể thấy đơn giản khi làm việc với dữ liệu từ cơ sở dữ liệu. Nó cũng có thể dễ dàng thực hiện các hạn chế về dữ liệu.

Ø Linh hoạt và hiệu quả

Các lược đồ có tính linh hoạt và hiệu quả vì chúng sử dụng cùng một cú pháp XML. Do đó, không cần phải học bất kỳ ngôn ngữ mới hoặc bất kỳ trình soạn thảo nào để chỉnh sửa tệp lược đồ. Một trình phân tích cú pháp XML tương tự có thể được sử dụng để phân tích cú pháp các tệp Lược đồ.

Ø Truyền dữ liệu an toàn

Trong quá trình truyền dữ liệu, điều cần thiết là cả người gửi và người nhận phải có cùng “từ vựng”. Với Lược đồ XML, người gửi có thể chỉ định dữ liệu theo cách mà người nhận sẽ hiểu.

Ø Lược đồ có thể mở rộng

Một định nghĩa lược đồ có thể được mở rộng; do đó, có thể sử dụng lại một lược đồ hiện có để tạo một lược đồ khác. Nhà phát triển có thể tạo các kiểu dữ liệu của riêng mình bắt nguồn từ các kiểu tiêu chuẩn. Các lược đồ cũng hỗ trợ tham chiếu nhiều lược đồ trong cùng một tài liệu.

Ø Bắt lỗi cấp cao hơn

XML kiểm tra tính ổn định của một tài liệu XML để xác thực cú pháp cơ bản. Một tài liệu được cho là có cấu trúc tốt nếu nó có khai báo XML, phần tử gốc duy nhất, thẻ bắt đầu và thẻ kết thúc phù hợp, các phần tử lồng nhau đúng cách, v.v. Một tài liệu được định dạng tốt vẫn có thể có lỗi. Lược đồ XML có thể mắc các lỗi cấp cao hơn phát sinh, chẳng hạn như trường thông tin bắt buộc bị thiếu hoặc ở định dạng sai hoặc tên phần tử bị viết sai chính tả.

Ø Hỗ trợ Namespace

Sự hỗ trợ cho Không gian tên XML cho phép lập trình viên xác thực các tài liệu sử dụng đánh dấu từ nhiều không gian tên. Nó có nghĩa là các cấu trúc có thể được sử dụng lại từ các lược đồ đã được xác định trong một không gian tên khác.

Ø Kiểu dữ liệu phong phú hơn

Bản thảo lược đồ xác định boolean, ngày tháng và thời gian, URI, khoảng thời gian và cả các kiểu số như số thập phân, số nguyên, byte, long, v.v.

Ø Kiểu mẫu

Một kiểu mẫu được sử dụng để xác định kiểu dữ liệu có tên tùy chỉnh từ các kiểu dữ liệu đã có từ trước. Ví dụ: kiểu dữ liệu ‘Danh sách liên hệ’ được xác định và sau đó là hai phần tử, ‘Danh sách bạn bè’ và ‘Danh sách chính thức’ được xác định theo kiểu đó.

Ø Nhóm thuộc tính

Có thể có các thuộc tính chung áp dụng cho tất cả các phần tử hoặc một số thuộc tính bao gồm các phần tử đồ họa hoặc bảng. Nhóm thuộc tính cho phép tác giả lược đồ làm cho mối quan hệ này giữa các phần tử được rõ ràng. Thực thể tham số hỗ trợ nhóm trong DTD, điều này giúp đơn giản hóa quá trình tạo DTD, nhưng thông tin không được chuyển cho bộ xử lý.

Ø Kiểu mẫu có thể tinh chỉnh

Một DTD tuân theo kiểu mô hình nội dung ‘đóng’. Mô hình nội dung được định nghĩa là ràng buộc về nội dung của các phần tử trong một tài liệu XML thể hiện. Mô hình nội dung ‘đóng’ mô tả tất cả và chỉ những phần tử và thuộc tính có thể xuất hiện trong nội dung của phần tử. Lược đồ XML cho phép thêm hai khả năng:

Mô hình nội dung loại mở

Mô hình nội dung có thể tinh chỉnh

Trong mô hình nội dung ‘mở’, các phần tử khác với các phần tử bắt buộc cũng có thể có mặt. Mô hình nội dung mở cho phép bao gồm các phần tử con và các thuộc tính bên trong một phần tử không được khai báo trong lược đồ của tài liệu. DTD chỉ hỗ trợ các mô hình nội dung đóng, yêu cầu khai báo tất cả các phần tử và thuộc tính để sử dụng chúng trong một tài liệu. Các phần tử bổ sung có thể có trong mô hình nội dung ‘có thể tái tạo lại’, nhưng lược đồ phải xác định các phần tử bổ sung đó.

4.1.5. So sánh DTD và Lược đồ

XML kế thừa khái niệm DTD từ Ngôn ngữ Đánh dấu Tổng quát Chuẩn (SGML), là một tiêu chuẩn quốc tế cho các ngôn ngữ đánh dấu. DTD được sử dụng để xác định mô hình nội dung, lồng các phần tử theo thứ tự hợp lệ và cung cấp hỗ trợ hạn chế cho các kiểu dữ liệu và thuộc tính. Hạn chế của việc sử dụng DTD là:

Ø DTD được viết bằng cú pháp không phải XML

Các DTD không sử dụng ký hiệu XML và do đó chúng rất khó viết và sử dụng.

Ø DTD không thể mở rộng

Ø DTD không hỗ trợ không gian tên

Không gian tên có thể được sử dụng để giới thiệu một loại phần tử vào tài liệu XML. Tuy nhiên, không gian tên không thể được sử dụng để tham chiếu đến một phần tử hoặc một khai báo thực thể trong DTD. Nếu không gian tên được sử dụng, thì DTD phải được sửa đổi để bao gồm bất kỳ phần tử nào được lấy từ Không gian tên.

Ø DTD cung hạn chế trong việc nhập dữ liệu

Hình 4.4 cho thấy một DTD mẫu.

Hình 4.4: Một DTD mẫu

Đoạn mã sau minh họa một tệp DTD bên ngoài mẫu: program.dtd

Đoạn mã:

Đoạn mã sau minh họa Tệp XML mẫu có tham chiếu đến dtd: program.xml

Đoạn mã:

This is a simple Java Program. It will display the message “Hello world!” on execution. public static void main(String[] args) System.out.println(“Hello World!”);

Ngoài ra, các ví dụ được hiển thị ở đây để chứng minh cách DTD và lược đồ được tham chiếu.

Tài liệu XML đơn giản: Book.xml

Đoạn mã sau minh họa một tài liệu XML đơn giản có tên ” chúng tôi “:

Đoạn mã:

Tệp DTD cho Book.xml

Đoạn mã sau minh họa một tệp DTD có tên “Book.dtd” xác định các phần tử của Tài liệu chúng tôi .

Đoạn mã:

Dòng đầu tiên của đoạn mã xác định phần tử Book là phần tử gốc, lần lượt bao gồm ba phần tử con: ‘Title’, ‘Author’ và ‘Chapter’. Phần còn lại của đoạn mã xác định các phần tử ‘Title’, ‘Author’ và ‘Chapter’ thuộc loại “#PCDATA”.

Lược đồ XML cho Book.xml

Đoạn mã sau thể hiện tệp Lược đồ XML tương ứng được gọi là “Book.xsd” xác định các phần tử của tài liệu XML chúng tôi .

Đoạn mã:

<

xs

:schema

xmlns:

xs

=”http://www.w3.org/2001/XMLSchema”

targetNamespace

=”http://www.booksworld.com”

xmlns

=”http://www.booksworld.com”

Phần tử Book phức tạp vì nó bao quanh các phần tử khác. Các phần tử con Title, Author, Chapter đơn giản hơn vì chúng không chứa các phần tử khác.

Tham chiếu đến chúng tôi trong tài liệu cá thể có tên Book.xml

Đoạn mã sau thể hiện tham chiếu đến tài liệu “Book.dtd” được đặt bên trong tài liệu XML có tên Book.xml.

Đoạn mã:

Tham chiếu đến XML Schema chúng tôi trong tài liệu cá thể có tên Book.xml

Tài liệu XML này có tham chiếu đến một Lược đồ XML.

Đoạn mã sau cùng với đoạn mã trước chứng minh cách lược đồ và DTD được khai báo và tham chiếu trong các tài liệu XML thể hiện.

Đoạn mã:

<

Book

xmlns

=”http://www.booksworld.com”

xmlns:

xsi

=”http://www.w3.org/2001/XMLSchema-instance”

Các lược đồ khắc phục những hạn chế của DTD và cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn mà không cần dựa vào các công cụ xác thực đặc biệt.

4.1.6. Ưu điểm của lược đồ XML so với DTD

Lược đồ XML cung cấp một loạt các tính năng mới:

Ø Kiểu dữ liệu Richer

Bản thảo lược đồ xác định các kiểu boolean, số, ngày và giờ, URI, số nguyên, số thập phân, số thực và cả khoảng thời gian.

Ø Kiểu mẫu

Một kiểu mẫu cho phép xác định kiểu dữ liệu được đặt tên riêng từ các kiểu dữ liệu đã có từ trước. Ví dụ: người ta có thể xác định kiểu dữ liệu ‘Danh sách liên hệ’, sau đó xác định hai phần tử, “Danh sách bạn bè” và ‘Danh sách chính thức’ theo kiểu đó.

Ø Nhóm thuộc tính

Có thể có các thuộc tính chung áp dụng cho tất cả các phần tử hoặc một số thuộc tính bao gồm các phần tử đồ họa hoặc bảng. Nhóm thuộc tính cho phép tác giả lược đồ làm cho mối quan hệ này rõ ràng.

Ø Các kiểu mẫu có thể xác định lại

Một DTD tuân theo kiểu mô hình ‘đóng’. Nó mô tả tất cả, và chỉ những phần tử và thuộc tính có thể xuất hiện trong nội dung của phần tử. Lược đồ XML cho phép thêm hai khả năng: ‘mở’ và ‘có thể nạp lại’. Trong mô hình nội dung ‘mở’, các phần tử khác với các phần tử bắt buộc cũng có thể có mặt. Các phần tử bổ sung có thể có trong mô hình nội dung có thể tái tạo lại, nhưng lược đồ phải xác định các phần tử bổ sung đó.

Đoạn mã:

Đoạn mã sau minh họa một tệp lược đồ mẫu: mail.xsd

<

xs

:schema

xmlns:

xs

=”http://www.w3.org/2001/XMLSchema”

targetNamespace

=”http://www.abc.com”

xmlns

=”http://www.abc.com”

Đoạn mã sau minh họa Tệp XML mẫu có tham chiếu đến giản đồ: mail.xml

<

mail

xmlns

=”http://www.abc.com”

xmlns:

xsi

=”http://www.w3.org/2001/XMLSchema-instance”

Kiểm tra kiến thức bài 4.1

1. Câu nào trong số các câu sau về lược đồ là đúng và câu nào là sai?

(A)

Lược đồ XML xác định cấu trúc của một tài liệu XML.

(B)

Lược đồ XML là một tiện ích bổ sung dựa trên XML cho các DTD.

(C)

Cú pháp XML được sử dụng làm cơ sở để tạo một lược đồ, vì vậy nó có thể được lưu trữ với cùng một phần mở rộng .xml (dot XML).

(D)

Lược đồ XML xác định số lượng phần tử con có thể xuất hiện trong một tài liệu XML.

(LÀ)

Một Lược đồ XML xác định xem một phần tử trống hay có thể bao gồm văn bản.

2. Bạn có thể kết hợp các tính năng khác nhau cho DTD và lược đồ với mô tả tương ứng của chúng không?

Sự miêu tả

Đặc tính

(A)

Cho phép xác định kiểu dữ liệu được đặt tên riêng từ các kiểu dữ liệu đã có từ trước.

(1)

Nhóm thuộc tính

(B)

Cho phép tác giả giản đồ làm cho các thuộc tính chung áp dụng cho tất cả các phần tử hoặc một số thuộc tính bao gồm các phần tử đồ họa hoặc bảng.

(2)

Hỗ trợ không gian tên

(C)

Mô tả các phần tử không bắt buộc phải có trong tài liệu XML.

(3)

Mô hình đóng

(D)

Chỉ mô tả những phần tử và thuộc tính có thể xuất hiện trong nội dung của phần tử.

(4)

Cổ mẫu

(LÀ)

Cho phép xác thực các tài liệu sử dụng đánh dấu từ nhiều không gian tên.

(5)

Mở mô hình

Bài Tập Java Có Lời Giải / 2023

Bài tập Java có lời giải

Bài này cung cấp cho bạn danh sách các dạng bài tập khác nhau để bạn thực hành khi học java.

1. Bài tập java cơ bản

Trong phần này, bạn phải nắm được các kiến thức về:

Các mệnh đề if-else, switch-case.

Các vòng lặp for, while, do-while.

Các từ khóa break và continue trong java.

Các toán tử trong java.

Mảng (array) trong java.

File I/O trong java.

Xử lý ngoại lệ trong java.

Bài 01:

Viết chương trình tìm tất cả các số chia hết cho 7 nhưng không phải bội số của 5, nằm trong đoạn 10 và 200 (tính cả 10 và 200). Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu phẩy.

package vn.viettuts.baitap; import java.util.ArrayList; import java.util.List; public class Bai01 { public static void main(String[] args) { for (int i = 10; i < 201; i++) { if ((i % 7 == 0) && (i % 5 != 0)) { list.add(i); } } showList(list); } if (list != null && !list.isEmpty()) { int size = list.size(); for (int i = 0; i < size - 1; i++) { System.out.print(list.get(i) + ", "); } System.out.println(list.get(size - 1)); } } }

Kết quả:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196

Bài 02:

Viết một chương trình tính giai thừa của một số nguyên dương n. Với n được nhập từ bàn phím. Ví dụ, n = 8 thì kết quả đầu ra phải là 1*2*3*4*5*6*7*8 = 40320.

Sử dụng đệ quy hoặc vòng lặp để tính giai thừa.

Code mẫu: sử dụng đệ quy

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 { private static Scanner scanner = new Scanner(System.in); /** * main * * @author viettuts.vn * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.println("Giai thừa của " + n + " là: " + tinhGiaithua(n)); } /** * tinh giai thua * * @author viettuts.vn * @param n: so nguyen duong * @return giai thua cua so n */ public static long tinhGiaithua(int n) { return n * tinhGiaithua(n - 1); } else { return 1; } } }

Kết quả:

Nhập số nguyên dương n = 8 Giai thừa của 8 là: 40320

Bài 03:

Hãy viết chương trình để tạo ra một map chứa (i, i*i), trong đó i là số nguyên từ 1 đến n (bao gồm cả 1 và n), n được nhập từ bàn phím. Sau đó in map này ra màn hình. Ví dụ: Giả sử số n là 8 thì đầu ra sẽ là: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}.

Sử dụng vòng lặp for để lặp i từ 1 đến n.

package vn.viettuts.baitap; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Bai03 { private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); for (int i = 1; i < n + 1; i++) { map.put(i, i * i); } System.out.println(map); } }

Kết quả:

Nhập số nguyên dương n = 10 {1=1, 2=4, 3=9, 4=16, 5=25, 6=36, 7=49, 8=64, 9=81, 10=100}

Bài 04:

Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0.

package vn.viettuts.baitap; import java.util.Scanner; /** * Giải phương trình bậc 2 * * @author viettuts.vn */ public class PhuongTrinhBac2 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập hệ số bậc 2, a = "); float a = scanner.nextFloat(); System.out.print("Nhập hệ số bậc 1, b = "); float b = scanner.nextFloat(); System.out.print("Nhập hằng số tự do, c = "); float c = scanner.nextFloat(); giaiPTBac2(a, b, c); } /** * Giải phương trình bậc 2: ax2 + bx + c = 0 * * @param a: hệ số bậc 2 * @param b: hệ số bậc 1 * @param c: số hạng tự do */ public static void giaiPTBac2(float a, float b, float c) { if (a == 0) { if (b == 0) { System.out.println("Phương trình vô nghiệm!"); } else { System.out.println("Phương trình có một nghiệm: " + "x = " + (-c / b)); } return; } float delta = b*b - 4*a*c; float x1; float x2; x1 = (float) ((-b + Math.sqrt(delta)) / (2*a)); x2 = (float) ((-b - Math.sqrt(delta)) / (2*a)); System.out.println("Phương trình có 2 nghiệm là: " + "x1 = " + x1 + " và x2 = " + x2); } else if (delta == 0) { x1 = (-b / (2 * a)); System.out.println("Phương trình có nghiệm kép: " + "x1 = x2 = " + x1); } else { System.out.println("Phương trình vô nghiệm!"); } } }

Kết quả:

Nhập hệ số bậc 2, a = 2 Nhập hệ số bậc 1, b = 1 Nhập hằng số tự do, c = -1 Phương trình có 2 nghiệm là: x1 = 0.5 và x2 = -1.0

Bài 05:

Tham khảo bảng ASCII để chuyển đổi kiểu char thành String. Hàm chr(55 + m) trong ví dụ sau:

Nếu m = 10 trả về chuỗi “A”.

Nếu m = 11 trả về chuỗi “B”.

Nếu m = 12 trả về chuỗi “C”.

Nếu m = 13 trả về chuỗi “D”.

Nếu m = 14 trả về chuỗi “E”.

Nếu m = 15 trả về chuỗi “F”.

package vn.viettuts.baitap; import java.util.Scanner; public class ConvertNumber { public static final char CHAR_55 = 55; private static Scanner scanner = new Scanner(System.in); /** * main * * @author viettuts.vn * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.println("So " + n + " trong he co so 2 = " + ConvertNumber.convertNumber(n, 2)); System.out.println("So " + n + " trong he co so 16 = " + ConvertNumber.convertNumber(n, 16)); } /** * chuyen doi so nguyen n sang he co so b * * @author viettuts.vn * @param n: so nguyen * @param b: he co so * @return he co so b */ public static String convertNumber(int n, int b) { return ""; } StringBuilder sb = new StringBuilder(); int m; int remainder = n; m = remainder % b; sb.append((char) (CHAR_55 + m)); } else { sb.append(m); } } else { sb.append(remainder % b); } remainder = remainder / b; } return sb.reverse().toString(); } }

Kết quả:

Nhập số nguyên dương n = 15 So 15 trong he co so 2 = 1111 So 15 trong he co so 16 = F

Bài 06:

package vn.viettuts.baitap; import java.util.Scanner; /** * Tính dãy số Fibonacci bằng phương pháp đệ quy * * @author viettuts.vn */ public class FibonacciExample2 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.println(n + " số đầu tiên của dãy số fibonacci: "); for (int i = 0; i < n; i++) { System.out.print(fibonacci(i) + " "); } } /** * Tính số fibonacci thứ n * * @param n: chỉ số của số fibonacci tính từ 0 * vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2 * @return số fibonacci thứ n */ public static int fibonacci(int n) { if (n < 0) { return -1; return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } }

Kết quả:

Nhập số nguyên dương n = 12 12 số đầu tiên của dãy số fibonacci: 0 1 1 2 3 5 8 13 21 34 55 89

Bài 07:

Viết chương trình tìm ước số chung lớn nhất (USCLN) và bội số chung nhỏ nhất (BSCNN) của hai số nguyên dương a và b nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; public class USCLL_BSCNN_1 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương a = "); int a = scanner.nextInt(); System.out.print("Nhập số nguyên dương b = "); int b = scanner.nextInt(); System.out.println("USCLN của " + a + " và " + b + " là: " + USCLN(a, b)); System.out.println("BSCNN của " + a + " và " + b + " là: " + BSCNN(a, b)); } /** * Tìm ước số chung lớn nhất (USCLN) * * @param a: số nguyên dương * @param b: số nguyên dương * @return USCLN của a và b */ public static int USCLN(int a, int b) { if (b == 0) return a; return USCLN(b, a % b); } /** * Tìm bội số chung nhỏ nhất (BSCNN) * * @param a: số nguyên dương * @param b: số nguyên dương * @return BSCNN của a và b */ public static int BSCNN(int a, int b) { return (a * b) / USCLN(a, b); } }

Kết quả:

Nhập số nguyên dương a = 10 Nhập số nguyên dương b = 24 USCLN của 10 và 24 là: 2 BSCNN của 10 và 24 là: 120

Bài 08:

Viết chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n. Số nguyên dương n được nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n. * * @author viettuts.vn */ public class BaiTap08 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập n = "); int n = scanner.nextInt(); System.out.printf("Tất cả các số nguyên tố nhỏ hơn %d là: n", n); System.out.print(2); } for (int i = 3; i < n; i+=2) { if (isPrimeNumber(i)) { System.out.print(" " + i); } } } /** * check so nguyen to * * @author viettuts.vn * @param n: so nguyen duong * @return true la so nguyen so, * false khong la so nguyen to */ public static boolean isPrimeNumber(int n) { if (n < 2) { return false; } int squareRoot = (int) Math.sqrt(n); for (int i = 2; i <= squareRoot; i++) { if (n % i == 0) { return false; } } return true; } }

Kết quả:

Nhập n = 100 Tất cả các số nguyên tố nhỏ hơn 100 là: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Bài 09:

Viết chương trình liệt kê n số nguyên tố đầu tiên trong java. Số nguyên dương n được nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình liệt kê n số nguyên tố đầu tiên. * * @author viettuts.vn */ public class BaiTap09 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập n = "); int n = scanner.nextInt(); System.out.printf("%d số nguyên tố đầu tiên là: n", n); int dem = 0; int i = 2; while (dem < n) { if (isPrimeNumber(i)) { System.out.print(i + " "); dem++; } i++; } } /** * check so nguyen to * * @author viettuts.vn * @param n: so nguyen duong * @return true la so nguyen so, * false khong la so nguyen to */ public static boolean isPrimeNumber(int n) { if (n < 2) { return false; } int squareRoot = (int) Math.sqrt(n); for (int i = 2; i <= squareRoot; i++) { if (n % i == 0) { return false; } } return true; } }

Kết quả:

Nhập n = 10 10 số nguyên tố đầu tiên là: 2 3 5 7 11 13 17 19 23 29

Bài 10:

Viết chương trình liệt kê tất cả số nguyên tố có 5 chữ số trong java.

package vn.viettuts.baitap; /** * Chương trình liệt kê tất cả số nguyên tố có 5 chữ số. * * @author viettuts.vn */ public class BaiTap10 { /** * main * * @param args */ public static void main(String[] args) { int count = 0; System.out.println("Liệt kê tất cả số nguyên tố có 5 chữ số:"); for (int i = 10001; i < 99999; i+=2) { if (isPrimeNumber(i)) { System.out.println(i); count++; } } System.out.println("Tổng các số nguyên tố có 5 chữ số là: " + count); } /** * check so nguyen to * * @author viettuts.vn * @param n: so nguyen duong * @return true la so nguyen so, * false khong la so nguyen to */ public static boolean isPrimeNumber(int n) { if (n < 2) { return false; } int squareRoot = (int) Math.sqrt(n); for (int i = 2; i <= squareRoot; i++) { if (n % i == 0) { return false; } } return true; } }

Kết quả:

Liệt kê tất cả số nguyên tố có 5 chữ số: 10007 10009 10037 ... 99971 99989 99991 Tổng các số nguyên tố có 5 chữ số là: 8363

Bài 11:

Viết chương trình phân tích số nguyên n thành các thừa số nguyên tố trong java. Ví dụ: 100 = 2x2x5x5.

package vn.viettuts.baitap; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * Chương trình phân tích số nguyên n thành các thừa số nguyên tố. * Ví dụ: 12 = 2 x 2 x 3. * * @author viettuts.vn */ public class BaiTap11 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.printf("Kết quả: %d = ", n); int size = listNumbers.size(); for (int i = 0; i < size - 1; i++) { System.out.print(listNumbers.get(i) + " x "); } System.out.print(listNumbers.get(size - 1)); } /** * Phân tích số nguyên thành tích các thừa số nguyên tố * * @param positiveInt * @return */ int i = 2; if (n % i == 0) { n = n / i; listNumbers.add(i); } else { i++; } } if (listNumbers.isEmpty()) { listNumbers.add(n); } return listNumbers; } }

Kết quả:

Nhập số nguyên dương n = 100 Kết quả: 100 = 2 x 2 x 5 x 5

Bài 12:

Viết chương trình tính tổng của các chữ số của môt số nguyên n trong java. Số nguyên dương n được nhập từ bàn phím. Với n = 1234, tổng các chữ số: 1 + 2 + 3 + 4 = 10

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình tính tổng của các chữ số của môt số nguyên dương n. * Tổng của các chữ số của 6677 là 6 + 6 + 7 + 7 = 26. * * @author viettuts.vn */ public class BaiTap12 { private static Scanner scanner = new Scanner(System.in); public static int DEC_10 = 10; /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.printf("Tổng của các chữ số " + "của %d là: %d", n, totalDigitsOfNumber(n)); } /** * Tính tổng của các chữ số của một số nguyên dương * * @param n: số nguyên dương * @return */ public static int totalDigitsOfNumber(int n) { int total = 0; do { total = total + n % DEC_10; n = n / DEC_10; return total; } }

Kết quả:

Nhập số nguyên dương n = 6677 Tổng của các chữ số của 6677 là: 26

Bài 13:

Viết chương trình kiểm tra một số n là số thuận nghịch trong java. Số nguyên dương n được nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình liệt kê tất cả các số thuận nghịch có 6 chữa số. * * @author viettuts.vn */ public class BaiTap13 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.println(n + " là số thuận nghịch: " + isThuanNghich(n)); System.out.print("Nhập số nguyên dương m = "); int m = scanner.nextInt(); System.out.println(n + " là số thuận nghịch: " + isThuanNghich(m)); } /** * Kiểm tra số thuận nghịch * * @param n: số nguyên dương * @return true là số thuận nghịch * false không là số thuận nghịch */ public static boolean isThuanNghich(int n) { String numberStr = String.valueOf(n); int size = numberStr.length(); for (int i = 0; i < (size/2); i++) { if (numberStr.charAt(i) != numberStr.charAt(size - i - 1)) { return false; } } return true; } }

Kết quả:

Nhập số nguyên dương n = 123321 123321 là số thuận nghịch: true Nhập số nguyên dương m = 123451 123321 là số thuận nghịch: false

Bài 14:

Viết chương trình liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố trong java. N là số nguyên dương được nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố. * Với n được nhập từ bàn phím. * * @author viettuts.vn */ public class BaiTap14 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số tự nhiên n = "); int n = scanner.nextInt(); System.out.printf("Các số fibonacci nhỏ hơn %d và " + "là số nguyên tố: ", n); int i = 0; while (fibonacci(i) < 100) { int fi = fibonacci(i); if (isPrimeNumber(fi)) { System.out.print(fi + " "); } i++; } } /** * Tính số fibonacci thứ n * * @param n: chỉ số của số fibonacci tính từ 0 * vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2 * @return số fibonacci thứ n */ public static int fibonacci(int n) { if (n < 0) { return -1; return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } /** * check so nguyen to * * @author viettuts.vn * @param n: so nguyen duong * @return true la so nguyen so, * false khong la so nguyen to */ public static boolean isPrimeNumber(int n) { if (n < 2) { return false; } int squareRoot = (int) Math.sqrt(n); for (int i = 2; i <= squareRoot; i++) { if (n % i == 0) { return false; } } return true; } }

Kết quả:

Nhập số tự nhiên n = 100 Các số fibonacci nhỏ hơn 100 và là số nguyên tố: 2 3 5 13 89

Các bài tập khác:

Viết chương trình nhập số nguyên dương n và thực hiện các chức năng sau: a) Tính tổng các chữ số của n. b) Phân tích n thành tích các thừa số nguyên tố. c) Liệt kê các ước số của n. d) Liệt kê các ước số là nguyên tố của n.

Viết chương trình liệt kệ các số nguyên có từ 5 đến 7 chữ số thảo mãn: a) Là số nguyên tố. b) Là số thuận nghịch. c) Mỗi chữ số đều là số nguyên tố. d) Tổng các chữ số là số nguyên tố.

Viết chương trình liệt kệ các số nguyên có 7 chữ số thảo mãn: a) Là số nguyên tố. b) Là số thuận nghịch. c) Mỗi chữ số đều là số nguyên tố. d) Tổng các chữ số là số thuận nghịch.

2. Bài tập chuỗi trong Java

Danh sách bài tập:

Nhập một sâu ký tự. Đếm số từ của sâu đó (mỗi từ cách nhau bởi một khoảng trắng có thể là một hoặc nhiều dấu cách, tab, xuống dòng). Ví dụ ” hoc java co ban den nang cao ” có 7 từ. Lời giải: Đếm số từ trong một chuỗi.

Nhập một sâu ký tự. Liệt kê số lần xuất hiện của các từ của sâu đó. Lời giải: Liệt kê số lần xuất hiện của các từ trong một chuỗi.

Nhập 2 sâu ký tự s1 và s2. Kiểm tra xem sâu s1 có chứa s2 không? Lời giải: Chuỗi chứa chuỗi trong java.

3. Bài tập mảng trong Java

Các bài tập trong phần này thao tác với mảng một chiều và 2 chiều trong java, bạn có thể tham khảo bài học mảng (Array) trong java

Danh sách bài tập:

Nhập một mảng số thực a0, a1, a2, …, an-1. Không dùng thêm mảng số thực nào khác (có thể dùng thêm mảng số nguyên), hãy in ra màn hình mảng trên theo thứ tự tăng dần.

Nhập 2 mảng số thực a0, a1, a2, …, am-1 và b0, b1, b2, …, bn-1. Giả sử 2 mảng này đã được sắp xếp tăng dần. Hãy tận dụng tính sắp xếp của 2 dãy và tạo dãy c0, c1, c2, …, cm+n-1 là hợp của 2 dãy trên sao cho ci cũng có thứ tự tăng dần. Lời giải: Trộn 2 mảng trong java

Viết chương trình nhập vào mảng A có n phần tử, các phần tử là số nguyên lớn hơn 0 và nhỏ hơn 100. Thực hiện các chức năng sau: a) Tìm phần tử lớn thứ nhất và lớn thứ 2 trong mảng với các chỉ số của chúng (chỉ số đầu tiên tìm được). b) Sắp xếp mảng theo thứ tự tăng dần. c) Nhập số nguyên x và chèn x vào mảng A sao cho vẫn đảm bảo tính tăng dần cho mảng A.

Viết chương trình nhập vào ma trận A có n dòng, m cột, các phần tử là số nguyên lớn hơn 0 và nhỏ hơn 100. Thực hiện các chức năng sau: a) Tìm phần tử lớn thứ nhất với chỉ số của nó (chỉ số đầu tiên tìm được). b) Tìm và in ra các phần tử là số nguyên tố của ma trận (các phần tử không nguyên tố thì thay bằng số 0). c) Sắp xếp tất cả các cột của ma trận theo thứ tự tăng dần và in kết quả ra màn hình. d) Tìm cột trong ma trận có nhiều số nguyên tố nhất.

4. Bài tập về các thuật toán sắp xếp trong Java

Bạn có thể xem các giải thuật sắp xếp trong phần cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp

5. Bài tập java nâng cao

Trong phần này, bạn phải nắm được các kiến thức về:

Lớp và đối tượng trong java.

Access modifier trong java

Các tính chất của lập trình hướng đối tượng (OOP).

Các khái niệm Java OOPs.

Collection trong java.

Xử lý ngoại lệ trong java.

Bài tập quản lý sinh viên trong Java – console

Đề bài: Viết chương trình quản lý sinh viên. Mỗi đối tượng sinh viên có các thuộc tính sau: id, name, age, address và gpa (điểm trung bình). Yêu cầu: tạo ra một menu với các chức năng sau:

/****************************************/ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. Exit. /****************************************/

Lời giải: Bài tập quản lý sinh viên trong java – giao diện dòng lệnh

Bài tập quản lý sinh viên trong Java – Swing

Lời giải: Bài tập quản lý sinh viên trong java bằng Swing

Bài Tập Hóa 9 Có Lời Giải / 2023

Bài tập hóa 9 có lời giải hay.Bài 1: a) Cho a gam MgO tác dụng vừa đủ với m gam dung dịch HCl 3,65%. Sau phản ứng thu được (a + 55) gam muối. Tínha và C% của dung dịch muối. b) Nhúng một lá nhôm vào dung dịch CuCl2. Sau phản ứng lấy lá nhôm ra thì khối lượng dung dịch nhẹ đi 1,38g. Tính khối lượng nhôm đã phản ứng. Hướng dẫn giải: a) Phương trình phản ứng: MgO + 2HCl ( MgCl2 + H2O 40g 73g 95g a g = (a + 55)g ( a = 40mMgCl2 = = 95g; mdd HCl = = 2000g ;mdd sau pu = 2000 + 40 = 2040g C%(dd MgCl2) = ( 100% = 4,7%b) Theo định luật bảo toàn khối lượng: mAl + m CuSO4 = mAl2(SO4)3 + mCuSau phản ứng khối lượng dung dịch nhẹ đi bao nhiêu thì khối lượng lá nhôm tăng lên bấy nhiêu, khối lượng lá nhôm tăng chính là khối lượng Cu sinh ra. Gọi khối lượng lá nhôm đã phản ứng là x g.Ta có phương trình: 2Al + 3CuSO4 ( Al2(SO4)3 + 3Cu (2(27)g (3(64)g x g – x = 1,38. Giải ra ta có x = 0,54gBài 2: Cho 43,7g hỗn hợp hai kim loại Zn và Fe tác dụng với dung dịch axit clohiđric cho 15,68 lít khí H2 (ở đktc) a) Tính khối lượng mỗi kim loại trong hỗn hợp trên. b) Tính khối lượng sắt sinh ra khi cho toàn bộ khí H2 thu được ở trên tác dụng hoàn toàn với 46,4g Fe3O4.Hướng dẫn giải: a) Gọi số mol Fe là x, khối lượng của Fe là 56x Gọi số mol Zn là y, khối lượng của Zn là 65y Fe + 2HCl ( FeCl2 + H2 ( x mol 2x mol x mol Zn + 2HCl ( ZnCl2 + H2 ( y mol 2y mol y mol Ta có hệ phương trình 2 ẩn số: 56x + 65 y = 43,7 x + y = 0,7 Giải hệ phương trình ta có x = 0,2 và y = 0,5 Suy ra mZn = = 0,5 ( 65 = 32,5g; mFe = 11,2g b) Fe3O4 + 4H2 ( 3Fe + 4H2O 1 mol 4 mol 3 mol = 0,2 mol 0,7 mol x mol Dựa vào phương trình trên ta nhận số mol Fe3O4 dư, do đó tính khối lượng Fe sinh ra theo khối lượng H2. mFe = x ( 56 = ( 56 = 29,4gBài 3: Cho hỗn hợp 2 muối A2SO4 và BSO4 có khối lượng 44,2g tác dụng vừa đủ với 62,4g dung dịch BaCl2 thì cho 69,9g kết tủa BaSO4 và 2 muối tan. Tìm khối lượng 2 muối ban tan sau phản ứng.Hướng dẫn giải:Phương trình phản ứng: A2SO4 + BaCl2 ( BaSO4 ( + 2ACl BSO4 + BaCl2 ( BaSO4 ( + BCl2Áp dụng định luật bảo toàn khối lượng:Tổng khối lượng 2 muối A2SO4 và BSO4 + mBaCl2 = mBaSO4( + Tổng khối lượng 2 muối ACl và BCl 44,2 + 62,4 = 69,9 + mACl + mBCl2 mACl + mBCl2 = 36,7gBài 4: Cho a gam Fe hoà tan trong dung dịch HCl (thí nghiệm 1), sau khi cô cạn dung dịch thu được 3,1g chất rắn. Nếu cho a gam Fe và b gam Mg (thí nghiệm 2) vào dung dịch HCl (cũng với lượng như trên) sau khi cô cạn dung dịch thì thu được 3,34g chất rắn và 448ml H2.Hướng dẫn giải:Thí nghiệm 1: nH2 = = 0,02 mol Mg + 2HCl ( MgCl2 + H2 (1) Fe + 2HCl ( FeCl2 + H2 (2)Nếu khi chỉ có riêng Fe, Fe tan hết thì nFeCl2 = = 0,024 molVậy nH2 giải phóng là 0,024. Như vậy khi cho cả Mg và Fe vào dung dịch HCl thì nH2 giải phóng ít nhất cũng phải là 0,024 mol, theo đầu bài chỉ có