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

Đề tài: Hỏi về mảng 1 chiều...

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    2

    Angry Hỏi về mảng 1 chiều...

    Chào các anh, em là newbie, mới học C được gần 2 tháng mà thấy vẫn ng* quá :|
    Đề bài là thế này:

    xa. Đếm số phần tử âm
    xb. Tìm phần tử Max và phần tử Min của mảng.
    -c. Tìm phần tử âm lớn nhất và phần tử dương bé nhất
    xd. Xét xem mảng đã được sắp xếp chưa. Mảng được sắp theo dạng nào
    xf. Liệt kê các số nguyên tố trong mảng.
    xg. Liệt kê các số chính phương trong mảng.
    xh. Chia mảng A thành 2 mảng con B và C
    Mảng B: chứa các phần tử âm.
    Mảng C: chứa các phần tử dương
    i. Trộn 2 mảng âm dương xen kẽ nhau.
    những câu "x" là em làm rồi còn câu C và I nghĩ hoài ko ra, cái code của em như sau :


    PHP Code:
    #define MAX 100;
        
    int n,i,j,t,v,
        
    dem=0,max,min,maxam=0,minduong=0,xet=0;
        
    char a[MAX],b[MAX],c[MAX],d[MAX],x=0,y=0;
        do{
        
    printf("\nNhap so phan tu:");
        
    scanf("%d",&n);
        }while ((
    n<=0)||(n>100));
        for (
    i=0;i<n;i++)
        {
            
    printf("\na[%d]=",i+1);
            
    scanf("%d",&a[i]);
        }    
    printf("\nC*****************************");

        for (
    i=0;i<n;i++)
        {
            if (
    a[i]<0)
                
    maxam=a[i];
            break;
        }
        for (
    i=0;i<n;i++)
            if (
    a[i]<0)
                if (
    a[i]>maxammaxam=a[i];


        for (
    i=0;i<n;i++)
        {
            if (
    a[i]>0)
                
    minduong=a[i];
            break;
        }
        for (
    i=0;i<n;i++)
        {
            if (
    a[i]>0)
                if (
    a[i]<minduongminduong=a[i];
        }

        
    printf("\nMax am=%d, Minduong=%d",maxam,minduong); 
    Trong đó a là mảng nhập từ user a[100], n là số phần tử trong mảng. Ban đầu em tính gán cho maxam(hay minduong) 1 giá trị âm nào đó rồi mới so sánh với các giá trị cùng dấu còn lại trong dãy nhưng kết quả ra chỉ có maxam đug thôi...


    Còn câu I thì em cũng ko biết viết code ra sao để các anh fix nữa, em chỉ beit61 trộn 2 mảng thành dãy tăng dần ah....

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

    Câu (c)

    C Code:
    1. int max = array[0], min = max; // array là mảng người dùng nhập
    2. for (int i=1;i<n;i++) // n là chiều dài mảng
    3. {
    4.     if (array[i] < 0 && array[i] > max)
    5.         max = array[i];
    6.  
    7.     if (array[i] >= 0 && array[i] < min)
    8.         min = array[i];
    9. }

    Code:
    int nB = 0, nC = 0; // nA, nB, nC là chiều dài mảng A, B ,C
    for (int i=0;i<nA;i++)
    {
    	if (A[i] % 2)
    		B[nB++] = A[i];
    	else
    		C[nC++] = A[i];
    }
    Câu (i)

    C Code:
    1. int i, j = 0;
    2.  
    3. if (nB >= nC)
    4. {
    5.     for (i=0;i<nC;i++)
    6.     {
    7.         A[j++] = B[i];
    8.         A[j++] = C[i]
    9.     }
    10.  
    11.     for (i=nC;i<nB;i++)
    12.         A[j++] = B[i];
    13. }
    14. else
    15. {
    16.     for (i=0;i<nB;i++)
    17.     {
    18.         A[j++] = B[i];
    19.         A[j++] = C[i]
    20.     }
    21.  
    22.     for (i=nC;i<nC;i++)
    23.         A[j++] = C[i];
    24. }
    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.

  3. #3
    Ngày gia nhập
    12 2008
    Bài viết
    2

    Cám ơn anh rất nhìu...
    Còn mấy câu nữa nhưng để khi khác vậy....

    @Mod: để cái topic này cho em nha.....thanks

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

    Em xin góp ý 1 chút về câu I :

    PHP Code:
    j=0;
        
    nB=x;
        
    nC=y;
        if (
    nB>=nC)
        {
            for (
    i=0;i<2*nC;i++)// <<< HERE !!!
            
    {
                
    d[j++]=b[i];
                
    d[j++]=c[i];
            }
            for (
    i=2*nC;i<nB;i++)
                
    d[i]=b[x++];
        }
        else 
    //if (y>x)
        
    {
            for (
    i=0;i<2*nB;i++) // <<< HERE !!!
            
    {
                
    d[j++]=b[i];
                
    d[j++]=c[i];
            }
            for (
    i=2*nB;i<nC;i++)
                
    d[i]=c[y++];
        } 
    Vì lúc nhập xen kẽ 2 mảng lại thì phải x2 số phần tử mảng nhỏ hơn để nhập cho hết, còn cách cũ chỉ nhập 1/2 dãy thôi.

  5. #5
    Ngày gia nhập
    12 2008
    Bài viết
    2

    Cho em hỏi làm cách nào để bắt người dùng chọn nhập mảng đầu tiên sau đó mới đc chọn các câu lệnh trong menu ?

    VD:

    menu

    1/Nhap mang
    2/Lenh 1
    3/Lenh 2
    .
    .
    .
    n/Thoát

    (sử dụng switch~~case)

    nếu là lần đầu tiên thì user phải chọn [1]. Ban đầu em định cho 1 biến (begin chẳng hạn) =0 nếu chọn 1 thì begin++. Trong lần nhập đầu tiên nếu chọn !=1 thì xét begin nếu nó ==0 thì nhập lại. Ý tưởng là vậy nhưng e làm ko đc vì không biết đặt begin chỗ nào cho thik hợp...........

    Nếu đc thì các anh giúp tối ưu đoạn code này luôn:

    PHP Code:
    int chenPhanTu(int a[],int &n)
    {
        
    int i=n-1,j,x,k;
        do{
            
    printf("\nNhap phan tu chen x va vi tri can chen k [0,%d]:",n-1);
            
    scanf("%d%d",&x,&k);
        }while (
    k<0||k>=n);
        for (
    j=n;i>=k;j--)
        {
            
    a[j]=a[i];
            
    i--;
        }
        
    a[k]=x;
        
    n++;
        
    output(a,n);



    Code:
    1 3  11 5 6 9 0 4
    
    nhập x=3 k=2
    
    1 3 11 11 5 6 9 0 4
    
    1 3 3 11 5 6 9 0 4
    cái này đã test đúng nhưng làm còn thấy dỡ wa.....

  6. #6
    Ngày gia nhập
    10 2008
    Bài viết
    99

    Mặc định Hỏi về mảng 1 chiều...

    mình có ý tưởng cho phần tạo menu của bạn như thế nỳ
    Yêu cầu của bạn là phải chọn chức năng 1 sau đó mới được chọn chức năng khác đúng không ?
    C++ Code:
    1. int d=0;
    2. switch(ch) // [B]ch[/B] So chuc nang bạn chon
    3.   {
    4.   case 1:
    5.    {
    6.     d=1;
    7.     lenh1;
    8.    }
    9.    case 2:
    10.     {
    11.     if(d==0)
    12.        {
    13.         cout<<"\n Chon lai chuc nang "; // Nếu chưa chọn chức năng 1 -> biến d =0 -> yêu cầu chọn lại chức năng
    14.         break;
    15.        }
    16.     else  // Lúc này d!=0 vì đã chọn chức năng 1 -> Có thể nhập các chức năng khácc
    17.        {
    18.         lenh 2;
    19.         break;
    20.        }
    21.     }
    22.   }

    Bạn thử xem cái này có được không
    Đã được chỉnh sửa lần cuối bởi ddhung : 27-12-2008 lúc 10:02 AM.

  7. #7
    Ngày gia nhập
    10 2008
    Bài viết
    99

    Câu chèn phần tử thì mình thấy không cần dài dòng như bạn đâu
    Code
    C++ Code:
    1. int chenPhanTu(int a[],int &n)
    2. {
    3.     int k,x;
    4.     cout<<"\n Nhap vi tri va gia tri chen : ";
    5.     cin>>k>>x;
    6.     if(k<0&&k>=n)
    7.      cout<<"\n Vi tri chen nam ngoai mang !";
    8.     else
    9.      {
    10.      a[k]=x;
    11.      cout<<"\n Chèn vị trí thành công !";
    12.      }
    13. output(a,n) ; //cái lệnh này của bạn chắc là in dãy số ra màn hình
    14. }

  8. #8
    Ngày gia nhập
    12 2008
    Bài viết
    20

    em moi học C++ mong các pro chỉ giáo
    các huynh oi giúp em với !!!
    cái bài nhập hai mảng một chiều.trộn lẫn chúng sau đó sắp xếp chúng theo thứ tự tăng or giảm dần.
    Em làm thế này:
    ví dụ co hai dãy a[n] và b[m]; em gan cho
    a[n]=b[0];
    a[n+1]=b[1];.....
    a[n+m-1]=b[m-1];

    sau đó sắp xếp lại dãy đã trộn. vậy nhưng nó ko ra ket quả. hic

    đây là bài code của em. mong các huynh bớt chut time giúp em với. thanks nhìu nhìu .

    code:
    ****************************************
    C++ Code:
    1. C++
    2. #include<iostream.h>
    3. #include<conio.h>
    4. void input(int n, int *a)
    5.      { for(int i=0;i<n;i++)
    6.          { cout<<"a["<<i<<"]="; cin>>a[i];
    7.          }
    8.      }
    9. void arrange(int n,int *a)
    10. { int tp;
    11.  for(int i=0;i<n;i++)
    12.          {if(a[i]<a[i+1])
    13.             tp=a[i];
    14.             a[i]=a[i+1];
    15.             a[i+1]=a[i];
    16.          }
    17. }
    18.  
    19. void main()
    20.     { int n,m,i,j;int *a;int*b;
    21.     clrscr();
    22.     cout<<"\n nhap n=";cin>>n;
    23.     input(n,a);
    24.     cout<<"\n day so thu nhat la :\n";
    25.     for(i=0;i<n;i++)
    26.     cout<<a[i]<<"   ";
    27.     /////////////////////////////////////
    28.  
    29.     cout<<"\n nhap m=";cin>>m;
    30.     input(m,b);
    31.     cout<<"\n day so thu hai la :\n";
    32.     for(i=0;i<m;i++)
    33.     cout<<b[i]<<"   ";
    34.     ////////////////////////////////////////
    35.     for(j=0;j<m;j++)
    36.     a[n+j]=b[j];
    37.     cout<<"\n day so moi sau khi tron hai day tren la :";
    38.     for(i=0;i<m+n;i++)
    39.     cout<<a[i];
    40.     // ////////////////////////////////////   */
    41.     int k=m+n;
    42.     arrange(k,a);
    43.     cout<<"\n day moi sau sap xep la : \n";
    44.     for(i=0;i<k;i++)
    45.     cout<<a[i];
    46.     getch();
    47.     }
    Đã được chỉnh sửa lần cuối bởi thuhuong888 : 29-12-2008 lúc 03:40 PM.

  9. #9
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    @thuhuong888: xem lại cách dùng tag code tại đây

    Bạn sử dụng con trỏ không cấp phát bộ nhớ như vậy thì làm sao code chạy được. Bạn hãy tìm đọc lý thiết cấp phát động, trong C++ là dung New, delete.

    Nhập mảng với còn trỏ cần truyền tham biến, sắp xếp cũng vậy.

    Chắc bạn dùng trình biên dịch cũ để biên dịch C++, mình sẽ code vd cho bạn nhưng cần chú ý chỉnh sửa lại chú trước khi biên dịch.

  10. #10
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    OK,
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3. /*
    4. */
    5. void Input(int *(&a),int &n);
    6. void Output(int *a, int n);
    7. void Sort(int *(&a), int n);
    8. void Sort(int *(&a), int n);
    9. void Union(int *(&a), int &n, int *b, int m);
    10.  
    11. int main()
    12. {
    13.     int *a,n, *b,m;
    14.     Input(a,n);
    15.     cout << "      Show A:" <<endl;
    16.     Output(a,n);
    17.  
    18.     Input(b,m);
    19.     cout << "      Show B:" <<endl;
    20.     Output(b,m);
    21.  
    22.     Union(a,n,b,m);
    23.     cout << "      Show A u B:" <<endl;
    24.     Output(a,n);
    25.  
    26.     Sort(a,n);
    27.     cout << "      Show array after sort:" <<endl;
    28.     Output(a,n);
    29.  
    30.     delete[] b;
    31.     delete[] a;
    32. }
    33.  
    34. void Input(int *(&a),int &n)
    35. {
    36.     cout << "*Enter an integer value: "; cin >> n;
    37.     a = new int[n];
    38.     if (a==NULL) return;
    39.     for (int i=0; i<n; ++i)
    40.     {
    41.         cout << " - Enter number: ";
    42.         cin >> a[i];
    43.     }
    44. }
    45.  
    46. void Output(int *a, int n)
    47. {
    48.     for (int i=0; i<n; ++i)
    49.         cout << "  " << a[i];
    50.     cout << endl;
    51. }
    52.  
    53. /*MAX -> min*/
    54. void Sort(int *(&a), int n)
    55. {
    56.     for (int i=0; i<n-1; ++i)
    57.         for (int j=i+1; j<n; ++j)
    58.             if (a[i]<a[j])
    59.             {
    60.                 int tmp = a[i];
    61.                 a[i] = a[j];
    62.                 a[j] = tmp;
    63.             }
    64. }
    65.  
    66. void Union(int *(&a), int &n, int *b, int m)
    67. {
    68.     int *tmp = a;
    69.     a = new int[m+n];
    70.     if (a==NULL) return;
    71.  
    72.     for (int i=0; i<n; ++i)
    73.         a[i] = tmp[i];
    74.  
    75.     for (int i=0; i<m; ++i)
    76.         a[i+n] = b[i];
    77.     n+=m;
    78. }

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

  1. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  2. Lỗi: bố cục trang web tự tăng theo chiều ngang khi chiều cao thay đổi
    Gửi bởi tuanngocpt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-03-2013, 11:25 PM
  3. Trả lời: 1
    Bài viết cuối: 28-04-2012, 09:43 PM
  4. Cách truyền mang 1 chiều cho hàm bài con trỏ và mảng một chiều ai có thể giải thích giúp mình
    Gửi bởi biencute 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: 21-03-2012, 09:00 AM
  5. Lời giải bài tập: Chuỗi Ký tự, mảng số nguyên 1 chiều, mảng 2 chiều, tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:17 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