Showing posts with label Tin học đại cương. Show all posts
Showing posts with label Tin học đại cương. Show all posts
Sunday, December 6, 2015
Sunday, November 29, 2015
Monday, November 9, 2015
Một số bài tập cộng điêm môn THDC 20151
Bài 1. Nhập vào một số nguyên, hãy in ra số đó theo cách nhóm theo bộ 3 số
VD. nhập vào 123456789 thì in ra 123,456,789
Nhập vào 12345 thì in ra 12,345
Bài 2, Nhập vào một chuỗi số, hãy kiểm tra xem đó có phải là một SDT di động hợp lệ hay không. (Kiểu nhập vào nên là xâu ký tự)
Bài 3. Nhập vào một số nguyên có 3 tới 9 chữ số, hãy in ra màn hình cách đọc số nguyên đó
VD. 112 ==> mot tram muoi hai
104 ==> mot tram le bon
12345 ==> muoi hai nghin ba tram bon muoi nam
Bài 4. Nhập vào một số nguyên, hãy in ra màn hình xem số đó được tạo nên từ các chữ số nào.
VD 123123123 thì in ra các chữ số tạo nên số đó là 1 2 3
Bài 5. Nhập vào một đoạn văn bản từ bàn phím, hãy in ra màn hình những từ có ký tự được in hoa.
VD. At first, researchers did not see an obvious relationship between coffee consumption and death rates. Study participants who drank between less than a cup of coffee and three cups a day had 5% to 9% lower risk of dying than those who drank no coffee. Those who drank more than three cups a day did not see any benefit. The finding was murky, like previous studies, some of which suggested a benefit and some did not.
Thì in ra màn hình At, Study, Those, The
Bài 6. Nhập vào một câu xâu, hãy chuẩn hóa xâu đó sao cho
VD email hợp lệ abcd@efgh.com
Bài 8. Nhập vào một mảng xâu ký tự biểu diễn họ tên của các thành viên trong lớp (số thành viên không quá 100). Hay sắp xếp và in ra danh sách sao cho họ tên theo thứ tự ABC
Bài 9 (2 Đ). Nhập vào một mảng xâu ký tự biểu diễn họ tên của các thành viên trong lớp (số thành viên không quá 100). Hay sắp xếp và in ra danh sách sao cho tên các thành viên theo thứ tự ABC
Bài 10. Nhập vào một đoạn văn bản gồm chữ cái và chữ số, dấu cách. Hãy thống kê tần số xuất hiện của các ký tự trong văn bản và in ra các ký tự theo thứ tự tần số xuất hiện giảm dần.
Chú ý: Có phân biệt ký tự hoa và thường
Bài 11.
VD. nhập vào 123456789 thì in ra 123,456,789
Nhập vào 12345 thì in ra 12,345
Bài 2, Nhập vào một chuỗi số, hãy kiểm tra xem đó có phải là một SDT di động hợp lệ hay không. (Kiểu nhập vào nên là xâu ký tự)
Bài 3. Nhập vào một số nguyên có 3 tới 9 chữ số, hãy in ra màn hình cách đọc số nguyên đó
VD. 112 ==> mot tram muoi hai
104 ==> mot tram le bon
12345 ==> muoi hai nghin ba tram bon muoi nam
Bài 4. Nhập vào một số nguyên, hãy in ra màn hình xem số đó được tạo nên từ các chữ số nào.
VD 123123123 thì in ra các chữ số tạo nên số đó là 1 2 3
Bài 5. Nhập vào một đoạn văn bản từ bàn phím, hãy in ra màn hình những từ có ký tự được in hoa.
VD. At first, researchers did not see an obvious relationship between coffee consumption and death rates. Study participants who drank between less than a cup of coffee and three cups a day had 5% to 9% lower risk of dying than those who drank no coffee. Those who drank more than three cups a day did not see any benefit. The finding was murky, like previous studies, some of which suggested a benefit and some did not.
Thì in ra màn hình At, Study, Those, The
Bài 6. Nhập vào một câu xâu, hãy chuẩn hóa xâu đó sao cho
- Bắt đầu và kết thúc không được có dấu các trống
- Không có quá 2 dấu cách trống giữa 2 từ liên tiếp
VD email hợp lệ abcd@efgh.com
Bài 8. Nhập vào một mảng xâu ký tự biểu diễn họ tên của các thành viên trong lớp (số thành viên không quá 100). Hay sắp xếp và in ra danh sách sao cho họ tên theo thứ tự ABC
Bài 9 (2 Đ). Nhập vào một mảng xâu ký tự biểu diễn họ tên của các thành viên trong lớp (số thành viên không quá 100). Hay sắp xếp và in ra danh sách sao cho tên các thành viên theo thứ tự ABC
Bài 10. Nhập vào một đoạn văn bản gồm chữ cái và chữ số, dấu cách. Hãy thống kê tần số xuất hiện của các ký tự trong văn bản và in ra các ký tự theo thứ tự tần số xuất hiện giảm dần.
Chú ý: Có phân biệt ký tự hoa và thường
Bài 11.
Một số bài code VD trên lớp
#include<stdio.h>
#include <conio.h>
// minh hoa toan tu logic tren bit
int main1()
{
int a = 5, b = 17;
// 5 = 0000 0000 0000 0000 0000 0000 0000 0101
// 17 = 0000 0000 0000 0000 0000 0000 0001 0001
//5^17 = 0000 0000 0000 0000 0000 0000 0001 0100
//5|17 = 0000 0000 0000 0000 0000 0000 0001 0101
//5&17 = 0000 0000 0000 0000 0000 0000 0000 0001
/*int c = a^b;
printf("%d ^ %d = %d", a, b, c);*/
/*
// 5 = 0000 0000 0000 0000 0000 0000 0000 0101
//~5 = 1111 1111 1111 1111 1111 1111 1111 1010
int d = ~a;
printf("~%d = %d", a, d);
*/
// 5 = 0000 0000 0000 0000 0000 0000 0000 0101
//5<<2 = 0000 0000 0000 0000 0000 0000 0001 0100
int d = a<<2;
printf("%d<<2 = %d", a, d);
_getch();
return 0;
}
========================================================
#include <stdio.h>
#include <stdlib.h>
// int ra man hinh co quy cach
int main2()
{
printf("1234567890123456789012345678901234567890\n");
printf("%5c\n", 'A');
printf("%-5c\n", 'A');
/*
printf("%f\n", 34.2);
printf("%7.2f\n", 34.2);
printf("%-7.2f\n", 34.2);
printf("%7.2f\n", 34.256);
printf("%.2f\n", 34.256);
*/
/*
printf("%5d\n", 4);
printf("%-5d\n", 4);
printf("%-5d\n", 123456);
*/
system("pause");
return 0;
}
========================================================
#include <stdio.h>
#include <stdlib.h>
// minh hoa if..else
int main3()
{
//1 nhap so kwh tieu thu
//2 tinh va in ra gia theo cong thuc
int soKwh; // so kwh
printf("Nhap vao so Kwh:");
scanf_s("%d", &soKwh);
int tien;
if (soKwh <= 50)
tien = soKwh * 500;
else if (soKwh <= 100)
tien = 50 * 500 + (soKwh - 50) * 1000;
else
tien = 50 * 500 +50*1000+ (soKwh - 100) * 2000;
printf("Tien phai tra cho so %d kwh la %d\n", soKwh, tien);
system("pause");
return 0;
}
========================================================
#include <stdio.h>
#include <stdlib.h>
// minh hoa switch..case
int main()
{
//1 nhap vao thang va in ra so ngay
int thang;
printf("Nhap vao thang can tra cuu:");
scanf_s("%i", &thang);
switch (thang)
{
case 2: printf("Thang co 28/29 ngay\n");
//break;
case 4: case 6: case 9: case 11: printf("Thang co 30 ngay\n");
break;
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
printf("Thang co 31 ngay\n");
break;
default:
printf("%i la thang khong hop le\n", thang);
}
system("pause");
return 0;
}
========================================================
/*
Nhap vao mot so nguyen,
tinh tong cac chu so cua so nguyen do
VD: 1234 -> tong la 10
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, tong;
printf("Nhap vao mot so nguyen:");
scanf_s("%d", &n);
//tach tung chu so cua so nguyen? vd 1234
// chia lay phan du cho 10, (ta duoc 4)
//phan con lai la so chia lay phan nguyen cho 10 (duoc 123)
// lap toi khi phan nguyen bang 0 thi dung
/*
1234 ==> 123 va 4
123 ==> 12 va 3
12 ==> 1 va 2
1 ==> 0 va 1
*/
tong = 0;
int count=0;
while (n > 0)
{
/*count++;
printf("lan lap %d\n", count);
printf("Chu so don vi: %d\n", n % 10);
printf("So nguyen con lai: %d\n", n / 10);*/
tong = tong + n % 10;
n = n / 10;
}
printf("Tong cua cac chu so tao nen so la %d\n", tong);
system("pause");
return 0;
}
======================================================
/*
minh hoa switch .. case
*/
#include <stdio.h>
#include <stdlib.h>
int main4()
{
/*
nhap vao mot tuoi di hoc, va in ra trinh do va
cap hoc tuong ung
VD. 1-3 : mam non
4-5: mau giao
6-10: pho thong co so (tieu hoc)
11-15: trung hoc co so (trung hoc)
16-18: trung hoc pho thong (pho thong)
19-23: dai hoc
24->100: truong doi
*/
int n; // n>=1 va n<=100
printf("Nhap vao do tuoi:");
scanf_s("%d", &n);
while (n < 1 || n>100)
{
printf("Do tuoi khong hop le, nhap lai do tuoi:");
scanf_s("%d", &n);
}
if(n<=3)
printf("Hoc truong mam non");
else if(n<=5) //n>3 AND n<=5
printf("Hoc truong mau giao");
else if(n<=10)
printf("Hoc truong tieu hoc");
else if(n<=15)
printf("Hoc truong trung hoc");
else if(n<=18)
printf("Hoc truong pho thong");
else if (n <= 23)
printf("Hoc truong dai hoc");
else
printf("Hoc truong doi");
printf("\n");
system("pause");
return 0;
}
==================================================
/*
minh hoa switch .. case
*/
#include <stdio.h>
#include <stdlib.h>
int main3()
{
/*
nhap vao mot tuoi di hoc, va in ra trinh do va
cap hoc tuong ung
VD. 1-3 : mam non
4-5: mau giao
6-10: pho thong co so (tieu hoc)
11-15: trung hoc co so (trung hoc)
16-18: trung hoc pho thong (pho thong)
19-23: dai hoc
24->100: truong doi
*/
int n; // n>=1 va n<=100
printf("Nhap vao do tuoi:");
scanf_s("%d", &n);
while (n < 1 || n>100)
{
printf("Do tuoi khong hop le, nhap lai do tuoi:");
scanf_s("%d", &n);
}
switch (n)
{
case 1: case 2: case 3:
printf("Hoc truong mam non");
break;
case 4: case 5:
printf("Hoc truong mau giao");
break;
case 6: case 7: case 8: case 9: case 10:
printf("Hoc truong tieu hoc");
break;
case 11: case 12: case 13: case 14: case 15:
printf("Hoc truong trung hoc");
break;
default:
printf("Hoc truong doi");
break;
}
printf("\n");
system("pause");
return 0;
}
========================================================
#include <stdio.h>
#include <stdlib.h>
// minh hoa break, continue
int main()
{
/*
for (int i = 0; i < 10; i++)
for (int j = 1; j <= 10000; j++)
{
printf("Vong lap i = %d, j = %d\n", i, j);
if (j >= 5) break; //chi co tac dung voi vong lap cua j
}
*/
for (int i = 0; i < 5; i++)
for (int j = 1; j <= 20; j++)
{
if (j % 5) continue; //chi co tac dung voi vong lap cua j
//bo qua lenh phia sau khi
//j khong chia het cho 5
printf("Vong lap i = %d, j = %d\n", i, j);
}
system("pause");
return 0;
}
==================================================
#include <stdio.h>
#include <stdlib.h>
// minh hoa mang phan tu kieu so thuc (n<=100)
// 1. nhap mang
// 2. tim min, max
// 3. sap xep mang va in ra theo thu tu tang va giam dan
// (cung voi mang ban dau) ==> tao ra mang copy
int main()
{
double A[100], B[100];
int n;
//0<n va n<=100
printf("Nhap vao so phan tu cua mang:");
scanf_s("%d", &n);
while (n<=0 || n>100)
{
printf("Hay nhap nhap so luong hop le:");
scanf_s("%d", &n);
}
//nhap vao mang
printf("Nhap vao gia tri tung phan tu:\n");
for (int i = 0; i < n; i++)
{
printf("A[%d]=", i);
scanf_s("%lf", &A[i]);
}
// tim min va max
double max=A[0];
for (int i = 0; i < n; i++)
{
if (max < A[i]) max = A[i];
}
double min = A[0];
for (int i = 0; i < n; i++)
{
if (min > A[i]) min = A[i];
}
printf("Gia tri lon nhat la %.2lf\n", max);
printf("Gia tri nho nhat la %.2lf\n", min);
// tao ban copy cua mang ban dau
for (int i = 0; i < n; i++)
B[i] = A[i];
for (int i = n; i >= 2; i--)
for (int j = 0; j < i - 1; j++)
{
if (A[j] > A[j + 1])
{
double phu = A[j];
A[j] = A[j + 1];
A[j + 1] = phu;
}
}
printf("Mang ban dau: \n");
for (int i = 0; i < n; i++)
{
printf("%.2lf, ", B[i]);
}
printf("\n");
printf("Mang sau khi sap xep: \n");
for (int i = 0; i < n; i++)
{
printf("%.2lf, ", A[i]);
}
printf("\n");
system("pause");
return 0;
}
=======================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
nhap vao mot ten
tach ra ho va ten
VD. Nguyen Tan Dung
Ho: Nguyen Tan
Ten : Dung
*/
int main()
{
char fullname[50];
//nhap vao ten
printf("Nhap vao ten:");
gets_s(fullname); //nhap duoc xau co dau cach trong
//scanf_s("%s", fullname); // khong co dau &
//==> khong nhap duoc xau co dau cach trong
printf("Xau vua nhap: %s\n", fullname);
//Tach ra phan ten va phan Ho
//1. Tim vi tri dau cach trong cuoi cung
int vitri = 0;
int i = 0;
while (i < strlen(fullname))
{
if (fullname[i] == ' ')vitri = i;
i++;
}
printf("Vi tri dau cach trong cuoi cung: %d\n", vitri);
// Phan Ho tu vi tri 0 toi Dau cach trong cuoi cung
char surname[50];
printf("Ho: ");
for (i = 0; i < vitri; i++)
{
surname[i] = fullname[i];
}
surname[i] = '\0';
printf("%s", surname);
printf("\n");
// Phan ten tu dau cach trong cuoi cung toi het
printf("Ten: ");
// in tung ky tu!, dung strncpy
for (i = vitri+1; i < strlen(fullname); i++)
printf("%c", fullname[i]);
printf("\n");
system("pause");
return 0;
}
============================================================
#include <stdlib.h>
#include <stdio.h>
/*
minh hoa mang struct dung luu tru thong tin sinh vien
*/
typedef struct TTSV
{
char hoten[50];
char shsv[15];
float gk, th, ck;
float hp; //tinh theo cong thuc 0.2*(gk+th) + 0.6*ck
} SV;
//dung typedef de dinh nghia lai ten cau truc cho ngan
//typedef struct TTSV SV;
int main9()
{
SV lop[100];
int n; // so thanh vien thuc su (n>0 va n<=100)
//nhap thong tin cac thanh vien lop
printf("Nhap so thanh vien cua lop:");
scanf_s("%d", &n);
while (n <= 0 || n > 100)
{
printf("Hay nhap so luong hop le:");
scanf_s("%d", &n);
}
char buffer[100];
// dung vong lap for der nhap thong tin tung thanh vien
for (int i = 0; i < n; i++)
{
gets_s(buffer);
printf("Nhap vao thong tin thanh vien thu %d:\n", i + 1);
printf("Ho ten:"); fflush(stdin);// do bo nho dem truoc khi nhap xau
gets_s(lop[i].hoten);
printf("SHSV:"); fflush(stdin);// do bo nho dem truoc khi nhap xau
gets_s(lop[i].shsv);
printf("Diem giua ky:");
scanf_s("%f", &lop[i].gk);
printf("Diem thuc hanh:");
scanf_s("%f", &lop[i].th);
printf("Diem cuoi ky:");
scanf_s("%f", &lop[i].ck);
}
// tinh diem hoc phan
for (int i = 0; i < n; i++)
{
if (lop[i].gk < 3 || lop[i].th < 3)
lop[i].hp = 0;
else
lop[i].hp = 0.2*(lop[i].gk + lop[i].th) + 0.6*lop[i].ck;
}
//dem so luong sinh vien khong qua va in ra thong tin sinh vien qua
printf("Ket qua hoc tap:\n");
int sosinhvienkodat = 0;
printf("%30s %10s %4s %4s %4s %4s\n","Ho ten ","SHSV ","GK ","TH ","CK ","HP ");
for (int i = 0; i < n; i++)
{
if (lop[i].hp < 4) sosinhvienkodat++;
else
{
printf("%30s %10s %.2f %.2f %.2f %.2f\n", lop[i].hoten,
lop[i].shsv, lop[i].gk, lop[i].th, lop[i].ck, lop[i].hp);
}
}
printf("Tong so sinh vien khong dat: %d\n", sosinhvienkodat);
// sap xep va in ra thong tin sinh vien theo diem hoc phan giam dan
for (int i = n; i >= 2; i--)
for (int j = 0; j < i-1; j++)
{
if (lop[j].hp < lop[j + 1].hp)
{
SV phu = lop[j];
lop[j] = lop[j + 1];
lop[j + 1] = phu;
}
}
printf("\n========================================\n");
printf("Danh sach sinh vien voi diem hp giam dan:\n\n");
printf("%30s %10s %4s %4s %4s %4s\n", "Ho ten ", "SHSV ", "GK ", "TH ", "CK ", "HP ");
for (int i = 0; i < n; i++)
{
printf("%30s %10s %.2f %.2f %.2f %.2f\n", lop[i].hoten,
lop[i].shsv, lop[i].gk, lop[i].th, lop[i].ck, lop[i].hp);
}
system("pause");
return 0;
}
====================================================================
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
/*
minh hoa ham xu ly tam giac
*/
double tinhChuvi(double a, double b, double c)
{
if (a <= 0 || b <= 0 || c <= 0) return -1; //Canh khong hop le
if (a + b <= c || b + c <= a || a + c <= b)
return -2;// khong tao thanh tam giac
return a + b + c;
}
double tinhDienTich(double a, double b, double c)
{
if (a <= 0 || b <= 0 || c <= 0) return -1; //Canh khong hop le
if (a + b <= c || b + c <= a || a + c <= b)
return -2;// khong tao thanh tam giac
double p = tinhChuvi(a, b, c) / 2;
return sqrt(p*(p - a)*(p - b)*(p - c));
}
int main10()
{
double x, y, z;
printf("Nhap vao do dai 3 canh tam giac:");
scanf_s("%lf%lf%lf", &x, &y, &z);
if (tinhChuvi(x, y, z) < 0) printf("Tam giac khong hop le!\n");
else printf("Chu vi tam giac : %lf\n", tinhChuvi(x, y, z));
if (tinhDienTich(x, y, z) < 0) printf("Tam giac khong hop le!\n");
else printf("Dien tich tam giac : %lf\n", tinhDienTich(x, y, z));
system("pause");
return 0;
}
=========================================================
#include <stdio.h>
#include <stdlib.h>
/*
mih hoa doc so co tu 1->3 chu so
*/
//hàm đọc chữ số
void docChuSo(int a)
{
if (a == 0) printf("khong");
else if (a == 1)printf("mot");
else if (a == 2)printf("hai");
else if (a == 3)printf("ba");
else if (a == 4)printf("bon");
else if (a == 5)printf("nam");
else if (a == 6)printf("sau");
else if (a == 7)printf("bay");
else if (a == 8)printf("tam");
else if (a == 9)printf("chin");
else printf("ERROR!!!");
}
// kiem tra so can doc co phai so tuf 1->3 chu so hay khong
// ham tra ve -1 neu khong hop le, nguoc lai tra ve 0
int kiemTra(int n)
{
if (n>999 || n<-999) return -1;
else return 0;
}
// doc so co tu 1->3 chu so
void docSo(int n)
{
int a, b, c;// phan tram, chuc va don vi
if (kiemTra(n) == -1)
printf("Loi! So khong hop le.\n");
else
{
if (n<0) {
printf("am ");
n = -n;
}
c = n % 10; n = n / 10;
b = n % 10; n = n / 10;
a = n % 10;
if (a>0) { docChuSo(a); printf(" tram "); }
if (a>0 && b == 0 && c!=0)printf("le ");
if (b == 1) { printf("muoi "); }
if (b>1) { docChuSo(b); printf(" muoi "); }
if(c!=0) docChuSo(c);
printf("\n");
}
}
int main11(void)
{
docSo(-115);
docSo(-125);
docSo(-105);
docSo(-5);
docSo(25);
docSo(15);
docSo(110);
docSo(100);
docSo(10);
system("pause");
return 0;
}
===================================================
#include <stdio.h>
#include <stdlib.h>
void increase(int x)
{
x = x * 2;
}
void increase(int A[], int size)
{
for (int i = 0; i < size; i++)
A[i] = A[i] * 2;
}
void printArray(int A[], int size)
{
for (int i = 0; i < size; i++)
printf("%d ", A[i]);
}
int main12()
{
int a = 5;
printf("Gia tri ban dau cua a:%d\n", a);
increase(a);
printf("Gia tri cua a sau khi goi ham:%d\n", a);
int A[] = { 1,3,5,7,4 };
printf("Mang ban dau:");
printArray(A, 5);
printf("\n");
increase(A, 5);
printf("Mang sau khi goi ham:");
printArray(A, 5);
printf("\n");
system("pause");
return 0;
}
=========================================================
#include <stdio.h>
#include <stdlib.h>
void sort(int a[], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; ++i)
for (j = i + 1; j < n; ++j)
if (a[i] < a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
void display(int A[], int size)
{
int i;
for (i = 0; i<size; i++)
printf("%d ", A[i]);
printf("\n");
}
int main(void)
{
int i;
int array[16] = { 34, -5, 6, 0, 12, 100, 56, 22,
44, -3, -9, 12, 17, 22, 6, 11 };
printf("Mang ban dau:\n");
display(array, 16);
sort(array, 16);
printf("Mang sau khi sap xep:\n");
display(array, 16);
system("pause");
return 0;
}
Thursday, October 22, 2015
Thursday, October 16, 2014
Đề kiểm tra giữa kỳ cũ D3T
Friday, October 3, 2014
Một số bài tập lập trình cho SIE
Bài 2. Xây dựng chương trình hiển thị giờ hiện tại của hệ thống
Yêu cầu: Viết chương trình hiển thị giờ hiện tại của hệ thống dưới dạng số dùng các ký hiệu giống dạng LED điện tử
12:35:00
* **** **** **** **** ****
* * * * * * * *
* **** **** **** * * * *
* * * * * * * *
* **** **** **** **** ****
Độ dài của mỗi số có thể thay đổi trong khoảng (5-9)
Bài 3. Xây dựng chương trình đọc số
Mục đích: đọc số
123 -> mot tram hai muoi ba
12454 -> muoi hai nghin buon tram nam muoi bon
1013.678 -> mot nghin khong tram muoi ba phay sau tram bay tam
Các số này sẽ được nhập từ file hoặc bàn phím, kết quả sẽ được in ra màn hình và file tương ứng
Số được đọc có định dạng: số thực, phần nguyên tối đa 11 chữ số và phần thập phân tối đa 4 chữ số
XX XXX XXX XXX.YYYY
Bài 4. Xây dựng một chương trình quản lý danh ban tương tự chương trình quản lý danh bạ trên điện thoại.
Thông tin contact được lưu vào file (khi hiển thị sẽ được đọc ra từ file)
Các trường của một contact gồm
- họ tên
- giới tính
- sdt
- địa chỉ
Chương trình hỗ trợ tìm kiếm đơn giản theo họ tên hoặc địa chỉ
Bài 5. xây dựng tiện ích tìm kiếm các file trên windows
Đầu vào là một pattern (một từ hoặc một phần tên file), và một thư mục sẽ tìm kiếm
Đầu ra là danh sách các file (kèm đường dẫn) mà có tên file chứa pattern
VD. pattern là ".mp3", và đường dẫn là C:\musics
Thì chương trình sẽ đưa ra tất cả các file có tên chứa ".mp3" trong phần tên của thư mục trên
Đầu vào: một file văn bản chứa một đoạn văn bản bằng tiếng anh lấy trên trang báo nước ngoài
Đầu ra: Danh sách các tên riêng xuất hiện trong văn bản đó và tần số
VD. Văn bản đầu vào là
"Come out of the shadows and get right with the law," urged President Barack Obama in a televised address.
Republicans say the action, without Congress, is beyond his authority and relations will now be poisoned.
There are about 11m illegal immigrants in the US and this year children coming across the border prompted a crisis.
Under the plan, undocumented parents of children who are US citizens or legal residents will be able to apply for work permits lasting three years.
Only parents who have lived in the US for five years will qualify - about 3.7m people are estimated to fit this criteria.
President Barack Obama 1
Republicans 1
Congress 1
US 3
Đầu vào: một file văn bản chứa một đoạn văn bản bằng tiếng anh lấy trên trang báo nước ngoài
Đầu ra: Số lượng câu, số lượng từ, số lượng ký tự, độ dài trung bình của một câu, một từ
Các từ trong tiếng nah được ngăn cách bởi dấu các trống và các dấu câu
Tuesday, September 16, 2014
Tuesday, September 9, 2014
Thực trạng thương mại điện tử ở Việt Nam - THDC_SIE_nguyenhoangphong_20138639 baitaptuan3
I. Khó khăn khách quan
1. Thị phần nhỏ bé
Hiện nay chỉ mới được khoảng hơn 2 triệu khách hàng mua hàng qua TMĐT – con số quá bé so với hơn 35 triệu người dùng Internet và dân số 90 triệu người dân Việt Nam.
Nếu xét về doanh số, tại Việt Nam rất khó thống kê chính xác nhưng ước tính đạt khoảng gần $500 triệu trong năm 2012. Đem so với các cường quốc về TMĐT trên thế giới như Mỹ (343 tỷ), Nhật (127 tỷ), Anh (124 tỷ) và Trung Quốc (110 tỷ) thì thị trường TMĐT thật quá nhỏ bé.
Chính vì thị phần bé như vậy, nên khi triển khai mô hình TMĐT cụ thể, việc lựa chọn đối tượng khách hàng khá khó khăn và phải rất thận trọng để đưa ra mô hình phục vụ phù hợp với phân khúc khách hàng mình lựa chọn.
Khi triển khai mô hình TMĐT cụ thể, việc lựa chọn đối tượng khách hàng khá khó khăn và phải rất thận trọng để đưa ra mô hình phục vụ phù hợp.
2. Thói quen mua hàng
Vẫn tâm lý ra cửa hàng tạp hoá đầu ngõ để mua những đồ dùng thiết yếu hay ra các cửa hàng offline để mua sắm các đồ dùng, đồ thời trang và đồ công nghệ.
- Thói quen thích nhìn tận mắt, sờ tận tay
- Thói quen thanh toán bằng tiền mặt
3. Niềm tin
Người tiêu dùng tại Việt Nam vẫn chưa đặt niềm tin vào mua sắm trực tuyến, họ vẫn có cái nhìn thiếu thiện cảm với các hình thức kinh doanh trên mạng. Thực tế, có rất nhiều khách hàng phản ánh rằng sản phẩm họ nhận được khác xa với những gì họ nhìn thấy trên website, do vậy niềm tin vào TMĐT cũng bị lung lay.
Nguyên nhân của thực trạng này là do TMĐT đang bị lạm dụng, bóp méo bởi sự làm ăn thiếu chuyên nghiệp của các đơn vị cung cấp sản phẩm. Điển hình như vụ việc MB24 đã lợi dụng danh nghĩa TMĐT để phục vụ lợi ích riêng cho mình khiến cho khách hàng hiểu sai về TMĐT.
Một số khác thì dùng kênh TMĐT để phân phối hàng giả, hàng nhái kém chất lượng nhằm qua mắt người tiêu dùng – một cách làm ăn rất chụp giựt.
4. Hạ tầng thanh toán
- Thanh toán qua thẻ còn ít
- Các bước thanh toán qua internet banking rắc rối và không nhất quán giữa các ngân hàng
- Thẻ chủ yếu dùng để nhận lương và rút tiền tại ATM
- Chi phí giao dịch cao
- Hình thức thanh toán chưa đa dạng
- Cơ chế hoàn tiền còn chậm và chưa rõ ràng
- Hành lang pháp lý còn lỏng lẻo
5. Dịch vụ giao nhận
- Chưa có đơn vị thứ 3 thực sự chuyên nghiệp để đảm bảo tốt dịch vụ giao nhận mà không ảnh hưởng đến chất lượng phục vụ, hầu hết các đơn vị làm TMĐT đều phải tự xây dựng đội ngũ giao nhận để nắm quyền chủ động trong việc kiểm soát và điều phối hiệu quả cũng như chất lượng phục vụ khách hàng.
- Do đặc thù địa lý Việt Nam trải dài, mặt khác volume thị trường còn bé đồng thời việc tự tổ chức đội ngũ giao nhận khiến cho chi phí giao nhận rất cao, chiếm từ 10-15% giá trị của 1 giao dịch.
6. Vốn đầu tư
Đầu tư vào TMĐT là dài hạn và đốt tiền, thậm chí đốt rất nhiều tiền. Chi phí cho nhân sự, marketing, stock hàng là những chi phí rất lớn. Nếu không có khoản đầu tư lớn thì chỉ đi được nửa đường là chết, khi mà lợi nhuận chưa thể bù đắp cho khoản tiền đầu tư để educate thị trường, để làm brand và hoàn thiện quy trình.
Do vậy bạn nào đang hi vọng làm TMĐT sẽ thu lời được ngay thì tốt nhất đừng dấn thân vào TMĐT làm gì. Theo nguồn tin cá nhân thì tất cả các đơn vị đang đầu tư cho TMĐT tại Việt Nam thì chưa có đơn vị nào có lãi (trừ một số dự án vertical e-commerce), mà ngược lại số tiền đầu tư đã lên đến hàng triệu đô.
II. Khó khăn chủ quan
Xét một cách toàn diện thì các đơn vị làm TMĐT vẫn đang ở tâm lý vừa làm vừa thăm dò thị trường và tìm cách phản ứng để phù hợp với tâm lý người tiêu dùng. Do vậy việc triển khai khó có thể diễn ra bài bản ngày từ đầu và xuyên suốt trong quá trình hoạt động.
Mặt khác, rất nhiều đơn vị làm TMĐT vẫn chưa hiểu rõ thấu đáo sự khác biệt của TMĐT với bán hàng offline truyền thống, vẫn bê nguyên tư duy vận hành offline lên online, dẫn đến sự phản ứng chậm chạp, thiếu chuyên nghiệp và không phát huy hết lợi thế của online, chưa đánh trúng tâm lý của người tiêu dùng online.
Người tiêu dùng online có những hành vi và tâm lý mua hàng khác với người tiêu dùng offline. Người làm TMĐT cần hiểu rõ tâm lý đối tượng khách hàng của mình để có thể đưa ra những phương thức phục vụ phù hợp.
III. Kết luận
Để triển khai TMĐT thành công, bạn phải hiểu rất rõ về những gì bạn đang có và hiểu rõ về ngành hàng cũng như phân khúc khách hàng bạn đang nhắm tới, nhằm phát triển và chiếm tối đa thị phần trong mảng mình kinh doanh.
Chất lượng dịch vụ và kiểm soát tồn kho, thất thoát là hai khó khăn lớn nhất trong việc triển khai TMĐT nhưng nó lại là yếu tố sống còn để quyết định mô hình TMĐT của bạn có thành công hay không.
Ví dụ khó khan trong một số mô hình TMĐT
a. Mô hình sàn giao dịch
- Người dùng thường tìm đến các website có nhiều tin để đọc, và ngược lại người bán cũng tìm đến website có nhiều người đọc để đăng tin rao. Do đó, khi thiết lập mới một sàn giao dịch TMĐT, cần phải có được ngay lượng thông tin phong phú để thu hút người đọc, đặc biệt việc làm SEO sẽ giúp cho website có được nguồn traffic tự nhiên cực lớn
- Giao dịch trên các sàn giao dịch hầu như không có, mà đó chỉ là nơi người bán và người mua gặp nhau, sau đó tự liên lạc và thoả thuận hình thức bán hàng và thanh toán. Vì thế độ tin cậy sẽ không cao.
- Bài toán kiếm tiền từ mô hình này khá đơn giản, khiến cho việc muốn tăng mạnh doanh số rất khó khăn. Các mô hình tiêu biểu bao gồm: bán banner quảng cáo, bán tin VIP, bán lượt hiển thị các trang đầu
b. Mô hình website bán lẻ
- Khó khăn lớn nhất của mô hình này là kiểm soát hàng tồn kho. Để hàng tồn kho quá lâu và không có sự kiểm soát chặt chẽ và thường xuyên thì tất cả những khoản lãi thu được đều không đủ để bù lỗ cho chi phí hàng tồn kho
- Khó khăn thứ 2 là tạo được sự tin cậy và minh bạch về thông tin hàng hoá, giá cả, để cho tỷ lệ chuyển đổi (CR) phải luôn ở mức cao nhất nhằm tiết kiệm chi phí marketing, nâng cao hiệu quả bán hàng. Theo kinh nghiệm của tôi thì các website TMĐT phải đảm bảo tỷ lệ chuyển đổi ở mức tối thiểu 1% (CR=1%), có nghĩa là 100 người truy cập vào website của bạn thì ít nhất phải có 1 người mua hàng. Nhưng thực tế rất ít đơn vị đầu tư cho việc tracking hiệu quả và liên tục cải tiến để tăng CR.
- Khó khăn thứ 3 là đảm bảo chất lượng dịch vụ logistic từ khâu giao hàng, hỗ trợ sau bán, bảo hành, đổi trả hàng hoá đều phải chính xác, thân thiện và nhanh chóng. Mỗi nhân viên giao hàng, nhân viên CSKH đều phải là đại sứ bán hàng của công ty.
- Khó khăn thứ 4 là về margin, nếu bạn bán được nhiều thì các nhà phân phối mới chiết khấu cao cho bạn, nếu không thì % chiết khấu sẽ thấp và khó cạnh tranh về giá với đối thủ và thị trường offline. Ngược lại, nếu bạn để giá cao thì khó bán hàng, dẫn đến sản lượng thấp. Do vậy bạn cần cân đối thật chắc chắn về chính sách giá cũng như doanh số bán hàng.
- Khó khăn thứ 5 là cá lớn nuốt cá bé. Các ông lớn sẵn sàng vung tiền để phủ thị trường, để đạt quy mô và được giá tốt, lúc này việc cạnh tranh giữa các đơn vị quy mô nhỏ sẽ khó khăn hơn rất nhiều.
c. Mô hình website khuyến mãi, giảm giá
Ở mô hình này thì ngoài khó khăn như mô hình website bán lẻ, nó còn có khó khăn rất lớn đó là làm việc và thuyết phục nhà cung cấp đồng ý giảm giá ở mức đủ để hấp dẫn khách hàng mà nhà cung cấp không được lỗ hoặc chỉ lỗ ít để mang lại nguồn thu cũng như khách hàng mới cho họ.
Khách hàng của mô hình này thông thường kém trung thành, nên việc giữ chân khách hàng là điều rất khó. Do vậy cần có những quyết định trong chiến lược để khai thác lợi nhuận ngắn hạn từ những khách hàng có được, tránh việc đầu tư dài hạn để lấy user với hi vọng sau đó sẽ khai thác từ tập khách hàng đó.
d. Mô hình website đấu giá trực tuyến
Rõ ràng rằng tại Việt Nam, mô hình này đang gặp rào cản rất lớn đó là thiếu niềm tin. Tôi không tin là tôi đấu giá có thể trúng với giá rẻ, tôi không tin các nhà cung cấp sẵn sàng cho đi sản phẩm của mình chỉ nhằm mục đích quảng bá… có hàng vạn lý do để người tham gia không tin vào hình thức này.
Để làm mô hình này thành công, trước hết website đấu giá phải đảm bảo mọi yếu tố đều minh bạch và show được nó cho khách hàng thấy để họ khỏi nghi ngờ chân gỗ hay sự thiếu trung thực.
e. Mô hình localize e-commerce và dịch vụ
- Về localize e-commerce, sự mở rộng thị trường rất khó khăn và chậm do yếu tố địa phương hoá. Mặt khác, yếu tố chất lượng dịch vụ được đặt lên hàng đầu. Do vậy áp lực về chất lượng dịch vụ rất lớn, đòi hỏi người làm mô hình này phải kiểm soát tốt, song song với đó là chi phí đầu tư cho dịch vụ phải cao thì mới đảm bảo được chất lượng theo yêu cầu. Ví dụ về mô hình gọi món online, nếu sau 30-45 phút mà không giao được đồ ăn cho khách thì khách sẵn sàng huỷ order ngay lập tức.
- Về các website dịch vụ như đặt bàn, đặt chỗ, đặt phòng khách sạn,… thì khó kiểm soát được chất lượng của nhà cung cấp. Bởi lẽ mô hình này chỉ là yếu tố trung gian kết nối khách hàng với merchant. Nếu merchant không làm hài lòng khách hàng thì sẽ khó chiêu dụ khách hàng quay lại sử dụng tiếp dịch vụ của website. Do vậy cần kết hợp với các merchant để cùng kiểm soát chất lượng dịch vụ của merchant.
1. Thị phần nhỏ bé
Hiện nay chỉ mới được khoảng hơn 2 triệu khách hàng mua hàng qua TMĐT – con số quá bé so với hơn 35 triệu người dùng Internet và dân số 90 triệu người dân Việt Nam.
Nếu xét về doanh số, tại Việt Nam rất khó thống kê chính xác nhưng ước tính đạt khoảng gần $500 triệu trong năm 2012. Đem so với các cường quốc về TMĐT trên thế giới như Mỹ (343 tỷ), Nhật (127 tỷ), Anh (124 tỷ) và Trung Quốc (110 tỷ) thì thị trường TMĐT thật quá nhỏ bé.
Chính vì thị phần bé như vậy, nên khi triển khai mô hình TMĐT cụ thể, việc lựa chọn đối tượng khách hàng khá khó khăn và phải rất thận trọng để đưa ra mô hình phục vụ phù hợp với phân khúc khách hàng mình lựa chọn.
Khi triển khai mô hình TMĐT cụ thể, việc lựa chọn đối tượng khách hàng khá khó khăn và phải rất thận trọng để đưa ra mô hình phục vụ phù hợp.
2. Thói quen mua hàng
Vẫn tâm lý ra cửa hàng tạp hoá đầu ngõ để mua những đồ dùng thiết yếu hay ra các cửa hàng offline để mua sắm các đồ dùng, đồ thời trang và đồ công nghệ.
- Thói quen thích nhìn tận mắt, sờ tận tay
- Thói quen thanh toán bằng tiền mặt
3. Niềm tin
Người tiêu dùng tại Việt Nam vẫn chưa đặt niềm tin vào mua sắm trực tuyến, họ vẫn có cái nhìn thiếu thiện cảm với các hình thức kinh doanh trên mạng. Thực tế, có rất nhiều khách hàng phản ánh rằng sản phẩm họ nhận được khác xa với những gì họ nhìn thấy trên website, do vậy niềm tin vào TMĐT cũng bị lung lay.
Nguyên nhân của thực trạng này là do TMĐT đang bị lạm dụng, bóp méo bởi sự làm ăn thiếu chuyên nghiệp của các đơn vị cung cấp sản phẩm. Điển hình như vụ việc MB24 đã lợi dụng danh nghĩa TMĐT để phục vụ lợi ích riêng cho mình khiến cho khách hàng hiểu sai về TMĐT.
Một số khác thì dùng kênh TMĐT để phân phối hàng giả, hàng nhái kém chất lượng nhằm qua mắt người tiêu dùng – một cách làm ăn rất chụp giựt.
4. Hạ tầng thanh toán
- Thanh toán qua thẻ còn ít
- Các bước thanh toán qua internet banking rắc rối và không nhất quán giữa các ngân hàng
- Thẻ chủ yếu dùng để nhận lương và rút tiền tại ATM
- Chi phí giao dịch cao
- Hình thức thanh toán chưa đa dạng
- Cơ chế hoàn tiền còn chậm và chưa rõ ràng
- Hành lang pháp lý còn lỏng lẻo
5. Dịch vụ giao nhận
- Chưa có đơn vị thứ 3 thực sự chuyên nghiệp để đảm bảo tốt dịch vụ giao nhận mà không ảnh hưởng đến chất lượng phục vụ, hầu hết các đơn vị làm TMĐT đều phải tự xây dựng đội ngũ giao nhận để nắm quyền chủ động trong việc kiểm soát và điều phối hiệu quả cũng như chất lượng phục vụ khách hàng.
- Do đặc thù địa lý Việt Nam trải dài, mặt khác volume thị trường còn bé đồng thời việc tự tổ chức đội ngũ giao nhận khiến cho chi phí giao nhận rất cao, chiếm từ 10-15% giá trị của 1 giao dịch.
6. Vốn đầu tư
Đầu tư vào TMĐT là dài hạn và đốt tiền, thậm chí đốt rất nhiều tiền. Chi phí cho nhân sự, marketing, stock hàng là những chi phí rất lớn. Nếu không có khoản đầu tư lớn thì chỉ đi được nửa đường là chết, khi mà lợi nhuận chưa thể bù đắp cho khoản tiền đầu tư để educate thị trường, để làm brand và hoàn thiện quy trình.
Do vậy bạn nào đang hi vọng làm TMĐT sẽ thu lời được ngay thì tốt nhất đừng dấn thân vào TMĐT làm gì. Theo nguồn tin cá nhân thì tất cả các đơn vị đang đầu tư cho TMĐT tại Việt Nam thì chưa có đơn vị nào có lãi (trừ một số dự án vertical e-commerce), mà ngược lại số tiền đầu tư đã lên đến hàng triệu đô.
II. Khó khăn chủ quan
Xét một cách toàn diện thì các đơn vị làm TMĐT vẫn đang ở tâm lý vừa làm vừa thăm dò thị trường và tìm cách phản ứng để phù hợp với tâm lý người tiêu dùng. Do vậy việc triển khai khó có thể diễn ra bài bản ngày từ đầu và xuyên suốt trong quá trình hoạt động.
Mặt khác, rất nhiều đơn vị làm TMĐT vẫn chưa hiểu rõ thấu đáo sự khác biệt của TMĐT với bán hàng offline truyền thống, vẫn bê nguyên tư duy vận hành offline lên online, dẫn đến sự phản ứng chậm chạp, thiếu chuyên nghiệp và không phát huy hết lợi thế của online, chưa đánh trúng tâm lý của người tiêu dùng online.
Người tiêu dùng online có những hành vi và tâm lý mua hàng khác với người tiêu dùng offline. Người làm TMĐT cần hiểu rõ tâm lý đối tượng khách hàng của mình để có thể đưa ra những phương thức phục vụ phù hợp.
III. Kết luận
Để triển khai TMĐT thành công, bạn phải hiểu rất rõ về những gì bạn đang có và hiểu rõ về ngành hàng cũng như phân khúc khách hàng bạn đang nhắm tới, nhằm phát triển và chiếm tối đa thị phần trong mảng mình kinh doanh.
Chất lượng dịch vụ và kiểm soát tồn kho, thất thoát là hai khó khăn lớn nhất trong việc triển khai TMĐT nhưng nó lại là yếu tố sống còn để quyết định mô hình TMĐT của bạn có thành công hay không.
Ví dụ khó khan trong một số mô hình TMĐT
a. Mô hình sàn giao dịch
- Người dùng thường tìm đến các website có nhiều tin để đọc, và ngược lại người bán cũng tìm đến website có nhiều người đọc để đăng tin rao. Do đó, khi thiết lập mới một sàn giao dịch TMĐT, cần phải có được ngay lượng thông tin phong phú để thu hút người đọc, đặc biệt việc làm SEO sẽ giúp cho website có được nguồn traffic tự nhiên cực lớn
- Giao dịch trên các sàn giao dịch hầu như không có, mà đó chỉ là nơi người bán và người mua gặp nhau, sau đó tự liên lạc và thoả thuận hình thức bán hàng và thanh toán. Vì thế độ tin cậy sẽ không cao.
- Bài toán kiếm tiền từ mô hình này khá đơn giản, khiến cho việc muốn tăng mạnh doanh số rất khó khăn. Các mô hình tiêu biểu bao gồm: bán banner quảng cáo, bán tin VIP, bán lượt hiển thị các trang đầu
b. Mô hình website bán lẻ
- Khó khăn lớn nhất của mô hình này là kiểm soát hàng tồn kho. Để hàng tồn kho quá lâu và không có sự kiểm soát chặt chẽ và thường xuyên thì tất cả những khoản lãi thu được đều không đủ để bù lỗ cho chi phí hàng tồn kho
- Khó khăn thứ 2 là tạo được sự tin cậy và minh bạch về thông tin hàng hoá, giá cả, để cho tỷ lệ chuyển đổi (CR) phải luôn ở mức cao nhất nhằm tiết kiệm chi phí marketing, nâng cao hiệu quả bán hàng. Theo kinh nghiệm của tôi thì các website TMĐT phải đảm bảo tỷ lệ chuyển đổi ở mức tối thiểu 1% (CR=1%), có nghĩa là 100 người truy cập vào website của bạn thì ít nhất phải có 1 người mua hàng. Nhưng thực tế rất ít đơn vị đầu tư cho việc tracking hiệu quả và liên tục cải tiến để tăng CR.
- Khó khăn thứ 3 là đảm bảo chất lượng dịch vụ logistic từ khâu giao hàng, hỗ trợ sau bán, bảo hành, đổi trả hàng hoá đều phải chính xác, thân thiện và nhanh chóng. Mỗi nhân viên giao hàng, nhân viên CSKH đều phải là đại sứ bán hàng của công ty.
- Khó khăn thứ 4 là về margin, nếu bạn bán được nhiều thì các nhà phân phối mới chiết khấu cao cho bạn, nếu không thì % chiết khấu sẽ thấp và khó cạnh tranh về giá với đối thủ và thị trường offline. Ngược lại, nếu bạn để giá cao thì khó bán hàng, dẫn đến sản lượng thấp. Do vậy bạn cần cân đối thật chắc chắn về chính sách giá cũng như doanh số bán hàng.
- Khó khăn thứ 5 là cá lớn nuốt cá bé. Các ông lớn sẵn sàng vung tiền để phủ thị trường, để đạt quy mô và được giá tốt, lúc này việc cạnh tranh giữa các đơn vị quy mô nhỏ sẽ khó khăn hơn rất nhiều.
c. Mô hình website khuyến mãi, giảm giá
Ở mô hình này thì ngoài khó khăn như mô hình website bán lẻ, nó còn có khó khăn rất lớn đó là làm việc và thuyết phục nhà cung cấp đồng ý giảm giá ở mức đủ để hấp dẫn khách hàng mà nhà cung cấp không được lỗ hoặc chỉ lỗ ít để mang lại nguồn thu cũng như khách hàng mới cho họ.
Khách hàng của mô hình này thông thường kém trung thành, nên việc giữ chân khách hàng là điều rất khó. Do vậy cần có những quyết định trong chiến lược để khai thác lợi nhuận ngắn hạn từ những khách hàng có được, tránh việc đầu tư dài hạn để lấy user với hi vọng sau đó sẽ khai thác từ tập khách hàng đó.
d. Mô hình website đấu giá trực tuyến
Rõ ràng rằng tại Việt Nam, mô hình này đang gặp rào cản rất lớn đó là thiếu niềm tin. Tôi không tin là tôi đấu giá có thể trúng với giá rẻ, tôi không tin các nhà cung cấp sẵn sàng cho đi sản phẩm của mình chỉ nhằm mục đích quảng bá… có hàng vạn lý do để người tham gia không tin vào hình thức này.
Để làm mô hình này thành công, trước hết website đấu giá phải đảm bảo mọi yếu tố đều minh bạch và show được nó cho khách hàng thấy để họ khỏi nghi ngờ chân gỗ hay sự thiếu trung thực.
e. Mô hình localize e-commerce và dịch vụ
- Về localize e-commerce, sự mở rộng thị trường rất khó khăn và chậm do yếu tố địa phương hoá. Mặt khác, yếu tố chất lượng dịch vụ được đặt lên hàng đầu. Do vậy áp lực về chất lượng dịch vụ rất lớn, đòi hỏi người làm mô hình này phải kiểm soát tốt, song song với đó là chi phí đầu tư cho dịch vụ phải cao thì mới đảm bảo được chất lượng theo yêu cầu. Ví dụ về mô hình gọi món online, nếu sau 30-45 phút mà không giao được đồ ăn cho khách thì khách sẵn sàng huỷ order ngay lập tức.
- Về các website dịch vụ như đặt bàn, đặt chỗ, đặt phòng khách sạn,… thì khó kiểm soát được chất lượng của nhà cung cấp. Bởi lẽ mô hình này chỉ là yếu tố trung gian kết nối khách hàng với merchant. Nếu merchant không làm hài lòng khách hàng thì sẽ khó chiêu dụ khách hàng quay lại sử dụng tiếp dịch vụ của website. Do vậy cần kết hợp với các merchant để cùng kiểm soát chất lượng dịch vụ của merchant.
Wednesday, September 3, 2014
Hệ thống nhúng THDC_SIE_20141_LeMinhNguyen_20138317
Bài tập tuần 2: Tìm hiểu về hệ thống nhúng
Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ thống tích hợp cả phần cứng và phần phềm phục vụ các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc và truyền tin. Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có tính năng tự động hoá cao.
Nói một cách đơn giản khi một hệ tính toán (có thể là PC, IPC, PLC, vi xử lý, vi hệ thống, DSP vv…) được nhúng vào trong một sản phẩm hay một hệ thống một cách hữu cơ và thực hiện một số chức năng cụ thể của hệ thống thì ta gọi đó là một hệ thống nhúng. Ví dụ quanh ta có rất nhiều sản phẩm nhúng như lò vi sóng, nồi cơm điện, điều hoà, điện thoại di động, ô tô, máy bay, tàu thuỷ, các đầu đo cơ cấu chấp hành thông minh vv. Ta có thể thấy hiện nay hệ thống nhúng có mặt ở mọi lúc mọi nơi trong cuộc sống của chúng ta. Các nhà thống kê trên thế giới đã thống kê được rằng số chip vi xử lý ở trong các máy PC và các server, các mạng LAN, WAN, Internet chỉ chiếm không đầy 1% tổng số chip vi xử lý có trên thế giới. Hơn 99% số vi xử lý còn lại nằm trong các hệ thống nhúng.Như vậy công nghệ thông tin không chỉ đơn thuần là PC, mạng LAN, WAN và Internet như nhiều người thường nghĩ. Đó chỉ là bề nổi của một tảng băng chìm. Phần chìm của công nghệ thông tin chính là các ứng dụng của các hệ nhúng có mặt trong mọi ngành nghề của đời sống xã hội hiện nay. Các hệ nhúng được tích hợp trong các thiết bị đo lường điều khiển và các sản phẩm cơ điện tử tạo nên đầu não và linh hồn của sản phẩm.Trong các hệ nhúng, hệ thống điều khiển nhúng đóng một vai trò hết sức quan trọng. Hệ điều khiển nhúng là hệ thống mà máy tính được nhúng vào vòng điều khiển của sản phẩm nhằm điều khiển một đối tượng, điều khiển một qúa trình công nghệ đáp ứng các yêu cầu đặt ra. Hệ thống điều khiển nhúng lấy thông tin từ các cảm biến, xử lý tính toán các thuật điều khiển và phát tín hiệu điều khiển cho các cơ cấu chấp hành. Khác với các hệ thống điều khiển cổ điển theo nguyên lý thuỷ lực, khí nén, rơ le, mạch tương tự, hệ điều khiển nhúng là hệ thống điều khiển số được hình thành từ những năm 1960 đến nay. Trước đây các hệ điều khiển số thường do các máy tính lớn đảm nhiệm, ngày nay chức năng điều khiển số này do các chip vi xử lý, các hệ nhúng đã thay thế. Phần mềm điều khiển ngày càng tinh sảo tạo nên độ thông minh của thiết bị và ngày càng chiếm tỷ trọng lớn trong giá thành của thiết bị. Như vậy không phải tất cả các sản phẩm đo lường và điều khiển đều là các hệ nhúng. Hiện nay chúng ta còn gặp nhiều hệ thống điều khiển tự động hoạt động theo nguyên tắc cơ khí, thuỷ lực, khí nén, rơ le, hoặc diện tử tương tự… Ngược lại phần lớn các sản phẩm cơ điện tử hiện nay đều có nhúng trong nó các chip vi xử lý hoặc một mạng nhúng. Ta biết rằng cơ điện tử là sự cộng năng của các công nghệ cơ khí, điện tử, điều khiển và công nghệ thông tin. Sự phối hợp đa ngành này tạo nên sự vượt trội của các sản phẩm cơ điện tử. Sản phẩm cơ điện tử ngày càng tinh sảo và ngày càng thông minh mà phần hồn của nó do các phần mềm nhúng trong nó tạo nên. Các sản phẩm cơ điện tử là các sản phẩm có ít nhất một quá trình cơ khí (thường là một quá trình chuyển động), là đối tượng để điều khiển do vậy các sản phẩm cơ điện tử ngày nay thường có các hệ nhúng trong nó nhưng ngược lại không phải hệ thống nhúng nào cũng là một hệ cơ điện tử.
Các đặc điểm của hệ thống nhúng
Hệ thống nhúng thường có một số đặc điểm chung như sau:
• Các hệ thống nhúng được thiết kế để thực hiện một số nhiệm vụ chuyên dụng chứ không phải đóng vai trò là các hệ thống máy tính đa chức năng. Một số hệ thống đòi hỏi ràng buộc về tính hoạt động thời gian thực để đảm bảo độ an toàn và tính ứng dụng; một số hệ thống không đòi hỏi hoặc ràng buộc chặt chẽ, cho phép đơn giản hóa hệ thống phần cứng để giảm thiểu chi phí sản xuất.
• Một hệ thống nhúng thường không phải là một khối riêng biệt mà là một hệ thống phức tạp nằm trong thiết bị mà nó điều khiển.
• Phần mềm được viết cho các hệ thống nhúng được gọi là firmware và được lưu trữ trong các chip bộ nhớ ROM hoặc bộ nhớ flash chứ không phải là trong một ổ đĩa. Phần mềm thường chạy với số tài nguyên phần cứng hạn chế: không có bàn phím, màn hình hoặc có nhưng với kích thước nhỏ, dung lượng bộ nhớ thấp Sau đây, ta sẽ đi sâu, xem xét cụ thể đặc điểm của các thành phần của hệ thống nhúng.
- Giao diện
Các hệ thống nhúng có thể không có giao diện (đối với những hệ thống đơn nhiệm) hoặc có đầy đủ giao diện giao tiếp với người dùng tương tự như các hệ điều hành trong các thiết bị để bàn. Đối với các hệ thống đơn giản, thiết bị nhúng sử dụng nút bấm, đèn LED và hiển thị chữ cỡ nhỏ hoặc chỉ hiển thị số, thường đi kèm với một hệ thống menu đơn giản.
Còn trong một hệ thống phức tạp hơn, một màn hình đồ họa, cảm ứng hoặc có các nút bấm ở lề màn hình cho phép thực hiện các thao tác phức tạp mà tối thiểu hóa được khoảng không gian cần sử dụng; ý nghĩa của các nút bấm có thể thay đổi theo màn hình và các lựa chọn. Các hệ thống nhúng thường có một màn hình với một nút bấm dạng cần điểu khiển (joystick button). Sự phát triển mạnh mẽ của mạng toàn cầu đã mang đến cho những nhà thiết kế hệ nhúng một lựa chọn mới là sử dụng một giao diện web thông qua việc kết nối mạng. Điều này có thể giúp tránh được chi phí cho những màn hình phức tạp nhưng đồng thời vẫn cung cấp khả năng hiển thị và nhập liệu phức tạp khi cần đến, thông qua một máy tính khác. Điều này là hết sức hữu dụng đối với các thiết bị điều khiển từ xa, cài đặt vĩnh viễn. Ví dụ, các router là các thiết bị đã ứng dụng tiện ích này.
- Kiến trúc CPU
Các bộ xử lý trong hệ thống nhúng có thể được chia thành hai loại: vi xử lý và vi điều khiển. Các vi điều khiển thường có các thiết bị ngoại vi được tích hợp trên chip nhằm giảm kích thước của hệ thống. Có rất nhiều loại kiến trúc CPU được sử dụng trong thiết kế hệ nhúng như ARM, MIPS, Coldfire/68k, PowerPC, x86, PIC, 8051, Atmel AVR, Renesas H8, SH, V850, FR-V, M32R, Z80, Z8 … Điều này trái ngược với các loại máy tính để bàn, thường bị hạn chế với một vài kiến trúc máy tính nhất định. Các hệ thống nhúng có kích thước nhỏ và được thiết kế để hoạt động trong môi trường công nghiệp thường lựa chọn PC/104 và PC/104++ làm nền tảng. Những hệ thống này thường sử dụng DOS, Linux, NetBSD hoặc các hệ điều hành nhúng thời gian thực như QNX hay VxWorks. Còn các hệ thống nhúng có kích thước rất lớn thường sử dụng một cấu hình thông dụng là hệ thống on chip (System on a chip – SoC), một bảng mạch tích hợp cho một ứng dụng cụ thể (an application-specific integrated circuit – ASIC). Sau đó nhân CPU được mua và thêm vào như một phần của thiết kế chip. Một chiến lược tương tự là sử dụng FPGA (field-programmable gate array) và lập trình cho nó với những thành phần nguyên lý thiết kế bao gồm cả CPU.
-Thiết bị ngoại vi
Hệ thống nhúng giao tiếp với bên ngoài thông qua các thiết bị ngoại vi, ví dụ như:
• Serial Communication Interfaces (SCI): RS-232, RS-422, RS-485...
• Synchronous Serial Communication Interface: I2C, JTAG, SPI, SSC và ESSI
• Universal Serial Bus (USB)
• Networks: Controller Area Network, LonWorks...
• Bộ định thời: PLL(s), Capture/Compare và Time Processing Units
• Discrete IO: General Purpose Input/Output (GPIO)
-Công cụ phát triển
Tương tự như các sản phẩm phần mềm khác, phần mềm hệ thống nhúng cũng được phát triển nhờ việc sử dụng các trình biên dịch (compilers), chương trình dịch hợp ngữ (assembler) hoặc các công cụ gỡ rối (debuggers). Tuy nhiên, các nhà thiết kế hệ thống nhúng có thể sử dụng một số công cụ chuyên dụng như:
• Bộ gỡ rối mạch hoặc các chương trình mô phỏng (emulator)
• Tiện ích để thêm các giá trị checksum hoặc CRC vào chương trình, giúp hệ thống nhúng có thể kiểm tra tính hợp lệ của chương trình đó.
• Đối với các hệ thống xử lý tín hiệu số, người phát triển hệ thống có thể sử dụng phần mềm workbench như MathCad hoặc Mathematica để mô phỏng các phép toán.
• Các trình biên dịch và trình liên kết (linker) chuyên dụng được sử dụng để tối ưu hóa một thiết bị phần cứng.
• Một hệ thống nhúng có thể có ngôn ngữ lập trình và công cụ thiết kế riêng của nó hoặc sử dụng và cải tiến từ một ngôn ngữ đã có sẵn.
Các công cụ phần mềm có thể được tạo ra bởi các công ty phần mềm chuyên dụng về hệ thống nhúng hoặc chuyển đổi từ các công cụ phát triển phần mềm GNU. Đôi khi, các công cụ phát triển dành cho máy tính cá nhân cũng được sử dụng nếu bộ xử lý của hệ thống nhúng đó gần giống với bộ xử lý của một máy PC thông dụng.
-Độ tin cậy
Các hệ thống nhúng thường nằm trong các cỗ máy được kỳ vọng là sẽ chạy hàng năm trời liên tục mà không bị lỗi hoặc có thể khôi phục hệ thống khi gặp lỗi. Vì thế, các phần mềm hệ thống nhúng được phát triển và kiểm thử một cách cẩn thận hơn là phần mềm cho máy tính cá nhân. Ngoài ra, các thiết bị rời không đáng tin cậy như ổ đĩa, công tắc hoặc nút bấm thường bị hạn chế sử dụng. Việc khôi phục hệ thống khi gặp lỗi có thể được thực hiện bằng cách sử dụng các kỹ thuật như watchdog timer – nếu phần mềm không đều đặn nhận được các tín hiệu watchdog định kì thì hệ thống sẽ bị khởi động lại.
Một số vấn đề cụ thể về độ tin cậy như:
• Hệ thống không thể ngừng để sửa chữa một cách an toàn, ví dụ như ở các hệ thống không gian, hệ thống dây cáp dưới đáy biển, các đèn hiệu dẫn đường,… Giải pháp đưa ra là chuyển sang sử dụng các hệ thống con dự trữ hoặc các phần mềm cung cấp một phần chức năng.
• Hệ thống phải được chạy liên tục vì tính an toàn, ví dụ như các thiết bị dẫn đường máy bay, thiết bị kiểm soát độ an toàn trong các nhà máy hóa chất,… Giải pháp đưa ra là lựa chọn backup hệ thống.
• Nếu hệ thống ngừng hoạt động sẽ gây tổn thất rất nhiều tiền của ví dụ như các dịch vụ buôn bán tự động, hệ thống chuyển tiền, hệ thống kiểm soát trong các nhà máy …
- Một số ví dụ điển hình về hệ thống nhúng
o Các hệ thống dẫn đường trong không lưu, hệ thống định vị toàn cầu, vệ tinh.
o Các thiết bị gia dụng: tủ lạnh, lò vi sóng, lò nướng,…
o Các thiết bị kết nối mạng: router, hub, gateway,…
o Các thiết bị văn phòng: máy photocopy, máy fax, máy in, máy scan,…
o Các thiết bị y tế: máy thẩm thấu, máy điều hòa nhịp tim,…
o Các máy trả lời tự động
o Dây chuyền sản xuất tự động trong công nghiệp, robots.
Các hệ thống nhúng tạo cơ sở cho kỷ nguyên hậu PC (post-PC era), các hệ thống xử lý thông tin chuyển dần từ PC sang hệ thống nhúng cho các ứng dụng cụ thể.
NOTE: Đặt tên các thư mục con cho các tuần sai!
So sánh lập trình trên PC và lập trình trên di động - THDC_SIE_20141_LêĐắcToàn_20138452 baitaptuan2
Lập trình trên thiết bị di dộng:
1,Giới
thiệu:
Trong guồng quay hối hả của cuộc sống hiện nay,
thiết bị di động với ưu thế nhỏ gọn nhưng tích hợp cả một thế giới văn phòng và
giải trí mini đã nghiễm nhiên trở thành người bạn đồng hành thân thiết của hầu
hết mọi người, đặc biệt là giới trẻ năng động. Với sự tăng trưởng mạnh mẽ của
thị trường này, không chỉ các hãng sản xuất di động mà cả các nhà phân phối và
những doanh nghiệp công nghệ khác cũng chen chân vào cuộc đua phát triển ứng dụng
mobile để khai thác hết các tính năng của thiết bị di động đỉnh cao như:
iPhone, iPad, Samsung Galaxy, Nokia Lumia, Blackberry, HTC, … Việt Nam cũng
không nằm ngoài xu hướng này. Điều đó đặt ra một yêu cầu là phải có đội ngũ
nhân sự lập trình giỏi để cho ra đời các tiện ích độc đáo và thiết thực, đáp ứng
đòi hỏi ngày càng cao của người dung.
2,Khái niệm:
Trước hết thế nào là lập trình và lập trình
là gì thì có thể hiểu đơn giàn là thiết bị máy móc (Devices) không tự biết phải
làm gì đề phục vụ một nhu cầu nào đó của con người. Nó chỉ có thể làm những gì
được định sẵn với khả năng thực hiện nhanh và chính xác hơn con người (Keeper sẽ
nói về AI - Artificial Intelligence sau, AI = Trí tuệ nhân tạo; khái niệm giúp
máy móc thiết bị tự quyết định và tự đưa ra giải pháp tùy tình huống mà không cần
con người vạch sẵn) vậy nên chúng ta phải lập trình cho máy tính.
3,Cơ bản khi lập trình cho thiết bị di
động:
Vì vậy nếu muốn thiết bị cho ra kết quả của
phép nhân từ 2 con số thì người lập trình phải viết 1 đoạn code cung cấp cho
thiét bị 2 variables(biến số) represents (đại diện) cho 2 con số muốn tính toán(Calculate)
và cách thức (Method) để cho ra kết quả phép nhân. Thiết bị khi đó không cần biết
2 con số là gì mà nó chỉ biết khi người sử dụng nhập 2 con số và click Enter
thì nó chỉ việc lấy 2 số này và áp dụng công thức đã được lập trình viên định sẵn
và trả về kết quả. Như vậy nếu chỉ có công thức nhân mà không có công thức cộng
trừ hay chia thì nó chỉ có thể cho ra kết quả nhân. Do đó muốn nó cho ra kết quả
cộng trừ hay chia thì người lập trình buộc phải cung cấp thêm cho nó công thức
công trừ hay chia.
Lập trình cho các thiết bị di động như Mobile Phones, Portable Devices, Mobility Devices...Được gọi là lập trình di động.
Tùy thuộc vào khả năng, tính chất của từng loại mobile devices mà có những cách lập trình, ngôn ngữ, môi trường khác nhau. Hiện tại phổ biến nhất vẫn là Java MIDP/CLDC technology.
Lập trình cho các thiết bị di động như Mobile Phones, Portable Devices, Mobility Devices...Được gọi là lập trình di động.
Tùy thuộc vào khả năng, tính chất của từng loại mobile devices mà có những cách lập trình, ngôn ngữ, môi trường khác nhau. Hiện tại phổ biến nhất vẫn là Java MIDP/CLDC technology.
Ngôn ngữ để sử dụng lập trình cho những thiết
bị di động hỗ trợ MIDP/CLDC được gọi là Java J2ME(Java 2 Micro Edition) và nó
khác với J2SE , J2EE ... ở chỗ nó chỉ có những API và cơ chế tương thích với
MIDP/CLDC và vì thế mới chạy được trên thiét bị hỗ trợ MIDP/CLDC.
Bên cạnh đó còn có Android SDK (Java Dalvik), iPhone SDK (iPhone OS) là những Software Development Kit dùng đề phát triển phần mềm cho các thiết bị chạy hệ điều hành Android hay iPhone OS.
Với loại này thì syntax, API, library và môi trường hoàn toàn khác với J2ME, và muốn lập trình cho Android hay iPhone OS... thì bắt buộc phải xem tài liệu về nó chứ không thể đem source code của J2ME rồi bắt chạy trên Android hay iPhone và ngược lại.
Mỗi chủng loại có những tools và material khác nhau nhưng programming concept thì không khác nhau. Tất cả đều vẫn phải sử dụng những thuật toán(Algorithm) như
if satisfy this condition, do something, else, do something else
Các vòng loop như:
while this condition is still true, keep doing something until this condition is false
Programming concept thì như nhau nhưng khác nhau về câu lệnh(syntax) và library vì mỗi chủng loại khác nhau sẽ có những loại tài nguyên khác nhau giống như Window và Mac có giao diện khác nhau vì nó có library khác nhau do đó không thể sử dụng Window library mà cho ra giao diện của Mac
Bên cạnh đó còn có Android SDK (Java Dalvik), iPhone SDK (iPhone OS) là những Software Development Kit dùng đề phát triển phần mềm cho các thiết bị chạy hệ điều hành Android hay iPhone OS.
Với loại này thì syntax, API, library và môi trường hoàn toàn khác với J2ME, và muốn lập trình cho Android hay iPhone OS... thì bắt buộc phải xem tài liệu về nó chứ không thể đem source code của J2ME rồi bắt chạy trên Android hay iPhone và ngược lại.
Mỗi chủng loại có những tools và material khác nhau nhưng programming concept thì không khác nhau. Tất cả đều vẫn phải sử dụng những thuật toán(Algorithm) như
if satisfy this condition, do something, else, do something else
Các vòng loop như:
while this condition is still true, keep doing something until this condition is false
Programming concept thì như nhau nhưng khác nhau về câu lệnh(syntax) và library vì mỗi chủng loại khác nhau sẽ có những loại tài nguyên khác nhau giống như Window và Mac có giao diện khác nhau vì nó có library khác nhau do đó không thể sử dụng Window library mà cho ra giao diện của Mac
Lập
trình trên PC
1,Khái
niệm:
Các ngôn ngữ lập trình khác nhau hỗ trợ các phong cách lập trình
khác nhau (còn gọi là các phương pháp lập
trình). Một phần của công việc lập trình là việc lựa chọn một trong
những ngôn ngữ phù hợp nhất với bài toán cần giải quyết. Các ngôn ngữ lập trình
khác nhau đòi hỏi lập trình viên phải xử lý các chi tiết ở các mức độ khác nhau
khi cài đặt các thuật toán. Thông thường, điều này dẫn tới thỏa hiệp giữa thuận
lợi cho việc lập trình và hiệu quả của chương trình (thỏa hiệp giữa "thời
gian lập trình" và "và thời gian tính toán").
Ngôn ngữ lập trình duy nhất mà máy tính có thể thực thi trực tiếp
là ngôn ngữ máy (còn
gọi là "mã máy"). Thời kỳ đầu, tất cả các lập trình viên viết chương
trình toàn bằng mã máy, nhưng hầu như không ai làm việc này nữa. Thay vào đó,
các lập trình viên viết mã nguồn, và một máy tính (chạy một trình biên dịch, một trình thông dịch hoặc
đôi khiassembler)
dịch nó qua một hoặc vài bước để bổ sung đầy đủ các chi tiết, trước khi bản mã
máy cuối cùng được thực thi trên máy tính đích. Thậm chí khi cần điều khiển mức
thấp của máy tính đích, các lập trình viên viết bằng hợp
ngữ. Các lệnh của ngôn ngữ này có tính gợi nghĩa và tương ứng một-một
với các lệnh trong ngôn ngữ máy.
Một số ngôn ngữ, thay vì được dịch ra mã máy, lại được dịch ra dạng
nhị phân p-code (hoặc byte-code).
Có các trình thông dịch tương ứng để thực thi dạng nhị phân này. Bytecode được
sử dụng trong ngôn ngữ lập trình Java của Sun
Microsystems cũng
như họ ngôn ngữ lập trình .NET gần đây của Microsoft và Visual
Basic trước
phiên bản.NET
Sự khác nhau: cơ bản đó là lập trình trên
thiết bị di động ngày nay đang la xu thế và được ưa chuộng hơn nhờ
tính năng cơ động của nó,đem lại sự tiện lợi cho người sử dụng,đồng
thời dung lượng cũng như bộ nhớ của các thiết bị di động nhỏ hơn nên
khi lập trình cần tối thiểu input và tối đa output.Tuy nhiên lập trình
trên pc vẫn là 1 chương trình gốc,nền tảng cho các lập trình trên di
động sau này.
Subscribe to:
Posts (Atom)