<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>Nhóm 2 by Nguyễn Ngọc Vỹ</title>
      <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1</link>
      <description></description>
      <language>en-us</language>
      <pubDate>2023-01-21 06:46:49 UTC</pubDate>
      <lastBuildDate>2024-01-08 14:11:06 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url></url>
      </image>
      <item>
         <title>THUẬT TOÁN XỬ LÝ CHUỖI VỀ MẬT  MÃ</title>
         <author>nguyenngocvy0106</author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840254144</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2024-01-06 15:34:11 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840254144</guid>
      </item>
      <item>
         <title></title>
         <author>nguyenngocvy0106</author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840254503</link>
         <description><![CDATA[<p>1. Input</p><ul><li><p>Một chuỗi cần mã hóa/giải mã.</p></li><li><p>một giá trị số nguyên là số vị trí cần dịch chuyển.</p></li></ul><p>2.Output</p><ul><li><p>Một chuỗi đã được mã hóa/giải mã</p></li></ul><p>3.Mô tả thuật toán</p><ul><li><p>Đi từ phần tử đầu tiên đến phần tử cuối cùng của chuỗi ký tự.</p></li><li><p>Kiểm tra từng ký tự có phải là chữ cái hay không,nếu là  chữ cái thì tiếp tục kiếm tra chữ cái đó là chữ hoa hay chữ thường.</p></li><li><p>Nếu là chữ thường hoặc chữ hoa thì áp dụng công thức giá trị của vị trí thứ i cộng với giá trị của ký tự 'a' cộng tiếp số vị trí cần dịch chuyển chia lấy dư cho 26 rồi cộng lại giá trị của ký tự 'a' </p></li></ul><p>4.Minh họa thuật toán</p><p>     4.1 Nhập chuỗi cần mã hóa/giải mã: Hello, World! </p><p><br/></p><p>     4.2 Nhập số lượng dịch chuyển: 3</p><p><br/></p><p>     4.3 Chuỗi đã mã hóa: Khoor, Zruog!</p><p><br/></p><p>     4.4 Chuỗi đã giải mã: Hello, World!</p><p>5.Cài đặt thuật toán</p><p><br/></p><p>#include &lt;stdio.h&gt;</p><p>#include &lt;string.h&gt;</p><p>#include &lt;ctype.h&gt;</p><p>// Caesar</p><p>void mahoa(char *input, int shift) {</p><p>    int len = strlen(input);</p><p>    </p><p>    for (int i = 0; i &lt; len; i++) {</p><p>        if (isalpha(input[i])) {</p><p>            if (islower(input[i])) {</p><p>                input[i] = 'a' + (input[i] - 'a' + shift) % 26;</p><p>            }</p><p>            else if (isupper(input[i])) {</p><p>                input[i] = 'A' + (input[i] - 'A' + shift) % 26;</p><p>            }</p><p>        }</p><p>    }</p><p>}</p><p>void giaima(char *input, int shift) {</p><p>    mahoa(input, 26 - shift);</p><p>}</p><p>int main() {</p><p>    char input[100];</p><p>    int shift;</p><p>    printf("nhap chuoi can giai ma: ");</p><p>    fgets(input, sizeof(input), stdin);</p><p>	fflush(stdin);</p><p>    printf("nhap so luong dich chuyen");</p><p>    scanf("%d", &amp;shift);</p><p>    mahoa(input, shift);</p><p>    printf("Chuoi da ma hoa: %s\n", input);</p><p>    giaima(input, shift);</p><p>    printf("Chuoi da giai ma: %s\n", input);</p><p>    return 0;</p><p>}</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-01-06 15:35:32 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840254503</guid>
      </item>
      <item>
         <title>Thuật toán xử lí chuỗi về đối sánh mẫu</title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840254602</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2024-01-06 15:35:49 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840254602</guid>
      </item>
      <item>
         <title></title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840254897</link>
         <description><![CDATA[<p>#include&lt;stdio.h&gt;</p><p>#include&lt;string.h&gt;</p><p>int bruteForce(const char <em>des,const char </em>x, int n, int m){</p><p>	int count = 0;</p><p>	for(int i = 0 ; i &lt;= (n-m);i++){</p><p>		for(int j = 0 ; j &lt; m &amp;&amp; x[j] == des[i+j]; j++)</p><p>		if(j &gt;= m){</p><p>			count++;</p><p>		}</p><p>	}</p><p>	return count;</p><p>}</p><p>main(){</p><p>	int res;</p><p>	const char *des = "acbabcbaacabca";</p><p>	const char *x = "ab";</p><p>	int lenDes = strlen(des);</p><p>	int lenX = strlen(x);</p><p>	res = bruteForce(des,x,lenDes,lenX);</p><p>	printf("Xau b xuat hien %d lan trong xau a", res);</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-01-06 15:36:40 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840254897</guid>
      </item>
      <item>
         <title>Thuật toán tìm kiếm chuỗi</title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840255519</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2024-01-06 15:38:51 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840255519</guid>
      </item>
      <item>
         <title>Thuật toán tìm kiếm chuỗi</title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840256858</link>
         <description><![CDATA[<p><strong>Input</strong><br>- Người dùng được yêu cầu nhập một chuỗi ban đầu (chuoi1) và một chuỗi cần tìm kiếm (chuoi2).<br><br><strong>Output</strong><br>- Nếu chuoi2 được tìm thấy trong chuoi1, chương trình sẽ in ra vị trí đầu tiên của chuoi2 trong chuoi1.<br>- Nếu chuoi2 không được tìm thấy trong chuoi1, chương trình sẽ thông báo rằng không tìm thấy chuoi2 trong chuoi1.<br><br><strong><em>Mô tả thuật toán</em></strong><br>1. <strong>Nhập dữ liệu:</strong><br> - Sử dụng hàm `gets()` để nhập chuỗi ban đầu (chuoi1) từ người dùng.<br> - Sử dụng hàm `gets()` để nhập chuỗi cần tìm kiếm (chuoi2) từ người dùng.<br><br>2. <strong>Tìm kiếm chuỗi:</strong><br> - Sử dụng hai vòng lặp for để duyệt qua từng ký tự của chuoi1 và so sánh với chuoi2.<br> - Vòng lặp bên trong (j) so sánh từng ký tự tương ứng của chuoi1 và chuoi2.<br><br>3. <strong>In kết quả:</strong><br> - Nếu tất cả các ký tự giống nhau, biến `timThay` được đặt thành 1, và chương trình in ra vị trí đầu tiên của chuoi2 trong chuoi1 và kết thúc thuật toán.<br> - Nếu không tìm thấy chuỗi con sau khi kiểm tra toàn bộ chuỗi gốc, thông báo rằng chuỗi con không tồn tại.</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-01-06 15:43:07 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840256858</guid>
      </item>
      <item>
         <title></title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840258442</link>
         <description><![CDATA[<p>#include &lt;stdio.h&gt;</p><p>#include &lt;string.h&gt;</p><p>void phanTichCau(char *cau) {</p><p>    char *token = strtok(cau, " ");</p><p>    while (token != NULL) {</p><p>        printf("Tu: %s\n", token);</p><p>        token = strtok(NULL, " ");</p><p>    }</p><p>}</p><p>void nhapCau(char *cau, int kichThuoc) {</p><p>    printf("Nhap cau: ");</p><p>    fgets(cau, kichThuoc, stdin);</p><p>    if ((strlen(cau) &gt; 0) &amp;&amp; (cau[strlen(cau) - 1] == '\n')) {</p><p>        cau[strlen(cau) - 1] = '\0';</p><p>    }</p><p>}</p><p>int main() {</p><p>    char cau[100];</p><p>    nhapCau(cau, sizeof(cau));</p><p>    printf("Cau da nhap: %s\n", cau);</p><p>    printf("Phan tich cau:\n");</p><p>    phanTichCau(cau);</p><p>    return 0;</p><p>}</p><p><br></p>]]></description>
         <enclosure url="" />
         <pubDate>2024-01-06 15:48:49 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840258442</guid>
      </item>
      <item>
         <title>Thuật toán xử lý chuỗi về phân tích câu</title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840258753</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2024-01-06 15:49:39 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2840258753</guid>
      </item>
      <item>
         <title>Cài đặt thuật toán</title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2841192902</link>
         <description><![CDATA[<p>#include &lt;stdio.h&gt;</p><p>#include &lt;string.h&gt;</p><p>int timKiemChuoi(char chuoi1[], char chuoi2[]){</p><p>	int i, j, timThay;</p><p>    for (i = 0; i &lt;= strlen(chuoi1) - strlen(chuoi2); i++) {</p><p>        timThay = 1;</p><p>        for (j = 0; j &lt; strlen(chuoi2); j++) {</p><p>            if (chuoi1[i + j] != chuoi2[j]) {</p><p>                timThay = 0;</p><p>                break;</p><p>            }</p><p>        }</p><p>        if (timThay == 1)</p><p>        	return i + 1;</p><p>    }</p><p>    if (timThay == 0)</p><p>    	return -1;</p><p>}</p><p>main() {</p><p>    char chuoi1[100], chuoi2[20];</p><p>    </p><p>	printf("Nhap chuoi ban dau: ");</p><p>    gets(chuoi1);</p><p>    printf("Nhap chuoi can tim kiem: ");</p><p>    gets(chuoi2);</p><p>	int viTri = timKiemChuoi(chuoi1, chuoi2);</p><p>            </p><p>    if (viTri != -1)</p><p>	    printf("Chuoi \"%s\" duoc tim thay tai vi tri %d.\n", chuoi2, viTri);</p><p>	else</p><p>        printf("Khong tim thay chuoi \"%s\" trong chuoi.\n", chuoi2);</p><p>}</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-01-08 09:06:54 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2841192902</guid>
      </item>
      <item>
         <title></title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2841444495</link>
         <description><![CDATA[<p>Mô tả thuật toán:</p><p>_Thuật toán Brute Force là dạng thuật toán tìm kiếm tuần tự, nó thử kiểm tra tất cả các vị trí trên văn bản từ 1 cho đến n – m + 1. Sau mỗi lần thử, thuật toán Brute Force dịch mẫu sang phải một ký tự cho đến khi kiểm tra hết văn bản. Thuật toán Brute Force không cần công việc chuẩn bị cũng như các mảng phụ cho quá trình tìm kiếm. Độ phức tạp tính toán của thuật toán này là O(n*m). Thuật toán được xây dựng đơn giản, nhưng với văn bản lớn thì thuật toán này tỏ ra không hiệu quả.</p><p><br/></p><p>_<strong>Hàm bruteForce:</strong></p><ul><li><p>Hàm nhận vào bốn đối số:</p><ul><li><p><strong>const char *des</strong>: Chuỗi văn bản cần tìm kiếm.</p></li><li><p><strong>const char *x</strong>: Chuỗi mẫu cần đối sánh.</p></li><li><p><strong>int n</strong>: Độ dài của chuỗi <strong>des</strong>.</p></li><li><p><strong>int m</strong>: Độ dài của chuỗi <strong>x</strong>.</p></li></ul></li><li><p>Khởi tạo biến <strong>count</strong> để đếm số lần xuất hiện của chuỗi <strong>x</strong> trong chuỗi <strong>des</strong>.</p></li><li><p>Sử dụng hai vòng lặp lồng nhau để duyệt qua từng vị trí trong chuỗi <strong>des</strong>:</p><ul><li><p>Vòng lặp ngoài (<strong>i</strong>): Duyệt qua từng vị trí trong chuỗi <strong>des</strong> để bắt đầu so sánh với chuỗi <strong>x</strong>.</p></li><li><p>Vòng lặp trong (<strong>j</strong>): Duyệt qua từng ký tự của chuỗi <strong>x</strong> và so sánh với ký tự tương ứng trong chuỗi <strong>des</strong>.</p><ul><li><p>Nếu tất cả các ký tự khớp nhau, tăng giá trị của <strong>j</strong>.</p></li><li><p>Nếu <strong>j</strong> đạt giá trị <strong>m</strong> (độ dài của chuỗi <strong>x</strong>), có nghĩa là tất cả các ký tự của chuỗi <strong>x</strong> khớp với một phần trong chuỗi <strong>des</strong>, tăng giá trị của <strong>count</strong>.</p></li></ul></li></ul></li></ul>]]></description>
         <enclosure url="" />
         <pubDate>2024-01-08 13:18:22 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2841444495</guid>
      </item>
      <item>
         <title></title>
         <author></author>
         <link>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2841498947</link>
         <description><![CDATA[<ol><li><p><strong>Hàm nhapCau(char *cau, int kichThuoc):</strong></p><ul><li><p><strong>Input:</strong> Nhận vào một con trỏ đến một mảng ký tự (<strong>char *cau</strong>) và một số nguyên (<strong>kichThuoc</strong>) đại diện cho kích thước tối đa của câu cần nhập.</p></li><li><p><strong>Output:</strong> Nhập câu từ bàn phím vào mảng <strong>cau</strong>.</p></li><li><p><strong>Thuật toán:</strong></p><ul><li><p>Sử dụng hàm <strong>fgets</strong> để đọc câu từ bàn phím và lưu vào mảng <strong>cau</strong>.</p></li><li><p>Loại bỏ ký tự newline nếu có ở cuối chuỗi.</p></li></ul></li></ul></li><li><p><strong>Hàm phanTichCau(char *cau):</strong></p><ul><li><p><strong>Input:</strong> Nhận vào một con trỏ đến một mảng ký tự (<strong>char *cau</strong>) chứa câu cần phân tích.</p></li><li><p><strong>Output:</strong> In ra mỗi từ trong câu.</p></li><li><p><strong>Thuật toán:</strong></p><ul><li><p>Sử dụng hàm <strong>strtok</strong> để tách từng từ từ chuỗi <strong>cau</strong> sử dụng khoảng trắng làm ký tự phân tách.</p></li><li><p>In ra màn hình từng từ được tìm thấy.</p></li></ul></li></ul></li><li><p><strong>Hàm main():</strong></p><ul><li><p><strong>Thuật toán chính:</strong></p><ul><li><p>Khai báo một mảng ký tự <strong>cau</strong> để chứa câu.</p></li><li><p>Gọi hàm <strong>nhapCau</strong> để nhập câu từ bàn phím.</p></li><li><p>In ra màn hình câu đã nhập.</p></li><li><p>Gọi hàm <strong>phanTichCau</strong> để phân tích và in ra mỗi từ trong câu.</p></li></ul></li></ul></li></ol><p><strong>Minh Hoạ Thuật Toán:</strong></p><p>Ví dụ: Nếu người dùng nhập câu "Chào bạn, hãy phân tích tôi", chương trình sẽ hoạt động như sau:</p><p>Phân tách câu: </p><p>Tu: Chào </p><p>Tu: bạn, </p><p>Tu: hãy </p><p>Tu: phân </p><p>Tu: tích </p><p>Tu: tôi</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-01-08 14:01:00 UTC</pubDate>
         <guid>https://padlet.com/nguyenngocvy0106/eeg69nnfx4fibge1/wish/2841498947</guid>
      </item>
   </channel>
</rss>
