Trang 1 trên tổng số 21 12311... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 209 kết quả

Đề tài: [Series] Cốt đờ Quán !

  1. #1
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Mặc định [Series] Cốt đờ Quán !

    Nghe chừng dạo này diễn đàn anh em Cviet mình uể oải quá nên tớ làm thử một series cho anh em có cái để mà tham gia vui chơi giải trí.
    Cùng nhau học tập luôn nha.
    Tớ sẽ ra 1 câu đố và anh em cố gắng cho càng nhiều lời giải càng tốt nha.
    Câu đố sẽ dừng khi nào không thấy ai trả lời nữa .

    Đề tài: Code để luyện tập
    Mục đích: luyện tay nghề, đầu óc, tư duy, trí tưởng tướng, suy luận, logic và tăng kĩ thuật code.
    Yêu cầu: biết cơ bản C/C++

    Bạn nào có câu đố muốn chia sẻ thì PM mình nha, không được post vào đây.
    Bài nào spam là xử theo luật đó nha.

    Bài trả lời nên có 3 phần sau:
    1. thông tin về code của bạn (compiler sử dụng, Editor, version...)
    2. code cụ thể
    3. Điểm mạnh điểm yếu nếu có, hay bug có...

    Cùng nhau tham gia chia sẻ nha !
    None!

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Mặc định [1]

    Vẫn hay code Perl tớ có để ý trong Perl để lấy thông tin của 1 file thế này:
    PHP Code:
    my @lines = <FILE>; 
    kết quả trả về sẽ là 1 mảng lưu trữ các dòng trong <FILE>, mỗi dòng (line) là một phần tử trong mảng @lines.

    Liên hệ tới C/C++, thử viết một hàm xử lý tương tự để có thể trả về kết quả như câu lệnh Perl ở trên.

    Mình gợi ý thế này:
    C++ Code:
    1. char *line(FILE *in);
    2. char **lines(FILE *in, int *count);

    thử xem bạn làm được đến đâu
    None!

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Ko phải là mình chảnh nhưng mà theo mình bạn đừng nên gợi ý, để bí càng lâu thì càng vui hơn.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    48

    Em chẳng biết Perl là gì, làm đại ko biết đúng ko.
    1) VC++ 2008 EE
    3) Dòng quá 1000 ký tự là bị bug >"<
    Code:
    #include "Utility.h"
    
    const unsigned int A = 1000;
    int main()
    {
    	ifstream in("in.txt");
    	if(!in)
    	{
    		cout << "COULDN'T" << endl;
    		exit(1);		
    	}	
    
    	char *a = new char[A];
    	if(a == 0)
    	{
    		cout << "EXIT" << endl;
    		exit(1);
    	}
    	
    	vector<string> b;
    	string temp;
    	do
    	{		
    		in.getline(a, A);
    		temp = a;
    		b.push_back(temp);
    	}
    	while(!in.eof());
    	
    	vector<string>::const_iterator iterator = b.begin();
    	while(iterator != b.end())
    	{
    		cout << *iterator << endl;
    		iterator++;
    	}	
    
    	delete []a;	
    }
    Đã được chỉnh sửa lần cuối bởi Emerald214 : 20-09-2008 lúc 03:33 PM.

  5. #5
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    @meocon: bài đầu nên gợi ý , các bài sau sẽ gợi ý nếu thấy khó ^^!, tớ mở quán tớ cũng tham gia mà. meocon thử cho 1 đáp án đi.

    @Emerald24: hay đấy nhưng tớ đánh giá 1 chút
    1. viết thành hàm đi để có thể re-use
    2. Đúng là bug với file có số kí tự lớn
    3. template xài nhiều phết, test thử tốc độ với file có kích thước tương đối xem
    4. Thử nghĩ xem code có chỗ nào cần cải tiến?

    Tớ cũng sẽ cho ra đáp án của tớ, nhưng không dám nói là tớ hoàn chỉnh đâu nha. Cùng nhau học hỏi là chính
    None!

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định [Series] Cốt đờ Quán !

    Đây là đáp án của mình.
    Ngôn ngữ : C++, dùng ide vc6
    Tự nhận xét :
    * Ưu điểm :
    - không bị bug khi có dòng dài
    * Nhược điểm :
    - Chạy chậm
    - Sẽ "ngủm" nếu file quá lớn. Nhưng trong trường hợp này có thể tạm chấp nhận vì đề yêu cầu trả về một mảng 2 chiều chứa nội dung file.

    C Code:
    1. #include <stdio.h>
    2.  
    3. typedef struct ReadFileResult
    4. {
    5.     char **p;
    6.     long nLines;
    7. } _ReadFileResult;
    8.  
    9. void ReadFileToArray(const char *path, ReadFileResult *pResult)
    10. {
    11.     (*pResult).nLines = 0;
    12.     FILE *fi = fopen(path,"rb");
    13.  
    14.     fseek(fi,0,2);
    15.     long fsize = ftell(fi);
    16.     fseek(fi,0,0);
    17.  
    18.     char *buf = new char [fsize + 4];
    19.  
    20.     fread((void *)buf,fsize,1,fi);
    21.     fclose(fi);
    22.  
    23.     long n = 0;
    24.    
    25.     for (long i=0;i<fsize;i++)
    26.     {
    27.         if (buf[i] == '\n')
    28.         {
    29.             buf[i] = 0;
    30.             n++;
    31.         }
    32.     }
    33.  
    34.     buf[i] = 0;
    35.  
    36.     (*pResult).nLines = n;
    37.     (*pResult).p = new char * [n];
    38.  
    39.     n = 0;
    40.     long pos = 0;
    41.  
    42.     for (i=0;i<fsize;i++)
    43.     {
    44.         if (buf[i] == 0)
    45.         {
    46.             if (buf[i - 1] == '\r') buf[i - 1] = 0;
    47.             (*pResult).p[n++] = &buf[pos];
    48.             pos = i + 1;
    49.         }
    50.     }
    51. }
    52.  
    53. int main(int argc, char* argv[])
    54. {
    55.     ReadFileResult result;
    56.  
    57.     ReadFileToArray("test.txt",&result);
    58.  
    59.     long n = result.nLines;
    60.    
    61.     printf("There are %ld lines\n\n",n);
    62.     for (long i=0;i<n;i++)
    63.     {
    64.         printf("%s\n",result.p[i]);
    65.     }
    66.    
    67.     delete result.p[0];
    68.     delete result.p;
    69.  
    70.     return 0;
    71. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  7. #7
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    @meocon:
    cũng hay , lại còn vượt quá yêu cầu đề bài .
    ^^!
    cậu thử implement thêm đoạn code đếm thời gian chạy của chương trình rồi test thử với các file có kích thước 1MB, 2MB -> 10 MB xem
    None!

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi Xcross87 Xem bài viết
    @meocon:
    cũng hay , lại còn vượt quá yêu cầu đề bài .
    ^^!
    cậu thử implement thêm đoạn code đếm thời gian chạy của chương trình rồi test thử với các file có kích thước 1MB, 2MB -> 10 MB xem
    Ok, để mình tính kỹ xem nó chạy mất bao lâu. Còn bộ nhớ thì vô tư, file nhỏ hơn dung lượng ram trống là vẫn chạy ngon, mình đã sinh ra file text cỡ 42 mb và có dòng dài 10000 và test thấy ok.
    Cám ơn bạn đã góp ý.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Chậc, liên quan đến file, kid tệ lắm, chưa xử lí file trong C++ bao giờ
    Còn bài nào nữa ko pete.

    #: Mà nghe nói cậu đi qua bên financial mà ? Con lưu luyến anh em à ?

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    C++ Code:
    1. #include <iostream>
    2. #include <vector>
    3. #include <string>
    4. #include <stdexcept>
    5. #include <algorithm>
    6. #include <fstream>
    7. #include <ctime>
    8.  
    9. using std::vector;
    10. using std::string;
    11. using std::logic_error;
    12. using std::cout;
    13. using std::getline;
    14. using std::swap;
    15. using std::ifstream;
    16. using std::cin;
    17.  
    18. vector< string > getFileInfo( const string& file_name )
    19. {
    20.     ifstream         inf( file_name.c_str() );
    21.     string           line;
    22.     vector< string > file_container;
    23.     if( inf.fail() )
    24.     {
    25.         throw logic_error( "\n...File not found !\n" );
    26.     }
    27.     else
    28.     {
    29.         while( getline( inf, line ) )
    30.         {
    31.             file_container.push_back( line );
    32.         }
    33.         vector< string >( file_container ).swap( file_container );
    34.  
    35.         return file_container;
    36.     }
    37. }
    38.  
    39. void printFileInFo( const vector< string >& file_info, clock_t st, clock_t en )
    40. {
    41.     cout << "There are " << file_info.size() << " lines.\n";
    42.     cout << "Time required for reading is "
    43.          << static_cast< double >( en - st ) << "nano sec.\n";
    44. }
    45.  
    46. int main()
    47. {
    48.     std::clock_t     starting_time,
    49.                      ending_time;
    50.     string           file_name;
    51.     vector< string > file_info;
    52.  
    53.     cout << "Input a file name \n";
    54.     getline( cin, file_name );
    55.  
    56.     starting_time = clock();
    57.  
    58.     file_info     = getFileInfo( file_name );
    59.  
    60.     ending_time   = clock();
    61.  
    62.     printFileInFo( file_info, starting_time, ending_time );
    63.  
    64.     return 0;
    65. }

    1. Dùng cho mọi compiler support standard C++.
    2. Ngôn ngữ C++.
    3. 104mb file size thì chạy khoảng 3-4 sec, không có bug với dòng dài. Code rất khá clean và sáng.

Các đề tài tương tự

  1. Series video hướng dẫn lập trình .NET(C#) từ A-Z
    Gửi bởi anhnt3 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 35
    Bài viết cuối: 16-02-2014, 10:04 AM
  2. Hàng về Sony Vaio SVZ series giá tốt
    Gửi bởi girevn trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 14-08-2012, 04:03 PM
  3. Vỏ Nokia tháo máy chính hãng E series : E5-00/E7-00/E51/E52/E63/E71/E72/E66/E75/E90..
    Gửi bởi vopinsac trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 04-07-2012, 02:23 PM
  4. Series ảnh Ngọc Trinh từ bé đến lớn
    Gửi bởi vecvn trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 15-05-2012, 10:27 AM
  5. Tủ mạng Rack 19'' Systems 27U - Series 800
    Gửi bởi xilixia trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 22-10-2010, 04:35 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn