Đánh giá, nhận xét, review các công ty tuyển dụng
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ố 18 kết quả

Đề tài: Bài tập lập trình

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

    Mặc định Bài tập lập trình

    Các bài tập sau là các Programming Contest.
    Mời các bạn thử sức

    LCD Display


    A friend of yours has just bought a new computer. Before this, the most powerful
    machine he ever used was a pocket calculator. He is a little disappointed because he
    liked the LCD display of his calculator more than the screen on his new computer! To
    make him happy, write a program that prints numbers in LCD display style.

    Input

    The input file contains several lines, one for each number to be displayed. Each line
    contains integers s and n, where n is the number to be displayed (0 ≤ n ≤ 99, 999, 999)
    and s is the size in which it shall be displayed (1 ≤ s ≤ 10). The input will be terminated
    by a line containing two zeros, which should not be processed.

    Output

    Print the numbers specified in the input file in an LCD display-style using s “-” signs
    for the horizontal segments and s “|” signs for the vertical ones. Each digit occupies
    exactly s + 2 columns and 2s + 3 rows. Be sure to fill all the white space occupied by
    the digits with blanks, including the last digit. There must be exactly one column of
    blanks between two digits.
    Output a blank line after each number. You will find an example of each digit in the

    sample output below.



    Bài tập này là thày giáo em cho đấy. Em chịu mọi người giải quyết thử nhé.
    Bài tập được post tại http://www.aiti-aptech.com.vn/forums...read.php?t=175
    W3lc0m3 t0 AiTi-Aptech ! http://www.aiti-aptech.com.vn/images/diendan.gif

  2. #2
    No Avatar
    Leon88 Khách

    Mãi đến hôm nay mới rãnh vào được forum ... thấy đồng môn post bài này ... nên đệ cũng xin góp 1 code mới làm.
    Bài này chỉ để mô phỏng thôi. Nếu muốn nộp thầy thì sửa lại phần input ^^

    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    int i,h,c;
    //==============================================
    void one()
    {
    int j,t;
    gotoxy(c,h);
    t=h;
    for (j=1;j<=i;j++,h+=1,gotoxy(c,h),printf("|"));
    h+=1;
    gotoxy(c,h);
    for (j=1;j<=i;j++,h+=1,gotoxy(c,h),printf("|"));
    c+=2;h=t;
    }
    //===============================================
    void two()
    {
    int j,t2,t1;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1++;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1=c;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    c=t1+3;
    }
    //=================================================
    void three()
    {
    int j,t2,t1;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1++;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1++;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    c=t1+3;
    }
    //==================================================
    void five()
    {
    int j,t2,t1;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1=c;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1++;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    c=t1+3;
    }
    //==================================================
    void six()
    {
    int j,t2,t1,a;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1=c;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1++;a=t2;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2=a;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    c=t1+3;
    }
    //===================================================
    void nine()
    {
    int j,t2,t1,a;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    a=t1;t1=c;
    for (j=1;j<=i;j++)
    {++t2;gotoxy(t1,t2);printf("|");
    for (a=1;a<=i;a++) printf(" ");
    printf("|");}
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1++;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    c=t1+3;
    }
    //===================================================
    void zero()
    {
    int j,t2,t1,a;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    a=t1;t1=c;
    for (j=1;j<=i;j++)
    {++t2;gotoxy(t1,t2);printf("|");
    for (a=1;a<=i;a++) printf(" ");
    printf("|");}
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf(" "));
    t1=c;
    for (j=1;j<=i;j++)
    {
    ++t2;gotoxy(t1,t2);
    printf("|");
    for (a=1;a<=i;a++) printf(" ");
    printf("|");
    }
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    c=t1+3;
    }
    //===================================================
    void eight()
    {
    int j,t2,t1,a;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    a=t1;t1=c;
    for (j=1;j<=i;j++)
    {++t2;gotoxy(t1,t2);printf("|");
    for (a=1;a<=i;a++) printf(" ");
    printf("|");}
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1=c;
    for (j=1;j<=i;j++)
    {
    ++t2;gotoxy(t1,t2);
    printf("|");
    for (a=1;a<=i;a++) printf(" ");
    printf("|");
    }
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    c=t1+3;
    }
    //====================================================
    void seven()
    {
    int j,t2,t1;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1++;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf(" "));
    t1++;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf(" "));
    c=t1+3;
    }
    //====================================================
    void four()
    {
    int j,t2,t1,a;
    t1=c;t2=h;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf(" "));
    a=t1;t1=c;
    for (j=1;j<=i;j++)
    {++t2;gotoxy(t1,t2);printf("|");
    for (a=1;a<=i;a++) printf(" ");
    printf("|");}
    t1=c;t2+=1;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf("-"));
    t1++;
    for (j=1;j<=i;j++,++t2,gotoxy(t1,t2),printf("|"));
    t1=c;t2++;
    for (j=1;j<=i;j++,++t1,gotoxy(t1,t2),printf(" "));
    c=t1+3;
    }
    //====================================================
    main()
    {
    char s[20];
    int k;
    h=1;c=1;
    clrscr();
    printf("\nEnter size of char : ");
    scanf("%d",&i);
    printf("\n\nEnter numbers : ");
    scanf("%s",&s);
    clrscr();
    for (k=0;k<=strlen(s);k++)
    {if (c>75) {c=1;h=i*5;}
    switch(s[k])
    {
    case '1' : one();  break;
    case '2' : two();  break;
    case '3' : three();break;
    case '4' : four(); break;
    case '5' : five(); break;
    case '6' : six();  break;
    case '7' : seven();break;
    case '8' : eight();break;
    case '9' : nine(); break;
    case '0' : zero(); break;
    }}
    getch();
    }
    Chú ý lần sau phải để code vào thẻ [c o d e] [ / c o d e]. Nếu không sẽ xóa bài viết thẳng tay. iamvtn
    Đã được chỉnh sửa lần cuối bởi iamvtn : 05-10-2007 lúc 08:31 PM.

  3. #3
    Ngày gia nhập
    09 2007
    Bài viết
    17

    Bài này ko khó lắm. Như leon88 đã làm thì được rồi.

    Về cơ bản ý tưởng của leon là tạo lập sẵn hình dáng của các kí tự cần in phụ thuộc vào kích cỡ mà đề đã cho ( n ) sau đó xén mỗi kí tự ở chuỗi s và gọi hàm in kí tự tương ứng. Bài giải được nhưng chưa tuyệt lắm. Leon xem lại thử , còn có cách nào hay hơn nhé.

  4. #4
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Ko dùng gotoxy liệu có giải quyết được bài toán hay ko?

  5. #5
    No Avatar
    Leon88 Khách

    Không gotoxy thì tớ go out ^^ . Nói chơi thôi chứ tớ chỉ bít làm vậy còn ai có cách khác post lên cho anh em học hỏi zới

  6. #6
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Mặc định Bài tập lập trình

    Để tớ giải bài này nhé, cũng dùng gotoxy thôi nhưng tớ làm hướng đối tượng để mọi người nhìn trực quan hơn.
    Đầu tiên là dành cho những ai mới học lập trình căn bản thôi, đọc 1 file dễ hiểu hơn là đọc 1 project.
    Code:
    #include <iostream>
    #include <windows.h>
    using namespace std;
    void gotoxy(int,int);
    void net1(int,int);
    void net2(int,int);
    void net3(int,int);
    void net4(int,int);
    void net5(int,int);
    void net6(int,int);
    void net7(int,int);
    void net147(int,int);
    void net26(int,int);
    void zero(int,int);
    void one(int,int);
    void two(int,int);
    void three(int,int);
    void four(int,int);
    void five(int,int);
    void six(int,int);
    void seven(int,int);
    void eight(int,int);
    void nine(int,int);
    int main()
    {
        cout <<"Nhap so: "; string s; cin >>s;
        for (int i = 0;i < s.size();++i)
            switch (s[i]){
                   case '1' : one(i*5,1); break;
                   case '2' : two(i*5,1); break;
                   case '3' : three(i*5,1);break;
                   case '4' : four(i*5,1); break;
                   case '5' : five(i*5,1); break;
                   case '6' : six(i*5,1); break;
                   case '7' : seven(i*5,1);break;
                   case '8' : eight(i*5,1);break;
                   case '9' : nine(i*5,1); break;
                   case '0' : zero(i*5,1); break;
            }
        cout <<endl;
        system("pause");
        return 0;
    }
    void gotoxy(int x,int y) 
    { 
         HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE) ; 
         COORD position = {x,y} ; 
         SetConsoleCursorPosition(hStdout,position ) ; 
    }
    void net1(int x,int y)
    {
         gotoxy(x+1,y); cout <<"___";
    }
    void net2(int x,int y)
    {
         gotoxy(x,y+1); cout <<'|';
         gotoxy(x,y+2); cout <<'|';
         gotoxy(x,y+3); cout <<'|';
    }
    void net3(int x,int y)
    {
         net2(x+4,y);
    }
    void net4(int x,int y)
    {
         net1(x,y+3);
    }
    void net5(int x,int y)
    {
         net2(x,y+3);
    }
    void net6(int x,int y)
    {
         net2(x+4,y+3);
    }
    void net7(int x,int y)
    {
         net1(x,y+6);
    }
    void net147(int x,int y)
    {
         net1(x,y);
         net4(x,y);
         net7(x,y);
    }
    void net26(int x,int y)
    {
         net2(x,y);
         net6(x,y);
    }
    void zero(int x,int y)
    {
         one(x,y);
         one(x-4,y);
         net1(x,y);
         net7(x,y);
    }
    void one(int x,int y)
    {
         net3(x,y);
         net6(x,y);
    }
    void two(int x,int y)
    {
         net147(x,y);
         net3(x,y);
         net5(x,y);
    }
    void three(int x,int y)
    {
         net147(x,y);
         one(x,y);
    }
    void four(int x,int y)
    {
         net3(x,y);
         net4(x,y);
         net26(x,y);
    }
    void five(int x,int y)
    {
         net147(x,y);
         net26(x,y);
    }
    void six(int x,int y)
    {
         five(x,y);
         net5(x,y);
    }
    void seven(int x,int y)
    {
         net1(x,y);
         one(x,y);
    }
    void eight(int x,int y)
    {
         net3(x,y);
         six(x,y);
    }
    void nine(int x,int y)
    {
         net3(x,y);
         five(x,y);
    }
    Còn đây là dành cho các bạn đã học qua về hướng đối tượng, nhìn thấy dễ hiểu hơn mà mình lại có cảm giác ngắn gọn hơn.
    Khai báo thư viện Number.h
    Code:
    #include <iostream>
    #include <windows.h>
    using namespace std;
    void gotoxy(int,int);
    void net1(int,int);
    void net2(int,int);
    void net3(int,int);
    void net4(int,int);
    void net5(int,int);
    void net6(int,int);
    void net7(int,int);
    void net147(int,int);
    void net26(int,int);
    void zero(int,int);
    void one(int,int);
    void two(int,int);
    void three(int,int);
    void four(int,int);
    void five(int,int);
    void six(int,int);
    void seven(int,int);
    void eight(int,int);
    void nine(int,int);
    Các hàm trong thư viện được viết ở file Number.cpp
    Code:
    #include "Number.h"
    void gotoxy(int x,int y) 
    { 
         HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE) ; 
         COORD position = {x,y} ; 
         SetConsoleCursorPosition(hStdout,position ) ; 
    }
    void net1(int x,int y)
    {
         gotoxy(x+1,y); cout <<"___";
    }
    void net2(int x,int y)
    {
         gotoxy(x,y+1); cout <<'|';
         gotoxy(x,y+2); cout <<'|';
         gotoxy(x,y+3); cout <<'|';
    }
    void net3(int x,int y)
    {
         net2(x+4,y);
    }
    void net4(int x,int y)
    {
         net1(x,y+3);
    }
    void net5(int x,int y)
    {
         net2(x,y+3);
    }
    void net6(int x,int y)
    {
         net2(x+4,y+3);
    }
    void net7(int x,int y)
    {
         net1(x,y+6);
    }
    void net147(int x,int y)
    {
         net1(x,y);
         net4(x,y);
         net7(x,y);
    }
    void net26(int x,int y)
    {
         net2(x,y);
         net6(x,y);
    }
    void one(int x,int y)
    {
         net3(x,y);
         net6(x,y);
    }
    void zero(int x,int y)
    {
         one(x,y);
         one(x-4,y);
         net1(x,y);
         net7(x,y);
    }
    void two(int x,int y)
    {
         net147(x,y);
         net3(x,y);
         net5(x,y);
    }
    void three(int x,int y)
    {
         net147(x,y);
         one(x,y);
    }
    void four(int x,int y)
    {
         net3(x,y);
         net4(x,y);
         net26(x,y);
    }
    void five(int x,int y)
    {
         net147(x,y);
         net26(x,y);
    }
    void six(int x,int y)
    {
         five(x,y);
         net5(x,y);
    }
    void seven(int x,int y)
    {
         net1(x,y);
         one(x,y);
    }
    void eight(int x,int y)
    {
         net3(x,y);
         six(x,y);
    }
    void nine(int x,int y)
    {
         net3(x,y);
         five(x,y);
    }
    Còn đây là hàm main
    Code:
    #include <iostream>
    #include "Number.h"
    using namespace std;
    int main()
    {
        cout <<"Nhap so: "; string s; cin >>s;
        for (int i = 0;i < s.size();++i)
            switch (s[i]){
                   case '1' : one(i*5,1); break;
                   case '2' : two(i*5,1); break;
                   case '3' : three(i*5,1);break;
                   case '4' : four(i*5,1); break;
                   case '5' : five(i*5,1); break;
                   case '6' : six(i*5,1); break;
                   case '7' : seven(i*5,1);break;
                   case '8' : eight(i*5,1);break;
                   case '9' : nine(i*5,1); break;
                   case '0' : zero(i*5,1); break;
            }
        cout <<endl;
        system("pause");
        return 0;
    }
    Các bạn tạo 1 project, thiết lập 3 file trên rồi sau đó chỉ nhúng file main.cpp và Number.cpp vào trong project thôi, 3 file nằm cùng 1 folder nhé.
    Bài của bạn Leon đã làm khá tốt rồi nhưng nếu hướng đối tượng 1 chút thì sẽ tuyệt vời hơn, cái chính của hướng đối tượng đó chính là kế thừa những gì đã có.

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    17

    Chuyện nhỏ ? ( Chắc ko nhỉ ? Nhưng gotoxy() bản thân là các hàm for ). Do đó về lý thuyết chúng ta có thể giả lập gotoxy được mà .

    Về bài này tớ có ý thế này (phải ráng viết thêm vì tớ lên pro spammer rồi hix.) mỗi một con đều có thể đưa về 1 bản chất giống nhau là
    ---
    ! !
    ---
    ! !
    ---

    Như thế ở mỗi con số thay vì phải xây dựng từ đầu ta chỉ việc chỉ định nó được in ở nhưng cạnh nào . Thế sẽ tốt hơn 1 chút. Tiếp nữa là về vấn đề
    nếu ko dùng gotoxy, và cũng ko giả lập nó. Liệu có giải quyết vấn đề này được ko ? Tớ nghĩ thế này. khác biết là ko in từng con số mà phải in từng phần của con số.

    Ví dụ số 1 thì phần đầu là | số 2 phần đầu là -- cứ thế làm liến tiếp cho đến phần cuối cùng. Có ý kiến gì ko nhỉ ?

  8. #8
    No Avatar
    Leon88 Khách

    Ý của naolmikevol rất hay rất táo bạo ... nhưng để lập trình thuật toán của huynh thì xem ra rất khó. Nếu anh làm dc code cho em xin nhá ... Và thành thật chia buồn cùng naolmikevol ... nếu tớ lên bản Red thì tinh thần post bài của tớ chắc ko còn nữa đâu :( ... Nhưng huynh vẫn phát đấu phát huy tinh thần của huynh ... huynh đúng là ..là..là gi tự nhiên quên rồi T_T ... để khi nào nhớ tớ edit thêm vào

  9. #9
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Chuyện nhỏ ? ( Chắc ko nhỉ ? Nhưng gotoxy() bản thân là các hàm for ). Do đó về lý thuyết chúng ta có thể giả lập gotoxy được mà .

    Về bài này tớ có ý thế này (phải ráng viết thêm vì tớ lên pro spammer rồi hix.) mỗi một con đều có thể đưa về 1 bản chất giống nhau là
    ---
    ! !
    ---
    ! !
    ---

    Như thế ở mỗi con số thay vì phải xây dựng từ đầu ta chỉ việc chỉ định nó được in ở nhưng cạnh nào . Thế sẽ tốt hơn 1 chút. Tiếp nữa là về vấn đề
    nếu ko dùng gotoxy, và cũng ko giả lập nó. Liệu có giải quyết vấn đề này được ko ? Tớ nghĩ thế này. khác biết là ko in từng con số mà phải in từng phần của con số.

    Ví dụ số 1 thì phần đầu là | số 2 phần đầu là -- cứ thế làm liến tiếp cho đến phần cuối cùng. Có ý kiến gì ko nhỉ ?
    Vậy là cậu ko nhìn code của tớ rồi, làm ơn đọc code đi.
    Còn về vấn đề gotoxy thì tớ dùng hàm do tớ tự viết, ko có for ^^
    Nếu muốn ko dùng gotoxy thì cũng ko có gì là khó, đơn giản là mỗi con số tách làm 7 hàm, mỗi hàm là xuất ra 1 dòng, tức là mình sẽ có 70 cái hàm (chưa tính kế thừa, kế thừa thì sẽ ít hơn 1 chút). Lúc đầu tớ cũng đã nghĩ đến cái này nhưng viẹc viết 70 cái hàm mà mang lại hiệu quả cũng chỉ = với việc viết khoảng gần 20 cái hàm thì thôi, tớ viết 20 cái cho nó lành. Vả lại khi xuất ra 1 dòng xong, xuống dòng thứ 2 chúng ta lại phải chạy vòng for để xét con số trở lại, như vậy bài toán trở nên quá phức tạp (dòng 1 quét rồi switch, ko có gì có thể lưu lại được để thừa kế cho dòng 2 nên for sẽ được chạy 7 lần, mệt ko?)
    Ý của naolmikevol rất hay rất táo bạo ... nhưng để lập trình thuật toán của huynh thì xem ra rất khó. Nếu anh làm dc code cho em xin nhá ... Và thành thật chia buồn cùng naolmikevol ... nếu tớ lên bản Red thì tinh thần post bài của tớ chắc ko còn nữa đâu :( ... Nhưng huynh vẫn phát đấu phát huy tinh thần của huynh ... huynh đúng là ..là..là gi tự nhiên quên rồi T_T ... để khi nào nhớ tớ edit thêm vào
    Ko có ý kiến gì về bài của tớ à >"<

  10. #10
    No Avatar
    Leon88 Khách

    Ko có ý kiến gì về bài của tớ à >"<
    Éc, sao lại không có ý kiến chứ ... hôm qua post rồi mà sao nó ko hiện ra nhỉ :(. Trích bài gửi hôm qua nè : Mod đúng là đúng trình bày ngắn gọn dễ hiểu ... đúng là cao thủ lập trình OOP. Dạo này trong trường đang dạy C nên tớ ko có học qua phần OOP này ^^. Dù gì cũng cám ơn rất huynh nhiều ...Mà sao chủ xị đâu rồi ko vào lấy bài của huynh huynguyen đi test với thầy xem
    Đã được chỉnh sửa lần cuối bởi Leon88 : 06-10-2007 lúc 08:33 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