Функции

Тема в разделе "C/C++/C#", создана пользователем Miller85, 4 мар 2011.

  1. Miller85

    Miller85 Гость

    Привет всем! Не могу понять как реализовать следующую задачу... ЗАДАНИЕ: Вводимые массивы сортировать по убыванию, а затем из них удалять через один отрицательные эллементы. Значит все сделал, только не могу сообразить как сделать удаление отрицательных эллементов да еще и через один... Вот мой код...
    Код (C++):
    #include<iostream>
    #include<iomanip>
    #include<conio.h>
    #include<stdlib.h>
    using namespace std;
    void inmass(int[7],int&,int&);
    void outmass(int[7],int,int);
    void sort(int[7],int);
    void main()
    {
    setlocale(LC_ALL,"Russian");
    int x[7],m,n,kol=0;
    char ch;
    do{
    inmass(x,m,n);
    cout<<setw(30)<<"Введен массив:"<<endl;
    outmass(x,m,n);
    sort(x,m);
    cout<<endl<<setw(30)<<"Получен массив:"<<endl;
    outmass(x,m,n);
    kol++;
    cout<<endl<<"Продолжить работу (y/n)? ";
    cin>>ch;}
    while(ch=='y'||ch=='Y');
    cout<<"Обработано массивов: "<<kol<<endl;
    cout<<" Конец программы.";
    getch();
    }
    void inmass(int a[7],int&n,int&p)
    {
    cout<<"Задайте длину исходного массива(<=7):"<<endl;
    cout<<"Длина: ";cin>>n;
    cout<<"Введите 1, если массив вводится вручную,"<<endl
    <<"или любой другой символ, если она формируется"<<endl
    <<"датчиком случайных чисел ";
    char dat;
    cin>>dat;
    if(dat=='1'){
    cout<<"Введите исходный массив"<<endl;
    for(int i=0;i<n;i++)
    cin>>a[i];}
    else{
    cout<<"Введите целое положительное число"<<endl
    <<"для инициализации датчика"<<endl
    <<"случайных чисел: "<<endl;
    unsigned int b;
    cin>>b;
    srand(b);
    for(int i=0;i<n;i++)a[i]=(rand()-16383)%100;
    }}

    void outmass(int a[7],int n,int q)
    {
    for(int i=0;i<n;i++)
    cout<<setw(5)<<a[i];
    cout<<endl;
    }
    void sort(int a[7],int q)
    {
    int z;
    for(int i=1;i<q-1;i++)
    for(int j=q-1;j>=i;j--)
    if(a[j-1]<a[j])
    {
    z=a[j-1];
    a[j-1]=a[j];
    a[j]=z;
    }

    }
     
  2. Miller85

    Miller85 Гость

    Ребят помогите пожалуйста...
     
  3. ierofant

    ierofant Гость

    Miller85
    Надо просто копировать в другой массив (или можно std::vector) элементы твоего массива. Отрицательные копировать через один, а положительные все подряд.
     
  4. Miller85

    Miller85 Гость

    А по подробнее? Хотя бы начало... Я сам хочу продолжить... Только без std::vector... Я не могу понять как через один реализовать...
     
  5. ierofant

    ierofant Гость

    С массивами проблемнее у них ведь нельзя размер поменять, а тебе нужно удалять из них элементы.
    Ну давай покажу примерно, а ты уж сам думай в какуй сторону оптимизировать этот код. Допустим у тебя уже есть mas [7]
    Код (C++):
    bool copy = true;
    int temp [7] = {0};
    int ii = 0;
    for (int i =0; i < size; i++)
    {
    if (mas [i] >= 0) temp [ii++] = mas [i];
    else
    {
    if (copy) temp [ii++] = mas [i];
    copy = !copy;
    }
    }
    Количество нужных элементов в temp можно установить как ii + 1
     
  6. Miller85

    Miller85 Гость

    Я маленько по другому сделал...
    Код (C++):
    #include<iostream>
    #include<iomanip>
    #include<conio.h>
    #include<stdlib.h>
    using namespace std;
    void inmatr(int[7],int&,int&);
    void outmatr(int[7],int,int);
    void outmatr2(int[7],int,int);
    void sort(int[7],int);
    void main()
    {
    setlocale(LC_ALL,"Russian");
    int x[7],m,n,kol=0;
    char ch;
    //clrscr();
    do{
    inmatr(x,m,n);
    cout<<setw(30)<<"Введен массив:"<<endl;
    outmatr(x,m,n);
    sort(x,m);
    cout<<endl<<setw(30)<<"Получен массив:"<<endl;
    outmatr2(x,m,n);
    kol++;
    cout<<endl<<"Продолжить работу (y/n)? ";
    cin>>ch;}
    while(ch=='y'||ch=='Y');
    cout<<"Обработано массивов: "<<kol<<endl;
    cout<<" Конец программы.";
    getch();
    }
    void inmatr(int a[7],int&n,int&p)
    {
    cout<<"Задайте длину исходного массива(<=7):"<<endl;
    cout<<"Длина: ";cin>>n;
    cout<<"Введите 1, если массив вводится вручную,"<<endl
    <<"или любой другой символ, если она формируется"<<endl
    <<"датчиком случайных чисел ";
    char dat;
    cin>>dat;
    if(dat=='1'){
    cout<<"Введите исходный массив"<<endl;
    for(int i=0;i<n;i++)
    cin>>a[i];}
    else{
    cout<<"Введите целое положительное число"<<endl
    <<"для инициализации датчика"<<endl
    <<"случайных чисел: "<<endl;
    unsigned int b;
    cin>>b;
    srand(b);
    for(int i=0;i<n;i++)a[i]=(rand()-16383)%100;
    }}

    void outmatr(int a[7],int n,int q)
    {
    for(int i=0;i<n;i++)
    cout<<setw(5)<<a[i];
    cout<<endl;
    }

    void outmatr2(int a[7],int n,int q)
    {
    for(int i=0;i<n;i++)
    {
    if(a[i]<0)cout<<setw(5)<<a[i++];
    if(a[i-1]>0)cout<<setw(5)<<a[i];
    } cout<<endl;
    }
    void sort(int a[7],int q)
    {
    int z;
    for(int i=1;i<=q-1;i++)
    for(int j=q-1;j>=i;j--)
    if(a[j-1]<a[j])

    {
    z=a[j-1];
    a[j-1]=a[j];
    a[j]=z;
    }

    }
     
Загрузка...

Поделиться этой страницей