PDA

Показать полную графическую версию : [решено] Одномерные динамические массивы


keks666sex
22-03-2012, 02:50
Помогите пожалуйста разобраться, задали задание:
В целочисленном динамическом массиве Х(N) удалить все нечетные числа.
Проверить, как поменялось положение максимального элемента массива.
Найти среднее арифметическое элементов массива до и после удаления. В
программе написать функции: удаления элемента, поиска номера
максимального элемента, вычисления среднего арифметического элементов
массива.
Вроде бы все написал, но не могу написать саму функцию удаления элемента данного массива... Пишет, что нельзя удалить объект не являющийся указателем... Помогите пожалуйста. Можно ли удалить конкретные элементы динамического массива...


#include<iostream>
#include<iomanip>
#include<ctime>
using namespace std;
void coutt(int *_mass,int _size) //Функция вывода массива на экран
{ for(int i=0;i<_size;i++)
cout<<_mass[i]<<" ";
cout<<endl;
}
void raschet(int *_mass,int _size) //Функция вычисления максимального элемента и среднего значения элементов
{
int max=_mass[0],summ=0,elem;
float elementi=0;
float sred;
for(int i=0;i<_size;i++)
{
if(max<=_mass[i])
{
max=_mass[i];
elem=i;
}
summ=summ+_mass[i];
elementi++;
}

sred=summ/elementi;
cout<<"Maxsimalnii element massiva "<<"[ "<<elem<<" ] "<<max<<endl;
cout<<"Srednee znachenie elementov "<<sred<<endl;
cout<<endl;
}
void delet(int *_mass,int _size) //Функция удаления нечетного элемента массива
{ for(int i=0;i<_size;i++)
{
if(_mass[i]%2!=0)
delete _mass[i];
}
}
void main ()
{
srand(time(0));
int size;
cout<<"\t\t\tVvedite razmer massiva -> ";cin>>size;
cout<<endl;
int *mass=new int[size]();
for(int i=0;i<size;i++)
{
mass[i]=rand()%10;
cout<<mass[i]<<" ";
}
cout<<endl;
raschet(mass,size);
cout<<endl;


delet(mass,size);
coutt(mass,size);
raschet(mass,size);



delete []mass;
system ("pause");
}

ViRTaCe
23-03-2012, 02:31
Удалить один элемент из массива нельзя, надо создавать еще один массив. Просто когда ищешь нечетные, помечай их нулями(ну или -1), и счетчик заведи который посчитает их кол-во. Потом от первоначального размера массива отними счетчик, создай полученный массив, и забей его не нулевыми элементами, а старый удали.

El Scorpio
30-03-2012, 08:01
Можно ли удалить конкретные элементы динамического массива... »
Удалять конкретные элементы можно только в "списке" - массив, как последовательный набор информации, таких действий не позволяет.
Что можно сделать
1. Выделить такой же объём информации под другой массив.
2. Создать отдельную переменную - количество элементов во втором массиве.
3. При совпадении условия копировать элемент из первого массива в конец второго массива (в позицию, определяемую переменной из п.2)
По завершении проверки обработать все актуальные элементы второго массива


void raschet(int *_mass,int _size)
{
int *other = new int [_size];
int ocount = 0;
// Цикл проверки
for (int i = 0; i < _size; i++)
{
if (УСЛОВИЕ_ПРОВЕРКИ)
other [ocount++] = _mass [i];
}
// Цикл вывода для второго массива
for (int i = 0; i < ocount; i++)
{
ЧТО_ТО_ДЕЛАЕШЬ...
}
}

keks666sex
01-04-2012, 22:34
Спасибо всем.. я все таки решил...

#include<iostream>
#include<iomanip>
#include<ctime>
using namespace std;
void coutt(int *_mass,int _size) //Функция вывода массива на экран
{ for(int i=0;i<_size;i++)
cout<<setw(4)<<_mass[i];
cout<<endl<<endl;
}
void raschet(int *_mass,int _size) //Функция вычисления максимального элемента и среднего значения элементов массива
{
int max=_mass[0],summ=0,nomer;
float elementi=0;
float sred;
for(int i=0;i<_size;i++) //Вычисляем максимальный элемент и его номер
{
if(max<=_mass[i])
{
max=_mass[i];
nomer=i;
}
summ=summ+_mass[i]; //Вычисляем сумму всех элементов массива
elementi++; //Вычисляем количество элементов массива
}

sred=summ/elementi; //Вычисляем среднее значение элементов массива
cout<<"Maxsimalnii element massiva "<<"[ "<<nomer<<" ] "<<max<<endl; //Выводим результаты на экран
cout<<"Srednee znachenie elementov "<<sred<<endl;
}
void delet(int *_mass,int _size,int _elem) //Функция удаление простых чисел в массиве
{
int b; //Будет хранить простое число
int a; //Будет хранить номер простого числа
int del; //Делитель
for(int i=0;i<_size;i++) //Вычисление и удаление простого числа
{
del=2;
for( ; del <=_mass[i]/ 2 ; del++ ) //Проверка на простое число
{
if( _mass[i]%del == 0 ) //Если условие выполняется то Число Не простое
break ; //выход из цикла
}
if( del >_mass[i] /2 && _mass[i]!=0 && _mass[i]!=1 ) //Если условие выполняется то Число простое
{
a=i; //присваиваем номер простого числа
b=_mass[i]; //присваиваем простое число
for(;a<_size;a++) //Поиск Не простое число
{
if(_mass[a]==1 || _mass[a]==0)//Если условие выполняется то
{
_mass[i]=_mass[a]; //Меняем простое и не простое число местами
_mass[a]=b;
break; //выход из цикла
}
del=2; //присваиваем делителю значение 2
for( ; del <=_mass[a]/ 2; del++ ) //Проверка на НЕ простое число
if( _mass[a]%del==0) //Если условие выполняется то
{ //Меняем простое и не простое число местами
_mass[i]=_mass[a];
_mass[a]=b;
a=_size; //Присваиваем размер, что бы прекратился предыдущий цикл
break; //выход из цикла
}

}

}
}
}
void main ()
{
srand(time(0)); // инициализация генератора случайных чисел
int size,elem=0;
cout<<"\t\t\tVvedite razmer massiva -> ";cin>>size; //Вводим размер массива
cout<<endl;
int *mass=new int[size](); //Создаем динамический массив
cout<<"Massiv:";
for(int i=0;i<size;i++) //Заполняем массив
{
mass[i]=rand()%10; //Заполняем случайными числами
cout<<setw(4)<<mass[i]; //Выводим на массив экран
}
cout<<endl<<endl;
raschet(mass,size); //Вызываем функцию вычисления максимального элемента и среднего значения элементов массива
cout<<endl;
int del;
for(int i=0;i<size;i++) //Находим количество Простых чисел
{del=2; //Задаем делитель
for( ; del <=mass[i]/ 2 ; del++ )//Проверка на простое число
{
if( mass[i]%del == 0 )// Если выполняется число НЕ простое
break ; //выход из цикла
}
if( del >mass[i] /2 && mass[i]!=0 && mass[i]!=1) //Если выполняется число простое
elem++; //Увеличиваем число простых чисел на 1
}
cout<<"\t\t... Kolichestvo prostih chisel -> "<<elem<<" ..."<<endl<<endl; //Выводим количество простых чисел на экран
delet(mass,size,elem); //Вызов Функции удаление простых чисел
size-=elem; //Вычитаем из размера массива количество простых чисел
cout<<"Massiv posle udaleniya:";
coutt(mass,size); //Вызываем функцию вывода массива
raschet(mass,size); //Вызываем функцию вычисления максимального элемента и среднего значения элементов массива

delete []mass; //Удаляем динамический массив
system ("pause"); //Задержка экрана
}




© OSzone.net 2001-2012