User Tag List

+ Trả lời chủ đề
Trang 1/2 12 CuốiCuối
Hiện kết quả từ 1 tới 10 của 11

Chủ đề: Box. Lập Trình C

  1. #1
    Khánh Hòa
    Tham gia ngày
    Apr 2010
    Bài gửi
    159

    Mặc định Box. Lập Trình C

    Đây là box mình tạo ra để các bạn cùng thảo luận và trao đổi về lập trình C nhé!
    Để mở màn, mình đưa ra một số bài tập và code cho bài đó. Đây là những bài trong sách tin đại cương
    Bài 1: Cho một dảy số nguyên n phần tử a[0],a[1]..a[n-1] tìm số lớn nhất của dảy. Điều kiện n<100.
    Dử liệu nhập xuất ra màn hình
    PHP Code:
    // cho 1 day so, tim so lon nhat trong day
    #include<conio.h>
    #include<stdio.h>
    int main()
    {
        
    int i,max,n;
        
    int a[100];
        
    printf("nhap n=");scanf("%d",&n);
        
    printf("nhap day so : ");
        
    scanf("%d",&a[1]);
        
    max=a[1];
        for (
    i=1;i<n;i++)
        {
            
    scanf("%d",&a[i]);
            if (
    a[i]>maxmax=a[i];
        }
        
    printf("so lon nhat la: %d",max);
        
    getch();

    Bài 2: Cho một dảy số nguyên n phần tử a[0],a[1]..a[n-1] tìm số âm lớn nhất của dảy. Điều kiện n<100. dử liệu nhập xuất ra màn hình

    PHP Code:
    // cho 1 day so, tim so am  lon nhat trong day
    #include<conio.h>
    #include<stdio.h>
    int main()
    {
        
    int i,max,n;
        
    int a[100];
        
    printf("nhap n=");scanf("%d",&n);
        
    printf("nhap day so : ");
        
    max=0;
        for (
    i=0;i<n;i++)
        {
            
    scanf("%d",&a[i]);
            if (
    a[i]<0max=a[i];
        }
        for (
    i=0;i<n;i++)
        if ((
    a[i]<0)&&(a[i]>max)) max=a[i];
        if (
    max==0printf("\nkhong ton tai so am lon nhat");
        else
        
    printf("\n so am lon nhat la: %d",max);
        
    getch();

    Bài 3: Cho một dảy số nguyên n phần tử a[0],a[1]..a[n-1] sắp xếp tăng dảy số. Điều kiện n<100. dử liệu nhập xuất ra màn hình

    PHP Code:
    //thuat toan noi bot
    #include<conio.h>
    #include<stdio.h>
    int main()
    {
        
    int a[100];
        
    int i,j,n,tg;
        
    printf("nhap n=");scanf("%d",&n);
        
    printf("nhap phan tu");
        for (
    i=0;i<n;i++)
        
    scanf("%d",&a[i]);
        for (
    i=1;i<n;i++)
         for (
    j=0;j<i;j++)
         if (
    a[i]<a[j])
         {
                       
    tg=a[i];
                       
    a[i]=a[j];
                       
    a[j]=tg;
         }
         
    printf("day sau khi sap xep la");
         for (
    i=0;i<n;i++)
         
    printf("%d ",a[i] );
         
    getch();

    Bài 4. Tính giá trị pi qua công thức pi=1-1/3+1/5-1/7+...+(-1)^(n-1)*(2*n-1) với điều kiện dừng khi epsilon<1/(2*n-1), epsilon nhập từ bàn phím

    PHP Code:
    //tinh pi
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
        
    int i,mau;
        
    float epsilon,pi;
        
    printf("nhap epsilon=");scanf("%f",&epsilon);
        
    pi=1;
        
    mau=1;
        
    i=1;
        while ((float)
    1/mau>=epsilon)
        {
              
    i++;
              
    mau=mau+2;
              if (
    i-((int)i/2)*2<epsilonpi=pi-(float)1/mau;
              else
              
    pi=pi+(float)1/mau;
    }
        
    printf("gia tri pi/4 la: %.9f",pi);
        
    getch();

    Lần sửa cuối bởi khanhoatink4; 15-10-2011 lúc 05:00 PM

  2. Có 2 thành viên cảm ơn bài viết của khanhoatink4 có chất lượng:


  3. #2
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Box. Lập Trình C

    Tớ có góp í

    Đầu tiên là cậu hãy dùng thẻ php thay vì thẻ code để màu code nó đẹp hơn . Hai là về các bài sau:

    Bài 1: tại sao cậu lại gán max=0? Nếu dãy toàn số âm thì sau vòng lặp for max sẽ không thay đổi và vẫn nhận giá trị là 0. Như vậy thuật toán sai nhé.

    Bài 2: Vòng lặp for để tìm ra số âm đầu tiên gán cho max nên break ngay khi tìm được số âm đầu tiên. Như vậy sẽ tiết kiệm tài nguyên máy tính vì nhiều trường hợp không cần chạy hết n vòng lặp:

    PHP Code:
     for (i=0;i<n;i++)
        {
            
    scanf("%d",&a[i]);
            if (
    a[i]<0
            {
                 
    max=a[i];
                 break;
            }
        } 
    Bài 4: Tớ không hiểu cái đoạn câu lệnh if lắm:

    PHP Code:
    //tinh pi
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
        
    int i,mau;
        
    float epsilon,pi;
        
    printf("nhap epsilon=");scanf("%f",&epsilon);
        
    pi=1;
        
    mau=1;
        
    i=1;
        while ((float)
    1/mau>=epsilon)
        {
              
    i++;
              
    mau=mau+2;
              if (
    i-((int)i/2)*2<epsilonpi=pi-(float)1/mau// tớ không hiểu cái dòng này lắm
              
    else
              
    pi=pi+(float)1/mau;
    }
        
    printf("gia tri pi la: %.9f",pi);
        
    getch();

    Lần sửa cuối bởi khanhoatink4; 15-10-2011 lúc 04:58 PM
    Contact me:
    Email: sangnd [at] svBK.vn
    Personal website: My Blog | Chat với người lạ
    Facebook Page của Bách Khoa Forum: http://www.facebook.com/svbk.vn

  4. Tớ cảm ơn 1973 đã chia sẻ.


  5. #3
    Khánh Hòa
    Tham gia ngày
    Apr 2010
    Bài gửi
    159

    Mặc định Re: Box. Lập Trình C

    Bài 1: ù thank c, tớ đả sửa lại, do cóp code từ bài 2 nên ko để ý
    Bài 2: t dùng thế là để tiết kiệm 1 vòng for,chương trình sẻ ngắn gọn hơn. Cậu thêm 1 vòng for và break củng được, tùy theo mổi người, vì làm theo cách nào đi nửa, độ phức tạp bài này vẩn là 0(n) mà :d
    Bãi 4: tớ dùng if (i-((int)i/2)*2<epsilon) là để kiểm tra xem i có chia hết cho 2 ko, lúc đó ko nghỉ tới i%2==0

    sửa bài 4.
    PHP Code:
    //tinh pi
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
        
    int i,mau;
        
    float epsilon,pi;
        
    printf("nhap epsilon=");scanf("%f",&epsilon);
        
    pi=1;
        
    mau=1;
        
    i=1;
        while ((float)
    1/mau>=epsilon)
        {
              
    i++;
              
    mau=mau+2;
              if (
    i%2==0pi=pi-(float)1/mau;
              else
              
    pi=pi+(float)1/mau;
    }
        
    printf("gia tri pi la: %.9f",pi);
        
    getch();

    Lần sửa cuối bởi khanhoatink4; 15-10-2011 lúc 04:58 PM

  6. #4
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Box. Lập Trình C

    Tìm số dư trong C là %. Đoạn if có thể sửa thành:

    PHP Code:
    if (i%2==0
              
    pi-=(float)1/mau
    else
              
    pi+=(float)1/mau

  7. #5
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Box. Lập Trình C

    Bài 5: Mô phỏng nhân bằng tay hai số

    Ví dụ:

    Mã:
    Nhap vao 2 so muon nhan:
    x = 111
    y = 222
            1 1 1
    x
            2 2 2
    --------------------
          0 2 2 2
        0 2 2 2
      0 2 2 2
    ======================
        2 4 6 4 2
    Bài làm:

    PHP Code:
    //mo phong nhan bang tay hai so
    #include<stdio.h>
    #include<conio.h>
    #define MAX 20
    int a[MAX], b[MAX],x,y,kq[MAX][MAX],dapan[MAX];
    int cach,i,j,soa,sob;
    int nhap()                          //ham nhap 2 so de nhan
    {
        
        
    printf("Nhap vao 2 so muon nhan: \n");
        
    printf("x = "); scanf("%d",&x);
        
    printf("y = "); scanf("%d",&y);
        return 
    0;
    }
        
    int tach(int numberint mang[], int &sochuso//ham tach 1 so thanh mang
                                                   // "sochuso" la so chu so cua so can tach
    {
        
    int nguyen=number;
        
    sochuso=0;
        for (
    i=0;;i++)
        {
            
    mang[i]=nguyen%10;
            
    nguyen=nguyen/10;
            
    sochuso++;
            if (
    nguyen==0) break;
            
        }
        return 
    0;
    }
    int nhan(int a[],int soaint b[], int sob//ham mo ta phep nhan
    {
        
    int nho=0,tich=0;
        
        for (
    j=0;j<sob;j++)
        for (
    i=0;i<=soa;i++)
        {
            
    tich a[i] * b[j] + nho;
            
    kq[j][i]=tich%10;
            
    nho=tich/10;
        }
        return 
    0;
    }
    int dau_cach(int so_dau_cach)    //ham tao dau cach de can le
    {
        
    int i;
        for (
    i=1;i<=so_dau_cach;i++) printf("  ");
        return 
    0;
    }

    int main()
    {
        
    /*Nhap va xu li so lieu*/
        
    nhap();    
        
    tach(x,a,soa);
        
    tach(y,b,sob);
        
    nhan(a,soa,b,sob);    
        
    /*xuat ket qua*/
        
    dau_cach(sob+1);
        for (
    i=soa-1;i>=0;i--) printf("%d ",a[i]);
        
    printf("\n");    
        
    printf("x\n");
        
    dau_cach(soa+1);
        for (
    i=sob-1;i>=0;i--) printf("%d ",b[i]);
        
    printf("\n--------------------\n");
        for (
    i=0,cach=sob;i<sob;i++,cach--)
        {
            
    dau_cach(cach);
            for (
    j=soa;j>=0;j--) printf("%d ",kq[i][j]);
            
    printf("\n");
        }
        
    tach(x*y,dapan,j);
        
    printf("======================\n");
        if (
    j==soa+sobprintf("  "); else printf("    ");
        for (
    i=j-1;i>=0;i--) printf("%d ",dapan[i]);
        
    getch();
        return 
    0;


  8. Tớ cảm ơn 1973 đã chia sẻ.


  9. #6
    svBK's Newbie Avatar của ngo_hoa
    Tham gia ngày
    Oct 2011
    Bài gửi
    2

    Mặc định Re: Box. Lập Trình C

    Chào các bạn. Mình đang làm mấy bài tập C này nhưng gặp nhiều vướng mắc và chưa tìm ra cách giải. Mình đã suy nghĩ rất nhiều nhưng vẫn chưa tìm đc ra. Các bạn giúp mình giải mấy bài này với. Các bạn k cần viết thành 1 chtr hoàn chỉnh đâu, chỉ cần viết cho m hàm là đc rồi. Thanks mọi ng trước nha. Thật sự nó rất cần và quan trọng với mình. Mình đã nhờ nhiều ng giúp đỡ nhưng họ k tìm ra đc cách giải. Hi vọng rằng mọi ng là cơ hội cuối cùng của mình. Đề bài như sau :

    Bài 1 : Cho dãy A[] gồm N số tự nhiên khác nhau và số tự nhiên K. Hãy viết chương trình liệt kê tất cả các dãy con của dãy A[] sao cho tổng các phần tử trong dãy đó đúng bằng K.

    Bài 2 : Cho dãy gồm N số nguyên phân biệt A[] = {a1,a2,…………an} và số tự nhiên K (K<=N <=100 ) . Hãy viết chương trình liệt kê tất cả các dãy con K phần tử tăng dần và giảm dần của dãy số A[].

    Bài 3 : Cho ma trận vuông C= (cij) cấp N (1 <=i, j<=N <=100) gồm N2 ( bình phương) số tự nhiên (các số không nhất thiết phải khác nhau). Hãy viết chương trình lấy trên mỗi hàng, mỗi cột duy nhất một phần tử sao cho tổng các phần tử này là nhỏ nhất và lớn nhất.

    Bài 4 : Cho ma trận vuông C= (cij) cấp N (1 <=i, j<=N <=100) gồm N2 ( bình phương) số tự nhiên (các số không nhất thiết phải khác nhau) và số tự nhiên K. Hãy viết chương trình lấy trên mỗi hàng, mỗi cột duy nhất một phần tử sao cho tổng các phần tử này đúng bằng K.

  10. #7
    Khánh Hòa
    Tham gia ngày
    Apr 2010
    Bài gửi
    159

    Mặc định Re: Box. Lập Trình C

    Theo mình nghỉ bạn nên lênhttp://vnoi.info để hỏi. Vì đây là các bài khá phức tạp, trang vnoi.info là một diển đàn về thuật toán lớn nhất của Việt Nam.
    Bài 1,2ùng quy hoạch động khá phức tạp mình sẻ đưa lên lời giải lên sau nhé!

    Bài 3 : theo mình thì tìm cặp ghép có trọng số lớn nhất và nhỏ nhất
    Bài 4: là cặp ghép có trọng số bằng k.

  11. #8
    svBK's Newbie Avatar của ngo_hoa
    Tham gia ngày
    Oct 2011
    Bài gửi
    2

    Mặc định Re: Box. Lập Trình C

    Uh. Thanks bạn nhé ! Nhưng bạn có thể viết cho m hàm ở bài 3,4 đc k? vì bạn nói thế mình thấy vẫn khó hỉu lắm, mình vẫn chưa biết phải làm tn ?

  12. #9
    Khánh Hòa
    Tham gia ngày
    Apr 2010
    Bài gửi
    159

    Mặc định Re: Box. Lập Trình C

    Bài 3 nhé(bài 4 tương tự), chọn sao cho tổng trọng số là lớn nhất. ta chia đồ thị làm 2 phía nhé, 1 bên gồm n đỉnh là các hàng(từ 1-n), bên kia gồm n đỉnh là các cột( xem là từ n+1->2*n).trọng số a[i,j] bây h là trọng số nối giửu hau phía của đồ thị... từ đây áp dụng cặp ghép nhé. cậu tham khảo thêm DSAP của thầy Hoàng nhé, có thuật toán cặp ghép đó.

  13. #10
    HUT's Student Avatar của eethn
    Tham gia ngày
    Dec 2009
    Bài gửi
    373

    Mặc định Re: Box. Lập Trình C

    "Xây dựng hai chương trình truyền thông qua giao diện RS-232 cho phép gửi file giữa hai máy tính: một chương trình gửi và một chương trình nhận
    - Có thể dùng các hàm đọc/ghi file chuẩn của C, hoặc tự tìm hiểu thêm và dùng các hàm API của Windows: http://msdn.microsoft.com/en-us/library/aa363196 "

    Đây là cái bài tập lớn thầy cho,mình bên điện chứ k phải dân tin nên học kt lập trình chỉ dạng gà mờ.Nhờ các bạn chỉ giáo hướng giải quyết với

+ Trả lời chủ đề
Trang 1/2 12 CuốiCuối

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Từ khóa (Tag) của chủ đề này

Quyền viết bài

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


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube