Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 17 kết quả

Đề tài: bạn được yêu cầu xoay một chuỗi các câu input sang một góc 90 độ theo chiều kim đồng hồ

  1. #1
    Ngày gia nhập
    03 2012
    Bài viết
    10

    Mặc định bạn được yêu cầu xoay một chuỗi các câu input sang một góc 90 độ theo chiều kim đồng hồ

    mình làm như thế này nhưng lại sai yêu cầu của đề..............:(
    #include<conio.h>
    #include<stdio.h>
    #define max 100
    main()
    {
    char a[max][max];
    int i, j, n;
    FILE *inputfile = NULL;
    FILE *outputfile = NULL;
    inputfile = fopen("input.txt","r");
    outputfile = fopen("output.txt","w");
    if(inputfile == NULL)
    {
    printf("Error opening input file.");
    getch();
    }
    if(outputfile == NULL)
    {
    printf("Error opening output file.");
    getch();
    }
    n=0;
    while(fscanf(inputfile,"%s ",a[n])==1)
    printf("%s\n", a[n++]);
    for(j=0;j<max;j++)
    {
    for(i=n-1;i>=0;i--)
    fprintf(outputfile, "%c", a[i][j]);
    fprintf(outputfile,"%c",'\n');
    }
    getch();
    }

    input.txt: Rene Decartes Once Said,
    "I think, there fore i am."
    output.txt:
    "R
    Ie
    n
    te
    h
    iD
    ne
    kc
    ,a
    r
    tt
    he
    es
    r
    eo
    fn
    oc
    re
    e
    s
    Ia
    i
    ad
    m,
    .
    "

  2. #2
    Ngày gia nhập
    12 2008
    Nơi ở
    Hà Nội
    Bài viết
    374

    "xoay một chuỗi các câu input sang một góc 90 độ" cụ thể là sao bạn ?

  3. #3
    Ngày gia nhập
    03 2012
    Bài viết
    10

    cái đề đây bạn


    Trong bài toán này, bạn được yêu cầu xoay một chuỗi các câu input sang một góc 90 độ
    theo chiều kim đồng hồ. Vì vậy, thay vì hiển thị các câu input từ trái sang phải và trên xuống
    dưới, chương trình của bạn sẽ hiển thị chúng từ trên xuống dưới và từ phải sang trái.

    Đầu vào (input.txt)

    Đầu vào của chương trình này, là tối đa 100 câu, mỗi câu có không quá 100 ký tự.
    Các ký tự hợp lệ gồm: xuống hàng, khoảng trắng, ký tự kết thúc câu, số, chữ cái
    thường và hoa tiếng Anh. (Chú ý: Tabs không phải là ký tự hợp lệ.)

    Đầu ra (output.txt)

    Đầu ra của chương trình là các câu được in theo chiều dọc dưới dạng cột. Câu đầu
    của input sẽ trở thành cột ngoài cùng bên phải của output.
    ví dụ:
    input.txt:
    Rene Decartes Once Said,
    "I think, there fore i am."
    output.txt:
    "R
    Ie
    n
    te
    h
    iD
    ne
    kc
    ,a
    r
    tt
    he
    es
    r
    eo
    fn
    oc
    re
    e
    s
    Ia
    i
    ad
    m,
    .
    "

  4. #4
    Ngày gia nhập
    12 2008
    Nơi ở
    Hà Nội
    Bài viết
    374

    Khó và rất thú vị

    Hehe , sau hơn 3 tiếng thử sức mình, mình đã có giải pháp cho đề bài trên :

    Visual C++ Code:
    1. // CppTutorial.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5.  
    6. #include <Windows.h>
    7.  
    8. const int BufferSize = 200;
    9.  
    10. int _tmain(int argc, _TCHAR* argv[])
    11. {
    12.     using namespace std;
    13.  
    14.     char* Buffer = NULL;
    15.     DWORD dwSoByteDaDoc = 0;
    16.     HANDLE hFile_Out = INVALID_HANDLE_VALUE;
    17.     HANDLE hFile = CreateFile(L"Input.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    18.  
    19.     if (hFile == INVALID_HANDLE_VALUE)
    20.     {
    21.         cout<<"Khong tim thay Input.txt"<<endl;
    22.         goto DonDep;
    23.        
    24.     }
    25.  
    26.     Buffer = new char[BufferSize];
    27.  
    28.     if (FALSE == ReadFile(hFile,Buffer,BufferSize-1,&dwSoByteDaDoc,NULL))
    29.     {
    30.         cout<<"Doc Input.txt that bai."<<endl;
    31.         goto DonDep;
    32.     }
    33.  
    34.     if (dwSoByteDaDoc > 0 && dwSoByteDaDoc < BufferSize - 1 )
    35.     {
    36.         cout<<"Doc Input.txt thanh cong. Dang tao Output.txt ..."<<endl;
    37.         Buffer[dwSoByteDaDoc] = '\0';
    38.     }
    39.    
    40.     int nSoCau = 1;
    41.     int nTemp = 0;
    42.     DWORD dwSoByteDaViet = 0;
    43.     int ViTri[100];
    44.     ViTri[0] = 0;
    45.  
    46.     for (int i = 0 ; i < dwSoByteDaDoc; i ++)
    47.     {
    48.         if (Buffer[i] == 0x0D && Buffer[i+1] == 0x0A)
    49.         {
    50.             Buffer[i] = '\0';
    51.             Buffer[i+1] = '\0';
    52.             ViTri[nSoCau] = i + 2;
    53.             nSoCau++;
    54.         }
    55.     }
    56.  
    57.    
    58.     int DoDaiMax = 0;
    59.  
    60.     for (int i = 1; i < nSoCau ; i++)
    61.     {
    62.         if (ViTri[i] - ViTri[i-1] > DoDaiMax)
    63.         {
    64.             DoDaiMax = ViTri[i] - ViTri[i-1];
    65.         }
    66.     }
    67.  
    68.     DoDaiMax -= 2;
    69.  
    70.     hFile_Out = CreateFile(L"Output.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    71.  
    72.     if (hFile_Out == INVALID_HANDLE_VALUE)
    73.     {
    74.         cout<<"Tao Output.txt that bai."<<endl;
    75.         goto DonDep;
    76.  
    77.     }
    78.  
    79.     char XuongDong[3];
    80.     XuongDong[0] = 0x0D;
    81.     XuongDong[1] = 0x0A;
    82.  
    83.  
    84.     for (int  i = 0 ; i <  DoDaiMax ; i++)
    85.     {
    86.         for (int j = nSoCau - 1 ; j >= 0; j--)
    87.         {
    88.             if (i > strlen(&Buffer[ViTri[j]]) - 1)
    89.             {
    90.                 if (FALSE == WriteFile(hFile_Out," ",sizeof(char),&dwSoByteDaViet,NULL))
    91.                 {
    92.                     cout<<"Viet file that bai."<<endl;
    93.                     goto DonDep;
    94.                 }
    95.             }
    96.             else
    97.                 if ((&Buffer[ViTri[j]])[i] == '\0')
    98.                 {
    99.                     if (FALSE == WriteFile(hFile_Out," ",sizeof(char),&dwSoByteDaViet,NULL))
    100.                     {
    101.                         cout<<"Viet file that bai."<<endl;
    102.                         goto DonDep;
    103.                     }
    104.                 }
    105.                 else
    106.                     if (FALSE == WriteFile(hFile_Out,&Buffer[ViTri[j]] + i,sizeof(char),&dwSoByteDaViet,NULL))
    107.                     {
    108.                         cout<<"Viet file that bai."<<endl;
    109.                         goto DonDep;
    110.                     }
    111.                
    112.  
    113.         }
    114.         if (FALSE == WriteFile(hFile_Out,XuongDong,2*sizeof(char),&dwSoByteDaViet,NULL))
    115.         {
    116.             cout<<"Viet file that bai."<<endl;
    117.             goto DonDep;
    118.         }
    119.     }
    120.  
    121.    
    122. DonDep:
    123.  
    124.     if(Buffer != NULL)
    125.         delete[] Buffer;
    126.     if(hFile != INVALID_HANDLE_VALUE)
    127.         CloseHandle(hFile);
    128.     if(hFile_Out != INVALID_HANDLE_VALUE)
    129.         CloseHandle(hFile_Out);
    130.  
    131.  
    132.     cin.get();
    133.     return 0;
    134. }

    Input.txt :



    Output.txt :



    Giải pháp của mình có 1 nhược điểm là sẽ không cho đáp án chính xác nếu Input.txt chứa 1 dòng mà không có kí tự nào.
    Ví dụ:
    Input.txt :
    Le Thanh Vu
    luc13aka47

    XANA
    Bạn thao khảo, có gì chưa hiểu thì hỏi mình. Code chưa tối ưu, nên hơi "pa ghét chi" , bạn thông cảm
    Đã được chỉnh sửa lần cuối bởi luc13aka47 : 04-05-2012 lúc 05:12 PM.

  5. #5
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    @luc13aka47: Code của bạn thật sự rất "trâu bò" @@~, lập trình console mà lôi cả "windows.h" vào.

    Code ngắn hơn dùng thư viện của C++, nếu muốn dùng C. thay vecLines bằng một mảng "con trỏ kiểu char", dùng gets để đọc dòng, FILE* thay cho fstream, strlen() thay cho string::length().
    C++ Code:
    1. // kosCreator.cpp : Defines the entry point for the console application.
    2. // Author: doicanhden@gmail.com
    3. #include "stdafx.h"
    4. #include <fstream>
    5. #include <vector>
    6.  
    7. int _tmain(int argc, _TCHAR* argv[])
    8. {
    9.     std::vector<std::string> vecLines;
    10.    
    11.     std::ifstream fInput("f:\\test\\Input.txt");
    12.     std::ofstream fOutput("f:\\test\\Output.txt");
    13.  
    14.     if(!fInput.is_open())
    15.     {
    16.         std::cout << "Can't open input file." << std::endl;
    17.         return -1;
    18.     }
    19.  
    20.     if(!fOutput.is_open())
    21.     {
    22.         std::cout << "Can't open output file." << std::endl;
    23.         return -1;
    24.     }
    25.  
    26.     size_t iLength_max = 0;
    27.     while(!fInput.eof())
    28.     {
    29.         std::string strLine;
    30.        
    31.         std::getline(fInput, strLine);
    32.  
    33.         if(fInput.fail())
    34.             break;
    35.  
    36.         if(iLength_max < strLine.length())
    37.             iLength_max = strLine.length();
    38.  
    39.         vecLines.push_back(strLine);
    40.     }
    41.  
    42.     for (size_t  i = 0 ; i < iLength_max; ++i)
    43.     {
    44.         for (size_t j = vecLines.size() ; j > 0; --j)
    45.             if (i > vecLines[j - 1].length())
    46.             {
    47.                 std::cout << " ";
    48.                 fOutput << " ";
    49.             }
    50.             else
    51.             {
    52.                 std::cout << vecLines[j - 1][i];
    53.                 fOutput << vecLines[j - 1][i];
    54.             }
    55.         std::cout << endl;
    56.         fOutput << endl;
    57.     }
    58.  
    59.     std::cin.get();
    60.     return 0;
    61. }
    Attached Thumbnails Attached Thumbnails post3.png  
    Đã được chỉnh sửa lần cuối bởi doicanhden : 04-05-2012 lúc 05:01 PM. Lý do: Tối ưu code, bỏ bớt một vòng for tính chiều dài tối đa.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  6. #6
    Ngày gia nhập
    12 2008
    Nơi ở
    Hà Nội
    Bài viết
    374

    Mặc định bạn được yêu cầu xoay một chuỗi các câu input sang một góc 90 độ theo chiều kim đồng hồ

    Mình phải công nhận là code mình "trâu bò" như bạn nói , một phần vì mình chưa thạo thư viện IOstream và thạo win32 api hơn.

    Nhưng xem kĩ lại code của bạn thì :

    - Giải thuật giống "hệt" của mình ( ý mình là vậy đấy =)) )
    - Tuy code mình dài hơn, nhưng có lợi thế là sẽ bắt được lỗi nếu trong khi viết hoặc đọc file không thành công. ( có thể do 1 tiền trình khác gây xung đột ).
    - Và bạn thiếu close file kìa

    Nên code bạn ngắn nhưng chưa hẳn là 1 lợi thế

    Mình trẻ con, nên ghét bị thua =))

  7. #7
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Trích dẫn Nguyên bản được gửi bởi luc13aka47 Xem bài viết
    Mình phải công nhận là code mình "trâu bò" như bạn nói , một phần vì mình chưa thạo thư viện IOstream và thạo win32 api hơn.

    Nhưng xem kĩ lại code của bạn thì :

    - Giải thuật giống "hệt" của mình ( ý mình là vậy đấy =)) )
    - Tuy code mình dài hơn, nhưng có lợi thế là sẽ bắt được lỗi nếu trong khi viết hoặc đọc file không thành công. ( có thể do 1 tiền trình khác gây xung đột ).
    - Và bạn thiếu close file kìa

    Nên code bạn ngắn nhưng chưa hẳn là 1 lợi thế

    Mình trẻ con, nên ghét bị thua =))
    1. Copy code bạn xong edit lại mà. =]]zz
    2. Nhưng code của bạn ko chạy trên các OS, c~ như complier khác. =))
    3. Không cần hàm close, khi chương trình thoát fInput, và fOutput tự giải phóng, tập tin tự động đóng )

    Tôi c~ đc xem là trẻ con hem nhỉ? Mới 18 thôi , c~ ghét bị thua lắm. =))
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  8. #8
    Ngày gia nhập
    12 2008
    Nơi ở
    Hà Nội
    Bài viết
    374

    Trích dẫn Nguyên bản được gửi bởi doicanhden Xem bài viết
    Tôi c~ đc xem là trẻ con hem nhỉ? Mới 18 thôi , c~ ghét bị thua lắm. =))
    Mình chắc hơn khoảng 1 tuổi

    Thôi loãng rồi. Không reply nữa

    Nhưng thực sự thì mình phải học tập code của bạn vì bạn sử dụng iostream

  9. #9
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Loãng, thì cho bột vào, thế là nó xệt lại, giống... :-|

    Chưa ưng ý lắm, cách xử lý hơi phức tạp. Phải dùng thêm 1 mảng chứa chiều dài chuỗi, vì không muốn gọi strlen() quá nhiều lần.
    C Code:
    1. // kosCreator.cpp : Defines the entry point for the console application.
    2. // Author : doicanhden@gmail.com
    3. #include <conio.h>
    4. #include <stdio.h>
    5. #include <string.h>
    6. #define max 100
    7. int _tmain(int argc, _TCHAR* argv[])
    8. {
    9.     char arrLines[max][max];
    10.     unsigned int arrLength[max];
    11.  
    12.     FILE *inputfile = fopen("f:\\test\\input.txt","r");
    13.     FILE *outputfile = fopen("f:\\test\\output.txt","w");
    14.     if(NULL == inputfile)
    15.     {
    16.         printf("Error opening input file.");
    17.         return -1;
    18.     }
    19.     if(outputfile == NULL)
    20.     {
    21.         printf("Error opening output file.");
    22.         return -1;
    23.     }
    24.     unsigned int iNumberOfLine = 0;
    25.     unsigned int iLength_max = 0;
    26.  
    27.     while(!feof(inputfile))
    28.     {
    29.         /* Đọc từng dòng. */
    30.         fgets(arrLines[iNumberOfLine], max, inputfile);
    31.         /* Lưu lại chiều dài của chuỗi. */
    32.         arrLength[iNumberOfLine] = strlen(arrLines[iNumberOfLine]);
    33.         /* Loại bỏ kí tự '\n' ở cuối chuỗi. */
    34.         arrLines[iNumberOfLine][arrLength[iNumberOfLine] - 1] = '\0';
    35.         /* */
    36.         if(iLength_max < arrLength[iNumberOfLine])
    37.             iLength_max = arrLength[iNumberOfLine];
    38.  
    39.         iNumberOfLine++;
    40.     }
    41.  
    42.     for (unsigned int  i = 0 ; i < iLength_max; ++i)
    43.     {
    44.         for (unsigned int j = iNumberOfLine; j > 0; --j)
    45.             if (i > arrLength[j - 1])
    46.             {
    47.                 printf(" ");
    48.                 putc(' ', outputfile);
    49.             }
    50.             else
    51.             {
    52.                 printf("%c", arrLines[j - 1][i]);
    53.                 putc(arrLines[j - 1][i], outputfile);
    54.             }
    55.         printf("\n\r");
    56.         fprintf(outputfile, "\n\r");
    57.     }
    58.     fclose(inputfile);
    59.     fclose(outputfile);
    60.  
    61.     getch();
    62.     return 0;
    63. }
    Đã được chỉnh sửa lần cuối bởi doicanhden : 04-05-2012 lúc 06:40 PM.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  10. #10
    Ngày gia nhập
    03 2010
    Nơi ở
    My Home
    Bài viết
    772

    Sao phải dài dòng thế nhỉ. Làm luôn cái ma trận chuyển vị cái là xong

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

  1. Xoay ma trận một góc 90 độ ngược chiều kim đồng hồ vối ma trận thường
    Gửi bởi prince7seas trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 11-07-2012, 10:03 PM
  2. xoay tròn picturebox theo trỏ chuột
    Gửi bởi luluho trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 24-06-2011, 02:50 AM
  3. Bài tập C Làm thế nào để xoay câu 1 góc 90% ?
    Gửi bởi SIDA trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 03-05-2011, 08:34 PM
  4. Thuật toán xoay chuỗi 90 độ theo chiều kim đồng hồ
    Gửi bởi devildn132 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 03-05-2011, 10:49 AM
  5. Kỹ thuật C++ làm sao để truyền giá trị từ chuổi sang mảng 1 chiều ?
    Gửi bởi dtphong1603 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 20-12-2010, 10:42 AM

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