This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

Thứ Tư, 6 tháng 4, 2016

Tạo hàng nghìn Email không cần SĐT với Zoho Mail


Hôm nay mình sẽ chia sẻ cho các bạn một cách mà ai cũng biết rồi (mặc dù có hơi giật tít một chút @@). Với phương pháp tạo Email domain miễn phí tại Zoho mà đã được chia sẻ trên nhiều blog thì nay mình hướng dẫn lại chút và thêm vào đó là những mục đích mà mình sử dụng trước đó.
Với những cái email dạng như sau:
  • admin@trogiup.net
  • 123@trogiup.net
  • abc@troigiup.net
Nhìn vào đó thì bạn đã nghĩ ra ý tưởng gì với nó chưa? Mình thì đã từng sử dụng nó với rất nhiều mục đích như:
  1. Đăng ký blog tumblr.com, WordPress.com, Weebly.com. v.v….
  2. Đăng ký nick Facebook
  3. Đăng ký nick ở những site tặng View Free (chơi Youtube là chính)
  4. Và nhiều cái mà bạn có thể làm với dạng Email như vậy.
Vậy cơ chế hoạt động của nó như thế nào? Rất đơn giản. Giả sử mình có Emain là: SpeedyGok@Trogiup.Net. Thì khi đó bạn đăng ký nick ở bất cứ đâu, nhận mail từ bất kỳ ai gửi mail về email có dạng *******@trogiup.net. Ví dụ:
  • vietak@trogiup.net
  • vietak-dep-trai-vl@trogiup.net
  • speedy-tools-pro@trogiup.et
  • 1232148u76t2348@trogiup.net
  • bla bla blo blo….
Thì khi đó tất cả thư gửi về những Email dạng đó thì đều được gửi về SpeedyGok@Trogiup.Net. Mình đã dùng như vậy lâu rồi và thấy rất ổn. Nó cũng giống như kiểu những cái mail 10 phút đó. Còn cách vận dụng nó như nào thì các bạn hãy thử đi nhé :) Còn cách tạo email domain zoho như thế nào thì làm theo những bước sau đây:

1. Đăng ký tài khoản Zoho

Zoho.com là dịch vụ, website uy tín được hàng triệu người tin dùng vì nó có rất nhiều chức năng văn phòng có ích cho tất cả chúng ta. Trong tất cả những chức năng đó thì nay mình chỉ đề cập và quan tâm đến vấn đề tạo email domain thôi. Và đối với mình thì nó có thể hoàn toàn thay thế được live.com (Đã không đăng ký mới được nữa). Trước tiên bạn cần đăng ký tài khoản zoho tại đây.

Sau khi đăng ký xong thì bạn vào mail và xác nhận đăng ký.

2. Đăng ký dịch vụ Mail Zoho

Bạn truy cập vào trang chủ ứng dụng của zoho tại đây, rất nhiều ứng dụng và tiện ích sẽ hiện ra. Bạn chọn Mail / Access…

Một bảng đăng ký sử dụng loại dịch vụ sẽ hiện ra, vì nhu cầu của bạn là cá nhân, vậy chọn LITE thôi (FREE mà)…

Miễn phí 5 mail, mỗi mail có 5GB dữ liệu lưu trữ và 5Gb dữ liệu chia sẻ…
tao-email-voi-ten-mien-rieng-hoan-toan-mien-phi-va-chuyen-nghiep-voi-zoho-4

Nhập domain cần tạo địa chỉ mail…
tao-email-voi-ten-mien-rieng-hoan-toan-mien-phi-va-chuyen-nghiep-voi-zoho-5

Bắt đầu xác nhận quyền sở hữu tên miền…
tao-email-voi-ten-mien-rieng-hoan-toan-mien-phi-va-chuyen-nghiep-voi-zoho-6
Đây là thông tin cấu hình, bạn hãy truy cập vào Cpanel DOMAIN và nhập nó vào.
Chọn Type là CNAME và nhập 2 thông số mà bạn nhận được.

Và nhập thông số MX…

Cấu hình thông số MX như hình trên (với các DNS trung gian như Cloudflare ‘@’ tự động chuyển thành ‘domain.com’)…

Sau đó bạn sang trang cấu hình zoho mail và chọn Verify / Procced (thường thì sẽ phải đợi 30 phút đến 24h để domain cập nhật DNS)
Vậy là xong, ngay sau bước này, email với tên miền riêng của bạn đã hoạt động.
Với 1 số trường hợp mà bản MX không nhận hay chỉ gửi đi được mà không nhận được mail cái bạn nhớ thêm dấu chấm”.” sau bản MX của mail nhé! Ví dụ như cấu hình từ quản lý domain từ dns-diy.net :

Vậy là xong, ngay sau bước này, email với tên miền riêng của bạn đã hoạt động.

 Kết Luận:

Nó hay vãi luôn nhưng còn tùy thuộc vào cách sử dụng của các bạn nữa nhé :)

Thứ Ba, 5 tháng 4, 2016

Kiến thức và bài tập ví dụ về FILE

Trong ngôn ngữ C , một tập tin là một khái niệm logic, được áp dụng không những đối với các tập tin trên đĩa mà cả với các terminal ( bàn phím, màn hình, máy in...).

- File có 2 loại : 
+ Text file ( file văn bản ).
+ Binary ( nhị phân : dbf, doc, bitmap,...).
- File văn bản chỉ khác binary khi xử lý ký tự chuyển dòng (LF) ( mã 10 ) được chuyển thành 2 ký tự CR (mã 13) và LF ( mã 10) và khi đọc 2 ký tự liên tiếp CR và LF trên file cho ta một ký tự LF.
- Các thao tác trên file thực hiện thông qua con trỏ kiểu FILE. Mỗi biến FILE có 1 con trỏ lúc đầu sẽ trỏ vào phần tử đầu tiên của file. Sau mỗi thao tác đọc hay ghi dữ liệu con trỏ tự động dời xuống mẫu tin kế tiếp. Làm việc trên kiểu File thường có 3 công đoạn : mở file, nhập xuất thông trên file và đóng file.
* Một số hàm thông dụng thao tác trên file ( tập tin/tệp tin ) :
+ Mở file : FILE *fopen ( char *filename, char *mode);
. Nếu có lỗi fp sẽ trỏ đến NULL.
+ Các mode chế độ mở file :
" r" " rt " / " rb " : mở file để đọc theo kiểu văn bản / nhị phân - file phải tồn tại trước nếu không sẽ có lỗi.
"w" "wt" / " wb " : mở ( tạo ) file mới để ghi theo kiểu văn bản/nhị phân - nếu file đã có nó sẽ bị xóa(ghi đè )( luôn luôn tạo mới ).
"a" "at"/ "ab" : mở file để ghi bổ sung (append) thêm theo kiểu văn bản hoặc nhị phân( chưa có thì tạo mới ).
+ Ðóng file : int fclose ( file + biến file ) ;
Ví dụ : Void main ( )
 { FILE *fp ;
    fp = fopen ("c:\\THUCTAP\\Data.txt", "wt" );
     if (fp = NULL )
        printf ( " không mở được file c/Thuctap\data.txt");
     else {< xử lý file > }
     fclose (fp) ; /* đóng file */
}
+ Làm đóng tất cả các tập đang mở : int fclose all(void) ; nếu thành công trả về số nguyên bằng tổng số các file đóng được, ngược lại trả về EOF.
+ Hàm xóa tập : remove (const + char*ten tập ) ; nếu thành công cho giá trị 0, ngược lại EOF.
+ Hàm kiểm tra cuối tập : int feof(FILE*fp) : !=0 : nếu cuối tập= 0 : chưa cuối tập.
+ Hàm int putc ( int ch, FILE*fp);
Hàm int fputc( int ch, FILE*fp);
Công dụng của hai hàm này :ghi một ký tự lên tập fp theo khuôn dạng được xác định trong chuỗi điều khiển dk. Chuỗi dk và danh sách đối tương tự hàm printf( ).
+ Hàm int fscanf ( FILE *fp, const char *dk, ...);
Công dụng : đọc dữ liệu từ tập tin fp theo khuôn dạng ( đặc tả) làm việc giống scanf( ).


*Ví dụ : giả sử có file c/data.txt lưu 10 số nguyên 1 5 7 9 8 0 4 3 15 20 . Hãy đọc các số nguyên thêm vào một mãng sau đó sắp xếp tăng dần rồi ghi vào file datasx.txt
Giải :
#include
#include
#include
#define n 10
void main ( )
   { FILE *fp ; int i, j, t, a[n]
      clrscr ( ) ;
     fp = fopen (" c :\\data.txt ", "rt" ); /* mở file để đọc vào mãng */
     if (fp = NULL)
        { printf ("không mở được file ");
          exit (1);
        }
/* Sắp xếp mãng */
      for ( i=0 ; i       for (j=i+1; j           if (a[i]               { t = a[i] ; a[i]=a[j] ; a[j] = t ; }
      fclose (fp);
/* mở file datasx.txt để ghi sau khi sắp xếp */
     fp = fopen ("c:\\datasx.txt ", "wt");
     for ( i=0 ; i      printf (fp,"%2d", a[i] );
      fclose (fp);
/* đọc dữ liệu từ file cách 2 ( tổng quát hơn ) không phụ thuộc vào n */
    i = 0 ;
while (1)
{ fscanf (fp,"%d",&a[i] ;
   i++;
   if (foef(fp) ) break ;
}
- Hàm int fputs ( const char *s, file *fp );
Công dụng : ghi chuỗi s lên tập tin fp ( dấu "\0" ghi lên tập) nếu có lỗi hàm cho eof.
- Hàm char fgets ( char *s, int n , FILE *fp);
Công dụng : đọc 1 chuỗi ký tự từ tập tin fp chứa vào vùng nhớ s. Việc đọc kết thúc khi : hoặc đã đọc n-1 ký tự hoặc gặp dấu xuống DÒNG( CẮPMÃ 13 10). KHI ÐÓ MÃ 10 ÐƯỢC ÐƯA VÀO CHUỖI KẾT QUẢ.
 CáC HàM ÐọC GHI FILE KIểU CấU TRúC

- Hàm int fwrite (void *p, int size , int n , FILE*fp);
Ðối : p : là con trỏ trỏ tới vùng nhớ chứa dữ liệu cần ghi.
size : là kích thước của mẫu tin theo byte.
n số mẫu tin cần ghi.
fp là con trỏ tập.
- Ví dụ : fwrite(&tam) size of(tam),1,fv); /* tam là 1 mẫu tin(record) nào đó*/
Công dụng : ghi một mẫu tin (record) kích thước sizebyte ( size of (tam)) từ vùng nhớ p(&tam) lên tập fp. Hàm sẽ trả về một giá trị = số mẫu tin thực sự ghi được.


+ Hàm int fread (void*p), int size , int n, FILE *fp);
Ðối : p : là con trỏ trỏ tới vùng nhớ chứa dữ liệu đọc được.
size là kích thước của mẫu tin theo byte
n : là số mẫu tin cần đọc, fp là con trỏ tập tin.
Ví dụ : fread (&tam, size of(KIEUHS) , 1, 4 )>0)
Công dụng : đọc n(1) mẫu tin kích thước sizebyte (size of(tam)) từ tập tin fp chứa vào vùng nhớ p(&tam). Hàm trả về một giá trị bằng số mẫu tin thực sự đọc được.
* Ví dụ áp dụng : Nhập vào danh sách lớp gồm n học viên ("nhập vào). Thông tin về mỗi học viên gồm Họ tên, phái , điểm, kết quả. Xét kết quả theo điều kiện sau : nếu Ðiểm>= 5 ( đậu ), điểm <5 :="" a="" c:="" c="" ch="" ghi="" i="" k="" l="" lop.txt.="" lop.txt="" m="4" n="" o="" p="" ph="" qu="" r="" s="" sang="" sau="" t.="" t="" theo="" tin="" u="" v="" x="">c:\ketqua.txt
.
Giải :
#include
#include
#include
#include
typedef struct
{ char ten[20] ; char phai[4] ; int diem ; char kq[4] ; } KieuHV;
KieuHV *lop ,*p, tam;
/* Hàm nhập danh sách n học viên */
void nhapds ( int n, KieuHV lop[ ] )
{ int i , diem ; p = lop ;
for ( i=0; i { printf (" nhập họ và tên người thứ %d : " , i + 1) ; gets ( pă ten);
printf ("phái (nam/nữ ) : ") ; gets (pă phai );
printf ("nhập điểm = ") ; scanf ("%d%c*c", &diem); pă diem=diem;
if (diem>5)strcpy (p--> kq,"Ðậu");
else strcpy (pă kq, "rớt " ) ; p++;
}
/* Hàm sắp xếp */
void sapxep ( int n , KieuHV lop[ ] )
{ int i , j ;
for ( i=0 ; i for ( j=i+1 ; j<0 br="" j=""> if (lop[i].diem< lop[j]diem )
{ tam = lop[i] ; lop[i] = lop[j] ; lop [i] = tam ;}
}
/* Hàm in danh sách */
void inds ( int n, KieuHS lop[ ] )
{ int i ;
for ( i=0 ; i printf ("\n %20s %5s%5d%5s, lop[i].ten, lop[i].phai, lop[i].diem, LOP[I].KQ );
/* CHƯƠNG TRìNH CHíNH */

void main ( )
{ int i , j, n, t, diem ; FILE *fp, *fr ;
   printf ("\n nhập sĩ số : ") ; scanf("%d%*c",&n);
   lop = (KieuHV*) malloc (n*size of (KieuHV));
   nhapds(n, lop) ; sapxep ( n, lop ); inds( n, lop); getch( );
   fp = fopen ( "c :\\lop.txt ", "wb");
   for ( i = 0; i    fwrite (&lop[ i], size of (KieuHV), 1, fp);
   fclose(fp);
    printf ("\n ghi dữ liệu xong ");
    printf("\n in file sau khi sắp xếp và xét kết quả lại ");
    fr = fopen ("c:\\ketqua.txt", "wb");
    while ( fread (&tam, size of ( KieuHV), 1, fp ) > 0)
         { printf ("\n %s %s%d%s", tam.ten, tam.phai, tam.diem, tam.kq);
             if (tam.diem = = 4 &&strcmp(tam.phai,"nữ")= =0 )
                  strcmp(&tam.kq, "đậu");
                  fwrite(&tam,size of(tam),1, fr);
        }
     fclose (fp); fclose(fr);
    printf ("\n in file ketqua.txt sau khi xét lại kết qủa ");
    fp = fopen ("c:\\ketqua.txt", "rb");
     while (fread(&tam, size of (KieuHV) , 1, fp) > 0)
         printf("\n %s%s%d%s",tam.ten,tam.phai, tam.diem,tam.kq);
          fclose (fp); getch( );
&NBSP; }


CáC HàM XUấT NHậP NGẫU NHI
㎠Và DI CHUYểN CON TRỏ CHỉ Vị (File position locator )
- Khi mở tệp tin để đọc hay ghi, con trỏ chỉ vị luôn luôn ở đầu tập tin (byte 0) nếu mở mode "a" (append) => con trỏ chỉ vị ở cuối tập tin.
+ Hàm void rewind (FILE*fp) : chuyển con trỏ chỉ vị của tập fp về đầu tập tin.
+ Hàm int fseek (FILE*fp, long số byte, int xp)
Ðối : fp : là con trỏ tập tin; số byte : là số byte cần di chuyển.
xp " cho biết vị trí xuất phát mà việc dịch chuyển được bắt đầu từ đó.
xp = SEEK - SET hay 0 xuất phát từ đầu tập.
xp = SEEK - CUR hay 1 : xuất phát từ vị trí hiện tại của con trỏ.
xp= SEEK - END HAY 2 : xuất phát từ vị trí cuối tập của con trỏ.
+ Công dụng : hàm di chuyển con trỏ chỉ vị của tập fp từ vị trí xác định bởi xp qua một số byte bằng giá trị tuyệt đối của số byte. Nếu số byte > 0 : chuyển về hướng cuối tập ngược lại chuyển về hướng đầu tập. Nếu thành công trả về trị 0. Nếu có lỗi trả khác 0.
+ Chú ý : không nên dùng fseep trên kiểu văn bản, vì sự chuyển đổi ký tự( mã 10) sẽ làm cho việc định vị thiếu chính xác.
+ Hàm long ftell(FILE*fp) ; : cho biết vị trí hiện tại của con trỏ chỉ vị (byte thứ mấy trên tập fp) nếu không thành công trả về trị -1L.
+ Ví dụ 1: giả sử tập fp có 3 ký tự .
fseek (fp,0,SEEK-END) => ftell(fp) = 3
fseek(fp,0,2) => ftell(fp) = 3
fseek (fp,-2, SEEK-END) => ftell(fp) = 1
fseek(fp,0,SEEK -SET) => ftell(fp) = 0
fseek(fp,0, 0) =>ftell(fp) = 0


+ Ví dụ 2 : giả sử ta có tập tin c:\lop.txt chứa danh sách các học viên. Hãy đọc danh sách và sắp xếp giảm dần theo điểm sau đó ghi lại file c:\lop.txt ( nối điểm)
#include
#include
#include
#define N 100
typedef struct
{ char ten[20] ; int tuoi; float diem ; } KieuHV ;
void main( )
{ KieuHV hv[N] ; t;
FILE*fp ; int i, , n ;
fp = fopen ("c:\\lop.txt ", "rat");
if (fp = =NULL)
   { printf ("không mở được file "); exit(1); }
       n = 0 ; i = 0 ;
     while (!feof (fp))
         { fread (&hv[i], size of (KieuHV), 1,fp);
             i++; n++ ;
  /* sắp xếp giảm dần theo điểm */
       for (i=0, i        for (j=i+1; j             if (hv[i].diem                 { t =hv[i] ; hv[i] = hv[j] ; hv[j] = t }
/* ghi lên đĩa */
fseek (fp, 0, SEEK-END);
for ( i=0; i fwrite(&hv[i], size of (KieuHV), 1, fp);
}

KỶ NIỆM LẠC CẢNH ĐẠI NAM VĂN HIẾN