• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Функции

  • Автор темы Miller85
  • Дата начала
M

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;
}

}
 
I

ierofant

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

Miller85

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

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
 
M

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;
}

}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!