Breaking News
Loading...
Monday, December 5, 2011

Tổng hợp Bài Tập Về Mảng Một Chiều

12/05/2011 12:30:00 PM
Nhập xuất mảng 1 chiều bằng đệ quy
File khaibao.h
#include<iostream>
using namespace std;
void NhapMang(int a[],int n);
void XuatMang(int a[],int n);
void XuatNguoc(int a[],int n);
File caidat.cpp
#include"khaibao.h"
void NhapMang(int a[],int n)
{
    if(n>=0)
{
        NhapMang(a,n-1);
    cout<<"Nhap a["<<n<<"]:";
    cin>>a[n];   
}
}
void XuatMang(int a[],int n)
{
        if(n>=0)
{
            XuatMang(a,n-1);
        cout<<a[n]<<" ";
{
}
void XuatNguoc(int a[],int n)
{
    if(n>=0)
    {
        cout<<a[n]<<" ";
        XuatNguoc(a,n-1);
   
    }
}
File main.cpp
#include"khaibao.h"
void main()
{
    int a[100], n;
    cout<<"Nhap n: ";
    cin>>n;
    NhapMang(a,n-1);
    cout<<"Mang Xuat Xuoi La: ";
    XuatMang(a,n-1);
    cout<<"\nMang Xuat nguoc La: ";
    XuatNguoc(a,n-1);
}



Khởi tạo mảng 1 chiều tăng dần và giảm dần

Mảng Tăng:
   void nhap(int a[],int n)
         {
                srand((unsigned) time(NULL))
                a[0]=abs(rand()%100);
                for(int i=1;i<n;i++)
                     a[i]=a[i-1]+abs(rand()%100);
       }

Mảng Giảm:
   void nhap(int a[],int n)
      {
           srand((unsigned) time(NULL))
           a[n-1]=abs(rand()%100);
           for(int i=n-2;i>=0;i--)
          a[i]=a[i+1]+abs(rand()%100);

    }


1/ Viết hàm sắp xếp các phần tử lẻ tăng dần.

void saptang(int a[], int n)
{
    int tam;
    for( int i=0;i<n-1;i++)
        if(a[i]%2==1)
            for( int j=i+1;j<n;j++)
            if (a[i]>a[j] && a[j]%2==1 )
            {
                     tam=a[i];
              a[i]=a[j];
              a[j]=tam;
            }
}

2/ Viết hàm sắp xếp các phàn tử chẳn giảm dần

void sapxepgiam(int a[], int n)
{
    int tam;
    for( int i=0;i<n-1;i++)
        if(a[i]%2==0)
            for( int j=i+1;j<n;j++)
            if (a[i]<a[j] && a[j]%2==0 )
            {
                     tam=a[i];
              a[i]=a[j];
              a[j]=tam;
            }
}

3/ Viết hàm xoá các phần tử tại vị trí lẻ trong mảng.

void xoa(int a[], int &n)
{
    for( int i=1;i<n;i++)
        a[i]=a[i*2];
    if(n%2==0)
        n=n/2;
    else n=n/2+1;
}

4/ Viết hàm xoá phần tử có giá trị lớn nhất trong mảng.

void xoa(int a[], int &n)
{  
    int max=a[0],i;
    for(i=1;i<n;i++)
    if(a[i]>max)
            max=a[i];
           for(i=0;i<n;i++)
            if(a[i]==max)
               {
                for(int j=i;j<n;j++)
          
                    a[j]=a[j+1];
                    n--;
                    i--;
             }
}


5/ Nhập vào giá trị X. Viết hàm xoá tất cả các phần tử có giá trị nhỏ hơn X.

void xoa(int a[], int &n,int x)
{    for(int i=0;i<n;i++)
    if(a[i]<x)
    {
        for(int j=i;j<n;j++)
            a[j]=a[j+1];
        n--;
        i--;
    }
}


6/ Nhập vào giá trị X. Viết hàm xoá phần tử có giá trị gần X nhất.

void xoaganx(int a[],int &n,int x)
{
int kc=32768;
    for(int i=0;i<n;i++)
    {
        if(a[i]<=x && x-a[i]<kc)
        kc=x-a[i];
        if(a[i]>=x && a[i]-x<kc)
            kc=a[i]-x;
    }
    for(int i=0;i<n;i++)  / / i<n-1 cũng được
  
        if( a[i]-x==kc || x-a[i]==kc)
        {
          
        for(int j=i;j<n;j++)
            a[j]=a[j+1];
            i--;
            n--;
         }
    }


7/  Viết hàm loại bỏ các phần tử có giá trị trùng nhau ( chỉ giữ lại một phần tử trong số các phần tử trùng).

 
void xoa(int a[], int &n)
{
      for(int i=0;i<n-1;i++)
    for( int k=i+1;k<n;k++)
        if (a[k]==a[i])
        {
            for(int j=k;j<n-1;j++)
            a[j]=a[j+1];
                n--;
            k--;
        }
}

8/ Viết hàm chèn phần tử có giá trị X vào vị trí đầu tiên trong mảng.

void chen(int a[], int &n,int x)
{
    for (int i=n;i>0;i--)
        a[i]=a[i-1];
    a[0]=x;
n++;
}

9/ Viết hàm chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn nhất trong mảng.

int max(int a[],int n)
{
    int m=a[0];
    for(int i=1;i<n;i++)
        if(a[i]>=m)
            m=a[i];
    return m;
}
void chen(int a[],int &n,int x)
{
    for(int i=0;i<n;i++)
    {
        if(a[i]==max(a,n))
        {
            for(int j=n;j>=i+2;j--)
                a[j]=a[j-1];
                a[i+1]=x;
                n++;
                i++;
        }
    }
}


10/ Viết hàm chèn phần tử có giá trị X vào phía trước phần tử có giá trị là số nguyên tố đầu tiên trong mảng.

bool ktnt(int k)
{
    if(k<2) return false;
    for(int i=2;i<=k/2;i++)
        if(k%i==0)
            return false;
    return true;
}
int vt(int a[],int n)
{
for(int i=0;i<n;i++)
if(ktnt(a[i]))
return i;
}
void chen(int a[],int &n,int x)
{
    int i=vt(a,n);
      
    for(int j=n;j>=i+1;j--)
        a[j]=a[j-1];
        a[i]=x;
        n++;
}


11/ Viết hàm nhập mảng sau cho không có phần tử nào trùng với nhau.

void nhapkhongtrung(int a[],int &n)
   {
    cout<<"nhap n: ";
    cin>>n;
    int    i=0;
    do  
    {    int flag=0;
        cout<<"nhap vao phan tu thu"<<i<<": ";
        cin>>a[i];
        for(int j=i-1;j>=0;j--)
            if(a[i]==a[j])
            {
                cout<<"ban nhap sai: \n";
                flag=1;
                break;
            }
            if(flag==1)continue;
            else
                i++;
    }
while (i<n);
}







3 comments:

  1. bạn ơi code cho mình bài này với...Chèn 1 số bất kỳ vào giữa 2 số mà tổng 2 sô đó cộng lại lớn hơn 10 trong mảng....Ví dụ: nhập 1 5 4 8 4 2............muốn chèn số 3 vào dãy đó....kq dãy sau khi chen là:1 5 4 3 8 3 4 2

    ReplyDelete
    Replies
    1. Hiện tại thì mình ko có code bài này nhưng mình có thể gợi ý cho bạn.
      ví dụ dãy số (mảng a)trên có n phần tử(i) thì bạn cho dòng for chạy từ 1 đến n-1.rồi kiểm tra a[i]+a[i+1]>10 thì i+1 là vị trí chèn

      Delete
  2. Cảm ơn bạn đã chia sẻ. Học môn C++ này nhiều khi cũng mệt, code nhiều quá. Nhưng phần mềm lập trình nào cũng phải qua các bước như vậy để chúng ta học và hiểu về giải thuật trước khi đi sâu vào ngôn ngữ.
    Bạn nào có em đang học phổ thông từ lớp 1-12 có thể tham khảo phần mềm Học Dễ ứng dụng Gia sư trực tuyến tại đây http://HocDeOnline.net chỉ cần chụp gửi câu hỏi giáo viên sẽ gửi lại ảnh phần trả lời. Hỗ trợ giải bài tập Toán Lý Hóa Sinh Văn Anh.

    ReplyDelete

 
Toggle Footer