# data[].attributes.body
Input: chuỗi (n), chuỗi(x)

Output: x có trong n hay không, số lần xuất hiện của x trong n

Mô tả thuật toán:

-        Lần lượt đi từ đầu chuỗi đến cuối chuỗi.

-        Trong quá trình đi, nếu phát hiện ký tự đầu tiên giống nhau thì lần lượt so sánh xem liệu n[i+1] và x[j+1] có giống nhau hay không, với điều kiện chuỗi n khác NULL.

-        Nếu dãy ký tự x có độ dài bằng chuỗi n thì biến đếm số lần xuất hiện cộng 1.

Cài đặt thuật toán:

#include<stdio.h>

#include<string.h>

void taoChuoi(char n[], char x[]){

printf ("Nhap chuoi: ");

fflush(stdin);

gets(n);

printf ("Nhap chuoi can tim: ");

gets(x);

}

int search(char n[], char x[]) {

int i, j, dem;

dem = 0;

for (i = 0; n[i] != NULL; i++) {

j = 0;

if (n[i] == x[j]) {

while (n[i] == x[j] && n[i] != NULL) {

i++;

j++;

}

if (x[j] NULL && (n[i] ' ' || n[i] == NULL))

dem++;

i--;

}

}

return dem;

}

main(){

char n[255], x[255];

taoChuoi(n,x);

if(search(n,x)>0)

printf ("\nChuoi %s xuat hien %d lan.", x, search(n,x));

else

printf ("\nChuoi %s khong xuat hien.");

}

# data[].attributes.headline
2. Đối sánh chuỗi (Ngô Thị Phương Nhung)

# data[].attributes.subject
2. Đối sánh chuỗi (Ngô Thị Phương Nhung)

# data[].attributes.body
input: chuỗi con(n),chuỗi mẹ(m)

với m n lần lượt là độ dài 2 chuỗi

Output: vị trí xuất hiện (Nếu chuỗi con xuất hiện trong chuỗi mẹ) hoặc 1(Nếu chuỗi con không xuất hiện trong chuỗi mẹ)

Mô tả thuật toán

1. Xây dựng mảng để lưu trữ thông tin

2. Bắt đầu tìm kiếm mẫu trong chuỗi bằng cách duyệt từ trái sang phải. So sánh các ký tự của chuỗi và mẫu tương ứng. Nếu ký tự khớp, ta tiếp tục so sánh các ký tự tiếp theo. Nếu ký tự không khớp, ta sử dụng thông tin từ mảng để xác định vị trí mới để tiếp tục tìm kiếm.

3. Nếu ta tìm thấy một vị trí trong chuỗi mà tất cả các ký tự của mẫu khớp, ta đã tìm thấy một kết quả và có thể thực hiện các hành động cần thiết

Cài đặt thuật toán

#include <stdio.h>

#include <string.h>

void computeLPSArray(char* pattern, int m, int* lps) {

int len = 0;

lps[0] = 0;

int i = 1;

while (i < m) {

if (pattern[i] == pattern[len]) {

len++;

lps[i] = len;

i++;

} else {

if (len != 0) {

len = lps[len - 1];

} else {

lps[i] = 0;

i++;

}

}

}

}

void KMPSearch(char* pattern, char* text) {

int m = strlen(pattern);

int n = strlen(text);

int lps[m];

computeLPSArray(pattern, m, lps);

int i = 0;

int j = 0;

while (i < n) {

if (pattern[j] == text[i]) {

j++;

i++;

}

if (j == m) {

printf("Tim thay mau tai vi tri %d\n", i - j);

j = lps[j - 1];

} else

if (i < n && pattern[j] != text[i])

if (j != 0)

j = lps[j - 1];

else

i++;

}

printf("Khong tim thay mau!");

}

main() {

char text[100],pattern[100];

int chon;

do{

printf("\nnhap lua chon cua ban\n --1 de nhap\n --so khac de thoat\n");

scanf("%d", &chon);

fflush(stdin);

switch (chon){

case 1:

printf("\nnhap chuoi 1: ");

gets(text);

printf("nhap chuoi 2: ");

gets(pattern);

KMPSearch(pattern, text);

break;

default:

printf("Ket thuc chuong trinh!");

}

}while (chon ==1);

}

# data[].attributes.body
Nén tập tin theo 2 kiểu :

+file txt

+file nhị phân

Mô tả thuật toán :

-Tạo một vòng lập do while xem người dùng muốn lựa chon file txt hay nhị phân

+Nếu là txt thì tạo một file f có đường dẫn mặc định và ghi chuỗi vào file bằng hàm fprintf sau đó đóng file, file được tạo mới này sẽ nằm cạnh file cpp

+Nếu là nhị phân tạo một file f có đường dẫn mặc định và ghi chuỗi vào file bằng hàm fwrite sau đó đóng file, file được tạo mới này sẽ nằm cạnh file cpp

Cài đặt thuật toán:

#include <stdio.h>

#include <stdlib.h>

int main(){

//B1.Tao file

FILE *f;

char Test[100];

int luachon1,luachon2;

do{

printf("---------------Nhap lua chon-------------\n");

printf("1. File txt\n");

printf("2. File nhi phan\n");

scanf("%d",&luachon2);

switch(luachon2){

case 1:{

do{

printf("---------------Nhap lua chon-------------\n");

printf("1. Doc file\n");

printf("2. Ghi file\n");

scanf("%d",&luachon1);

switch(luachon1){

case 1:{

//Mac dinh f co ten file la : "Taofile.txt"

f=fopen("Taofile.txt","r");

if(f==NULL){

printf("\n Loi tao hoac mo file");

exit(1);

}

//Doc file

fscanf(f,"%s",&Test);

printf("Gia tri chuoi trong file la : %s\n",Test);

//Dong file

fclose(f);

break;

}

case 2:{

//Tao mot file moi de ghi co ten : "Taofile.txt"

f=fopen("Taofile.txt","w");

if(f==NULL){

printf("\n Loi tao hoac mo file");

exit(1);

}

//Nhap n

printf("\nNhap chuoi moi vao file : \n");

scanf("%s",&Test);

//Dua n vao file

fprintf(f,"%s",Test);

//Dong file

fclose(f);

break;

}

}

}while(luachon1!=0);

break;

}

case 2:{

do{

printf("------------Nhap lua chon-----------\n");

printf("1. Doc file\n");

printf("2. Ghi file\n");

scanf("%d",&luachon1);

switch(luachon1){

case 1:{

f=fopen("TaofileNhiPhan.bin","rb");

if(f==NULL){

printf("\n Loi tao hoac mo file");

exit(1);

}

fread(&Test,sizeof(Test),1,f);

printf("\n Chuoi : %s\n",Test);

fclose(f);

break;

}

case 2:{

f=fopen("TaofileNhiPhan.bin","wb");

if(f==NULL){

printf("\n Loi tao hoac mo file");

exit(1);

}

printf("\nNhap chuoi moi vao file : \n");

scanf("%s",&Test);

fwrite(&Test,sizeof (Test),1,f);

fclose(f);

break;

}

}

}while(luachon1!=0);

break;

}

}

}while(luachon2!=0);

return 0;

}

# data[].attributes.body
Input: chuỗi (matMaGoc),chuỗi (matMaNhap)

Output: "Mat ma dung" hoặc "Mat ma sai, Nhap lai".

Mô tả thuật toán :

- Yêu cầu nhập mật mã gốc . Mật mã này được lưu lại để sử dụng sau này.

- Yêu cầu nhập mật mã. Mỗi ký tự người dùng nhập vào sẽ được thêm vào chuỗi và  chương trình sẽ in ra ký tự * để bảo vệ mật mã người dùng.

- Nếu mật mã người dùng nhập vào khớp với mật mã gốc đã tạo trước đó, chương trình sẽ thông báo mật mã đúng và kết thúc. Nếu không, chương trình sẽ thông báo mật mã sai và yêu cầu người dùng nhập lại .

Cài đặt thuật toán:

#include <stdio.h>

#include <string.h>

#include <conio.h>

char* taoMatma() {

static char matMaGoc[11];

printf("Tao mat ma: ");

scanf("%s", matMaGoc);

return matMaGoc;

}

void kiemTraMatMa(char matMaGoc[]) {

char matMaNhap[11];

while (1) {

printf("Nhap Password\n");

int i = 0;

char a = getch();

while (a != 13 && a != 10 && i < 10) {

if (a != 8) {

printf("*");

matMaNhap[i] = a;

i++;

a = getch();

}

}

matMaNhap[i] = '\0';

if (strcmp(matMaGoc, matMaNhap) == 0) {

printf("\n");

printf("mat ma ban nhap la %s\n", matMaNhap);

printf("Mat ma dung\n");

break;

}

else {

printf("\nMat ma sai, Nhap lai\n");

}

}

}

int main() {

char* matMaGoc= taoMatma();

kiemTraMatMa(matMaGoc);

return 0;

}